فهرست منبع

✨ feat(settings): Add allowedMaxRequests feature inspired by Cline (#3631)

* feat(settings): Introduce the "auto-approve request count" feature from Cline

This is the first minor UI feature I've added, so please let me know if I'm missing anything! (translations, organization, etc!)

Please see commits for details

introduce allowedMaxRequests to globalSettingsSchema
update ExtensionState and its context with allowedMaxRequests
implement UI for setting max requests in AutoApproveMenu component
prompt user when auto-approval limit is reached with i18n support
increment consecutiveAutoApprovedRequestsCount and reset upon user approval
add translations for auto-approved request limit reached prompt in multiple languages
add new UI for "auto_approval_max_req_reached" in ChatRowContent
display prompt with title, description, and button for user action

🔧 chore(gitignore): add .idea to .gitignore to exclude IDE-specific files
- remove .idea/workspace.xml to clean up repository

* 🔧 chore(gitignore): add IDE configuration files to ignore list

- add .idea directory to ignore JetBrains IDE configurations

* 🌐 i18n(chat): add translation keys for api request limit

- introduce translation keys for "title" and "unlimited" in multiple languages
- update description for api request limit in various languages

* 🌐 i18n(chat): migrate auto-approved request limit translations

- move translations from common.json to chat.json across locales
- update component to use Trans for dynamic text rendering

* Update the UI for setting max requests

* Hide the auto-approve limit warning once clicked

---------

Co-authored-by: Matt Rubens <[email protected]>
Chris Hasson 9 ماه پیش
والد
کامیت
25cd57e157
50فایلهای تغییر یافته به همراه357 افزوده شده و 2 حذف شده
  1. 5 0
      .changeset/fruity-spoons-smash.md
  2. 3 0
      .gitignore
  3. 1 0
      evals/packages/types/src/roo-code.ts
  4. 16 0
      src/core/task/Task.ts
  5. 3 1
      src/core/webview/ClineProvider.ts
  6. 4 0
      src/core/webview/webviewMessageHandler.ts
  7. 7 0
      src/exports/roo-code.d.ts
  8. 7 0
      src/exports/types.ts
  9. 3 0
      src/schemas/index.ts
  10. 1 0
      src/shared/ExtensionMessage.ts
  11. 1 0
      src/shared/WebviewMessage.ts
  12. 41 1
      webview-ui/src/components/chat/AutoApproveMenu.tsx
  13. 52 0
      webview-ui/src/components/chat/AutoApprovedRequestLimitWarning.tsx
  14. 4 0
      webview-ui/src/components/chat/ChatRow.tsx
  15. 2 0
      webview-ui/src/components/settings/SettingsView.tsx
  16. 3 0
      webview-ui/src/context/ExtensionStateContext.tsx
  17. 7 0
      webview-ui/src/i18n/locales/ca/chat.json
  18. 5 0
      webview-ui/src/i18n/locales/ca/settings.json
  19. 7 0
      webview-ui/src/i18n/locales/de/chat.json
  20. 5 0
      webview-ui/src/i18n/locales/de/settings.json
  21. 7 0
      webview-ui/src/i18n/locales/en/chat.json
  22. 5 0
      webview-ui/src/i18n/locales/en/settings.json
  23. 7 0
      webview-ui/src/i18n/locales/es/chat.json
  24. 5 0
      webview-ui/src/i18n/locales/es/settings.json
  25. 7 0
      webview-ui/src/i18n/locales/fr/chat.json
  26. 5 0
      webview-ui/src/i18n/locales/fr/settings.json
  27. 7 0
      webview-ui/src/i18n/locales/hi/chat.json
  28. 5 0
      webview-ui/src/i18n/locales/hi/settings.json
  29. 7 0
      webview-ui/src/i18n/locales/it/chat.json
  30. 5 0
      webview-ui/src/i18n/locales/it/settings.json
  31. 7 0
      webview-ui/src/i18n/locales/ja/chat.json
  32. 5 0
      webview-ui/src/i18n/locales/ja/settings.json
  33. 7 0
      webview-ui/src/i18n/locales/ko/chat.json
  34. 5 0
      webview-ui/src/i18n/locales/ko/settings.json
  35. 7 0
      webview-ui/src/i18n/locales/nl/chat.json
  36. 5 0
      webview-ui/src/i18n/locales/nl/settings.json
  37. 7 0
      webview-ui/src/i18n/locales/pl/chat.json
  38. 5 0
      webview-ui/src/i18n/locales/pl/settings.json
  39. 7 0
      webview-ui/src/i18n/locales/pt-BR/chat.json
  40. 5 0
      webview-ui/src/i18n/locales/pt-BR/settings.json
  41. 7 0
      webview-ui/src/i18n/locales/ru/chat.json
  42. 5 0
      webview-ui/src/i18n/locales/ru/settings.json
  43. 7 0
      webview-ui/src/i18n/locales/tr/chat.json
  44. 5 0
      webview-ui/src/i18n/locales/tr/settings.json
  45. 7 0
      webview-ui/src/i18n/locales/vi/chat.json
  46. 5 0
      webview-ui/src/i18n/locales/vi/settings.json
  47. 7 0
      webview-ui/src/i18n/locales/zh-CN/chat.json
  48. 5 0
      webview-ui/src/i18n/locales/zh-CN/settings.json
  49. 7 0
      webview-ui/src/i18n/locales/zh-TW/chat.json
  50. 5 0
      webview-ui/src/i18n/locales/zh-TW/settings.json

+ 5 - 0
.changeset/fruity-spoons-smash.md

@@ -0,0 +1,5 @@
+---
+"roo-cline": minor
+---
+
+Added an auto-approve API request limit setting similar to Cline

+ 3 - 0
.gitignore

@@ -8,6 +8,9 @@ mock/
 
 .DS_Store
 
+# IDEs
+.idea
+
 # Builds
 bin/
 roo-cline-*.vsix

+ 1 - 0
evals/packages/types/src/roo-code.ts

@@ -961,6 +961,7 @@ export const clineAsks = [
 	"resume_task",
 	"resume_completed_task",
 	"mistake_limit_reached",
+	"auto_approval_max_req_reached",
 	"browser_action_launch",
 	"use_mcp_server",
 ] as const

+ 16 - 0
src/core/task/Task.ts

@@ -134,6 +134,7 @@ export class Task extends EventEmitter<ClineEvents> {
 	readonly apiConfiguration: ProviderSettings
 	api: ApiHandler
 	private lastApiRequestTime?: number
+	private consecutiveAutoApprovedRequestsCount: number = 0
 
 	toolRepetitionDetector: ToolRepetitionDetector
 	rooIgnoreController?: RooIgnoreController
@@ -1505,6 +1506,21 @@ export class Task extends EventEmitter<ClineEvents> {
 			({ role, content }) => ({ role, content }),
 		)
 
+		// Check if we've reached the maximum number of auto-approved requests
+		const { allowedMaxRequests } = (await this.providerRef.deref()?.getState()) ?? {}
+		const maxRequests = allowedMaxRequests || Infinity
+
+		// Increment the counter for each new API request
+		this.consecutiveAutoApprovedRequestsCount++
+
+		if (this.consecutiveAutoApprovedRequestsCount > maxRequests) {
+			const { response } = await this.ask("auto_approval_max_req_reached", JSON.stringify({ count: maxRequests }))
+			// If we get past the promise, it means the user approved and did not start a new task
+			if (response === "yesButtonClicked") {
+				this.consecutiveAutoApprovedRequestsCount = 0
+			}
+		}
+
 		const stream = this.api.createMessage(systemPrompt, cleanConversationHistory)
 		const iterator = stream[Symbol.asyncIterator]()
 

+ 3 - 1
src/core/webview/ClineProvider.ts

@@ -1193,6 +1193,7 @@ export class ClineProvider extends EventEmitter<ClineProviderEvents> implements
 			alwaysAllowMcp,
 			alwaysAllowModeSwitch,
 			alwaysAllowSubtasks,
+			allowedMaxRequests,
 			soundEnabled,
 			ttsEnabled,
 			ttsSpeed,
@@ -1263,6 +1264,7 @@ export class ClineProvider extends EventEmitter<ClineProviderEvents> implements
 			alwaysAllowMcp: alwaysAllowMcp ?? false,
 			alwaysAllowModeSwitch: alwaysAllowModeSwitch ?? false,
 			alwaysAllowSubtasks: alwaysAllowSubtasks ?? false,
+			allowedMaxRequests: allowedMaxRequests ?? Infinity,
 			uriScheme: vscode.env.uriScheme,
 			currentTaskItem: this.getCurrentCline()?.taskId
 				? (taskHistory || []).find((item: HistoryItem) => item.id === this.getCurrentCline()?.taskId)
@@ -1337,7 +1339,6 @@ export class ClineProvider extends EventEmitter<ClineProviderEvents> implements
 
 	async getState() {
 		const stateValues = this.contextProxy.getValues()
-
 		const customModes = await this.customModesManager.getCustomModes()
 
 		// Determine apiProvider with the same logic as before.
@@ -1366,6 +1367,7 @@ export class ClineProvider extends EventEmitter<ClineProviderEvents> implements
 			alwaysAllowMcp: stateValues.alwaysAllowMcp ?? false,
 			alwaysAllowModeSwitch: stateValues.alwaysAllowModeSwitch ?? false,
 			alwaysAllowSubtasks: stateValues.alwaysAllowSubtasks ?? false,
+			allowedMaxRequests: stateValues.allowedMaxRequests ?? Infinity,
 			taskHistory: stateValues.taskHistory,
 			allowedCommands: stateValues.allowedCommands,
 			soundEnabled: stateValues.soundEnabled ?? false,

+ 4 - 0
src/core/webview/webviewMessageHandler.ts

@@ -159,6 +159,10 @@ export const webviewMessageHandler = async (provider: ClineProvider, message: We
 			await updateGlobalState("alwaysAllowModeSwitch", message.bool)
 			await provider.postStateToWebview()
 			break
+		case "allowedMaxRequests":
+			await updateGlobalState("allowedMaxRequests", message.value)
+			await provider.postStateToWebview()
+			break
 		case "alwaysAllowSubtasks":
 			await updateGlobalState("alwaysAllowSubtasks", message.bool)
 			await provider.postStateToWebview()

+ 7 - 0
src/exports/roo-code.d.ts

@@ -70,6 +70,7 @@ type GlobalSettings = {
 	alwaysAllowSubtasks?: boolean | undefined
 	alwaysAllowExecute?: boolean | undefined
 	allowedCommands?: string[] | undefined
+	allowedMaxRequests?: number | undefined
 	browserToolEnabled?: boolean | undefined
 	browserViewportSize?: string | undefined
 	screenshotQuality?: number | undefined
@@ -380,6 +381,7 @@ type ClineMessage = {
 				| "mistake_limit_reached"
 				| "browser_action_launch"
 				| "use_mcp_server"
+				| "auto_approval_max_req_reached"
 		  )
 		| undefined
 	say?:
@@ -464,6 +466,7 @@ type RooCodeEvents = {
 							| "mistake_limit_reached"
 							| "browser_action_launch"
 							| "use_mcp_server"
+							| "auto_approval_max_req_reached"
 					  )
 					| undefined
 				say?:
@@ -801,6 +804,7 @@ type IpcMessage =
 								alwaysAllowSubtasks?: boolean | undefined
 								alwaysAllowExecute?: boolean | undefined
 								allowedCommands?: string[] | undefined
+								allowedMaxRequests?: number | undefined
 								browserToolEnabled?: boolean | undefined
 								browserViewportSize?: string | undefined
 								screenshotQuality?: number | undefined
@@ -942,6 +946,7 @@ type IpcMessage =
 												| "mistake_limit_reached"
 												| "browser_action_launch"
 												| "use_mcp_server"
+												| "auto_approval_max_req_reached"
 										  )
 										| undefined
 									say?:
@@ -1273,6 +1278,7 @@ type TaskCommand =
 					alwaysAllowSubtasks?: boolean | undefined
 					alwaysAllowExecute?: boolean | undefined
 					allowedCommands?: string[] | undefined
+					allowedMaxRequests?: number | undefined
 					browserToolEnabled?: boolean | undefined
 					browserViewportSize?: string | undefined
 					screenshotQuality?: number | undefined
@@ -1410,6 +1416,7 @@ type TaskEvent =
 									| "mistake_limit_reached"
 									| "browser_action_launch"
 									| "use_mcp_server"
+									| "auto_approval_max_req_reached"
 							  )
 							| undefined
 						say?:

+ 7 - 0
src/exports/types.ts

@@ -70,6 +70,7 @@ type GlobalSettings = {
 	alwaysAllowSubtasks?: boolean | undefined
 	alwaysAllowExecute?: boolean | undefined
 	allowedCommands?: string[] | undefined
+	allowedMaxRequests?: number | undefined
 	browserToolEnabled?: boolean | undefined
 	browserViewportSize?: string | undefined
 	screenshotQuality?: number | undefined
@@ -388,6 +389,7 @@ type ClineMessage = {
 				| "mistake_limit_reached"
 				| "browser_action_launch"
 				| "use_mcp_server"
+				| "auto_approval_max_req_reached"
 		  )
 		| undefined
 	say?:
@@ -476,6 +478,7 @@ type RooCodeEvents = {
 							| "mistake_limit_reached"
 							| "browser_action_launch"
 							| "use_mcp_server"
+							| "auto_approval_max_req_reached"
 					  )
 					| undefined
 				say?:
@@ -815,6 +818,7 @@ type IpcMessage =
 								alwaysAllowSubtasks?: boolean | undefined
 								alwaysAllowExecute?: boolean | undefined
 								allowedCommands?: string[] | undefined
+								allowedMaxRequests?: number | undefined
 								browserToolEnabled?: boolean | undefined
 								browserViewportSize?: string | undefined
 								screenshotQuality?: number | undefined
@@ -956,6 +960,7 @@ type IpcMessage =
 												| "mistake_limit_reached"
 												| "browser_action_launch"
 												| "use_mcp_server"
+												| "auto_approval_max_req_reached"
 										  )
 										| undefined
 									say?:
@@ -1289,6 +1294,7 @@ type TaskCommand =
 					alwaysAllowSubtasks?: boolean | undefined
 					alwaysAllowExecute?: boolean | undefined
 					allowedCommands?: string[] | undefined
+					allowedMaxRequests?: number | undefined
 					browserToolEnabled?: boolean | undefined
 					browserViewportSize?: string | undefined
 					screenshotQuality?: number | undefined
@@ -1428,6 +1434,7 @@ type TaskEvent =
 									| "mistake_limit_reached"
 									| "browser_action_launch"
 									| "use_mcp_server"
+									| "auto_approval_max_req_reached"
 							  )
 							| undefined
 						say?:

+ 3 - 0
src/schemas/index.ts

@@ -677,6 +677,7 @@ export const globalSettingsSchema = z.object({
 	alwaysAllowSubtasks: z.boolean().optional(),
 	alwaysAllowExecute: z.boolean().optional(),
 	allowedCommands: z.array(z.string()).optional(),
+	allowedMaxRequests: z.number().optional(),
 
 	browserToolEnabled: z.boolean().optional(),
 	browserViewportSize: z.string().optional(),
@@ -756,6 +757,7 @@ const globalSettingsRecord: GlobalSettingsRecord = {
 	alwaysAllowSubtasks: undefined,
 	alwaysAllowExecute: undefined,
 	allowedCommands: undefined,
+	allowedMaxRequests: undefined,
 
 	browserToolEnabled: undefined,
 	browserViewportSize: undefined,
@@ -899,6 +901,7 @@ export const clineAsks = [
 	"mistake_limit_reached",
 	"browser_action_launch",
 	"use_mcp_server",
+	"auto_approval_max_req_reached",
 ] as const
 
 export const clineAskSchema = z.enum(clineAsks)

+ 1 - 0
src/shared/ExtensionMessage.ts

@@ -131,6 +131,7 @@ export type ExtensionState = Pick<
 	| "alwaysAllowSubtasks"
 	| "alwaysAllowExecute"
 	| "allowedCommands"
+	| "allowedMaxRequests"
 	| "browserToolEnabled"
 	| "browserViewportSize"
 	| "screenshotQuality"

+ 1 - 0
src/shared/WebviewMessage.ts

@@ -57,6 +57,7 @@ export interface WebviewMessage {
 		| "alwaysAllowBrowser"
 		| "alwaysAllowMcp"
 		| "alwaysAllowModeSwitch"
+		| "allowedMaxRequests"
 		| "alwaysAllowSubtasks"
 		| "playSound"
 		| "playTts"

+ 41 - 1
webview-ui/src/components/chat/AutoApproveMenu.tsx

@@ -1,6 +1,6 @@
 import { useCallback, useMemo, useState } from "react"
 import { Trans } from "react-i18next"
-import { VSCodeCheckbox, VSCodeLink } from "@vscode/webview-ui-toolkit/react"
+import { VSCodeCheckbox, VSCodeLink, VSCodeTextField } from "@vscode/webview-ui-toolkit/react"
 
 import { vscode } from "@src/utils/vscode"
 import { useExtensionState } from "@src/context/ExtensionStateContext"
@@ -25,6 +25,7 @@ const AutoApproveMenu = ({ style }: AutoApproveMenuProps) => {
 		alwaysAllowModeSwitch,
 		alwaysAllowSubtasks,
 		alwaysApproveResubmit,
+		allowedMaxRequests,
 		setAlwaysAllowReadOnly,
 		setAlwaysAllowWrite,
 		setAlwaysAllowExecute,
@@ -33,6 +34,7 @@ const AutoApproveMenu = ({ style }: AutoApproveMenuProps) => {
 		setAlwaysAllowModeSwitch,
 		setAlwaysAllowSubtasks,
 		setAlwaysApproveResubmit,
+		setAllowedMaxRequests,
 	} = useExtensionState()
 
 	const { t } = useAppTranslation()
@@ -196,7 +198,45 @@ const AutoApproveMenu = ({ style }: AutoApproveMenuProps) => {
 							}}
 						/>
 					</div>
+
 					<AutoApproveToggle {...toggles} onToggle={onAutoApproveToggle} />
+
+					{/* Auto-approve API request count limit input row inspired by Cline */}
+					<div
+						style={{
+							display: "flex",
+							alignItems: "center",
+							gap: "8px",
+							marginTop: "10px",
+							marginBottom: "8px",
+							color: "var(--vscode-descriptionForeground)",
+						}}>
+						<span style={{ flexShrink: 1, minWidth: 0 }}>
+							<Trans i18nKey="settings:autoApprove.apiRequestLimit.title" />:
+						</span>
+						<VSCodeTextField
+							placeholder={t("settings:autoApprove.apiRequestLimit.unlimited")}
+							value={(allowedMaxRequests ?? Infinity) === Infinity ? "" : allowedMaxRequests?.toString()}
+							onInput={(e) => {
+								const input = e.target as HTMLInputElement
+								// Remove any non-numeric characters
+								input.value = input.value.replace(/[^0-9]/g, "")
+								const value = parseInt(input.value)
+								const parsedValue = !isNaN(value) && value > 0 ? value : undefined
+								setAllowedMaxRequests(parsedValue)
+								vscode.postMessage({ type: "allowedMaxRequests", value: parsedValue })
+							}}
+							style={{ flex: 1 }}
+						/>
+					</div>
+					<div
+						style={{
+							color: "var(--vscode-descriptionForeground)",
+							fontSize: "12px",
+							marginBottom: "10px",
+						}}>
+						<Trans i18nKey="settings:autoApprove.apiRequestLimit.description" />
+					</div>
 				</div>
 			)}
 		</div>

+ 52 - 0
webview-ui/src/components/chat/AutoApprovedRequestLimitWarning.tsx

@@ -0,0 +1,52 @@
+import React, { memo, useState } from "react"
+import { VSCodeButton } from "@vscode/webview-ui-toolkit/react"
+import { ClineMessage } from "@roo/shared/ExtensionMessage"
+import { vscode } from "@src/utils/vscode"
+import { Trans } from "react-i18next"
+
+type AutoApprovedRequestLimitWarningProps = {
+	message: ClineMessage
+}
+
+export const AutoApprovedRequestLimitWarning = memo(({ message }: AutoApprovedRequestLimitWarningProps) => {
+	const [buttonClicked, setButtonClicked] = useState(false)
+	const { count } = JSON.parse(message.text ?? "{}")
+
+	if (buttonClicked) {
+		return null
+	}
+
+	return (
+		<>
+			<div style={{ display: "flex", alignItems: "center", gap: "8px", color: "var(--vscode-foreground)" }}>
+				<span className="codicon codicon-warning" />
+				<span style={{ fontWeight: "bold" }}>
+					<Trans i18nKey="ask.autoApprovedRequestLimitReached.title" ns="chat" />
+				</span>
+			</div>
+
+			<div
+				className="bg-vscode-panel-border flex flex-col gap-3"
+				style={{
+					borderRadius: "4px",
+					display: "flex",
+					marginTop: "15px",
+					padding: "14px 16px 22px",
+					justifyContent: "center",
+				}}>
+				<div className="flex justify-between items-center">
+					<Trans i18nKey="ask.autoApprovedRequestLimitReached.description" ns="chat" values={{ count }} />
+				</div>
+				<VSCodeButton
+					style={{ width: "100%", padding: "6px", borderRadius: "4px" }}
+					onClick={(e) => {
+						e.preventDefault()
+						setButtonClicked(true)
+						vscode.postMessage({ type: "askResponse", askResponse: "yesButtonClicked" })
+					}}>
+					<Trans i18nKey="ask.autoApprovedRequestLimitReached.button" ns="chat" />
+				</VSCodeButton>
+			</div>
+		</>
+	)
+})

+ 4 - 0
webview-ui/src/components/chat/ChatRow.tsx

@@ -31,6 +31,7 @@ import { ProgressIndicator } from "./ProgressIndicator"
 import { Markdown } from "./Markdown"
 import { CommandExecution } from "./CommandExecution"
 import { CommandExecutionError } from "./CommandExecutionError"
+import { AutoApprovedRequestLimitWarning } from "./AutoApprovedRequestLimitWarning"
 import { ContextCondenseRow } from "./ContextCondenseRow"
 
 interface ChatRowProps {
@@ -1086,6 +1087,9 @@ export const ChatRowContent = ({
 							/>
 						</>
 					)
+				case "auto_approval_max_req_reached": {
+					return <AutoApprovedRequestLimitWarning message={message} />
+				}
 				default:
 					return null
 			}

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

@@ -119,6 +119,7 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
 		alwaysAllowReadOnly,
 		alwaysAllowReadOnlyOutsideWorkspace,
 		allowedCommands,
+		allowedMaxRequests,
 		language,
 		alwaysAllowBrowser,
 		alwaysAllowExecute,
@@ -246,6 +247,7 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
 			vscode.postMessage({ type: "alwaysAllowBrowser", bool: alwaysAllowBrowser })
 			vscode.postMessage({ type: "alwaysAllowMcp", bool: alwaysAllowMcp })
 			vscode.postMessage({ type: "allowedCommands", commands: allowedCommands ?? [] })
+			vscode.postMessage({ type: "allowedMaxRequests", value: allowedMaxRequests })
 			vscode.postMessage({ type: "browserToolEnabled", bool: browserToolEnabled })
 			vscode.postMessage({ type: "soundEnabled", bool: soundEnabled })
 			vscode.postMessage({ type: "ttsEnabled", bool: ttsEnabled })

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

@@ -39,6 +39,7 @@ export interface ExtensionStateContextType extends ExtensionState {
 	setShowRooIgnoredFiles: (value: boolean) => void
 	setShowAnnouncement: (value: boolean) => void
 	setAllowedCommands: (value: string[]) => void
+	setAllowedMaxRequests: (value: number | undefined) => void
 	setSoundEnabled: (value: boolean) => void
 	setSoundVolume: (value: number) => void
 	terminalShellIntegrationTimeout?: number
@@ -133,6 +134,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
 		taskHistory: [],
 		shouldShowAnnouncement: false,
 		allowedCommands: [],
+		allowedMaxRequests: Infinity,
 		soundEnabled: false,
 		soundVolume: 0.5,
 		ttsEnabled: false,
@@ -288,6 +290,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
 		setAlwaysAllowSubtasks: (value) => setState((prevState) => ({ ...prevState, alwaysAllowSubtasks: value })),
 		setShowAnnouncement: (value) => setState((prevState) => ({ ...prevState, shouldShowAnnouncement: value })),
 		setAllowedCommands: (value) => setState((prevState) => ({ ...prevState, allowedCommands: value })),
+		setAllowedMaxRequests: (value) => setState((prevState) => ({ ...prevState, allowedMaxRequests: value })),
 		setSoundEnabled: (value) => setState((prevState) => ({ ...prevState, soundEnabled: value })),
 		setSoundVolume: (value) => setState((prevState) => ({ ...prevState, soundVolume: value })),
 		setTtsEnabled: (value) => setState((prevState) => ({ ...prevState, ttsEnabled: value })),

+ 7 - 0
webview-ui/src/i18n/locales/ca/chat.json

@@ -252,5 +252,12 @@
 		"title": "Advertència d'execució d'ordres",
 		"description": "La teva ordre s'està executant sense la integració de shell del terminal VSCode. Per suprimir aquest advertiment, pots desactivar la integració de shell a la secció <strong>Terminal</strong> de la <settingsLink>configuració de Roo Code</settingsLink> o solucionar problemes d'integració del terminal VSCode utilitzant l'enllaç a continuació.",
 		"troubleshooting": "Fes clic aquí per a la documentació d'integració de shell."
+	},
+	"ask": {
+		"autoApprovedRequestLimitReached": {
+			"title": "S'ha arribat al límit de sol·licituds aprovades automàticament",
+			"description": "Roo ha arribat al límit aprovat automàticament de {{count}} sol·licitud(s) d'API. Vols reiniciar el comptador i continuar amb la tasca?",
+			"button": "Reiniciar i continuar"
+		}
 	}
 }

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

@@ -79,6 +79,11 @@
 			"allowedCommandsDescription": "Prefixos de comandes que poden ser executats automàticament quan \"Aprovar sempre operacions d'execució\" està habilitat. Afegeix * per permetre totes les comandes (usar amb precaució).",
 			"commandPlaceholder": "Introduïu prefix de comanda (ex. 'git ')",
 			"addButton": "Afegir"
+		},
+		"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.",
+			"unlimited": "Il·limitat"
 		}
 	},
 	"providers": {

+ 7 - 0
webview-ui/src/i18n/locales/de/chat.json

@@ -252,5 +252,12 @@
 		"title": "Befehlsausführungswarnung",
 		"description": "Dein Befehl wird ohne VSCode Terminal-Shell-Integration ausgeführt. Um diese Warnung zu unterdrücken, kannst du die Shell-Integration im Abschnitt <strong>Terminal</strong> der <settingsLink>Roo Code Einstellungen</settingsLink> deaktivieren oder die VSCode Terminal-Integration mit dem Link unten beheben.",
 		"troubleshooting": "Klicke hier für die Shell-Integrationsdokumentation."
+	},
+	"ask": {
+		"autoApprovedRequestLimitReached": {
+			"title": "Limit für automatisch genehmigte Anfragen erreicht",
+			"description": "Roo hat das automatisch genehmigte Limit von {{count}} API-Anfrage(n) erreicht. Möchtest du den Zähler zurücksetzen und mit der Aufgabe fortfahren?",
+			"button": "Zurücksetzen und fortfahren"
+		}
 	}
 }

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

