diff --git a/src/core/Cline.ts b/src/core/Cline.ts index 010d86e94e..b2a0168ee1 100644 --- a/src/core/Cline.ts +++ b/src/core/Cline.ts @@ -115,6 +115,7 @@ export type ClineOptions = { rootTask?: Cline parentTask?: Cline taskNumber?: number + onCreated?: (cline: Cline) => void } export class Cline extends EventEmitter { @@ -192,6 +193,7 @@ export class Cline extends EventEmitter { rootTask, parentTask, taskNumber, + onCreated, }: ClineOptions) { super() @@ -235,6 +237,8 @@ export class Cline extends EventEmitter { Experiments.isEnabled(experiments ?? {}, EXPERIMENT_IDS.MULTI_SEARCH_AND_REPLACE), ) + onCreated?.(this) + if (startTask) { if (task || images) { this.startTask(task, images) diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 637e581a47..82790aac6e 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -85,7 +85,7 @@ import { getWorkspacePath } from "../../utils/path" */ export type ClineProviderEvents = { - clineAdded: [cline: Cline] + clineCreated: [cline: Cline] } export class ClineProvider extends EventEmitter implements vscode.WebviewViewProvider { @@ -144,8 +144,6 @@ export class ClineProvider extends EventEmitter implements // Add this cline instance into the stack that represents the order of all the called tasks. this.clineStack.push(cline) - this.emit("clineAdded", cline) - // Ensure getState() resolves correctly. const state = await this.getState() @@ -496,6 +494,7 @@ export class ClineProvider extends EventEmitter implements rootTask: this.clineStack.length > 0 ? this.clineStack[0] : undefined, parentTask, taskNumber: this.clineStack.length + 1, + onCreated: (cline) => this.emit("clineCreated", cline), }) await this.addClineToStack(cline) @@ -561,6 +560,7 @@ export class ClineProvider extends EventEmitter implements rootTask: historyItem.rootTask, parentTask: historyItem.parentTask, taskNumber: historyItem.number, + onCreated: (cline) => this.emit("clineCreated", cline), }) await this.addClineToStack(cline) diff --git a/src/core/webview/__tests__/ClineProvider.test.ts b/src/core/webview/__tests__/ClineProvider.test.ts index 6edeb7ac2c..3df38a469f 100644 --- a/src/core/webview/__tests__/ClineProvider.test.ts +++ b/src/core/webview/__tests__/ClineProvider.test.ts @@ -870,6 +870,7 @@ describe("ClineProvider", () => { rootTask: undefined, parentTask: undefined, taskNumber: 1, + onCreated: expect.any(Function), }) }) diff --git a/src/exports/api.ts b/src/exports/api.ts index 465b9221ac..1cfc2dffcc 100644 --- a/src/exports/api.ts +++ b/src/exports/api.ts @@ -20,7 +20,7 @@ export class API extends EventEmitter implements RooCodeAPI { this.history = new MessageHistory() this.tokenUsage = {} - this.provider.on("clineAdded", (cline) => { + this.provider.on("clineCreated", (cline) => { cline.on("message", (message) => this.emit("message", { taskId: cline.taskId, ...message })) cline.on("taskStarted", () => this.emit("taskStarted", cline.taskId)) cline.on("taskPaused", () => this.emit("taskPaused", cline.taskId)) @@ -28,6 +28,7 @@ export class API extends EventEmitter implements RooCodeAPI { cline.on("taskAskResponded", () => this.emit("taskAskResponded", cline.taskId)) cline.on("taskAborted", () => this.emit("taskAborted", cline.taskId)) cline.on("taskSpawned", (taskId) => this.emit("taskSpawned", cline.taskId, taskId)) + this.emit("taskCreated", cline.taskId) }) this.on("message", ({ taskId, action, message }) => { diff --git a/src/exports/roo-code.d.ts b/src/exports/roo-code.d.ts index 62a5084fc0..739ee93d14 100644 --- a/src/exports/roo-code.d.ts +++ b/src/exports/roo-code.d.ts @@ -11,6 +11,7 @@ export interface TokenUsage { export interface RooCodeEvents { message: [{ taskId: string; action: "created" | "updated"; message: ClineMessage }] + taskCreated: [taskId: string] taskStarted: [taskId: string] taskPaused: [taskId: string] taskUnpaused: [taskId: string]