|
|
@@ -30,7 +30,6 @@ export class API extends EventEmitter<RooCodeEvents> implements RooCodeAPI {
|
|
|
private readonly sidebarProvider: ClineProvider
|
|
|
private readonly context: vscode.ExtensionContext
|
|
|
private readonly ipc?: IpcServer
|
|
|
- private readonly taskMap = new Map<string, ClineProvider>()
|
|
|
private readonly log: (...args: unknown[]) => void
|
|
|
private logfile?: string
|
|
|
|
|
|
@@ -65,35 +64,37 @@ export class API extends EventEmitter<RooCodeEvents> implements RooCodeAPI {
|
|
|
ipc.listen()
|
|
|
this.log(`[API] ipc server started: socketPath=${socketPath}, pid=${process.pid}, ppid=${process.ppid}`)
|
|
|
|
|
|
- ipc.on(IpcMessageType.TaskCommand, async (_clientId, { commandName, data }) => {
|
|
|
- switch (commandName) {
|
|
|
+ ipc.on(IpcMessageType.TaskCommand, async (_clientId, command) => {
|
|
|
+ switch (command.commandName) {
|
|
|
case TaskCommandName.StartNewTask:
|
|
|
- this.log(`[API] StartNewTask -> ${data.text}, ${JSON.stringify(data.configuration)}`)
|
|
|
- await this.startNewTask(data)
|
|
|
+ this.log(
|
|
|
+ `[API] StartNewTask -> ${command.data.text}, ${JSON.stringify(command.data.configuration)}`,
|
|
|
+ )
|
|
|
+ await this.startNewTask(command.data)
|
|
|
break
|
|
|
case TaskCommandName.CancelTask:
|
|
|
- this.log(`[API] CancelTask -> ${data}`)
|
|
|
- await this.cancelTask(data)
|
|
|
+ this.log(`[API] CancelTask`)
|
|
|
+ await this.cancelCurrentTask()
|
|
|
break
|
|
|
case TaskCommandName.CloseTask:
|
|
|
- this.log(`[API] CloseTask -> ${data}`)
|
|
|
+ this.log(`[API] CloseTask`)
|
|
|
await vscode.commands.executeCommand("workbench.action.files.saveFiles")
|
|
|
await vscode.commands.executeCommand("workbench.action.closeWindow")
|
|
|
break
|
|
|
case TaskCommandName.ResumeTask:
|
|
|
- this.log(`[API] ResumeTask -> ${data}`)
|
|
|
+ this.log(`[API] ResumeTask -> ${command.data}`)
|
|
|
try {
|
|
|
- await this.resumeTask(data)
|
|
|
+ await this.resumeTask(command.data)
|
|
|
} catch (error) {
|
|
|
const errorMessage = error instanceof Error ? error.message : String(error)
|
|
|
- this.log(`[API] ResumeTask failed for taskId ${data}: ${errorMessage}`)
|
|
|
+ this.log(`[API] ResumeTask failed for taskId ${command.data}: ${errorMessage}`)
|
|
|
// Don't rethrow - we want to prevent IPC server crashes
|
|
|
// The error is logged for debugging purposes
|
|
|
}
|
|
|
break
|
|
|
case TaskCommandName.SendMessage:
|
|
|
- this.log(`[API] SendMessage -> ${data.text}`)
|
|
|
- await this.sendMessage(data.text, data.images)
|
|
|
+ this.log(`[API] SendMessage -> ${command.data.text}`)
|
|
|
+ await this.sendMessage(command.data.text, command.data.images)
|
|
|
break
|
|
|
}
|
|
|
})
|
|
|
@@ -181,15 +182,6 @@ export class API extends EventEmitter<RooCodeEvents> implements RooCodeAPI {
|
|
|
await this.sidebarProvider.cancelTask()
|
|
|
}
|
|
|
|
|
|
- public async cancelTask(taskId: string) {
|
|
|
- const provider = this.taskMap.get(taskId)
|
|
|
-
|
|
|
- if (provider) {
|
|
|
- await provider.cancelTask()
|
|
|
- this.taskMap.delete(taskId)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
public async sendMessage(text?: string, images?: string[]) {
|
|
|
await this.sidebarProvider.postMessageToWebview({ type: "invoke", invoke: "sendMessage", text, images })
|
|
|
}
|
|
|
@@ -212,7 +204,6 @@ export class API extends EventEmitter<RooCodeEvents> implements RooCodeAPI {
|
|
|
|
|
|
task.on(RooCodeEventName.TaskStarted, async () => {
|
|
|
this.emit(RooCodeEventName.TaskStarted, task.taskId)
|
|
|
- this.taskMap.set(task.taskId, provider)
|
|
|
await this.fileLog(`[${new Date().toISOString()}] taskStarted -> ${task.taskId}\n`)
|
|
|
})
|
|
|
|
|
|
@@ -221,8 +212,6 @@ export class API extends EventEmitter<RooCodeEvents> implements RooCodeAPI {
|
|
|
isSubtask: !!task.parentTaskId,
|
|
|
})
|
|
|
|
|
|
- this.taskMap.delete(task.taskId)
|
|
|
-
|
|
|
await this.fileLog(
|
|
|
`[${new Date().toISOString()}] taskCompleted -> ${task.taskId} | ${JSON.stringify(tokenUsage, null, 2)} | ${JSON.stringify(toolUsage, null, 2)}\n`,
|
|
|
)
|
|
|
@@ -230,7 +219,6 @@ export class API extends EventEmitter<RooCodeEvents> implements RooCodeAPI {
|
|
|
|
|
|
task.on(RooCodeEventName.TaskAborted, () => {
|
|
|
this.emit(RooCodeEventName.TaskAborted, task.taskId)
|
|
|
- this.taskMap.delete(task.taskId)
|
|
|
})
|
|
|
|
|
|
task.on(RooCodeEventName.TaskFocused, () => {
|
|
|
@@ -301,6 +289,10 @@ export class API extends EventEmitter<RooCodeEvents> implements RooCodeAPI {
|
|
|
this.emit(RooCodeEventName.TaskAskResponded, task.taskId)
|
|
|
})
|
|
|
|
|
|
+ task.on(RooCodeEventName.QueuedMessagesUpdated, (taskId, messages) => {
|
|
|
+ this.emit(RooCodeEventName.QueuedMessagesUpdated, taskId, messages)
|
|
|
+ })
|
|
|
+
|
|
|
// Task Analytics
|
|
|
|
|
|
task.on(RooCodeEventName.TaskToolFailed, (taskId, tool, error) => {
|