From 47067ea3bfa6c50816fd48a3d236ba67dfe6080f Mon Sep 17 00:00:00 2001 From: Carlos Diosdado Date: Thu, 10 Apr 2025 20:31:18 -0600 Subject: [PATCH 1/4] split autoapprove subtask settings into two (create and complete) --- e2e/src/suite/subtasks.test.ts | 3 +- evals/packages/types/src/roo-code-defaults.ts | 3 +- evals/packages/types/src/roo-code.ts | 6 ++- src/core/webview/ClineProvider.ts | 9 ++-- src/core/webview/webviewMessageHandler.ts | 8 +++- src/exports/roo-code.d.ts | 3 +- src/schemas/index.ts | 6 ++- src/shared/ExtensionMessage.ts | 3 +- src/shared/WebviewMessage.ts | 3 +- .../src/components/chat/AutoApproveMenu.tsx | 42 +++++++++++++------ webview-ui/src/components/chat/ChatView.tsx | 14 +++++-- .../settings/AutoApproveSettings.tsx | 31 ++++++++++---- .../src/components/settings/SettingsView.tsx | 9 ++-- .../src/context/ExtensionStateContext.tsx | 8 +++- webview-ui/src/i18n/locales/ca/chat.json | 11 +++-- webview-ui/src/i18n/locales/ca/settings.json | 10 +++-- webview-ui/src/i18n/locales/de/chat.json | 11 +++-- webview-ui/src/i18n/locales/de/settings.json | 10 +++-- webview-ui/src/i18n/locales/en/chat.json | 11 +++-- webview-ui/src/i18n/locales/en/settings.json | 10 +++-- webview-ui/src/i18n/locales/es/chat.json | 11 +++-- webview-ui/src/i18n/locales/es/settings.json | 10 +++-- webview-ui/src/i18n/locales/fr/chat.json | 11 +++-- webview-ui/src/i18n/locales/fr/settings.json | 10 +++-- webview-ui/src/i18n/locales/hi/chat.json | 11 +++-- webview-ui/src/i18n/locales/hi/settings.json | 10 +++-- webview-ui/src/i18n/locales/it/chat.json | 11 +++-- webview-ui/src/i18n/locales/it/settings.json | 10 +++-- webview-ui/src/i18n/locales/ja/chat.json | 11 +++-- webview-ui/src/i18n/locales/ja/settings.json | 10 +++-- webview-ui/src/i18n/locales/ko/chat.json | 11 +++-- webview-ui/src/i18n/locales/ko/settings.json | 10 +++-- webview-ui/src/i18n/locales/pl/chat.json | 11 +++-- webview-ui/src/i18n/locales/pl/settings.json | 10 +++-- webview-ui/src/i18n/locales/pt-BR/chat.json | 11 +++-- .../src/i18n/locales/pt-BR/settings.json | 10 +++-- webview-ui/src/i18n/locales/tr/chat.json | 11 +++-- webview-ui/src/i18n/locales/tr/settings.json | 10 +++-- webview-ui/src/i18n/locales/vi/chat.json | 11 +++-- webview-ui/src/i18n/locales/vi/settings.json | 10 +++-- webview-ui/src/i18n/locales/zh-CN/chat.json | 11 +++-- .../src/i18n/locales/zh-CN/settings.json | 10 +++-- webview-ui/src/i18n/locales/zh-TW/chat.json | 11 +++-- .../src/i18n/locales/zh-TW/settings.json | 10 +++-- 44 files changed, 329 insertions(+), 134 deletions(-) diff --git a/e2e/src/suite/subtasks.test.ts b/e2e/src/suite/subtasks.test.ts index 513b4c218e..5a968c2b7e 100644 --- a/e2e/src/suite/subtasks.test.ts +++ b/e2e/src/suite/subtasks.test.ts @@ -20,7 +20,8 @@ suite("Roo Code Subtasks", () => { await api.setConfiguration({ mode: "ask", alwaysAllowModeSwitch: true, - alwaysAllowSubtasks: true, + alwaysAllowSubtaskCreation: true, + alwaysAllowSubtaskCompletion: true, autoApprovalEnabled: true, enableCheckpoints: false, }) diff --git a/evals/packages/types/src/roo-code-defaults.ts b/evals/packages/types/src/roo-code-defaults.ts index 8def51f085..2fe86721f4 100644 --- a/evals/packages/types/src/roo-code-defaults.ts +++ b/evals/packages/types/src/roo-code-defaults.ts @@ -34,7 +34,8 @@ export const rooCodeDefaults: RooCodeSettings = { requestDelaySeconds: 5, alwaysAllowMcp: true, alwaysAllowModeSwitch: true, - alwaysAllowSubtasks: true, + alwaysAllowSubtaskCreation: true, + alwaysAllowSubtaskCompletion: true, alwaysAllowExecute: true, allowedCommands: ["*"], diff --git a/evals/packages/types/src/roo-code.ts b/evals/packages/types/src/roo-code.ts index 0b5d12a13b..02574d3f6a 100644 --- a/evals/packages/types/src/roo-code.ts +++ b/evals/packages/types/src/roo-code.ts @@ -492,7 +492,8 @@ export const globalSettingsSchema = z.object({ requestDelaySeconds: z.number().optional(), alwaysAllowMcp: z.boolean().optional(), alwaysAllowModeSwitch: z.boolean().optional(), - alwaysAllowSubtasks: z.boolean().optional(), + alwaysAllowSubtaskCreation: z.boolean().optional(), + alwaysAllowSubtaskCompletion: z.boolean().optional(), alwaysAllowExecute: z.boolean().optional(), allowedCommands: z.array(z.string()).optional(), @@ -561,7 +562,8 @@ const globalSettingsRecord: GlobalSettingsRecord = { requestDelaySeconds: undefined, alwaysAllowMcp: undefined, alwaysAllowModeSwitch: undefined, - alwaysAllowSubtasks: undefined, + alwaysAllowSubtaskCreation: undefined, + alwaysAllowSubtaskCompletion: undefined, alwaysAllowExecute: undefined, allowedCommands: undefined, diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index df2a45442c..712da8bc7e 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -1180,7 +1180,8 @@ export class ClineProvider extends EventEmitter implements alwaysAllowBrowser, alwaysAllowMcp, alwaysAllowModeSwitch, - alwaysAllowSubtasks, + alwaysAllowSubtaskCreation, + alwaysAllowSubtaskCompletion, soundEnabled, ttsEnabled, ttsSpeed, @@ -1237,7 +1238,8 @@ export class ClineProvider extends EventEmitter implements alwaysAllowBrowser: alwaysAllowBrowser ?? false, alwaysAllowMcp: alwaysAllowMcp ?? false, alwaysAllowModeSwitch: alwaysAllowModeSwitch ?? false, - alwaysAllowSubtasks: alwaysAllowSubtasks ?? false, + alwaysAllowSubtaskCreation: alwaysAllowSubtaskCreation ?? false, + alwaysAllowSubtaskCompletion: alwaysAllowSubtaskCompletion ?? false, uriScheme: vscode.env.uriScheme, currentTaskItem: this.getCurrentCline()?.taskId ? (taskHistory || []).find((item: HistoryItem) => item.id === this.getCurrentCline()?.taskId) @@ -1330,7 +1332,8 @@ export class ClineProvider extends EventEmitter implements alwaysAllowBrowser: stateValues.alwaysAllowBrowser ?? false, alwaysAllowMcp: stateValues.alwaysAllowMcp ?? false, alwaysAllowModeSwitch: stateValues.alwaysAllowModeSwitch ?? false, - alwaysAllowSubtasks: stateValues.alwaysAllowSubtasks ?? false, + alwaysAllowSubtaskCreation: stateValues.alwaysAllowSubtaskCreation ?? false, + alwaysAllowSubtaskCompletion: stateValues.alwaysAllowSubtaskCompletion ?? false, taskHistory: stateValues.taskHistory, allowedCommands: stateValues.allowedCommands, soundEnabled: stateValues.soundEnabled ?? false, diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 281db62b3f..a13e3578d4 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -281,8 +281,12 @@ export const webviewMessageHandler = async (provider: ClineProvider, message: We await updateGlobalState("alwaysAllowModeSwitch", message.bool) await provider.postStateToWebview() break - case "alwaysAllowSubtasks": - await updateGlobalState("alwaysAllowSubtasks", message.bool) + case "alwaysAllowSubtaskCreation": + await updateGlobalState("alwaysAllowSubtaskCreation", message.bool) + await provider.postStateToWebview() + break + case "alwaysAllowSubtaskCompletion": + await updateGlobalState("alwaysAllowSubtaskCompletion", message.bool) await provider.postStateToWebview() break case "askResponse": diff --git a/src/exports/roo-code.d.ts b/src/exports/roo-code.d.ts index 0efc708928..bac768e350 100644 --- a/src/exports/roo-code.d.ts +++ b/src/exports/roo-code.d.ts @@ -245,7 +245,8 @@ type GlobalSettings = { requestDelaySeconds?: number | undefined alwaysAllowMcp?: boolean | undefined alwaysAllowModeSwitch?: boolean | undefined - alwaysAllowSubtasks?: boolean | undefined + alwaysAllowSubtaskCreation?: boolean | undefined + alwaysAllowSubtaskCompletion?: boolean | undefined alwaysAllowExecute?: boolean | undefined allowedCommands?: string[] | undefined browserToolEnabled?: boolean | undefined diff --git a/src/schemas/index.ts b/src/schemas/index.ts index 637aaeabe5..7cc31c967b 100644 --- a/src/schemas/index.ts +++ b/src/schemas/index.ts @@ -506,7 +506,8 @@ export const globalSettingsSchema = z.object({ requestDelaySeconds: z.number().optional(), alwaysAllowMcp: z.boolean().optional(), alwaysAllowModeSwitch: z.boolean().optional(), - alwaysAllowSubtasks: z.boolean().optional(), + alwaysAllowSubtaskCreation: z.boolean().optional(), + alwaysAllowSubtaskCompletion: z.boolean().optional(), alwaysAllowExecute: z.boolean().optional(), allowedCommands: z.array(z.string()).optional(), @@ -577,7 +578,8 @@ const globalSettingsRecord: GlobalSettingsRecord = { requestDelaySeconds: undefined, alwaysAllowMcp: undefined, alwaysAllowModeSwitch: undefined, - alwaysAllowSubtasks: undefined, + alwaysAllowSubtaskCreation: undefined, + alwaysAllowSubtaskCompletion: undefined, alwaysAllowExecute: undefined, allowedCommands: undefined, diff --git a/src/shared/ExtensionMessage.ts b/src/shared/ExtensionMessage.ts index 38277a7c2d..11c9c14b15 100644 --- a/src/shared/ExtensionMessage.ts +++ b/src/shared/ExtensionMessage.ts @@ -133,7 +133,8 @@ export type ExtensionState = Pick< // | "requestDelaySeconds" // Optional in GlobalSettings, required here. | "alwaysAllowMcp" | "alwaysAllowModeSwitch" - | "alwaysAllowSubtasks" + | "alwaysAllowSubtaskCreation" + | "alwaysAllowSubtaskCompletion" | "alwaysAllowExecute" | "allowedCommands" | "browserToolEnabled" diff --git a/src/shared/WebviewMessage.ts b/src/shared/WebviewMessage.ts index 972845959e..cee8043c76 100644 --- a/src/shared/WebviewMessage.ts +++ b/src/shared/WebviewMessage.ts @@ -54,7 +54,8 @@ export interface WebviewMessage { | "alwaysAllowBrowser" | "alwaysAllowMcp" | "alwaysAllowModeSwitch" - | "alwaysAllowSubtasks" + | "alwaysAllowSubtaskCreation" + | "alwaysAllowSubtaskCompletion" | "playSound" | "playTts" | "stopTts" diff --git a/webview-ui/src/components/chat/AutoApproveMenu.tsx b/webview-ui/src/components/chat/AutoApproveMenu.tsx index 412ff26a1b..850943427f 100644 --- a/webview-ui/src/components/chat/AutoApproveMenu.tsx +++ b/webview-ui/src/components/chat/AutoApproveMenu.tsx @@ -33,8 +33,10 @@ const AutoApproveMenu = ({ style }: AutoApproveMenuProps) => { setAlwaysAllowMcp, alwaysAllowModeSwitch, setAlwaysAllowModeSwitch, - alwaysAllowSubtasks, - setAlwaysAllowSubtasks, + alwaysAllowSubtaskCreation, + setAlwaysAllowSubtaskCreation, + alwaysAllowSubtaskCompletion, + setAlwaysAllowSubtaskCompletion, alwaysApproveResubmit, setAlwaysApproveResubmit, autoApprovalEnabled, @@ -87,11 +89,18 @@ const AutoApproveMenu = ({ style }: AutoApproveMenuProps) => { description: t("chat:autoApprove.actions.switchModes.description"), }, { - id: "subtasks", - label: t("chat:autoApprove.actions.subtasks.label"), - shortName: t("chat:autoApprove.actions.subtasks.shortName"), - enabled: alwaysAllowSubtasks ?? false, - description: t("chat:autoApprove.actions.subtasks.description"), + id: "subtaskCreation", + label: t("chat:autoApprove.actions.subtaskCreation.label"), + shortName: t("chat:autoApprove.actions.subtaskCreation.shortName"), + enabled: alwaysAllowSubtaskCreation ?? false, + description: t("chat:autoApprove.actions.subtaskCreation.description"), + }, + { + id: "subtaskCompletion", + label: t("chat:autoApprove.actions.subtaskCompletion.label"), + shortName: t("chat:autoApprove.actions.subtaskCompletion.shortName"), + enabled: alwaysAllowSubtaskCompletion ?? false, + description: t("chat:autoApprove.actions.subtaskCompletion.description"), }, { id: "retryRequests", @@ -148,11 +157,17 @@ const AutoApproveMenu = ({ style }: AutoApproveMenuProps) => { vscode.postMessage({ type: "alwaysAllowModeSwitch", bool: newValue }) }, [alwaysAllowModeSwitch, setAlwaysAllowModeSwitch]) - const handleSubtasksChange = useCallback(() => { - const newValue = !(alwaysAllowSubtasks ?? false) - setAlwaysAllowSubtasks(newValue) - vscode.postMessage({ type: "alwaysAllowSubtasks", bool: newValue }) - }, [alwaysAllowSubtasks, setAlwaysAllowSubtasks]) + const handleSubtaskCreationChange = useCallback(() => { + const newValue = !(alwaysAllowSubtaskCreation ?? false) + setAlwaysAllowSubtaskCreation(newValue) + vscode.postMessage({ type: "alwaysAllowSubtaskCreation", bool: newValue }) + }, [alwaysAllowSubtaskCreation, setAlwaysAllowSubtaskCreation]) + + const handleSubtaskCompletionChange = useCallback(() => { + const newValue = !(alwaysAllowSubtaskCompletion ?? false) + setAlwaysAllowSubtaskCompletion(newValue) + vscode.postMessage({ type: "alwaysAllowSubtaskCompletion", bool: newValue }) + }, [alwaysAllowSubtaskCompletion, setAlwaysAllowSubtaskCompletion]) const handleRetryChange = useCallback(() => { const newValue = !(alwaysApproveResubmit ?? false) @@ -176,7 +191,8 @@ const AutoApproveMenu = ({ style }: AutoApproveMenuProps) => { useBrowser: handleBrowserChange, useMcp: handleMcpChange, switchModes: handleModeSwitchChange, - subtasks: handleSubtasksChange, + subtaskCreation: handleSubtaskCreationChange, + subtaskCompletion: handleSubtaskCompletionChange, retryRequests: handleRetryChange, } diff --git a/webview-ui/src/components/chat/ChatView.tsx b/webview-ui/src/components/chat/ChatView.tsx index e38ad28c93..93b5d5d781 100644 --- a/webview-ui/src/components/chat/ChatView.tsx +++ b/webview-ui/src/components/chat/ChatView.tsx @@ -66,7 +66,8 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie setMode, autoApprovalEnabled, alwaysAllowModeSwitch, - alwaysAllowSubtasks, + alwaysAllowSubtaskCreation, + alwaysAllowSubtaskCompletion, customModes, telemetrySetting, } = useExtensionState() @@ -694,8 +695,12 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie return alwaysAllowModeSwitch } - if (["newTask", "finishTask"].includes(tool?.tool)) { - return alwaysAllowSubtasks + if (["newTask"].includes(tool?.tool)) { + return alwaysAllowSubtaskCreation + } + + if (["finishTask"].includes(tool?.tool)) { + return alwaysAllowSubtaskCompletion } const isOutsideWorkspace = !!tool.isOutsideWorkspace @@ -725,7 +730,8 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie alwaysAllowMcp, isMcpToolAlwaysAllowed, alwaysAllowModeSwitch, - alwaysAllowSubtasks, + alwaysAllowSubtaskCreation, + alwaysAllowSubtaskCompletion, ], ) diff --git a/webview-ui/src/components/settings/AutoApproveSettings.tsx b/webview-ui/src/components/settings/AutoApproveSettings.tsx index 94e18ffe71..82a482acfa 100644 --- a/webview-ui/src/components/settings/AutoApproveSettings.tsx +++ b/webview-ui/src/components/settings/AutoApproveSettings.tsx @@ -21,7 +21,8 @@ type AutoApproveSettingsProps = HTMLAttributes & { requestDelaySeconds: number alwaysAllowMcp?: boolean alwaysAllowModeSwitch?: boolean - alwaysAllowSubtasks?: boolean + alwaysAllowSubtaskCreation?: boolean + alwaysAllowSubtaskCompletion?: boolean alwaysAllowExecute?: boolean allowedCommands?: string[] setCachedStateField: SetCachedStateField< @@ -35,7 +36,8 @@ type AutoApproveSettingsProps = HTMLAttributes & { | "requestDelaySeconds" | "alwaysAllowMcp" | "alwaysAllowModeSwitch" - | "alwaysAllowSubtasks" + | "alwaysAllowSubtaskCreation" + | "alwaysAllowSubtaskCompletion" | "alwaysAllowExecute" | "allowedCommands" > @@ -52,7 +54,8 @@ export const AutoApproveSettings = ({ requestDelaySeconds, alwaysAllowMcp, alwaysAllowModeSwitch, - alwaysAllowSubtasks, + alwaysAllowSubtaskCreation, + alwaysAllowSubtaskCompletion, alwaysAllowExecute, allowedCommands, setCachedStateField, @@ -234,13 +237,25 @@ export const AutoApproveSettings = ({
setCachedStateField("alwaysAllowSubtasks", e.target.checked)} - data-testid="always-allow-subtasks-checkbox"> - {t("settings:autoApprove.subtasks.label")} + checked={alwaysAllowSubtaskCreation} + onChange={(e: any) => setCachedStateField("alwaysAllowSubtaskCreation", e.target.checked)} + data-testid="always-allow-subtask-creation-checkbox"> + {t("settings:autoApprove.subtaskCreation.label")}
- {t("settings:autoApprove.subtasks.description")} + {t("settings:autoApprove.subtaskCreation.description")} +
+
+ +
+ setCachedStateField("alwaysAllowSubtaskCompletion", e.target.checked)} + data-testid="always-allow-subtask-completion-checkbox"> + {t("settings:autoApprove.subtaskCompletion.label")} + +
+ {t("settings:autoApprove.subtaskCompletion.description")}
diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index 2411067d77..9eae4b8c22 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -105,7 +105,8 @@ const SettingsView = forwardRef(({ onDone, t alwaysAllowExecute, alwaysAllowMcp, alwaysAllowModeSwitch, - alwaysAllowSubtasks, + alwaysAllowSubtaskCreation, + alwaysAllowSubtaskCompletion, alwaysAllowWrite, alwaysAllowWriteOutsideWorkspace, alwaysApproveResubmit, @@ -247,7 +248,8 @@ const SettingsView = forwardRef(({ onDone, t vscode.postMessage({ type: "currentApiConfigName", text: currentApiConfigName }) vscode.postMessage({ type: "updateExperimental", values: experiments }) vscode.postMessage({ type: "alwaysAllowModeSwitch", bool: alwaysAllowModeSwitch }) - vscode.postMessage({ type: "alwaysAllowSubtasks", bool: alwaysAllowSubtasks }) + vscode.postMessage({ type: "alwaysAllowSubtaskCreation", bool: alwaysAllowSubtaskCreation }) + vscode.postMessage({ type: "alwaysAllowSubtaskCompletion", bool: alwaysAllowSubtaskCompletion }) vscode.postMessage({ type: "upsertApiConfiguration", text: currentApiConfigName, apiConfiguration }) vscode.postMessage({ type: "telemetrySetting", text: telemetrySetting }) setChangeDetected(false) @@ -431,7 +433,8 @@ const SettingsView = forwardRef(({ onDone, t requestDelaySeconds={requestDelaySeconds} alwaysAllowMcp={alwaysAllowMcp} alwaysAllowModeSwitch={alwaysAllowModeSwitch} - alwaysAllowSubtasks={alwaysAllowSubtasks} + alwaysAllowSubtaskCreation={alwaysAllowSubtaskCreation} + alwaysAllowSubtaskCompletion={alwaysAllowSubtaskCompletion} alwaysAllowExecute={alwaysAllowExecute} allowedCommands={allowedCommands} setCachedStateField={setCachedStateField} diff --git a/webview-ui/src/context/ExtensionStateContext.tsx b/webview-ui/src/context/ExtensionStateContext.tsx index 477c9f9f7c..c888d931ab 100644 --- a/webview-ui/src/context/ExtensionStateContext.tsx +++ b/webview-ui/src/context/ExtensionStateContext.tsx @@ -30,7 +30,8 @@ export interface ExtensionStateContextType extends ExtensionState { setAlwaysAllowBrowser: (value: boolean) => void setAlwaysAllowMcp: (value: boolean) => void setAlwaysAllowModeSwitch: (value: boolean) => void - setAlwaysAllowSubtasks: (value: boolean) => void + setAlwaysAllowSubtaskCreation: (value: boolean) => void + setAlwaysAllowSubtaskCompletion: (value: boolean) => void setBrowserToolEnabled: (value: boolean) => void setShowRooIgnoredFiles: (value: boolean) => void setShowAnnouncement: (value: boolean) => void @@ -270,7 +271,10 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode setAlwaysAllowBrowser: (value) => setState((prevState) => ({ ...prevState, alwaysAllowBrowser: value })), setAlwaysAllowMcp: (value) => setState((prevState) => ({ ...prevState, alwaysAllowMcp: value })), setAlwaysAllowModeSwitch: (value) => setState((prevState) => ({ ...prevState, alwaysAllowModeSwitch: value })), - setAlwaysAllowSubtasks: (value) => setState((prevState) => ({ ...prevState, alwaysAllowSubtasks: value })), + setAlwaysAllowSubtaskCreation: (value) => + setState((prevState) => ({ ...prevState, alwaysAllowSubtaskCreation: value })), + setAlwaysAllowSubtaskCompletion: (value) => + setState((prevState) => ({ ...prevState, alwaysAllowSubtaskCompletion: value })), setShowAnnouncement: (value) => setState((prevState) => ({ ...prevState, shouldShowAnnouncement: value })), setAllowedCommands: (value) => setState((prevState) => ({ ...prevState, allowedCommands: value })), setSoundEnabled: (value) => setState((prevState) => ({ ...prevState, soundEnabled: value })), diff --git a/webview-ui/src/i18n/locales/ca/chat.json b/webview-ui/src/i18n/locales/ca/chat.json index 6c913965d6..157691d328 100644 --- a/webview-ui/src/i18n/locales/ca/chat.json +++ b/webview-ui/src/i18n/locales/ca/chat.json @@ -200,10 +200,15 @@ "shortName": "Modes", "description": "Permet el canvi automàtic entre diferents modes sense requerir aprovació." }, - "subtasks": { - "label": "Crear i completar subtasques", + "subtaskCreation": { + "label": "Crear subtasques", "shortName": "Subtasques", - "description": "Permet la creació i finalització de subtasques sense requerir aprovació." + "description": "Permet la creació de subtasques sense requerir aprovació." + }, + "subtaskCompletion": { + "label": "Completar subtasques", + "shortName": "Finalització", + "description": "Permet la finalització de subtasques sense requerir aprovació." }, "retryRequests": { "label": "Reintentar sol·licituds fallides", diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index c2b62a2526..2599efcf57 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -68,9 +68,13 @@ "label": "Aprovar sempre canvis de mode", "description": "Canviar automàticament entre diferents modes sense requerir aprovació" }, - "subtasks": { - "label": "Aprovar sempre creació i finalització de subtasques", - "description": "Permetre la creació i finalització de subtasques sense requerir aprovació" + "subtaskCreation": { + "label": "Aprovar sempre creació de subtasques", + "description": "Permetre la creació de subtasques sense requerir aprovació" + }, + "subtaskCompletion": { + "label": "Aprovar sempre finalització de subtasques", + "description": "Permetre la finalització de subtasques sense requerir aprovació" }, "execute": { "label": "Aprovar sempre operacions d'execució permeses", diff --git a/webview-ui/src/i18n/locales/de/chat.json b/webview-ui/src/i18n/locales/de/chat.json index cb97b0bc84..4a952e0a91 100644 --- a/webview-ui/src/i18n/locales/de/chat.json +++ b/webview-ui/src/i18n/locales/de/chat.json @@ -200,10 +200,15 @@ "shortName": "Modi", "description": "Erlaubt automatischen Wechsel zwischen verschiedenen Modi ohne erforderliche Genehmigung." }, - "subtasks": { - "label": "Teilaufgaben erstellen & abschließen", + "subtaskCreation": { + "label": "Teilaufgaben erstellen", "shortName": "Teilaufgaben", - "description": "Erlaubt die Erstellung und den Abschluss von Teilaufgaben ohne erforderliche Genehmigung." + "description": "Erlaubt die Erstellung von Teilaufgaben ohne erforderliche Genehmigung." + }, + "subtaskCompletion": { + "label": "Teilaufgaben abschließen", + "shortName": "Abschluss", + "description": "Erlaubt den Abschluss von Teilaufgaben ohne erforderliche Genehmigung." }, "retryRequests": { "label": "Fehlgeschlagene Anfragen wiederholen", diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index 9659d0cda7..c3fb3b93d7 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -68,9 +68,13 @@ "label": "Moduswechsel immer genehmigen", "description": "Automatisch zwischen verschiedenen Modi wechseln ohne Genehmigung" }, - "subtasks": { - "label": "Erstellung & Abschluss von Unteraufgaben immer genehmigen", - "description": "Erstellung und Abschluss von Unteraufgaben ohne Genehmigung erlauben" + "subtaskCreation": { + "label": "Erstellung von Unteraufgaben immer genehmigen", + "description": "Erstellung von Unteraufgaben ohne Genehmigung erlauben" + }, + "subtaskCompletion": { + "label": "Abschluss von Unteraufgaben immer genehmigen", + "description": "Abschluss von Unteraufgaben ohne Genehmigung erlauben" }, "execute": { "label": "Erlaubte Ausführungsoperationen immer genehmigen", diff --git a/webview-ui/src/i18n/locales/en/chat.json b/webview-ui/src/i18n/locales/en/chat.json index f9f838356d..ca1ebae83c 100644 --- a/webview-ui/src/i18n/locales/en/chat.json +++ b/webview-ui/src/i18n/locales/en/chat.json @@ -200,10 +200,15 @@ "shortName": "Modes", "description": "Allows automatic switching between different modes without requiring approval." }, - "subtasks": { - "label": "Create & complete subtasks", + "subtaskCreation": { + "label": "Create subtasks", "shortName": "Subtasks", - "description": "Allow creation and completion of subtasks without requiring approval." + "description": "Allow creation of subtasks without requiring approval." + }, + "subtaskCompletion": { + "label": "Complete subtasks", + "shortName": "Completion", + "description": "Allow completion of subtasks without requiring approval." }, "retryRequests": { "label": "Retry failed requests", diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 8ec853a60c..21c781a22c 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -68,9 +68,13 @@ "label": "Always approve mode switching", "description": "Automatically switch between different modes without requiring approval" }, - "subtasks": { - "label": "Always approve creation & completion of subtasks", - "description": "Allow creation and completion of subtasks without requiring approval" + "subtaskCreation": { + "label": "Always approve creation of subtasks", + "description": "Allow creation of subtasks without requiring approval" + }, + "subtaskCompletion": { + "label": "Always approve completion of subtasks", + "description": "Allow completion of subtasks without requiring approval." }, "execute": { "label": "Always approve allowed execute operations", diff --git a/webview-ui/src/i18n/locales/es/chat.json b/webview-ui/src/i18n/locales/es/chat.json index caa1b6048c..1c71eeec94 100644 --- a/webview-ui/src/i18n/locales/es/chat.json +++ b/webview-ui/src/i18n/locales/es/chat.json @@ -200,10 +200,15 @@ "shortName": "Modos", "description": "Permite el cambio automático entre diferentes modos sin requerir aprobación." }, - "subtasks": { - "label": "Crear y completar subtareas", + "subtaskCreation": { + "label": "Crear subtareas", "shortName": "Subtareas", - "description": "Permite la creación y finalización de subtareas sin requerir aprobación." + "description": "Permite la creación de subtareas sin requerir aprobación." + }, + "subtaskCompletion": { + "label": "Completar subtareas", + "shortName": "Finalización", + "description": "Permite la finalización de subtareas sin requerir aprobación." }, "retryRequests": { "label": "Reintentar solicitudes fallidas", diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index e6852a9e8d..d569ae2175 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -68,9 +68,13 @@ "label": "Aprobar siempre cambios de modo", "description": "Cambiar automáticamente entre diferentes modos sin requerir aprobación" }, - "subtasks": { - "label": "Aprobar siempre creación y finalización de subtareas", - "description": "Permitir la creación y finalización de subtareas sin requerir aprobación" + "subtaskCreation": { + "label": "Aprobar siempre creación de subtareas", + "description": "Permitir la creación de subtareas sin requerir aprobación" + }, + "subtaskCompletion": { + "label": "Aprobar siempre finalización de subtareas", + "description": "Permitir la finalización de subtareas sin requerir aprobación." }, "execute": { "label": "Aprobar siempre operaciones de ejecución permitidas", diff --git a/webview-ui/src/i18n/locales/fr/chat.json b/webview-ui/src/i18n/locales/fr/chat.json index 28254ab1c8..324f583d64 100644 --- a/webview-ui/src/i18n/locales/fr/chat.json +++ b/webview-ui/src/i18n/locales/fr/chat.json @@ -200,10 +200,15 @@ "shortName": "Modes", "description": "Permet le changement automatique entre différents modes sans nécessiter d'approbation." }, - "subtasks": { - "label": "Créer et terminer des sous-tâches", + "subtaskCreation": { + "label": "Créer des sous-tâches", "shortName": "Sous-tâches", - "description": "Permet la création et l'achèvement de sous-tâches sans nécessiter d'approbation." + "description": "Permet la création de sous-tâches sans nécessiter d'approbation." + }, + "subtaskCompletion": { + "label": "Terminer des sous-tâches", + "shortName": "Achèvement", + "description": "Permet l'achèvement de sous-tâches sans nécessiter d'approbation." }, "retryRequests": { "label": "Réessayer les requêtes échouées", diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index 4b77dfa767..0afcad3eb5 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -68,9 +68,13 @@ "label": "Toujours approuver les changements de mode", "description": "Basculer automatiquement entre différents modes sans nécessiter d'approbation" }, - "subtasks": { - "label": "Toujours approuver la création et l'achèvement des sous-tâches", - "description": "Permettre la création et l'achèvement des sous-tâches sans nécessiter d'approbation" + "subtaskCreation": { + "label": "Toujours approuver la création des sous-tâches", + "description": "Permettre la création des sous-tâches sans nécessiter d'approbation" + }, + "subtaskCompletion": { + "label": "Toujours approuver l'achèvement des sous-tâches", + "description": "Permettre l'achèvement des sous-tâches sans nécessiter d'approbation" }, "execute": { "label": "Toujours approuver les opérations d'exécution autorisées", diff --git a/webview-ui/src/i18n/locales/hi/chat.json b/webview-ui/src/i18n/locales/hi/chat.json index 78904af006..75e499049d 100644 --- a/webview-ui/src/i18n/locales/hi/chat.json +++ b/webview-ui/src/i18n/locales/hi/chat.json @@ -200,10 +200,15 @@ "shortName": "मोड", "description": "स्वीकृति की आवश्यकता के बिना विभिन्न मोड के बीच स्वचालित स्विचिंग की अनुमति देता है।" }, - "subtasks": { - "label": "उपकार्य बनाएं और पूरा करें", + "subtaskCreation": { + "label": "उपकार्य बनाएं", "shortName": "उपकार्य", - "description": "स्वीकृति की आवश्यकता के बिना उपकार्यों के निर्माण और पूर्णता की अनुमति देता है।" + "description": "स्वीकृति की आवश्यकता के बिना उपकार्यों के निर्माण की अनुमति देता है।" + }, + "subtaskCompletion": { + "label": "उपकार्य पूरा करें", + "shortName": "पूर्णता", + "description": "स्वीकृति की आवश्यकता के बिना उपकार्यों की पूर्णता की अनुमति देता है।" }, "retryRequests": { "label": "विफल अनुरोधों को पुनः प्रयास करें", diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index d69b1b9b28..bf8e6aad92 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -68,9 +68,13 @@ "label": "मोड स्विचिंग हमेशा अनुमोदित करें", "description": "अनुमोदन की आवश्यकता के बिना स्वचालित रूप से विभिन्न मोड के बीच स्विच करें" }, - "subtasks": { - "label": "उप-कार्यों का निर्माण और पूर्णता हमेशा अनुमोदित करें", - "description": "अनुमोदन की आवश्यकता के बिना उप-कार्यों के निर्माण और पूर्णता की अनुमति दें" + "subtaskCreation": { + "label": "उप-कार्यों का निर्माण हमेशा अनुमोदित करें", + "description": "अनुमोदन की आवश्यकता के बिना उप-कार्यों के निर्माण की अनुमति दें" + }, + "subtaskCompletion": { + "label": "उप-कार्यों की पूर्णता हमेशा अनुमोदित करें", + "description": "अनुमोदन की आवश्यकता के बिना उप-कार्यों की पूर्णता की अनुमति दें" }, "execute": { "label": "अनुमत निष्पादन ऑपरेशन हमेशा अनुमोदित करें", diff --git a/webview-ui/src/i18n/locales/it/chat.json b/webview-ui/src/i18n/locales/it/chat.json index cb1d5f6dc1..1018268ff0 100644 --- a/webview-ui/src/i18n/locales/it/chat.json +++ b/webview-ui/src/i18n/locales/it/chat.json @@ -200,10 +200,15 @@ "shortName": "Modalità", "description": "Consente il passaggio automatico tra diverse modalità senza richiedere approvazione." }, - "subtasks": { - "label": "Crea e completa sottoattività", + "subtaskCreation": { + "label": "Crea sottoattività", "shortName": "Sottoattività", - "description": "Consente la creazione e il completamento di sottoattività senza richiedere approvazione." + "description": "Consente la creazione di sottoattività senza richiedere approvazione." + }, + "subtaskCompletion": { + "label": "Completa sottoattività", + "shortName": "Completamento", + "description": "Consente il completamento di sottoattività senza richiedere approvazione." }, "retryRequests": { "label": "Riprova richieste fallite", diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index 7ce83018ab..94fb47604f 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -68,9 +68,13 @@ "label": "Approva sempre cambi di modalità", "description": "Passa automaticamente tra diverse modalità senza richiedere approvazione" }, - "subtasks": { - "label": "Approva sempre creazione e completamento di attività secondarie", - "description": "Consenti la creazione e il completamento di attività secondarie senza richiedere approvazione" + "subtaskCreation": { + "label": "Approva sempre creazione di attività secondarie", + "description": "Consenti la creazione di attività secondarie senza richiedere approvazione" + }, + "subtaskCompletion": { + "label": "Approva sempre completamento di attività secondarie", + "description": "Consenti il completamento di attività secondarie senza richiedere approvazione" }, "execute": { "label": "Approva sempre operazioni di esecuzione consentite", diff --git a/webview-ui/src/i18n/locales/ja/chat.json b/webview-ui/src/i18n/locales/ja/chat.json index 4eb1aa52fe..dc6961937d 100644 --- a/webview-ui/src/i18n/locales/ja/chat.json +++ b/webview-ui/src/i18n/locales/ja/chat.json @@ -200,10 +200,15 @@ "shortName": "モード", "description": "承認を必要とせず、異なるモード間の自動切り替えを許可します。" }, - "subtasks": { - "label": "サブタスクの作成と完了", + "subtaskCreation": { + "label": "サブタスクの作成", "shortName": "サブタスク", - "description": "承認を必要とせずにサブタスクの作成と完了を許可します。" + "description": "承認を必要とせずにサブタスクの作成を許可します。" + }, + "subtaskCompletion": { + "label": "サブタスクの完了", + "shortName": "完了", + "description": "承認を必要とせずにサブタスクの完了を許可します。" }, "retryRequests": { "label": "失敗したリクエストの再試行", diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index ede80759f1..702f1324a0 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -68,9 +68,13 @@ "label": "モード切り替えを常に承認", "description": "承認なしで自動的に異なるモード間を切り替え" }, - "subtasks": { - "label": "サブタスクの作成と完了を常に承認", - "description": "承認なしでサブタスクの作成と完了を許可" + "subtaskCreation": { + "label": "サブタスクの作成を常に承認", + "description": "承認なしでサブタスクの作成を許可" + }, + "subtaskCompletion": { + "label": "サブタスクの完了を常に承認", + "description": "承認なしでサブタスクの完了を許可" }, "execute": { "label": "許可された実行操作を常に承認", diff --git a/webview-ui/src/i18n/locales/ko/chat.json b/webview-ui/src/i18n/locales/ko/chat.json index 2f4bff5cd3..bf8ff4bff7 100644 --- a/webview-ui/src/i18n/locales/ko/chat.json +++ b/webview-ui/src/i18n/locales/ko/chat.json @@ -200,10 +200,15 @@ "shortName": "모드", "description": "승인 없이 다른 모드 간 자동 전환을 허용합니다." }, - "subtasks": { - "label": "하위 작업 생성 및 완료", + "subtaskCreation": { + "label": "하위 작업 생성", "shortName": "하위 작업", - "description": "승인 없이 하위 작업 생성 및 완료를 허용합니다." + "description": "승인 없이 하위 작업 생성을 허용합니다." + }, + "subtaskCompletion": { + "label": "하위 작업 완료", + "shortName": "완료", + "description": "승인 없이 하위 작업 완료를 허용합니다." }, "retryRequests": { "label": "실패한 요청 재시도", diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 05717e06f8..c1fc0459f9 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -68,9 +68,13 @@ "label": "모드 전환 항상 승인", "description": "승인 없이 자동으로 다양한 모드 간 전환" }, - "subtasks": { - "label": "하위 작업 생성 및 완료 항상 승인", - "description": "승인 없이 하위 작업 생성 및 완료 허용" + "subtaskCreation": { + "label": "하위 작업 생성 항상 승인", + "description": "승인 없이 하위 작업 생성 허용" + }, + "subtaskCompletion": { + "label": "하위 작업 완료 항상 승인", + "description": "승인 없이 하위 작업 완료 허용" }, "execute": { "label": "허용된 실행 작업 항상 승인", diff --git a/webview-ui/src/i18n/locales/pl/chat.json b/webview-ui/src/i18n/locales/pl/chat.json index 372b347943..9f5a32dade 100644 --- a/webview-ui/src/i18n/locales/pl/chat.json +++ b/webview-ui/src/i18n/locales/pl/chat.json @@ -200,10 +200,15 @@ "shortName": "Tryby", "description": "Pozwala na automatyczne przełączanie między różnymi trybami bez wymagania zatwierdzenia." }, - "subtasks": { - "label": "Twórz i kończ podzadania", + "subtaskCreation": { + "label": "Twórz podzadania", "shortName": "Podzadania", - "description": "Pozwala na tworzenie i kończenie podzadań bez wymagania zatwierdzenia." + "description": "Pozwala na tworzenie podzadań bez wymagania zatwierdzenia." + }, + "subtaskCompletion": { + "label": "Kończ podzadania", + "shortName": "Kończenie", + "description": "Pozwala na kończenie podzadań bez wymagania zatwierdzenia." }, "retryRequests": { "label": "Ponów nieudane zapytania", diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 46c43302a9..aa9759ebdc 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -68,9 +68,13 @@ "label": "Zawsze zatwierdzaj przełączanie trybów", "description": "Automatycznie przełączaj między różnymi trybami bez konieczności zatwierdzania" }, - "subtasks": { - "label": "Zawsze zatwierdzaj tworzenie i ukończenie podzadań", - "description": "Zezwalaj na tworzenie i ukończenie podzadań bez konieczności zatwierdzania" + "subtaskCreation": { + "label": "Zawsze zatwierdzaj tworzenie podzadań", + "description": "Zezwalaj na tworzenie podzadań bez konieczności zatwierdzania" + }, + "subtaskCompletion": { + "label": "Zawsze zatwierdzaj ukończenie podzadań", + "description": "Zezwalaj na ukończenie podzadań bez konieczności zatwierdzania" }, "execute": { "label": "Zawsze zatwierdzaj dozwolone operacje wykonania", diff --git a/webview-ui/src/i18n/locales/pt-BR/chat.json b/webview-ui/src/i18n/locales/pt-BR/chat.json index d5d7aefc56..0615b90595 100644 --- a/webview-ui/src/i18n/locales/pt-BR/chat.json +++ b/webview-ui/src/i18n/locales/pt-BR/chat.json @@ -200,10 +200,15 @@ "shortName": "Modos", "description": "Permite a alternância automática entre diferentes modos sem exigir aprovação." }, - "subtasks": { - "label": "Criar e completar subtarefas", + "subtaskCreation": { + "label": "Criar subtarefas", "shortName": "Subtarefas", - "description": "Permite a criação e conclusão de subtarefas sem exigir aprovação." + "description": "Permite a criação de subtarefas sem exigir aprovação." + }, + "subtaskCompletion": { + "label": "Completar subtarefas", + "shortName": "Conclusão", + "description": "Permite a conclusão de subtarefas sem exigir aprovação." }, "retryRequests": { "label": "Retentar requisições falhas", diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index 139f62dece..ccaa182958 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -68,9 +68,13 @@ "label": "Aprovar sempre troca de modos", "description": "Alternar automaticamente entre diferentes modos sem exigir aprovação" }, - "subtasks": { - "label": "Aprovar sempre criação e conclusão de subtarefas", - "description": "Permitir a criação e conclusão de subtarefas sem exigir aprovação" + "subtaskCreation": { + "label": "Aprovar sempre criação de subtarefas", + "description": "Permitir a criação de subtarefas sem exigir aprovação" + }, + "subtaskCompletion": { + "label": "Aprovar sempre conclusão de subtarefas", + "description": "Permitir a conclusão de subtarefas sem exigir aprovação" }, "execute": { "label": "Aprovar sempre operações de execução permitidas", diff --git a/webview-ui/src/i18n/locales/tr/chat.json b/webview-ui/src/i18n/locales/tr/chat.json index 3e4d68d618..5eaa72698f 100644 --- a/webview-ui/src/i18n/locales/tr/chat.json +++ b/webview-ui/src/i18n/locales/tr/chat.json @@ -200,10 +200,15 @@ "shortName": "Modlar", "description": "Onay gerektirmeden farklı modlar arasında otomatik geçişe izin verir." }, - "subtasks": { - "label": "Alt görevler oluştur ve tamamla", + "subtaskCreation": { + "label": "Alt görevler oluştur", "shortName": "Alt görevler", - "description": "Onay gerektirmeden alt görevlerin oluşturulmasına ve tamamlanmasına izin verir." + "description": "Onay gerektirmeden alt görevlerin oluşturulmasına izin verir." + }, + "subtaskCompletion": { + "label": "Alt görevleri tamamla", + "shortName": "Tamamlama", + "description": "Onay gerektirmeden alt görevlerin tamamlanmasına izin verir." }, "retryRequests": { "label": "Başarısız istekleri yeniden dene", diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index 01c79fa8aa..88f4a14508 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -68,9 +68,13 @@ "label": "Mod değiştirmeyi her zaman onayla", "description": "Onay gerektirmeden otomatik olarak farklı modlar arasında geçiş yap" }, - "subtasks": { - "label": "Alt görevlerin oluşturulmasını ve tamamlanmasını her zaman onayla", - "description": "Onay gerektirmeden alt görevlerin oluşturulmasına ve tamamlanmasına izin ver" + "subtaskCreation": { + "label": "Alt görevlerin oluşturulmasını her zaman onayla", + "description": "Onay gerektirmeden alt görevlerin oluşturulmasına izin ver" + }, + "subtaskCompletion": { + "label": "Alt görevlerin tamamlanmasını her zaman onayla", + "description": "Onay gerektirmeden alt görevlerin tamamlanmasına izin ver" }, "execute": { "label": "İzin verilen yürütme işlemlerini her zaman onayla", diff --git a/webview-ui/src/i18n/locales/vi/chat.json b/webview-ui/src/i18n/locales/vi/chat.json index 7c417d54ef..f522cfa689 100644 --- a/webview-ui/src/i18n/locales/vi/chat.json +++ b/webview-ui/src/i18n/locales/vi/chat.json @@ -200,10 +200,15 @@ "shortName": "Chế độ", "description": "Cho phép tự động chuyển đổi giữa các chế độ khác nhau mà không cần phê duyệt." }, - "subtasks": { - "label": "Tạo & hoàn thành nhiệm vụ phụ", + "subtaskCreation": { + "label": "Tạo nhiệm vụ phụ", "shortName": "Nhiệm vụ phụ", - "description": "Cho phép tạo và hoàn thành các nhiệm vụ phụ mà không cần phê duyệt." + "description": "Cho phép tạo các nhiệm vụ phụ mà không cần phê duyệt." + }, + "subtaskCompletion": { + "label": "Hoàn thành nhiệm vụ phụ", + "shortName": "Hoàn thành", + "description": "Cho phép hoàn thành các nhiệm vụ phụ mà không cần phê duyệt." }, "retryRequests": { "label": "Thử lại yêu cầu thất bại", diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index 04b8de8a32..180aebf778 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -68,9 +68,13 @@ "label": "Luôn phê duyệt chuyển đổi chế độ", "description": "Tự động chuyển đổi giữa các chế độ khác nhau mà không cần phê duyệt" }, - "subtasks": { - "label": "Luôn phê duyệt việc tạo và hoàn thành các công việc phụ", - "description": "Cho phép tạo và hoàn thành các công việc phụ mà không cần phê duyệt" + "subtaskCreation": { + "label": "Luôn phê duyệt việc tạo các công việc phụ", + "description": "Cho phép tạo các công việc phụ mà không cần phê duyệt" + }, + "subtaskCompletion": { + "label": "Luôn phê duyệt việc hoàn thành các công việc phụ", + "description": "Cho phép hoàn thành các công việc phụ mà không cần phê duyệt" }, "execute": { "label": "Luôn phê duyệt các hoạt động thực thi được phép", diff --git a/webview-ui/src/i18n/locales/zh-CN/chat.json b/webview-ui/src/i18n/locales/zh-CN/chat.json index a8c261642c..5292f5d083 100644 --- a/webview-ui/src/i18n/locales/zh-CN/chat.json +++ b/webview-ui/src/i18n/locales/zh-CN/chat.json @@ -200,10 +200,15 @@ "shortName": "模式", "description": "允许自动切换工作模式" }, - "subtasks": { - "label": "创建和完成子任务", + "subtaskCreation": { + "label": "创建子任务", "shortName": "子任务", - "description": "允许自主创建和管理子任务" + "description": "允许自主创建子任务" + }, + "subtaskCompletion": { + "label": "完成子任务", + "shortName": "完成", + "description": "允许自主管理子任务" }, "retryRequests": { "label": "重试失败的请求", diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index 3a99b9d790..a1c41ca968 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -68,9 +68,13 @@ "label": "自动批准模式切换", "description": "自动在不同模式之间切换而无需批准" }, - "subtasks": { - "label": "自动批准子任务的创建和完成", - "description": "允许创建和完成子任务而无需批准" + "subtaskCreation": { + "label": "自动批准子任务的创建", + "description": "允许创建子任务而无需批准" + }, + "subtaskCompletion": { + "label": "自动批准子任务的完成", + "description": "允许完成子任务而无需批准" }, "execute": { "label": "自动批准命令行操作", diff --git a/webview-ui/src/i18n/locales/zh-TW/chat.json b/webview-ui/src/i18n/locales/zh-TW/chat.json index b232eea889..1e8ada989c 100644 --- a/webview-ui/src/i18n/locales/zh-TW/chat.json +++ b/webview-ui/src/i18n/locales/zh-TW/chat.json @@ -200,10 +200,15 @@ "shortName": "模式", "description": "允許在不需要核准的情況下自動切換不同模式。" }, - "subtasks": { - "label": "建立和完成子工作", + "subtaskCreation": { + "label": "建立子工作", "shortName": "子工作", - "description": "允許在不需要核准的情況下建立和完成子工作。" + "description": "允許在不需要核准的情況下建立子工作。" + }, + "subtaskCompletion": { + "label": "完成子工作", + "shortName": "完成", + "description": "允許在不需要核准的情況下完成子工作。" }, "retryRequests": { "label": "重試失敗的請求", diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index 2e6a3383a4..52ab795b00 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -68,9 +68,13 @@ "label": "始終核准模式切換", "description": "自動在不同模式之間切換而無需核准" }, - "subtasks": { - "label": "始終核准子工作的建立和完成", - "description": "允許建立和完成子工作而無需核准" + "subtaskCreation": { + "label": "始終核准子工作的建立", + "description": "允許建立子工作而無需核准" + }, + "subtaskCompletion": { + "label": "始終核准子工作的完成", + "description": "允許完成子工作而無需核准" }, "execute": { "label": "始終核准允許的執行操作", From 762ec178fb7e82f1db6778530dc20bb7e0e30543 Mon Sep 17 00:00:00 2001 From: Carlos Diosdado Date: Thu, 10 Apr 2025 20:36:10 -0600 Subject: [PATCH 2/4] regenerated types --- src/exports/types.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/exports/types.ts b/src/exports/types.ts index f61be2e04f..c80a2cb4bf 100644 --- a/src/exports/types.ts +++ b/src/exports/types.ts @@ -248,7 +248,8 @@ type GlobalSettings = { requestDelaySeconds?: number | undefined alwaysAllowMcp?: boolean | undefined alwaysAllowModeSwitch?: boolean | undefined - alwaysAllowSubtasks?: boolean | undefined + alwaysAllowSubtaskCreation?: boolean | undefined + alwaysAllowSubtaskCompletion?: boolean | undefined alwaysAllowExecute?: boolean | undefined allowedCommands?: string[] | undefined browserToolEnabled?: boolean | undefined From 7d38e1918037cdfbb2807d135cccb968dd615d10 Mon Sep 17 00:00:00 2001 From: Carlos Diosdado Date: Fri, 11 Apr 2025 15:47:59 -0600 Subject: [PATCH 3/4] Add subtasks settings migration --- src/extension.ts | 2 ++ src/utils/migrateSubtasksSettings.ts | 47 ++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 src/utils/migrateSubtasksSettings.ts diff --git a/src/extension.ts b/src/extension.ts index aa834c560e..7e25f205b7 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -23,6 +23,7 @@ import { telemetryService } from "./services/telemetry/TelemetryService" import { TerminalRegistry } from "./integrations/terminal/TerminalRegistry" import { API } from "./exports/api" import { migrateSettings } from "./utils/migrateSettings" +import { migrateSubtasksSettings } from "./utils/migrateSubtasksSettings" import { handleUri, registerCommands, registerCodeActions, registerTerminalActions } from "./activate" import { formatLanguage } from "./shared/language" @@ -48,6 +49,7 @@ export async function activate(context: vscode.ExtensionContext) { // Migrate old settings to new await migrateSettings(context, outputChannel) + await migrateSubtasksSettings(context, outputChannel) // Initialize telemetry service after environment variables are loaded. telemetryService.initialize() diff --git a/src/utils/migrateSubtasksSettings.ts b/src/utils/migrateSubtasksSettings.ts new file mode 100644 index 0000000000..2955d14c15 --- /dev/null +++ b/src/utils/migrateSubtasksSettings.ts @@ -0,0 +1,47 @@ +import * as vscode from "vscode" + +/** + * Migrates old subtasks setting to new subtaskCreation and subtaskCompletion settings. + * + * TODO: Remove this migration code in September 2025 (6 months after implementation) + */ +export async function migrateSubtasksSettings( + context: vscode.ExtensionContext, + outputChannel: vscode.OutputChannel, +): Promise { + // Old and new setting keys + const subtasksKey = "alwaysAllowSubtasks" + const subtaskCreationKey = "alwaysAllowSubtaskCreation" + const subtaskCompletionKey = "alwaysAllowSubtaskCompletion" + + try { + // Get old value + const oldValue = await context.globalState.get(subtasksKey) + console.log(`old subtasks value: ${oldValue}`) + + if (oldValue !== undefined && typeof oldValue === "boolean") { + // Update new settings + await Promise.all([ + context.globalState.update(subtaskCreationKey, oldValue), + context.globalState.update(subtaskCompletionKey, oldValue), + ]) + + const creationValue = await context.globalState.get(subtaskCreationKey) + const completionValue = await context.globalState.get(subtaskCompletionKey) + console.log(`new subtask creation value value: ${creationValue}`) + console.log(`new subtask completion value value: ${completionValue}`) + + // Schedule cleanup + setTimeout(async () => { + try { + await context.globalState.update(subtasksKey, undefined) + outputChannel.appendLine("Migrated subtasks settings") + } catch (error) { + outputChannel.appendLine(`Failed to delete old subtasks setting: ${error}`) + } + }, 0) + } + } catch (error) { + outputChannel.appendLine(`Migrating subtasks settings failed: ${error}`) + } +} From 1f30f1a6699fb130a70f62a7d76472dc8d19be66 Mon Sep 17 00:00:00 2001 From: Carlos Diosdado Date: Sat, 12 Apr 2025 13:09:42 -0600 Subject: [PATCH 4/4] remove console logs --- src/utils/migrateSubtasksSettings.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/utils/migrateSubtasksSettings.ts b/src/utils/migrateSubtasksSettings.ts index 2955d14c15..c02dcc7310 100644 --- a/src/utils/migrateSubtasksSettings.ts +++ b/src/utils/migrateSubtasksSettings.ts @@ -17,7 +17,6 @@ export async function migrateSubtasksSettings( try { // Get old value const oldValue = await context.globalState.get(subtasksKey) - console.log(`old subtasks value: ${oldValue}`) if (oldValue !== undefined && typeof oldValue === "boolean") { // Update new settings @@ -26,11 +25,6 @@ export async function migrateSubtasksSettings( context.globalState.update(subtaskCompletionKey, oldValue), ]) - const creationValue = await context.globalState.get(subtaskCreationKey) - const completionValue = await context.globalState.get(subtaskCompletionKey) - console.log(`new subtask creation value value: ${creationValue}`) - console.log(`new subtask completion value value: ${completionValue}`) - // Schedule cleanup setTimeout(async () => { try {