From 80fcd1ba74e22f43d2729a9fe1e0b05134ff531e Mon Sep 17 00:00:00 2001 From: Chris Estreich Date: Thu, 17 Jul 2025 10:41:40 -0700 Subject: [PATCH] Allow command execution timeout to be set via IPC task execution (#5825) Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> --- packages/types/npm/package.json | 2 +- packages/types/src/global-settings.ts | 2 ++ src/extension/api.ts | 18 ++++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/types/npm/package.json b/packages/types/npm/package.json index 54188d73bc..76bc0eb4e4 100644 --- a/packages/types/npm/package.json +++ b/packages/types/npm/package.json @@ -1,6 +1,6 @@ { "name": "@roo-code/types", - "version": "1.32.0", + "version": "1.34.0", "description": "TypeScript type definitions for Roo Code.", "publishConfig": { "access": "public", diff --git a/packages/types/src/global-settings.ts b/packages/types/src/global-settings.ts index 514b15d783..cf163e26a6 100644 --- a/packages/types/src/global-settings.ts +++ b/packages/types/src/global-settings.ts @@ -50,6 +50,7 @@ export const globalSettingsSchema = z.object({ alwaysAllowUpdateTodoList: z.boolean().optional(), allowedCommands: z.array(z.string()).optional(), deniedCommands: z.array(z.string()).optional(), + commandExecutionTimeout: z.number().optional(), allowedMaxRequests: z.number().nullish(), autoCondenseContext: z.boolean().optional(), autoCondenseContextPercent: z.number().optional(), @@ -200,6 +201,7 @@ export const EVALS_SETTINGS: RooCodeSettings = { alwaysAllowUpdateTodoList: true, followupAutoApproveTimeoutMs: 0, allowedCommands: ["*"], + commandExecutionTimeout: 30_000, browserToolEnabled: false, browserViewportSize: "900x600", diff --git a/src/extension/api.ts b/src/extension/api.ts index 3bb538dcb3..4000e43133 100644 --- a/src/extension/api.ts +++ b/src/extension/api.ts @@ -125,6 +125,22 @@ export class API extends EventEmitter implements RooCodeAPI { .getConfiguration(Package.name) .update("allowedCommands", configuration.allowedCommands, vscode.ConfigurationTarget.Global) } + + if (configuration.deniedCommands) { + await vscode.workspace + .getConfiguration(Package.name) + .update("deniedCommands", configuration.deniedCommands, vscode.ConfigurationTarget.Global) + } + + if (configuration.commandExecutionTimeout !== undefined) { + await vscode.workspace + .getConfiguration(Package.name) + .update( + "commandExecutionTimeout", + configuration.commandExecutionTimeout, + vscode.ConfigurationTarget.Global, + ) + } } await provider.removeClineFromStack() @@ -223,9 +239,11 @@ export class API extends EventEmitter implements RooCodeAPI { cline.on("taskCompleted", async (_, tokenUsage, toolUsage) => { let isSubtask = false + if (cline.rootTask != undefined) { isSubtask = true } + this.emit(RooCodeEventName.TaskCompleted, cline.taskId, tokenUsage, toolUsage, { isSubtask: isSubtask }) this.taskMap.delete(cline.taskId)