@@ -79,6 +79,11 @@
 			"allowedCommandsDescription": "Befehlspräfixe, die automatisch ausgeführt werden können, wenn 'Ausführungsoperationen immer genehmigen' aktiviert ist. Fügen Sie * hinzu, um alle Befehle zu erlauben (mit Vorsicht verwenden).",
 			"commandPlaceholder": "Befehlspräfix eingeben (z.B. 'git ')",
 			"addButton": "Hinzufügen"
+		},
+		"apiRequestLimit": {
+			"title": "Maximale Anfragen",
+			"description": "Automatisch so viele API-Anfragen stellen, bevor du um die Erlaubnis gebeten wirst, mit der Aufgabe fortzufahren.",
+			"unlimited": "Unbegrenzt"
 		}
 	},
 	"providers": {

+ 7 - 0
webview-ui/src/i18n/locales/en/chat.json

@@ -252,5 +252,12 @@
 		"title": "Command Execution Warning",
 		"description": "Your command is being executed without VSCode terminal shell integration. To suppress this warning you can disable shell integration in the <strong>Terminal</strong> section of the <settingsLink>Roo Code settings</settingsLink> or troubleshoot VSCode terminal integration using the link below.",
 		"troubleshooting": "Click here for shell integration documentation."
+	},
+	"ask": {
+		"autoApprovedRequestLimitReached": {
+			"title": "Auto-Approved Request Limit Reached",
+			"description": "Roo has reached the auto-approved limit of {{count}} API request(s). Would you like to reset the count and proceed with the task?",
+			"button": "Reset and Continue"
+		}
 	}
 }

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

