Browse Source

feat: remove auto-approve toggles for to-do and retry actions (#10062)

Hannes Rudolph 4 weeks ago
parent
commit
0fbbe66496
38 changed files with 12 additions and 366 deletions
  1. 0 4
      packages/types/src/global-settings.ts
  2. 1 3
      src/core/auto-approval/index.ts
  3. 3 4
      src/core/task/Task.ts
  4. 6 12
      src/core/task/__tests__/Task.spec.ts
  5. 0 9
      src/core/webview/ClineProvider.ts
  6. 0 38
      src/core/webview/__tests__/ClineProvider.spec.ts
  7. 1 3
      src/shared/ExtensionMessage.ts
  8. 1 21
      webview-ui/src/components/chat/AutoApproveDropdown.tsx
  9. 0 5
      webview-ui/src/components/chat/ChatView.tsx
  10. 0 36
      webview-ui/src/components/settings/AutoApproveSettings.tsx
  11. 0 16
      webview-ui/src/components/settings/AutoApproveToggle.tsx
  12. 0 9
      webview-ui/src/components/settings/SettingsView.tsx
  13. 0 2
      webview-ui/src/components/settings/__tests__/AutoApproveToggle.spec.tsx
  14. 0 3
      webview-ui/src/components/settings/__tests__/SettingsView.change-detection.spec.tsx
  15. 0 3
      webview-ui/src/components/settings/__tests__/SettingsView.unsaved-changes.spec.tsx
  16. 0 15
      webview-ui/src/context/ExtensionStateContext.tsx
  17. 0 1
      webview-ui/src/context/__tests__/ExtensionStateContext.spec.tsx
  18. 0 12
      webview-ui/src/hooks/__tests__/useAutoApprovalState.spec.ts
  19. 0 2
      webview-ui/src/hooks/useAutoApprovalState.ts
  20. 0 6
      webview-ui/src/hooks/useAutoApprovalToggles.ts
  21. 0 9
      webview-ui/src/i18n/locales/ca/settings.json
  22. 0 9
      webview-ui/src/i18n/locales/de/settings.json
  23. 0 9
      webview-ui/src/i18n/locales/en/settings.json
  24. 0 9
      webview-ui/src/i18n/locales/es/settings.json
  25. 0 9
      webview-ui/src/i18n/locales/fr/settings.json
  26. 0 9
      webview-ui/src/i18n/locales/hi/settings.json
  27. 0 9
      webview-ui/src/i18n/locales/id/settings.json
  28. 0 9
      webview-ui/src/i18n/locales/it/settings.json
  29. 0 9
      webview-ui/src/i18n/locales/ja/settings.json
  30. 0 9
      webview-ui/src/i18n/locales/ko/settings.json
  31. 0 9
      webview-ui/src/i18n/locales/nl/settings.json
  32. 0 9
      webview-ui/src/i18n/locales/pl/settings.json
  33. 0 9
      webview-ui/src/i18n/locales/pt-BR/settings.json
  34. 0 9
      webview-ui/src/i18n/locales/ru/settings.json
  35. 0 9
      webview-ui/src/i18n/locales/tr/settings.json
  36. 0 9
      webview-ui/src/i18n/locales/vi/settings.json
  37. 0 9
      webview-ui/src/i18n/locales/zh-CN/settings.json
  38. 0 9
      webview-ui/src/i18n/locales/zh-TW/settings.json

+ 0 - 4
packages/types/src/global-settings.ts

@@ -74,7 +74,6 @@ export const globalSettingsSchema = z.object({
 	alwaysAllowWriteProtected: z.boolean().optional(),
 	writeDelayMs: z.number().min(0).optional(),
 	alwaysAllowBrowser: z.boolean().optional(),
-	alwaysApproveResubmit: z.boolean().optional(),
 	requestDelaySeconds: z.number().optional(),
 	alwaysAllowMcp: z.boolean().optional(),
 	alwaysAllowModeSwitch: z.boolean().optional(),
@@ -82,7 +81,6 @@ export const globalSettingsSchema = z.object({
 	alwaysAllowExecute: z.boolean().optional(),
 	alwaysAllowFollowupQuestions: z.boolean().optional(),
 	followupAutoApproveTimeoutMs: z.number().optional(),
-	alwaysAllowUpdateTodoList: z.boolean().optional(),
 	allowedCommands: z.array(z.string()).optional(),
 	deniedCommands: z.array(z.string()).optional(),
 	commandExecutionTimeout: z.number().optional(),
@@ -307,14 +305,12 @@ export const EVALS_SETTINGS: RooCodeSettings = {
 	alwaysAllowWriteProtected: false,
 	writeDelayMs: 1000,
 	alwaysAllowBrowser: true,
-	alwaysApproveResubmit: true,
 	requestDelaySeconds: 10,
 	alwaysAllowMcp: true,
 	alwaysAllowModeSwitch: true,
 	alwaysAllowSubtasks: true,
 	alwaysAllowExecute: true,
 	alwaysAllowFollowupQuestions: true,
-	alwaysAllowUpdateTodoList: true,
 	followupAutoApproveTimeoutMs: 0,
 	allowedCommands: ["*"],
 	commandExecutionTimeout: 20,

+ 1 - 3
src/core/auto-approval/index.ts

@@ -12,13 +12,11 @@ export type AutoApprovalState =
 	| "alwaysAllowReadOnly"
 	| "alwaysAllowWrite"
 	| "alwaysAllowBrowser"
-	| "alwaysApproveResubmit"
 	| "alwaysAllowMcp"
 	| "alwaysAllowModeSwitch"
 	| "alwaysAllowSubtasks"
 	| "alwaysAllowExecute"
 	| "alwaysAllowFollowupQuestions"
-	| "alwaysAllowUpdateTodoList"
 
 // Some of these actions have additional settings associated with them.
 export type AutoApprovalStateOptions =
@@ -144,7 +142,7 @@ export async function checkAutoApproval({
 		}
 
 		if (tool.tool === "updateTodoList") {
-			return state.alwaysAllowUpdateTodoList === true ? { decision: "approve" } : { decision: "ask" }
+			return { decision: "approve" }
 		}
 
 		if (tool?.tool === "fetchInstructions") {

+ 3 - 4
src/core/task/Task.ts

@@ -2959,7 +2959,7 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
 
 							// Apply exponential backoff similar to first-chunk errors when auto-resubmit is enabled
 							const stateForBackoff = await this.providerRef.deref()?.getState()
-							if (stateForBackoff?.autoApprovalEnabled && stateForBackoff?.alwaysApproveResubmit) {
+							if (stateForBackoff?.autoApprovalEnabled) {
 								await this.backoffAndAnnounce(
 									currentItem.retryAttempt ?? 0,
 									error,
@@ -3216,7 +3216,7 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
 
 					// Check if we should auto-retry or prompt the user
 					// Reuse the state variable from above
-					if (state?.autoApprovalEnabled && state?.alwaysApproveResubmit) {
+					if (state?.autoApprovalEnabled) {
 						// Auto-retry with backoff - don't persist failure message when retrying
 						const errorMsg =
 							"Unexpected API Response: The language model did not provide any assistant messages. This may indicate an issue with the API or the model's output."
@@ -3509,7 +3509,6 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
 		const {
 			apiConfiguration,
 			autoApprovalEnabled,
-			alwaysApproveResubmit,
 			requestDelaySeconds,
 			mode,
 			autoCondenseContext = true,
@@ -3811,7 +3810,7 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
 			}
 
 			// note that this api_req_failed ask is unique in that we only present this option if the api hasn't streamed any content yet (ie it fails on the first chunk due), as it would allow them to hit a retry button. However if the api failed mid-stream, it could be in any arbitrary state where some tools may have executed, so that error is handled differently and requires cancelling the task entirely.
-			if (autoApprovalEnabled && alwaysApproveResubmit) {
+			if (autoApprovalEnabled) {
 				let errorMsg
 
 				if (error.error?.metadata?.raw) {

+ 6 - 12
src/core/task/__tests__/Task.spec.ts

@@ -697,11 +697,8 @@ describe("Cline", () => {
 					return mockSuccessStream
 				})
 
-				// Set alwaysApproveResubmit and requestDelaySeconds
-				mockProvider.getState = vi.fn().mockResolvedValue({
-					alwaysApproveResubmit: true,
-					requestDelaySeconds: 3,
-				})
+				// Set up mock state
+				mockProvider.getState = vi.fn().mockResolvedValue({})
 
 				// Mock previous API request message
 				cline.clineMessages = [
@@ -723,7 +720,7 @@ describe("Cline", () => {
 				await iterator.next()
 
 				// Calculate expected delay for first retry
-				const baseDelay = 3 // from requestDelaySeconds
+				const baseDelay = 3 // test retry delay
 
 				// Verify countdown messages
 				for (let i = baseDelay; i > 0; i--) {
@@ -821,11 +818,8 @@ describe("Cline", () => {
 					return mockSuccessStream
 				})
 
-				// Set alwaysApproveResubmit and requestDelaySeconds
-				mockProvider.getState = vi.fn().mockResolvedValue({
-					alwaysApproveResubmit: true,
-					requestDelaySeconds: 3,
-				})
+				// Set up mock state
+				mockProvider.getState = vi.fn().mockResolvedValue({})
 
 				// Mock previous API request message
 				cline.clineMessages = [
@@ -847,7 +841,7 @@ describe("Cline", () => {
 				await iterator.next()
 
 				// Verify delay is only applied for the countdown
-				const baseDelay = 3 // from requestDelaySeconds
+				const baseDelay = 3 // test retry delay
 				const expectedDelayCount = baseDelay // One delay per second for countdown
 				expect(mockDelay).toHaveBeenCalledTimes(expectedDelayCount)
 				expect(mockDelay).toHaveBeenCalledWith(1000) // Each delay should be 1 second

+ 0 - 9
src/core/webview/ClineProvider.ts

@@ -1816,7 +1816,6 @@ export class ClineProvider
 			alwaysAllowMcp,
 			alwaysAllowModeSwitch,
 			alwaysAllowSubtasks,
-			alwaysAllowUpdateTodoList,
 			allowedMaxRequests,
 			allowedMaxCost,
 			autoCondenseContext,
@@ -1848,8 +1847,6 @@ export class ClineProvider
 			fuzzyMatchThreshold,
 			mcpEnabled,
 			enableMcpServerCreation,
-			alwaysApproveResubmit,
-			requestDelaySeconds,
 			currentApiConfigName,
 			listApiConfigMeta,
 			pinnedApiConfigs,
@@ -1948,7 +1945,6 @@ export class ClineProvider
 			alwaysAllowMcp: alwaysAllowMcp ?? false,
 			alwaysAllowModeSwitch: alwaysAllowModeSwitch ?? false,
 			alwaysAllowSubtasks: alwaysAllowSubtasks ?? false,
-			alwaysAllowUpdateTodoList: alwaysAllowUpdateTodoList ?? false,
 			isBrowserSessionActive,
 			allowedMaxRequests,
 			allowedMaxCost,
@@ -1994,8 +1990,6 @@ export class ClineProvider
 			fuzzyMatchThreshold: fuzzyMatchThreshold ?? 1.0,
 			mcpEnabled: mcpEnabled ?? true,
 			enableMcpServerCreation: enableMcpServerCreation ?? true,
-			alwaysApproveResubmit: alwaysApproveResubmit ?? false,
-			requestDelaySeconds: requestDelaySeconds ?? 10,
 			currentApiConfigName: currentApiConfigName ?? "default",
 			listApiConfigMeta: listApiConfigMeta ?? [],
 			pinnedApiConfigs: pinnedApiConfigs ?? {},
@@ -2189,7 +2183,6 @@ export class ClineProvider
 			alwaysAllowModeSwitch: stateValues.alwaysAllowModeSwitch ?? false,
 			alwaysAllowSubtasks: stateValues.alwaysAllowSubtasks ?? false,
 			alwaysAllowFollowupQuestions: stateValues.alwaysAllowFollowupQuestions ?? false,
-			alwaysAllowUpdateTodoList: stateValues.alwaysAllowUpdateTodoList ?? false,
 			isBrowserSessionActive,
 			followupAutoApproveTimeoutMs: stateValues.followupAutoApproveTimeoutMs ?? 60000,
 			diagnosticsEnabled: stateValues.diagnosticsEnabled ?? true,
@@ -2232,8 +2225,6 @@ export class ClineProvider
 			mcpEnabled: stateValues.mcpEnabled ?? true,
 			enableMcpServerCreation: stateValues.enableMcpServerCreation ?? true,
 			mcpServers: this.mcpHub?.getAllServers() ?? [],
-			alwaysApproveResubmit: stateValues.alwaysApproveResubmit ?? false,
-			requestDelaySeconds: Math.max(5, stateValues.requestDelaySeconds ?? 10),
 			currentApiConfigName: stateValues.currentApiConfigName ?? "default",
 			listApiConfigMeta: stateValues.listApiConfigMeta ?? [],
 			pinnedApiConfigs: stateValues.pinnedApiConfigs ?? {},

+ 0 - 38
src/core/webview/__tests__/ClineProvider.spec.ts

@@ -558,7 +558,6 @@ describe("ClineProvider", () => {
 			fuzzyMatchThreshold: 1.0,
 			mcpEnabled: true,
 			enableMcpServerCreation: false,
-			requestDelaySeconds: 5,
 			mode: defaultModeSlug,
 			customModes: [],
 			experiments: experimentDefault,
@@ -835,27 +834,6 @@ describe("ClineProvider", () => {
 		expect(mockPostMessage).toHaveBeenCalled()
 	})
 
-	test("requestDelaySeconds defaults to 10 seconds", async () => {
-		// Mock globalState.get to return undefined for requestDelaySeconds
-		;(mockContext.globalState.get as any).mockImplementation((key: string) => {
-			if (key === "requestDelaySeconds") {
-				return undefined
-			}
-			return null
-		})
-
-		const state = await provider.getState()
-		expect(state.requestDelaySeconds).toBe(10)
-	})
-
-	test("alwaysApproveResubmit defaults to false", async () => {
-		// Mock globalState.get to return undefined for alwaysApproveResubmit
-		;(mockContext.globalState.get as any).mockReturnValue(undefined)
-
-		const state = await provider.getState()
-		expect(state.alwaysApproveResubmit).toBe(false)
-	})
-
 	test("autoCondenseContext defaults to true", async () => {
 		// Mock globalState.get to return undefined for autoCondenseContext
 		;(mockContext.globalState.get as any).mockImplementation((key: string) =>
@@ -1026,22 +1004,6 @@ describe("ClineProvider", () => {
 		expect((await provider.getState()).showRooIgnoredFiles).toBe(false)
 	})
 
-	test("handles request delay settings messages", async () => {
-		await provider.resolveWebviewView(mockWebviewView)
-		const messageHandler = (mockWebviewView.webview.onDidReceiveMessage as any).mock.calls[0][0]
-
-		// Test alwaysApproveResubmit
-		await messageHandler({ type: "updateSettings", updatedSettings: { alwaysApproveResubmit: true } })
-		expect(updateGlobalStateSpy).toHaveBeenCalledWith("alwaysApproveResubmit", true)
-		expect(mockContext.globalState.update).toHaveBeenCalledWith("alwaysApproveResubmit", true)
-		expect(mockPostMessage).toHaveBeenCalled()
-
-		// Test requestDelaySeconds
-		await messageHandler({ type: "updateSettings", updatedSettings: { requestDelaySeconds: 10 } })
-		expect(mockContext.globalState.update).toHaveBeenCalledWith("requestDelaySeconds", 10)
-		expect(mockPostMessage).toHaveBeenCalled()
-	})
-
 	test("handles updatePrompt message correctly", async () => {
 		await provider.resolveWebviewView(mockWebviewView)
 		const messageHandler = (mockWebviewView.webview.onDidReceiveMessage as any).mock.calls[0][0]

+ 1 - 3
src/shared/ExtensionMessage.ts

@@ -233,13 +233,11 @@ export type ExtensionState = Pick<
 	| "alwaysAllowWriteOutsideWorkspace"
 	| "alwaysAllowWriteProtected"
 	| "alwaysAllowBrowser"
-	| "alwaysApproveResubmit"
 	| "alwaysAllowMcp"
 	| "alwaysAllowModeSwitch"
 	| "alwaysAllowSubtasks"
 	| "alwaysAllowFollowupQuestions"
 	| "alwaysAllowExecute"
-	| "alwaysAllowUpdateTodoList"
 	| "followupAutoApproveTimeoutMs"
 	| "allowedCommands"
 	| "deniedCommands"
@@ -290,6 +288,7 @@ export type ExtensionState = Pick<
 	| "includeCurrentTime"
 	| "includeCurrentCost"
 	| "maxGitStatusFiles"
+	| "requestDelaySeconds"
 > & {
 	version: string
 	clineMessages: ClineMessage[]
@@ -302,7 +301,6 @@ export type ExtensionState = Pick<
 	taskHistory: HistoryItem[]
 
 	writeDelayMs: number
-	requestDelaySeconds: number
 
 	enableCheckpoints: boolean
 	checkpointTimeout: number // Timeout for checkpoint initialization in seconds (default: 15)

+ 1 - 21
webview-ui/src/components/chat/AutoApproveDropdown.tsx

@@ -31,7 +31,6 @@ export const AutoApproveDropdown = ({ disabled = false, triggerClassName = "" }:
 	const {
 		autoApprovalEnabled,
 		setAutoApprovalEnabled,
-		alwaysApproveResubmit,
 		setAlwaysAllowReadOnly,
 		setAlwaysAllowWrite,
 		setAlwaysAllowExecute,
@@ -39,21 +38,10 @@ export const AutoApproveDropdown = ({ disabled = false, triggerClassName = "" }:
 		setAlwaysAllowMcp,
 		setAlwaysAllowModeSwitch,
 		setAlwaysAllowSubtasks,
-		setAlwaysApproveResubmit,
 		setAlwaysAllowFollowupQuestions,
-		setAlwaysAllowUpdateTodoList,
 	} = useExtensionState()
 
-	const baseToggles = useAutoApprovalToggles()
-
-	// Include alwaysApproveResubmit in addition to the base toggles.
-	const toggles = React.useMemo(
-		() => ({
-			...baseToggles,
-			alwaysApproveResubmit: alwaysApproveResubmit,
-		}),
-		[baseToggles, alwaysApproveResubmit],
-	)
+	const toggles = useAutoApprovalToggles()
 
 	const onAutoApproveToggle = React.useCallback(
 		(key: AutoApproveSetting, value: boolean) => {
@@ -81,15 +69,9 @@ export const AutoApproveDropdown = ({ disabled = false, triggerClassName = "" }:
 				case "alwaysAllowSubtasks":
 					setAlwaysAllowSubtasks(value)
 					break
-				case "alwaysApproveResubmit":
-					setAlwaysApproveResubmit(value)
-					break
 				case "alwaysAllowFollowupQuestions":
 					setAlwaysAllowFollowupQuestions(value)
 					break
-				case "alwaysAllowUpdateTodoList":
-					setAlwaysAllowUpdateTodoList(value)
-					break
 			}
 
 			// If enabling any option, ensure autoApprovalEnabled is true.
@@ -107,9 +89,7 @@ export const AutoApproveDropdown = ({ disabled = false, triggerClassName = "" }:
 			setAlwaysAllowMcp,
 			setAlwaysAllowModeSwitch,
 			setAlwaysAllowSubtasks,
-			setAlwaysApproveResubmit,
 			setAlwaysAllowFollowupQuestions,
-			setAlwaysAllowUpdateTodoList,
 			setAutoApprovalEnabled,
 		],
 	)

+ 0 - 5
webview-ui/src/components/chat/ChatView.tsx

@@ -88,7 +88,6 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
 		mode,
 		setMode,
 		alwaysAllowModeSwitch,
-		alwaysAllowUpdateTodoList,
 		customModes,
 		telemetrySetting,
 		hasSystemPromptOverride,
@@ -1299,9 +1298,6 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
 									tool = { tool: "updateTodoList" }
 								}
 							}
-							if (tool.tool === "updateTodoList" && alwaysAllowUpdateTodoList) {
-								return false
-							}
 							return tool.tool === "updateTodoList" && enableButtons && !!primaryButtonText
 						})()
 					}
@@ -1320,7 +1316,6 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
 			handleBatchFileResponse,
 			currentFollowUpTs,
 			isFollowUpAutoApprovalPaused,
-			alwaysAllowUpdateTodoList,
 			enableButtons,
 			primaryButtonText,
 		],

+ 0 - 36
webview-ui/src/components/settings/AutoApproveSettings.tsx

@@ -24,14 +24,11 @@ type AutoApproveSettingsProps = HTMLAttributes<HTMLDivElement> & {
 	alwaysAllowWriteOutsideWorkspace?: boolean
 	alwaysAllowWriteProtected?: boolean
 	alwaysAllowBrowser?: boolean
-	alwaysApproveResubmit?: boolean
-	requestDelaySeconds: number
 	alwaysAllowMcp?: boolean
 	alwaysAllowModeSwitch?: boolean
 	alwaysAllowSubtasks?: boolean
 	alwaysAllowExecute?: boolean
 	alwaysAllowFollowupQuestions?: boolean
-	alwaysAllowUpdateTodoList?: boolean
 	followupAutoApproveTimeoutMs?: number
 	allowedCommands?: string[]
 	allowedMaxRequests?: number | undefined
@@ -44,8 +41,6 @@ type AutoApproveSettingsProps = HTMLAttributes<HTMLDivElement> & {
 		| "alwaysAllowWriteOutsideWorkspace"
 		| "alwaysAllowWriteProtected"
 		| "alwaysAllowBrowser"
-		| "alwaysApproveResubmit"
-		| "requestDelaySeconds"
 		| "alwaysAllowMcp"
 		| "alwaysAllowModeSwitch"
 		| "alwaysAllowSubtasks"
@@ -56,7 +51,6 @@ type AutoApproveSettingsProps = HTMLAttributes<HTMLDivElement> & {
 		| "allowedMaxRequests"
 		| "allowedMaxCost"
 		| "deniedCommands"
-		| "alwaysAllowUpdateTodoList"
 	>
 }
 
@@ -67,15 +61,12 @@ export const AutoApproveSettings = ({
 	alwaysAllowWriteOutsideWorkspace,
 	alwaysAllowWriteProtected,
 	alwaysAllowBrowser,
-	alwaysApproveResubmit,
-	requestDelaySeconds,
 	alwaysAllowMcp,
 	alwaysAllowModeSwitch,
 	alwaysAllowSubtasks,
 	alwaysAllowExecute,
 	alwaysAllowFollowupQuestions,
 	followupAutoApproveTimeoutMs = 60000,
-	alwaysAllowUpdateTodoList,
 	allowedCommands,
 	allowedMaxRequests,
 	allowedMaxCost,
@@ -164,13 +155,11 @@ export const AutoApproveSettings = ({
 						alwaysAllowReadOnly={alwaysAllowReadOnly}
 						alwaysAllowWrite={alwaysAllowWrite}
 						alwaysAllowBrowser={alwaysAllowBrowser}
-						alwaysApproveResubmit={alwaysApproveResubmit}
 						alwaysAllowMcp={alwaysAllowMcp}
 						alwaysAllowModeSwitch={alwaysAllowModeSwitch}
 						alwaysAllowSubtasks={alwaysAllowSubtasks}
 						alwaysAllowExecute={alwaysAllowExecute}
 						alwaysAllowFollowupQuestions={alwaysAllowFollowupQuestions}
-						alwaysAllowUpdateTodoList={alwaysAllowUpdateTodoList}
 						onToggle={(key, value) => setCachedStateField(key, value)}
 					/>
 
@@ -245,31 +234,6 @@ export const AutoApproveSettings = ({
 					</div>
 				)}
 
-				{alwaysApproveResubmit && (
-					<div className="flex flex-col gap-3 pl-3 border-l-2 border-vscode-button-background">
-						<div className="flex items-center gap-4 font-bold">
-							<span className="codicon codicon-refresh" />
-							<div>{t("settings:autoApprove.retry.label")}</div>
-						</div>
-						<div>
-							<div className="flex items-center gap-2">
-								<Slider
-									min={5}
-									max={100}
-									step={1}
-									value={[requestDelaySeconds]}
-									onValueChange={([value]) => setCachedStateField("requestDelaySeconds", value)}
-									data-testid="request-delay-slider"
-								/>
-								<span className="w-20">{requestDelaySeconds}s</span>
-							</div>
-							<div className="text-vscode-descriptionForeground text-sm mt-1">
-								{t("settings:autoApprove.retry.delayLabel")}
-							</div>
-						</div>
-					</div>
-				)}
-
 				{alwaysAllowFollowupQuestions && (
 					<div className="flex flex-col gap-3 pl-3 border-l-2 border-vscode-button-background">
 						<div className="flex items-center gap-4 font-bold">

+ 0 - 16
webview-ui/src/components/settings/AutoApproveToggle.tsx

@@ -9,13 +9,11 @@ type AutoApproveToggles = Pick<
 	| "alwaysAllowReadOnly"
 	| "alwaysAllowWrite"
 	| "alwaysAllowBrowser"
-	| "alwaysApproveResubmit"
 	| "alwaysAllowMcp"
 	| "alwaysAllowModeSwitch"
 	| "alwaysAllowSubtasks"
 	| "alwaysAllowExecute"
 	| "alwaysAllowFollowupQuestions"
-	| "alwaysAllowUpdateTodoList"
 >
 
 export type AutoApproveSetting = keyof AutoApproveToggles
@@ -50,13 +48,6 @@ export const autoApproveSettingsConfig: Record<AutoApproveSetting, AutoApproveCo
 		icon: "globe",
 		testId: "always-allow-browser-toggle",
 	},
-	alwaysApproveResubmit: {
-		key: "alwaysApproveResubmit",
-		labelKey: "settings:autoApprove.retry.label",
-		descriptionKey: "settings:autoApprove.retry.description",
-		icon: "refresh",
-		testId: "always-approve-resubmit-toggle",
-	},
 	alwaysAllowMcp: {
 		key: "alwaysAllowMcp",
 		labelKey: "settings:autoApprove.mcp.label",
@@ -92,13 +83,6 @@ export const autoApproveSettingsConfig: Record<AutoApproveSetting, AutoApproveCo
 		icon: "question",
 		testId: "always-allow-followup-questions-toggle",
 	},
-	alwaysAllowUpdateTodoList: {
-		key: "alwaysAllowUpdateTodoList",
-		labelKey: "settings:autoApprove.updateTodoList.label",
-		descriptionKey: "settings:autoApprove.updateTodoList.description",
-		icon: "checklist",
-		testId: "always-allow-update-todo-list-toggle",
-	},
 }
 
 type AutoApproveToggleProps = AutoApproveToggles & {

+ 0 - 9
webview-ui/src/components/settings/SettingsView.tsx

@@ -157,7 +157,6 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
 		alwaysAllowWrite,
 		alwaysAllowWriteOutsideWorkspace,
 		alwaysAllowWriteProtected,
-		alwaysApproveResubmit,
 		autoCondenseContext,
 		autoCondenseContextPercent,
 		browserToolEnabled,
@@ -170,7 +169,6 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
 		maxOpenTabsContext,
 		maxWorkspaceFiles,
 		mcpEnabled,
-		requestDelaySeconds,
 		remoteBrowserHost,
 		screenshotQuality,
 		soundEnabled,
@@ -201,7 +199,6 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
 		customSupportPrompts,
 		profileThresholds,
 		alwaysAllowFollowupQuestions,
-		alwaysAllowUpdateTodoList,
 		followupAutoApproveTimeoutMs,
 		includeDiagnosticMessages,
 		maxDiagnosticMessages,
@@ -395,8 +392,6 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
 					terminalZdotdir,
 					terminalCompressProgressBar,
 					mcpEnabled,
-					alwaysApproveResubmit: alwaysApproveResubmit ?? false,
-					requestDelaySeconds: requestDelaySeconds ?? 5,
 					maxOpenTabsContext: Math.min(Math.max(0, maxOpenTabsContext ?? 20), 500),
 					maxWorkspaceFiles: Math.min(Math.max(0, maxWorkspaceFiles ?? 200), 500),
 					showRooIgnoredFiles: showRooIgnoredFiles ?? true,
@@ -408,7 +403,6 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
 						includeDiagnosticMessages !== undefined ? includeDiagnosticMessages : true,
 					maxDiagnosticMessages: maxDiagnosticMessages ?? 50,
 					alwaysAllowSubtasks,
-					alwaysAllowUpdateTodoList,
 					alwaysAllowFollowupQuestions: alwaysAllowFollowupQuestions ?? false,
 					followupAutoApproveTimeoutMs,
 					condensingApiConfigId: condensingApiConfigId || "",
@@ -719,14 +713,11 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
 							alwaysAllowWriteOutsideWorkspace={alwaysAllowWriteOutsideWorkspace}
 							alwaysAllowWriteProtected={alwaysAllowWriteProtected}
 							alwaysAllowBrowser={alwaysAllowBrowser}
-							alwaysApproveResubmit={alwaysApproveResubmit}
-							requestDelaySeconds={requestDelaySeconds}
 							alwaysAllowMcp={alwaysAllowMcp}
 							alwaysAllowModeSwitch={alwaysAllowModeSwitch}
 							alwaysAllowSubtasks={alwaysAllowSubtasks}
 							alwaysAllowExecute={alwaysAllowExecute}
 							alwaysAllowFollowupQuestions={alwaysAllowFollowupQuestions}
-							alwaysAllowUpdateTodoList={alwaysAllowUpdateTodoList}
 							followupAutoApproveTimeoutMs={followupAutoApproveTimeoutMs}
 							allowedCommands={allowedCommands}
 							allowedMaxRequests={allowedMaxRequests ?? undefined}

+ 0 - 2
webview-ui/src/components/settings/__tests__/AutoApproveToggle.spec.tsx

@@ -20,13 +20,11 @@ describe("AutoApproveToggle", () => {
 		alwaysAllowReadOnly: true,
 		alwaysAllowWrite: false,
 		alwaysAllowBrowser: false,
-		alwaysApproveResubmit: true,
 		alwaysAllowMcp: false,
 		alwaysAllowModeSwitch: true,
 		alwaysAllowSubtasks: false,
 		alwaysAllowExecute: true,
 		alwaysAllowFollowupQuestions: false,
-		alwaysAllowUpdateTodoList: true,
 		onToggle: mockOnToggle,
 	}
 

+ 0 - 3
webview-ui/src/components/settings/__tests__/SettingsView.change-detection.spec.tsx

@@ -136,7 +136,6 @@ describe("SettingsView - Change Detection Fix", () => {
 		alwaysAllowWrite: false,
 		alwaysAllowWriteOutsideWorkspace: false,
 		alwaysAllowWriteProtected: false,
-		alwaysApproveResubmit: false,
 		autoCondenseContext: false,
 		autoCondenseContextPercent: 50,
 		browserToolEnabled: false,
@@ -148,7 +147,6 @@ describe("SettingsView - Change Detection Fix", () => {
 		maxOpenTabsContext: 10,
 		maxWorkspaceFiles: 200,
 		mcpEnabled: false,
-		requestDelaySeconds: 0,
 		remoteBrowserHost: "",
 		screenshotQuality: 75,
 		soundEnabled: false,
@@ -179,7 +177,6 @@ describe("SettingsView - Change Detection Fix", () => {
 		customSupportPrompts: {},
 		profileThresholds: {},
 		alwaysAllowFollowupQuestions: false,
-		alwaysAllowUpdateTodoList: false,
 		followupAutoApproveTimeoutMs: undefined,
 		includeDiagnosticMessages: false,
 		maxDiagnosticMessages: 50,

+ 0 - 3
webview-ui/src/components/settings/__tests__/SettingsView.unsaved-changes.spec.tsx

@@ -146,7 +146,6 @@ describe("SettingsView - Unsaved Changes Detection", () => {
 		alwaysAllowWrite: false,
 		alwaysAllowWriteOutsideWorkspace: false,
 		alwaysAllowWriteProtected: false,
-		alwaysApproveResubmit: false,
 		autoCondenseContext: false,
 		autoCondenseContextPercent: 50,
 		browserToolEnabled: false,
@@ -158,7 +157,6 @@ describe("SettingsView - Unsaved Changes Detection", () => {
 		maxOpenTabsContext: 10,
 		maxWorkspaceFiles: 200,
 		mcpEnabled: false,
-		requestDelaySeconds: 0,
 		remoteBrowserHost: "",
 		screenshotQuality: 75,
 		soundEnabled: false,
@@ -189,7 +187,6 @@ describe("SettingsView - Unsaved Changes Detection", () => {
 		customSupportPrompts: {},
 		profileThresholds: {},
 		alwaysAllowFollowupQuestions: false,
-		alwaysAllowUpdateTodoList: false,
 		followupAutoApproveTimeoutMs: undefined,
 		includeDiagnosticMessages: false,
 		maxDiagnosticMessages: 50,

+ 0 - 15
webview-ui/src/context/ExtensionStateContext.tsx

@@ -110,10 +110,6 @@ export interface ExtensionStateContextType extends ExtensionState {
 	setTaskSyncEnabled: (value: boolean) => void
 	featureRoomoteControlEnabled: boolean
 	setFeatureRoomoteControlEnabled: (value: boolean) => void
-	alwaysApproveResubmit?: boolean
-	setAlwaysApproveResubmit: (value: boolean) => void
-	requestDelaySeconds: number
-	setRequestDelaySeconds: (value: number) => void
 	setCurrentApiConfigName: (value: string) => void
 	setListApiConfigMeta: (value: ProviderSettingsEntry[]) => void
 	mode: Mode
@@ -155,8 +151,6 @@ export interface ExtensionStateContextType extends ExtensionState {
 	autoCondenseContextPercent: number
 	setAutoCondenseContextPercent: (value: number) => void
 	routerModels?: RouterModels
-	alwaysAllowUpdateTodoList?: boolean
-	setAlwaysAllowUpdateTodoList: (value: boolean) => void
 	includeDiagnosticMessages?: boolean
 	setIncludeDiagnosticMessages: (value: boolean) => void
 	maxDiagnosticMessages?: number
@@ -221,8 +215,6 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
 		remoteControlEnabled: false,
 		taskSyncEnabled: false,
 		featureRoomoteControlEnabled: false,
-		alwaysApproveResubmit: false,
-		requestDelaySeconds: 5,
 		currentApiConfigName: "default",
 		listApiConfigMeta: [],
 		mode: defaultModeSlug,
@@ -273,7 +265,6 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
 			codebaseIndexSearchMinScore: undefined,
 		},
 		codebaseIndexModels: { ollama: {}, openai: {} },
-		alwaysAllowUpdateTodoList: true,
 		includeDiagnosticMessages: true,
 		maxDiagnosticMessages: 50,
 		openRouterImageApiKey: "",
@@ -531,8 +522,6 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
 		setTaskSyncEnabled: (value) => setState((prevState) => ({ ...prevState, taskSyncEnabled: value }) as any),
 		setFeatureRoomoteControlEnabled: (value) =>
 			setState((prevState) => ({ ...prevState, featureRoomoteControlEnabled: value })),
-		setAlwaysApproveResubmit: (value) => setState((prevState) => ({ ...prevState, alwaysApproveResubmit: value })),
-		setRequestDelaySeconds: (value) => setState((prevState) => ({ ...prevState, requestDelaySeconds: value })),
 		setCurrentApiConfigName: (value) => setState((prevState) => ({ ...prevState, currentApiConfigName: value })),
 		setListApiConfigMeta,
 		setMode: (value: Mode) => setState((prevState) => ({ ...prevState, mode: value })),
@@ -584,10 +573,6 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
 		setCustomCondensingPrompt: (value) =>
 			setState((prevState) => ({ ...prevState, customCondensingPrompt: value })),
 		setProfileThresholds: (value) => setState((prevState) => ({ ...prevState, profileThresholds: value })),
-		alwaysAllowUpdateTodoList: state.alwaysAllowUpdateTodoList,
-		setAlwaysAllowUpdateTodoList: (value) => {
-			setState((prevState) => ({ ...prevState, alwaysAllowUpdateTodoList: value }))
-		},
 		includeDiagnosticMessages: state.includeDiagnosticMessages,
 		setIncludeDiagnosticMessages: (value) => {
 			setState((prevState) => ({ ...prevState, includeDiagnosticMessages: value }))

+ 0 - 1
webview-ui/src/context/__tests__/ExtensionStateContext.spec.tsx

@@ -190,7 +190,6 @@ describe("mergeExtensionState", () => {
 			shouldShowAnnouncement: false,
 			enableCheckpoints: true,
 			writeDelayMs: 1000,
-			requestDelaySeconds: 5,
 			mode: "default",
 			experiments: {} as Record<ExperimentId, boolean>,
 			customModes: [],

+ 0 - 12
webview-ui/src/hooks/__tests__/useAutoApprovalState.spec.ts

@@ -12,9 +12,7 @@ describe("useAutoApprovalState", () => {
 				alwaysAllowMcp: false,
 				alwaysAllowModeSwitch: false,
 				alwaysAllowSubtasks: false,
-				alwaysApproveResubmit: false,
 				alwaysAllowFollowupQuestions: false,
-				alwaysAllowUpdateTodoList: false,
 			}
 
 			const { result } = renderHook(() => useAutoApprovalState(toggles, true))
@@ -31,9 +29,7 @@ describe("useAutoApprovalState", () => {
 				alwaysAllowMcp: undefined,
 				alwaysAllowModeSwitch: undefined,
 				alwaysAllowSubtasks: undefined,
-				alwaysApproveResubmit: undefined,
 				alwaysAllowFollowupQuestions: undefined,
-				alwaysAllowUpdateTodoList: undefined,
 			}
 
 			const { result } = renderHook(() => useAutoApprovalState(toggles, true))
@@ -50,9 +46,7 @@ describe("useAutoApprovalState", () => {
 				alwaysAllowMcp: false,
 				alwaysAllowModeSwitch: false,
 				alwaysAllowSubtasks: false,
-				alwaysApproveResubmit: false,
 				alwaysAllowFollowupQuestions: false,
-				alwaysAllowUpdateTodoList: false,
 			}
 
 			const { result } = renderHook(() => useAutoApprovalState(toggles, true))
@@ -69,9 +63,7 @@ describe("useAutoApprovalState", () => {
 				alwaysAllowMcp: false,
 				alwaysAllowModeSwitch: false,
 				alwaysAllowSubtasks: false,
-				alwaysApproveResubmit: false,
 				alwaysAllowFollowupQuestions: false,
-				alwaysAllowUpdateTodoList: false,
 			}
 
 			const { result } = renderHook(() => useAutoApprovalState(toggles, true))
@@ -88,9 +80,7 @@ describe("useAutoApprovalState", () => {
 				alwaysAllowMcp: true,
 				alwaysAllowModeSwitch: true,
 				alwaysAllowSubtasks: true,
-				alwaysApproveResubmit: true,
 				alwaysAllowFollowupQuestions: true,
-				alwaysAllowUpdateTodoList: true,
 			}
 
 			const { result } = renderHook(() => useAutoApprovalState(toggles, true))
@@ -133,9 +123,7 @@ describe("useAutoApprovalState", () => {
 				alwaysAllowMcp: false,
 				alwaysAllowModeSwitch: false,
 				alwaysAllowSubtasks: false,
-				alwaysApproveResubmit: false,
 				alwaysAllowFollowupQuestions: false,
-				alwaysAllowUpdateTodoList: false,
 			}
 
 			const { result } = renderHook(() => useAutoApprovalState(toggles, true))

+ 0 - 2
webview-ui/src/hooks/useAutoApprovalState.ts

@@ -8,9 +8,7 @@ interface AutoApprovalToggles {
 	alwaysAllowMcp?: boolean
 	alwaysAllowModeSwitch?: boolean
 	alwaysAllowSubtasks?: boolean
-	alwaysApproveResubmit?: boolean
 	alwaysAllowFollowupQuestions?: boolean
-	alwaysAllowUpdateTodoList?: boolean
 }
 
 export function useAutoApprovalState(toggles: AutoApprovalToggles, autoApprovalEnabled?: boolean) {

+ 0 - 6
webview-ui/src/hooks/useAutoApprovalToggles.ts

@@ -14,9 +14,7 @@ export function useAutoApprovalToggles() {
 		alwaysAllowMcp,
 		alwaysAllowModeSwitch,
 		alwaysAllowSubtasks,
-		alwaysApproveResubmit,
 		alwaysAllowFollowupQuestions,
-		alwaysAllowUpdateTodoList,
 	} = useExtensionState()
 
 	const toggles = useMemo(
@@ -28,9 +26,7 @@ export function useAutoApprovalToggles() {
 			alwaysAllowMcp,
 			alwaysAllowModeSwitch,
 			alwaysAllowSubtasks,
-			alwaysApproveResubmit,
 			alwaysAllowFollowupQuestions,
-			alwaysAllowUpdateTodoList,
 		}),
 		[
 			alwaysAllowReadOnly,
@@ -40,9 +36,7 @@ export function useAutoApprovalToggles() {
 			alwaysAllowMcp,
 			alwaysAllowModeSwitch,
 			alwaysAllowSubtasks,
-			alwaysApproveResubmit,
 			alwaysAllowFollowupQuestions,
-			alwaysAllowUpdateTodoList,
 		],
 	)
 

+ 0 - 9
webview-ui/src/i18n/locales/ca/settings.json

@@ -202,11 +202,6 @@
 			"label": "Navegador",
 			"description": "Realitzar accions del navegador automàticament sense requerir aprovació. Nota: Només s'aplica quan el model admet l'ús de l'ordinador"
 		},
-		"retry": {
-			"label": "Reintentar",
-			"description": "Tornar a intentar sol·licituds d'API fallides automàticament quan el servidor retorna una resposta d'error",
-			"delayLabel": "Retard abans de tornar a intentar la sol·licitud"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "Habilitar l'aprovació automàtica d'eines MCP individuals a la vista de Servidors MCP (requereix tant aquesta configuració com la casella \"Permetre sempre\" de l'eina)"
@@ -236,10 +231,6 @@
 			"addButton": "Afegir",
 			"autoDenied": "Les comandes amb el prefix `{{prefix}}` han estat prohibides per l'usuari. No eludeixis aquesta restricció executant una altra comanda."
 		},
-		"updateTodoList": {
-			"label": "Todo",
-			"description": "La llista de tasques es actualitza automàticament sense aprovació"
-		},
 		"apiRequestLimit": {
 			"title": "Màximes Sol·licituds",
 			"description": "Fes aquesta quantitat de sol·licituds API automàticament abans de demanar aprovació per continuar amb la tasca.",

+ 0 - 9
webview-ui/src/i18n/locales/de/settings.json

@@ -202,11 +202,6 @@
 			"label": "Browser",
 			"description": "Browser-Aktionen automatisch ohne Genehmigung durchführen. Hinweis: Gilt nur, wenn das Modell Computer-Nutzung unterstützt"
 		},
-		"retry": {
-			"label": "Wiederholung",
-			"description": "Fehlgeschlagene API-Anfragen automatisch wiederholen, wenn der Server eine Fehlerantwort zurückgibt",
-			"delayLabel": "Verzögerung vor dem Wiederholen der Anfrage"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "Automatische Genehmigung einzelner MCP-Tools in der MCP-Server-Ansicht aktivieren (erfordert sowohl diese Einstellung als auch das 'Immer erlauben'-Kontrollkästchen des Tools)"
@@ -236,10 +231,6 @@
 			"addButton": "Hinzufügen",
 			"autoDenied": "Befehle mit dem Präfix `{{prefix}}` wurden vom Benutzer verboten. Umgehe diese Beschränkung nicht durch das Ausführen eines anderen Befehls."
 		},
-		"updateTodoList": {
-			"label": "Todo",
-			"description": "To-Do-Liste wird automatisch aktualisiert, ohne dass du zustimmen musst"
-		},
 		"apiRequestLimit": {
 			"title": "Maximale Anfragen",
 			"description": "Automatisch so viele API-Anfragen stellen, bevor du um die Erlaubnis gebeten wirst, mit der Aufgabe fortzufahren.",

+ 0 - 9
webview-ui/src/i18n/locales/en/settings.json

@@ -210,11 +210,6 @@
 			"label": "Browser",
 			"description": "Automatically perform browser actions without requiring approval. Note: Only applies when the model supports computer use"
 		},
-		"retry": {
-			"label": "Retry",
-			"description": "Automatically retry failed API requests when server returns an error response",
-			"delayLabel": "Delay before retrying the request"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "Enable auto-approval of individual MCP tools in the MCP Servers view (requires both this setting and the tool's individual \"Always allow\" checkbox)"
@@ -244,10 +239,6 @@
 			"addButton": "Add",
 			"autoDenied": "Commands with the prefix `{{prefix}}` have been forbidden by the user. Do not bypass this restriction by running another command."
 		},
-		"updateTodoList": {
-			"label": "Todo",
-			"description": "Automatically update the to-do list without requiring approval"
-		},
 		"apiRequestLimit": {
 			"title": "Max Count",
 			"unlimited": "Unlimited"

+ 0 - 9
webview-ui/src/i18n/locales/es/settings.json

@@ -202,11 +202,6 @@
 			"label": "Navegador",
 			"description": "Realizar acciones del navegador automáticamente sin requerir aprobación. Nota: Solo se aplica cuando el modelo admite el uso del ordenador"
 		},
-		"retry": {
-			"label": "Reintentar",
-			"description": "Reintentar automáticamente solicitudes de API fallidas cuando el servidor devuelve una respuesta de error",
-			"delayLabel": "Retraso antes de reintentar la solicitud"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "Habilitar la aprobación automática de herramientas MCP individuales en la vista de Servidores MCP (requiere tanto esta configuración como la casilla \"Permitir siempre\" de la herramienta)"
@@ -236,10 +231,6 @@
 			"addButton": "Añadir",
 			"autoDenied": "Los comandos con el prefijo `{{prefix}}` han sido prohibidos por el usuario. No eludes esta restricción ejecutando otro comando."
 		},
-		"updateTodoList": {
-			"label": "Todo",
-			"description": "La lista de tareas se actualiza automáticamente sin aprobación"
-		},
 		"apiRequestLimit": {
 			"title": "Solicitudes máximas",
 			"description": "Realizar automáticamente esta cantidad de solicitudes a la API antes de pedir aprobación para continuar con la tarea.",

+ 0 - 9
webview-ui/src/i18n/locales/fr/settings.json

@@ -203,11 +203,6 @@
 			"label": "Navigateur",
 			"description": "Effectuer automatiquement des actions du navigateur sans nécessiter d'approbation. Remarque : S'applique uniquement lorsque le modèle prend en charge l'utilisation de l'ordinateur"
 		},
-		"retry": {
-			"label": "Réessayer",
-			"description": "Réessayer automatiquement les requêtes API échouées lorsque le serveur renvoie une réponse d'erreur",
-			"delayLabel": "Délai avant de réessayer la requête"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "Activer l'approbation automatique des outils MCP individuels dans la vue des serveurs MCP (nécessite à la fois ce paramètre et la case à cocher \"Toujours autoriser\" de l'outil)"
@@ -237,10 +232,6 @@
 			"addButton": "Ajouter",
 			"autoDenied": "Les commandes avec le préfixe `{{prefix}}` ont été interdites par l'utilisateur. Ne contourne pas cette restriction en exécutant une autre commande."
 		},
-		"updateTodoList": {
-			"label": "Todo",
-			"description": "La liste de tâches est mise à jour automatiquement sans approbation"
-		},
 		"apiRequestLimit": {
 			"title": "Requêtes maximales",
 			"description": "Effectuer automatiquement ce nombre de requêtes API avant de demander l'approbation pour continuer la tâche.",

+ 0 - 9
webview-ui/src/i18n/locales/hi/settings.json

@@ -202,11 +202,6 @@
 			"label": "ब्राउज़र",
 			"description": "अनुमोदन की आवश्यकता के बिना स्वचालित रूप से ब्राउज़र क्रियाएँ करें — नोट: केवल तभी लागू होता है जब मॉडल कंप्यूटर उपयोग का समर्थन करता है"
 		},
-		"retry": {
-			"label": "पुनः प्रयास",
-			"description": "जब सर्वर त्रुटि प्रतिक्रिया देता है तो स्वचालित रूप से विफल API अनुरोधों को पुनः प्रयास करें",
-			"delayLabel": "अनुरोध को पुनः प्रयास करने से पहले विलंब"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "MCP सर्वर व्यू में व्यक्तिगत MCP टूल्स के स्वतः अनुमोदन को सक्षम करें (इस सेटिंग और टूल के \"हमेशा अनुमति दें\" चेकबॉक्स दोनों की आवश्यकता है)"
@@ -236,10 +231,6 @@
 			"addButton": "जोड़ें",
 			"autoDenied": "प्रीफिक्स `{{prefix}}` वाले कमांड उपयोगकर्ता द्वारा प्रतिबंधित किए गए हैं। दूसरा कमांड चलाकर इस प्रतिबंध को दरकिनार न करें।"
 		},
-		"updateTodoList": {
-			"label": "टूडू",
-			"description": "अनुमोदन की आवश्यकता के बिना स्वचालित रूप से टूडू सूची अपडेट करें"
-		},
 		"apiRequestLimit": {
 			"title": "अधिकतम अनुरोध",
 			"description": "कार्य जारी रखने के लिए अनुमति मांगने से पहले स्वचालित रूप से इतने API अनुरोध करें।",

+ 0 - 9
webview-ui/src/i18n/locales/id/settings.json

@@ -202,11 +202,6 @@
 			"label": "Browser",
 			"description": "Secara otomatis melakukan aksi browser tanpa memerlukan persetujuan. Catatan: Hanya berlaku ketika model mendukung computer use"
 		},
-		"retry": {
-			"label": "Coba Lagi",
-			"description": "Secara otomatis mencoba ulang permintaan API yang gagal ketika server mengembalikan respons error",
-			"delayLabel": "Delay sebelum mencoba ulang permintaan"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "Aktifkan auto-approval tool MCP individual di tampilan Server MCP (memerlukan pengaturan ini dan checkbox \"Selalu izinkan\" tool tersebut)"
@@ -240,10 +235,6 @@
 			"label": "Tampilkan menu auto-approve di tampilan chat",
 			"description": "Ketika diaktifkan, menu auto-approve akan ditampilkan di bagian bawah tampilan chat, memungkinkan akses cepat ke pengaturan auto-approve"
 		},
-		"updateTodoList": {
-			"label": "Todo",
-			"description": "Daftar tugas diperbarui secara otomatis tanpa persetujuan"
-		},
 		"apiRequestLimit": {
 			"title": "Permintaan Maks",
 			"description": "Secara otomatis membuat sejumlah permintaan API ini sebelum meminta persetujuan untuk melanjutkan tugas.",

+ 0 - 9
webview-ui/src/i18n/locales/it/settings.json

@@ -202,11 +202,6 @@
 			"label": "Browser",
 			"description": "Esegui automaticamente azioni del browser senza richiedere approvazione. Nota: Si applica solo quando il modello supporta l'uso del computer"
 		},
-		"retry": {
-			"label": "Riprova",
-			"description": "Riprova automaticamente le richieste API fallite quando il server restituisce una risposta di errore",
-			"delayLabel": "Ritardo prima di riprovare la richiesta"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "Abilita l'approvazione automatica dei singoli strumenti MCP nella vista Server MCP (richiede sia questa impostazione che la casella \"Consenti sempre\" dello strumento)"
@@ -236,10 +231,6 @@
 			"addButton": "Aggiungi",
 			"autoDenied": "I comandi con il prefisso `{{prefix}}` sono stati vietati dall'utente. Non aggirare questa restrizione eseguendo un altro comando."
 		},
-		"updateTodoList": {
-			"label": "Todo",
-			"description": "La lista delle cose da fare viene aggiornata automaticamente senza approvazione"
-		},
 		"apiRequestLimit": {
 			"title": "Richieste massime",
 			"description": "Esegui automaticamente questo numero di richieste API prima di chiedere l'approvazione per continuare con l'attività.",

+ 0 - 9
webview-ui/src/i18n/locales/ja/settings.json

@@ -202,11 +202,6 @@
 			"label": "ブラウザ",
 			"description": "承認なしで自動的にブラウザアクションを実行 — 注意:コンピューター使用をサポートするモデルを使用している場合のみ適用されます"
 		},
-		"retry": {
-			"label": "再試行",
-			"description": "サーバーがエラーレスポンスを返した場合、自動的に失敗したAPIリクエストを再試行",
-			"delayLabel": "リクエスト再試行前の遅延"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "MCPサーバービューで個々のMCPツールの自動承認を有効にします(この設定とツールの「常に許可」チェックボックスの両方が必要)"
@@ -236,10 +231,6 @@
 			"addButton": "追加",
 			"autoDenied": "プレフィックス `{{prefix}}` を持つコマンドはユーザーによって禁止されています。別のコマンドを実行してこの制限を回避しないでください。"
 		},
-		"updateTodoList": {
-			"label": "Todo",
-			"description": "承認なしで自動的にToDoリストを更新"
-		},
 		"apiRequestLimit": {
 			"title": "最大リクエスト数",
 			"description": "タスクを続行するための承認を求める前に、自動的にこの数のAPIリクエストを行います。",

+ 0 - 9
webview-ui/src/i18n/locales/ko/settings.json

@@ -202,11 +202,6 @@
 			"label": "브라우저",
 			"description": "승인 없이 자동으로 브라우저 작업 수행 — 참고: 모델이 컴퓨터 사용을 지원할 때만 적용됩니다"
 		},
-		"retry": {
-			"label": "재시도",
-			"description": "서버가 오류 응답을 반환할 때 자동으로 실패한 API 요청 재시도",
-			"delayLabel": "요청 재시도 전 지연"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "MCP 서버 보기에서 개별 MCP 도구의 자동 승인 활성화(이 설정과 도구의 \"항상 허용\" 체크박스 모두 필요)"
@@ -236,10 +231,6 @@
 			"addButton": "추가",
 			"autoDenied": "접두사 `{{prefix}}`를 가진 명령어는 사용자에 의해 금지되었습니다. 다른 명령어를 실행하여 이 제한을 우회하지 마세요."
 		},
-		"updateTodoList": {
-			"label": "Todo",
-			"description": "승인 없이 자동으로 할 일 목록이 업데이트됩니다"
-		},
 		"apiRequestLimit": {
 			"title": "최대 요청 수",
 			"description": "작업을 계속하기 위한 승인을 요청하기 전에 자동으로 이 수의 API 요청을 수행합니다.",

+ 0 - 9
webview-ui/src/i18n/locales/nl/settings.json

@@ -202,11 +202,6 @@
 			"label": "Browser",
 			"description": "Automatisch browseracties uitvoeren zonder goedkeuring. Let op: geldt alleen als het model computergebruik ondersteunt."
 		},
-		"retry": {
-			"label": "Opnieuw proberen",
-			"description": "Automatisch mislukte API-verzoeken opnieuw proberen wanneer de server een foutmelding geeft",
-			"delayLabel": "Vertraging voordat het verzoek opnieuw wordt geprobeerd"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "Automatische goedkeuring van individuele MCP-tools in het MCP-serversoverzicht inschakelen (vereist zowel deze instelling als het selectievakje 'Altijd toestaan' bij de tool)"
@@ -236,10 +231,6 @@
 			"addButton": "Toevoegen",
 			"autoDenied": "Commando's met het prefix `{{prefix}}` zijn verboden door de gebruiker. Omzeil deze beperking niet door een ander commando uit te voeren."
 		},
-		"updateTodoList": {
-			"label": "Todo",
-			"description": "De takenlijst wordt automatisch bijgewerkt zonder goedkeuring"
-		},
 		"apiRequestLimit": {
 			"title": "Maximale verzoeken",
 			"description": "Voer automatisch dit aantal API-verzoeken uit voordat om goedkeuring wordt gevraagd om door te gaan met de taak.",

+ 0 - 9
webview-ui/src/i18n/locales/pl/settings.json

@@ -202,11 +202,6 @@
 			"label": "Przeglądarka",
 			"description": "Automatycznie wykonuj akcje przeglądarki bez konieczności zatwierdzania. Uwaga: Dotyczy tylko gdy model obsługuje używanie komputera"
 		},
-		"retry": {
-			"label": "Ponów",
-			"description": "Automatycznie ponawiaj nieudane żądania API, gdy serwer zwraca odpowiedź z błędem",
-			"delayLabel": "Opóźnienie przed ponowieniem żądania"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "Włącz automatyczne zatwierdzanie poszczególnych narzędzi MCP w widoku Serwerów MCP (wymaga zarówno tego ustawienia, jak i pola wyboru \"Zawsze zezwalaj\" narzędzia)"
@@ -236,10 +231,6 @@
 			"addButton": "Dodaj",
 			"autoDenied": "Polecenia z prefiksem `{{prefix}}` zostały zabronione przez użytkownika. Nie obchodź tego ograniczenia uruchamiając inne polecenie."
 		},
-		"updateTodoList": {
-			"label": "Todo",
-			"description": "Lista zadań jest automatycznie aktualizowana bez zatwierdzenia"
-		},
 		"apiRequestLimit": {
 			"title": "Maksymalna liczba żądań",
 			"description": "Automatycznie wykonaj tyle żądań API przed poproszeniem o zgodę na kontynuowanie zadania.",

+ 0 - 9
webview-ui/src/i18n/locales/pt-BR/settings.json

@@ -202,11 +202,6 @@
 			"label": "Navegador",
 			"description": "Realizar ações do navegador automaticamente sem exigir aprovação. Nota: Aplica-se apenas quando o modelo suporta uso do computador"
 		},
-		"retry": {
-			"label": "Tentar novamente",
-			"description": "Tentar novamente automaticamente requisições de API com falha quando o servidor retorna uma resposta de erro",
-			"delayLabel": "Atraso antes de tentar novamente a requisição"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "Ativar aprovação automática de ferramentas MCP individuais na visualização de Servidores MCP (requer tanto esta configuração quanto a caixa de seleção \"Permitir sempre\" da ferramenta)"
@@ -236,10 +231,6 @@
 			"addButton": "Adicionar",
 			"autoDenied": "Comandos com o prefixo `{{prefix}}` foram proibidos pelo usuário. Não contorne esta restrição executando outro comando."
 		},
-		"updateTodoList": {
-			"label": "Todo",
-			"description": "A lista de tarefas é atualizada automaticamente sem aprovação"
-		},
 		"apiRequestLimit": {
 			"title": "Máximo de Solicitações",
 			"description": "Fazer automaticamente este número de requisições à API antes de pedir aprovação para continuar com a tarefa.",

+ 0 - 9
webview-ui/src/i18n/locales/ru/settings.json

@@ -202,11 +202,6 @@
 			"label": "Браузер",
 			"description": "Автоматически выполнять действия в браузере без необходимости одобрения. Применяется только, если модель поддерживает использование компьютера"
 		},
-		"retry": {
-			"label": "Повтор",
-			"description": "Автоматически повторять неудачные запросы к API при ошибке сервера",
-			"delayLabel": "Задержка перед повтором запроса"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "Включить автоодобрение отдельных инструментов MCP в представлении MCP Servers (требуется включить как этот параметр, так и индивидуальный чекбокс инструмента \"Всегда разрешать\")"
@@ -236,10 +231,6 @@
 			"addButton": "Добавить",
 			"autoDenied": "Команды с префиксом `{{prefix}}` были запрещены пользователем. Не обходи это ограничение, выполняя другую команду."
 		},
-		"updateTodoList": {
-			"label": "Todo",
-			"description": "Список дел обновляется автоматически без подтверждения"
-		},
 		"apiRequestLimit": {
 			"title": "Максимум запросов",
 			"description": "Автоматически выполнять это количество API-запросов перед запросом разрешения на продолжение задачи.",

+ 0 - 9
webview-ui/src/i18n/locales/tr/settings.json

@@ -202,11 +202,6 @@
 			"label": "Tarayıcı",
 			"description": "Onay gerektirmeden otomatik olarak tarayıcı eylemleri gerçekleştir. Not: Yalnızca model bilgisayar kullanımını desteklediğinde geçerlidir"
 		},
-		"retry": {
-			"label": "Yeniden Dene",
-			"description": "Sunucu bir hata yanıtı döndürdüğünde başarısız API isteklerini otomatik olarak yeniden dene",
-			"delayLabel": "İsteği yeniden denemeden önce gecikme"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "MCP Sunucuları görünümünde bireysel MCP araçlarının otomatik onayını etkinleştir (hem bu ayar hem de aracın \"Her zaman izin ver\" onay kutusu gerekir)"
@@ -236,10 +231,6 @@
 			"addButton": "Ekle",
 			"autoDenied": "`{{prefix}}` önekli komutlar kullanıcı tarafından yasaklandı. Başka bir komut çalıştırarak bu kısıtlamayı aşma."
 		},
-		"updateTodoList": {
-			"label": "Todo",
-			"description": "Yapılacaklar listesi onay gerektirmeden otomatik olarak güncellenir"
-		},
 		"apiRequestLimit": {
 			"title": "Maksimum İstek",
 			"description": "Göreve devam etmek için onay istemeden önce bu sayıda API isteği otomatik olarak yap.",

+ 0 - 9
webview-ui/src/i18n/locales/vi/settings.json

@@ -202,11 +202,6 @@
 			"label": "Trình duyệt",
 			"description": "Tự động thực hiện các hành động trình duyệt mà không cần phê duyệt. Lưu ý: Chỉ áp dụng khi mô hình hỗ trợ sử dụng máy tính"
 		},
-		"retry": {
-			"label": "Thử lại",
-			"description": "Tự động thử lại các yêu cầu API thất bại khi máy chủ trả về phản hồi lỗi",
-			"delayLabel": "Trì hoãn trước khi thử lại yêu cầu"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "Bật tự động phê duyệt các công cụ MCP riêng lẻ trong chế độ xem Máy chủ MCP (yêu cầu cả cài đặt này và hộp kiểm \"Luôn cho phép\" của công cụ)"
@@ -236,10 +231,6 @@
 			"addButton": "Thêm",
 			"autoDenied": "Các lệnh có tiền tố `{{prefix}}` đã bị người dùng cấm. Đừng vượt qua hạn chế này bằng cách chạy lệnh khác."
 		},
-		"updateTodoList": {
-			"label": "Todo",
-			"description": "Danh sách việc cần làm được cập nhật tự động mà không cần phê duyệt"
-		},
 		"apiRequestLimit": {
 			"title": "Số lượng yêu cầu tối đa",
 			"description": "Tự động thực hiện số lượng API request này trước khi yêu cầu phê duyệt để tiếp tục với nhiệm vụ.",

+ 0 - 9
webview-ui/src/i18n/locales/zh-CN/settings.json

@@ -202,11 +202,6 @@
 			"label": "浏览器",
 			"description": "自动执行浏览器操作而无需批准 — 注意:仅当模型支持计算机功能调用时适用"
 		},
-		"retry": {
-			"label": "重试",
-			"description": "当服务器返回错误响应时自动重试失败的 API 请求",
-			"delayLabel": "重试请求前的延迟"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "允许自动调用MCP服务而无需批准"
@@ -236,10 +231,6 @@
 			"addButton": "添加",
 			"autoDenied": "前缀为 `{{prefix}}` 的命令已被用户禁止。不要通过运行其他命令来绕过此限制。"
 		},
-		"updateTodoList": {
-			"label": "待办",
-			"description": "无需批准即可自动更新待办清单"
-		},
 		"apiRequestLimit": {
 			"title": "最大请求数",
 			"description": "在请求批准以继续执行任务之前,自动发出此数量的 API 请求。",

+ 0 - 9
webview-ui/src/i18n/locales/zh-TW/settings.json

@@ -202,11 +202,6 @@
 			"label": "瀏覽器",
 			"description": "自動執行瀏覽器操作而無需核准 — 注意:僅適用於模型支援電腦使用時"
 		},
-		"retry": {
-			"label": "重試",
-			"description": "當伺服器回傳錯誤回應時自動重試失敗的 API 請求",
-			"delayLabel": "重試請求前的延遲"
-		},
 		"mcp": {
 			"label": "MCP",
 			"description": "在 MCP 伺服器檢視中啟用個別 MCP 工具的自動核准(需要此設定和工具的「始終允許」核取方塊)"
@@ -236,10 +231,6 @@
 			"addButton": "新增",
 			"autoDenied": "前綴為 `{{prefix}}` 的命令已被使用者禁止。不要透過執行其他命令來繞過此限制。"
 		},
-		"updateTodoList": {
-			"label": "待辦",
-			"description": "自動更新待辦清單無需核准"
-		},
 		"apiRequestLimit": {
 			"title": "最大請求數",
 			"description": "在請求核准以繼續執行工作之前,自動發出此數量的 API 請求。",