Просмотр исходного кода

Add `taskCreated` event to API and subscribe to Cline events earlier (#1942)

* Cline events are subscribed earlier, added `taskCreated` event to API

* Probably fix the ClineProvider test
Wojciech Kordalski 9 месяцев назад
Родитель
Сommit
fdcc679f9f

+ 4 - 0
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<ClineEvents> {
@@ -192,6 +193,7 @@ export class Cline extends EventEmitter<ClineEvents> {
 		rootTask,
 		parentTask,
 		taskNumber,
+		onCreated,
 	}: ClineOptions) {
 		super()
 
@@ -235,6 +237,8 @@ export class Cline extends EventEmitter<ClineEvents> {
 			Experiments.isEnabled(experiments ?? {}, EXPERIMENT_IDS.MULTI_SEARCH_AND_REPLACE),
 		)
 
+		onCreated?.(this)
+
 		if (startTask) {
 			if (task || images) {
 				this.startTask(task, images)

+ 3 - 3
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<ClineProviderEvents> implements vscode.WebviewViewProvider {
@@ -144,8 +144,6 @@ export class ClineProvider extends EventEmitter<ClineProviderEvents> 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<ClineProviderEvents> 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<ClineProviderEvents> implements
 			rootTask: historyItem.rootTask,
 			parentTask: historyItem.parentTask,
 			taskNumber: historyItem.number,
+			onCreated: (cline) => this.emit("clineCreated", cline),
 		})
 
 		await this.addClineToStack(cline)

+ 1 - 0
src/core/webview/__tests__/ClineProvider.test.ts

@@ -870,6 +870,7 @@ describe("ClineProvider", () => {
 			rootTask: undefined,
 			parentTask: undefined,
 			taskNumber: 1,
+			onCreated: expect.any(Function),
 		})
 	})
 

+ 2 - 1
src/exports/api.ts

@@ -20,7 +20,7 @@ export class API extends EventEmitter<RooCodeEvents> 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<RooCodeEvents> 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 }) => {

+ 1 - 0
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]