@@ -79,6 +79,11 @@
 			"allowedCommandsDescription": "Command prefixes that can be auto-executed when \"Always approve execute operations\" is enabled. Add * to allow all commands (use with caution).",
 			"commandPlaceholder": "Enter command prefix (e.g., 'git ')",
 			"addButton": "Add"
+		},
+		"apiRequestLimit": {
+			"title": "Max Requests",
+			"description": "Automatically make this many API requests before asking for approval to continue with the task.",
+			"unlimited": "Unlimited"
 		}
 	},
 	"providers": {

+ 7 - 0
webview-ui/src/i18n/locales/es/chat.json

@@ -252,5 +252,12 @@
 		"title": "Advertencia de ejecución de comandos",
 		"description": "Tu comando se está ejecutando sin la integración de shell de terminal de VSCode. Para suprimir esta advertencia, puedes desactivar la integración de shell en la sección <strong>Terminal</strong> de la <settingsLink>configuración de Roo Code</settingsLink> o solucionar problemas de integración de terminal de VSCode usando el enlace de abajo.",
 		"troubleshooting": "Haz clic aquí para ver la documentación de integración de shell."
+	},
+	"ask": {
+		"autoApprovedRequestLimitReached": {
+			"title": "Límite de Solicitudes Auto-aprobadas Alcanzado",
+			"description": "Roo ha alcanzado el límite auto-aprobado de {{count}} solicitud(es) API. ¿Deseas reiniciar el contador y continuar con la tarea?",
+			"button": "Reiniciar y Continuar"
+		}
 	}
 }

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

