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
This commit is contained in:
Wojciech Kordalski 2025-03-24 19:05:33 +01:00 • committed by GitHub
parent 953a9c777a
commit fdcc679f9f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 11 additions and 4 deletions

View file

@ -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)

View file

@ -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)

View file

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

View file

@ -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 }) => {

View file

@ -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]