@@ -79,6 +79,11 @@
 			"allowedCommandsDescription": "Prefijos de comandos que pueden ser ejecutados automáticamente cuando \"Aprobar siempre operaciones de ejecución\" está habilitado. Añade * para permitir todos los comandos (usar con precaución).",
 			"commandPlaceholder": "Ingrese prefijo de comando (ej. 'git ')",
 			"addButton": "Añadir"
+		},
+		"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.",
+			"unlimited": "Ilimitado"
 		}
 	},
 	"providers": {

+ 7 - 0
webview-ui/src/i18n/locales/fr/chat.json

@@ -252,5 +252,12 @@
 		"title": "Avertissement d'exécution de commande",
 		"description": "Votre commande est exécutée sans l'intégration shell du terminal VSCode. Pour supprimer cet avertissement, vous pouvez désactiver l'intégration shell dans la section <strong>Terminal</strong> des <settingsLink>paramètres de Roo Code</settingsLink> ou résoudre les problèmes d'intégration du terminal VSCode en utilisant le lien ci-dessous.",
 		"troubleshooting": "Cliquez ici pour la documentation d'intégration shell."
+	},
+	"ask": {
+		"autoApprovedRequestLimitReached": {
+			"title": "Limite de requêtes auto-approuvées atteinte",
+			"description": "Roo a atteint la limite auto-approuvée de {{count}} requête(s) API. Souhaitez-vous réinitialiser le compteur et poursuivre la tâche ?",
+			"button": "Réinitialiser et continuer"
+		}
 	}
 }

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

@@ -79,6 +79,11 @@
 			"allowedCommandsDescription": "Préfixes de commandes qui peuvent être auto-exécutés lorsque \"Toujours approuver les opérations d'exécution\" est activé. Ajoutez * pour autoriser toutes les commandes (à utiliser avec précaution).",
 			"commandPlaceholder": "Entrez le préfixe de commande (ex. 'git ')",
 			"addButton": "Ajouter"
+		},
+		"apiRequestLimit": {
+			"title": "Requêtes maximales",
+			"description": "Effectuer automatiquement ce nombre de requêtes API avant de demander l'approbation pour continuer la tâche.",
+			"unlimited": "Illimité"
 		}
 	},
 	"providers": {

+ 7 - 0
webview-ui/src/i18n/locales/hi/chat.json

@@ -252,5 +252,12 @@
 		"title": "कमांड निष्पादन चेतावनी",
 		"description": "आपका कमांड VSCode टर्मिनल शेल इंटीग्रेशन के बिना निष्पादित हो रहा है। इस चेतावनी को दबाने के लिए आप <settingsLink>Roo Code सेटिंग्स</settingsLink> के <strong>Terminal</strong> अनुभाग में शेल इंटीग्रेशन को अक्षम कर सकते हैं या नीचे दिए गए लिंक का उपयोग करके VSCode टर्मिनल इंटीग्रेशन की समस्या का समाधान कर सकते हैं।",
 		"troubleshooting": "शेल इंटीग्रेशन दस्तावेज़ के लिए यहां क्लिक करें।"
+	},
+	"ask": {
+		"autoApprovedRequestLimitReached": {
+			"title": "स्वत:-स्वीकृत अनुरोध सीमा पहुंची",
+			"description": "Roo {{count}} API अनुरोध(धों) की स्वत:-स्वीकृत सीमा तक पहुंच गया है। क्या आप गणना को रीसेट करके कार्य जारी रखना चाहते हैं?",
+			"button": "रीसेट करें और जारी रखें"
+		}
 	}
 }

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

@@ -79,6 +79,11 @@
 			"allowedCommandsDescription": "कमांड प्रीफिक्स जो स्वचालित रूप से निष्पादित किए जा सकते हैं जब \"निष्पादन ऑपरेशन हमेशा अनुमोदित करें\" सक्षम है। सभी कमांड की अनुमति देने के लिए * जोड़ें (सावधानी से उपयोग करें)।",
 			"commandPlaceholder": "कमांड प्रीफिक्स दर्ज करें (उदा. 'git ')",
 			"addButton": "जोड़ें"
+		},
+		"apiRequestLimit": {
+			"title": "अधिकतम अनुरोध",
+			"description": "कार्य जारी रखने के लिए अनुमति मांगने से पहले स्वचालित रूप से इतने API अनुरोध करें।",
+			"unlimited": "असीमित"
 		}
 	},
 	"providers": {

+ 7 - 0
webview-ui/src/i18n/locales/it/chat.json

@@ -252,5 +252,12 @@
 		"title": "Avviso di esecuzione comando",
 		"description": "Il tuo comando viene eseguito senza l'integrazione shell del terminale VSCode. Per sopprimere questo avviso puoi disattivare l'integrazione shell nella sezione <strong>Terminal</strong> delle <settingsLink>impostazioni di Roo Code</settingsLink> o risolvere i problemi di integrazione del terminale VSCode utilizzando il link qui sotto.",
 		"troubleshooting": "Clicca qui per la documentazione sull'integrazione shell."
+	},
+	"ask": {
+		"autoApprovedRequestLimitReached": {
+			"title": "Limite di Richieste Auto-approvate Raggiunto",
+			"description": "Roo ha raggiunto il limite auto-approvato di {{count}} richiesta/e API. Vuoi reimpostare il contatore e procedere con l'attività?",
+			"button": "Reimposta e Continua"
+		}
 	}
 }

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

@@ -79,6 +79,11 @@
 			"allowedCommandsDescription": "Prefissi di comando che possono essere auto-eseguiti quando \"Approva sempre operazioni di esecuzione\" è abilitato. Aggiungi * per consentire tutti i comandi (usare con cautela).",
 			"commandPlaceholder": "Inserisci prefisso comando (es. 'git ')",
 			"addButton": "Aggiungi"
+		},
+		"apiRequestLimit": {
+			"title": "Richieste massime",
+			"description": "Esegui automaticamente questo numero di richieste API prima di chiedere l'approvazione per continuare con l'attività.",
+			"unlimited": "Illimitato"
 		}
 	},
 	"providers": {

+ 7 - 0
webview-ui/src/i18n/locales/ja/chat.json

@@ -252,5 +252,12 @@
 		"title": "コマンド実行警告",
 		"description": "コマンドはVSCodeターミナルシェル統合なしで実行されています。この警告を非表示にするには、<settingsLink>Roo Code設定</settingsLink>の<strong>Terminal</strong>セクションでシェル統合を無効にするか、以下のリンクを使用してVSCodeターミナル統合のトラブルシューティングを行ってください。",
 		"troubleshooting": "シェル統合のドキュメントはこちらをクリック"
+	},
+	"ask": {
+		"autoApprovedRequestLimitReached": {
+			"title": "自動承認リクエスト制限に達しました",
+			"description": "Rooは{{count}}件のAPI自動承認リクエスト制限に達しました。カウントをリセットしてタスクを続行しますか?",
+			"button": "リセットして続行"
+		}
 	}
 }

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

@@ -79,6 +79,11 @@
 			"allowedCommandsDescription": "「実行操作を常に承認」が有効な場合に自動実行できるコマンドプレフィックス。すべてのコマンドを許可するには * を追加します(注意して使用してください)。",
 			"commandPlaceholder": "コマンドプレフィックスを入力(例:'git ')",
 			"addButton": "追加"
+		},
+		"apiRequestLimit": {
+			"title": "最大リクエスト数",
+			"description": "タスクを続行するための承認を求める前に、自動的にこの数のAPIリクエストを行います。",
+			"unlimited": "無制限"
 		}
 	},
 	"providers": {

+ 7 - 0
webview-ui/src/i18n/locales/ko/chat.json

@@ -252,5 +252,12 @@
 		"title": "명령 실행 경고",
 		"description": "명령이 VSCode 터미널 쉘 통합 없이 실행되고 있습니다. 이 경고를 숨기려면 <settingsLink>Roo Code 설정</settingsLink>의 <strong>Terminal</strong> 섹션에서 쉘 통합을 비활성화하거나 아래 링크를 사용하여 VSCode 터미널 통합 문제를 해결하세요.",
 		"troubleshooting": "쉘 통합 문서를 보려면 여기를 클릭하세요."
+	},
+	"ask": {
+		"autoApprovedRequestLimitReached": {
+			"title": "자동 승인 요청 한도 도달",
+			"description": "Roo가 {{count}}개의 API 요청(들)에 대한 자동 승인 한도에 도달했습니다. 카운트를 재설정하고 작업을 계속하시겠습니까?",
+			"button": "재설정 후 계속"
+		}
 	}
 }

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

@@ -79,6 +79,11 @@
 			"allowedCommandsDescription": "\"실행 작업 항상 승인\"이 활성화되었을 때 자동 실행될 수 있는 명령 접두사. 모든 명령을 허용하려면 * 추가(주의해서 사용)",
 			"commandPlaceholder": "명령 접두사 입력(예: 'git ')",
 			"addButton": "추가"
+		},
+		"apiRequestLimit": {
+			"title": "최대 요청 수",
+			"description": "작업을 계속하기 위한 승인을 요청하기 전에 자동으로 이 수의 API 요청을 수행합니다.",
+			"unlimited": "무제한"
 		}
 	},
 	"providers": {

+ 7 - 0
webview-ui/src/i18n/locales/nl/chat.json

@@ -252,5 +252,12 @@
 		"title": "Waarschuwing commando-uitvoering",
 		"description": "Je commando wordt uitgevoerd zonder VSCode-terminal shell-integratie. Om deze waarschuwing te onderdrukken kun je shell-integratie uitschakelen in het gedeelte <strong>Terminal</strong> van de <settingsLink>Roo Code-instellingen</settingsLink> of de VSCode-terminalintegratie oplossen via de onderstaande link.",
 		"troubleshooting": "Klik hier voor shell-integratie documentatie."
+	},
+	"ask": {
+		"autoApprovedRequestLimitReached": {
+			"title": "Limiet voor automatisch goedgekeurde verzoeken bereikt",
+			"description": "Roo heeft de automatisch goedgekeurde limiet van {{count}} API-verzoek(en) bereikt. Wil je de teller resetten en doorgaan met de taak?",
+			"button": "Resetten en doorgaan"
+		}
 	}
 }

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

@@ -79,6 +79,11 @@
 			"allowedCommandsDescription": "Commando-prefixen die automatisch kunnen worden uitgevoerd als 'Altijd goedkeuren voor uitvoeren' is ingeschakeld. Voeg * toe om alle commando's toe te staan (gebruik met voorzichtigheid).",
 			"commandPlaceholder": "Voer commando-prefix in (bijv. 'git ')",
 			"addButton": "Toevoegen"
+		},
+		"apiRequestLimit": {
+			"title": "Maximale verzoeken",
+			"description": "Voer automatisch dit aantal API-verzoeken uit voordat om goedkeuring wordt gevraagd om door te gaan met de taak.",
+			"unlimited": "Onbeperkt"
 		}
 	},
 	"providers": {

+ 7 - 0
webview-ui/src/i18n/locales/pl/chat.json

@@ -252,5 +252,12 @@
 		"title": "Ostrzeżenie wykonania polecenia",
 		"description": "Twoje polecenie jest wykonywane bez integracji powłoki terminala VSCode. Aby ukryć to ostrzeżenie, możesz wyłączyć integrację powłoki w sekcji <strong>Terminal</strong> w <settingsLink>ustawieniach Roo Code</settingsLink> lub rozwiązać problemy z integracją terminala VSCode korzystając z poniższego linku.",
 		"troubleshooting": "Kliknij tutaj, aby zobaczyć dokumentację integracji powłoki."
+	},
+	"ask": {
+		"autoApprovedRequestLimitReached": {
+			"title": "Osiągnięto limit automatycznie zatwierdzonych żądań",
+			"description": "Roo osiągnął automatycznie zatwierdzony limit {{count}} żądania/żądań API. Czy chcesz zresetować licznik i kontynuować zadanie?",
+			"button": "Zresetuj i kontynuuj"
+		}
 	}
 }

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

@@ -79,6 +79,11 @@
 			"allowedCommandsDescription": "Prefiksy poleceń, które mogą być automatycznie wykonywane, gdy \"Zawsze zatwierdzaj operacje wykonania\" jest włączone. Dodaj * aby zezwolić na wszystkie polecenia (używaj z ostrożnością).",
 			"commandPlaceholder": "Wprowadź prefiks polecenia (np. 'git ')",
 			"addButton": "Dodaj"
+		},
+		"apiRequestLimit": {
+			"title": "Maksymalna liczba żądań",
+			"description": "Automatycznie wykonaj tyle żądań API przed poproszeniem o zgodę na kontynuowanie zadania.",
+			"unlimited": "Bez limitu"
 		}
 	},
 	"providers": {

+ 7 - 0
webview-ui/src/i18n/locales/pt-BR/chat.json

@@ -252,5 +252,12 @@
 		"title": "Aviso de execução de comando",
 		"description": "Seu comando está sendo executado sem a integração de shell do terminal VSCode. Para suprimir este aviso, você pode desativar a integração de shell na seção <strong>Terminal</strong> das <settingsLink>configurações do Roo Code</settingsLink> ou solucionar problemas de integração do terminal VSCode usando o link abaixo.",
 		"troubleshooting": "Clique aqui para a documentação de integração de shell."
+	},
+	"ask": {
+		"autoApprovedRequestLimitReached": {
+			"title": "Limite de Solicitações Auto-aprovadas Atingido",
+			"description": "Roo atingiu o limite auto-aprovado de {{count}} solicitação(ões) de API. Deseja redefinir a contagem e prosseguir com a tarefa?",
+			"button": "Redefinir e Continuar"
+		}
 	}
 }

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

@@ -79,6 +79,11 @@
 			"allowedCommandsDescription": "Prefixos de comando que podem ser auto-executados quando \"Aprovar sempre operações de execução\" está ativado. Adicione * para permitir todos os comandos (use com cautela).",
 			"commandPlaceholder": "Digite o prefixo do comando (ex. 'git ')",
 			"addButton": "Adicionar"
+		},
+		"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.",
+			"unlimited": "Ilimitado"
 		}
 	},
 	"providers": {

+ 7 - 0
webview-ui/src/i18n/locales/ru/chat.json

@@ -252,5 +252,12 @@
 		"title": "Предупреждение о выполнении команды",
 		"description": "Ваша команда выполняется без интеграции оболочки терминала VSCode. Чтобы скрыть это предупреждение, вы можете отключить интеграцию оболочки в разделе <strong>Terminal</strong> в <settingsLink>настройках Roo Code</settingsLink> или устранить проблемы с интеграцией терминала VSCode, используя ссылку ниже.",
 		"troubleshooting": "Нажмите здесь для просмотра документации по интеграции оболочки."
+	},
+	"ask": {
+		"autoApprovedRequestLimitReached": {
+			"title": "Достигнут лимит автоматически одобренных запросов",
+			"description": "Roo достиг автоматически одобренного лимита в {{count}} API-запрос(ов). Хотите сбросить счетчик и продолжить задачу?",
+			"button": "Сбросить и продолжить"
+		}
 	}
 }

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

@@ -79,6 +79,11 @@
 			"allowedCommandsDescription": "Префиксы команд, которые могут быть автоматически выполнены при включённом параметре \"Всегда одобрять выполнение операций\". Добавьте * для разрешения всех команд (используйте с осторожностью).",
 			"commandPlaceholder": "Введите префикс команды (например, 'git ')",
 			"addButton": "Добавить"
+		},
+		"apiRequestLimit": {
+			"title": "Максимум запросов",
+			"description": "Автоматически выполнять это количество API-запросов перед запросом разрешения на продолжение задачи.",
+			"unlimited": "Без ограничений"
 		}
 	},
 	"providers": {

+ 7 - 0
webview-ui/src/i18n/locales/tr/chat.json

@@ -252,5 +252,12 @@
 		"title": "Komut Çalıştırma Uyarısı",
 		"description": "Komutunuz VSCode terminal kabuk entegrasyonu olmadan çalıştırılıyor. Bu uyarıyı gizlemek için <settingsLink>Roo Code ayarları</settingsLink>'nın <strong>Terminal</strong> bölümünden kabuk entegrasyonunu devre dışı bırakabilir veya aşağıdaki bağlantıyı kullanarak VSCode terminal entegrasyonu sorunlarını giderebilirsiniz.",
 		"troubleshooting": "Kabuk entegrasyonu belgelerini görmek için buraya tıklayın."
+	},
+	"ask": {
+		"autoApprovedRequestLimitReached": {
+			"title": "Otomatik Onaylanan İstek Limiti Aşıldı",
+			"description": "Roo, {{count}} API isteği/istekleri için otomatik onaylanan limite ulaştı. Sayacı sıfırlamak ve göreve devam etmek istiyor musunuz?",
+			"button": "Sıfırla ve Devam Et"
+		}
 	}
 }

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

@@ -79,6 +79,11 @@
 			"allowedCommandsDescription": "\"Yürütme işlemlerini her zaman onayla\" etkinleştirildiğinde otomatik olarak yürütülebilen komut önekleri. Tüm komutlara izin vermek için * ekleyin (dikkatli kullanın).",
 			"commandPlaceholder": "Komut öneki girin (örn. 'git ')",
 			"addButton": "Ekle"
+		},
+		"apiRequestLimit": {
+			"title": "Maksimum İstek",
+			"description": "Göreve devam etmek için onay istemeden önce bu sayıda API isteği otomatik olarak yap.",
+			"unlimited": "Sınırsız"
 		}
 	},
 	"providers": {

+ 7 - 0
webview-ui/src/i18n/locales/vi/chat.json

@@ -252,5 +252,12 @@
 		"title": "Cảnh báo thực thi lệnh",
 		"description": "Lệnh của bạn đang được thực thi mà không có tích hợp shell terminal VSCode. Để ẩn cảnh báo này, bạn có thể vô hiệu hóa tích hợp shell trong phần <strong>Terminal</strong> của <settingsLink>cài đặt Roo Code</settingsLink> hoặc khắc phục sự cố tích hợp terminal VSCode bằng liên kết bên dưới.",
 		"troubleshooting": "Nhấp vào đây để xem tài liệu tích hợp shell."
+	},
+	"ask": {
+		"autoApprovedRequestLimitReached": {
+			"title": "Đã Đạt Giới Hạn Yêu Cầu Tự Động Phê Duyệt",
+			"description": "Roo đã đạt đến giới hạn tự động phê duyệt là {{count}} yêu cầu API. Bạn có muốn đặt lại bộ đếm và tiếp tục nhiệm vụ không?",
+			"button": "Đặt lại và Tiếp tục"
+		}
 	}
 }

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

@@ -79,6 +79,11 @@
 			"allowedCommandsDescription": "Tiền tố lệnh có thể được tự động thực thi khi \"Luôn phê duyệt các hoạt động thực thi\" được bật. Thêm * để cho phép tất cả các lệnh (sử dụng cẩn thận).",
 			"commandPlaceholder": "Nhập tiền tố lệnh (ví dụ: 'git ')",
 			"addButton": "Thêm"
+		},
+		"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ụ.",
+			"unlimited": "Không giới hạn"
 		}
 	},
 	"providers": {

+ 7 - 0
webview-ui/src/i18n/locales/zh-CN/chat.json

@@ -252,5 +252,12 @@
 		"title": "命令执行警告",
 		"description": "您的命令正在没有 VSCode 终端 shell 集成的情况下执行。要隐藏此警告,您可以在 <settingsLink>Roo Code 设置</settingsLink>的 <strong>Terminal</strong> 部分禁用 shell 集成,或使用下方链接排查 VSCode 终端集成问题。",
 		"troubleshooting": "点击此处查看 shell 集成文档。"
+	},
+	"ask": {
+		"autoApprovedRequestLimitReached": {
+			"title": "已达自动批准请求限制",
+			"description": "Roo 已达到 {{count}} 次 API 请求的自动批准限制。您想重置计数并继续任务吗?",
+			"button": "重置并继续"
+		}
 	}
 }

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

@@ -79,6 +79,11 @@
 			"allowedCommandsDescription": "当\"自动批准命令行操作\"启用时可以自动执行的命令前缀。添加 * 以允许所有命令(谨慎使用)。",
 			"commandPlaceholder": "输入命令前缀(例如 'git ')",
 			"addButton": "添加"
+		},
+		"apiRequestLimit": {
+			"title": "最大请求数",
+			"description": "在请求批准以继续执行任务之前,自动发出此数量的 API 请求。",
+			"unlimited": "无限制"
 		}
 	},
 	"providers": {

+ 7 - 0
webview-ui/src/i18n/locales/zh-TW/chat.json

@@ -252,5 +252,12 @@
 		"title": "命令執行警告",
 		"description": "您的命令正在沒有 VSCode 終端機 shell 整合的情況下執行。要隱藏此警告,您可以在 <settingsLink>Roo Code 設定</settingsLink>的 <strong>Terminal</strong> 部分停用 shell 整合,或使用下方連結排查 VSCode 終端機整合問題。",
 		"troubleshooting": "點擊此處查看 shell 整合文件。"
+	},
+	"ask": {
+		"autoApprovedRequestLimitReached": {
+			"title": "已達自動核准請求限制",
+			"description": "Roo 已達到 {{count}} 次 API 請求的自動核准限制。您想要重設計數並繼續工作嗎?",
+			"button": "重設並繼續"
+		}
 	}
 }

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

@@ -79,6 +79,11 @@
 			"allowedCommandsDescription": "當「始終核准執行操作」啟用時可以自動執行的命令前綴。新增 * 以允許所有命令(請謹慎使用)。",
 			"commandPlaceholder": "輸入命令前綴(例如 'git ')",
 			"addButton": "新增"
+		},
+		"apiRequestLimit": {
+			"title": "最大請求數",
+			"description": "在請求批准以繼續執行工作之前,自動發出此數量的 API 請求。",
+			"unlimited": "無限制"
 		}
 	},
 	"providers": {