From 90091c63cb3c9347b00e25102b135ee1b35caf5a Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Tue, 16 Sep 2025 12:08:32 +0100 Subject: [PATCH 1/2] Visual improvements and code cleanup (removes duplication) --- .../components/chat/AutoApproveDropdown.tsx | 88 +++++-------------- 1 file changed, 24 insertions(+), 64 deletions(-) diff --git a/webview-ui/src/components/chat/AutoApproveDropdown.tsx b/webview-ui/src/components/chat/AutoApproveDropdown.tsx index 86b567e18d..d760048cc6 100644 --- a/webview-ui/src/components/chat/AutoApproveDropdown.tsx +++ b/webview-ui/src/components/chat/AutoApproveDropdown.tsx @@ -148,9 +148,6 @@ export const AutoApproveDropdown = ({ disabled = false, triggerClassName = "" }: // Split settings into two columns const settingsArray = Object.values(autoApproveSettingsConfig) - const halfLength = Math.ceil(settingsArray.length / 2) - const firstColumn = settingsArray.slice(0, halfLength) - const secondColumn = settingsArray.slice(halfLength) return ( @@ -179,7 +176,7 @@ export const AutoApproveDropdown = ({ disabled = false, triggerClassName = "" }: align="start" sideOffset={4} container={portalContainer} - className="p-0 overflow-hidden min-w-96 max-w-9/10" + className="p-0 overflow-hidden min-w-90 max-w-9/10" onOpenAutoFocus={(e) => e.preventDefault()}>
{/* Header with description */} @@ -197,66 +194,29 @@ export const AutoApproveDropdown = ({ disabled = false, triggerClassName = "" }: {t("chat:autoApprove.description")}

- - {/* Two-column layout for approval options */} -
-
- {/* First Column */} -
- {firstColumn.map(({ key, labelKey, descriptionKey, icon }) => { - const isEnabled = toggles[key] - return ( - - - - ) - })} -
- - {/* Second Column */} -
- {secondColumn.map(({ key, labelKey, descriptionKey, icon }) => { - const isEnabled = toggles[key] - return ( - - - - ) - })} -
-
+
+ {settingsArray.map(({ key, labelKey, descriptionKey, icon }) => { + const isEnabled = toggles[key] + return ( + + + + ) + })}
{/* Bottom bar with Select All/None buttons */} From 0c4905cdb5fad7bd75de6bcc8a05ea4ec5dfcc0d Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Tue, 16 Sep 2025 13:17:57 +0100 Subject: [PATCH 2/2] Brings back an 'enabled' toggle for auto-approve --- .../components/chat/AutoApproveDropdown.tsx | 64 +++++++++++++++---- .../settings/AutoApproveSettings.tsx | 40 ++++-------- .../__tests__/useAutoApprovalState.spec.ts | 8 +-- webview-ui/src/hooks/useAutoApprovalState.ts | 4 +- webview-ui/src/i18n/locales/ca/chat.json | 3 +- webview-ui/src/i18n/locales/de/chat.json | 3 +- webview-ui/src/i18n/locales/en/chat.json | 3 +- webview-ui/src/i18n/locales/es/chat.json | 3 +- webview-ui/src/i18n/locales/fr/chat.json | 3 +- webview-ui/src/i18n/locales/hi/chat.json | 3 +- webview-ui/src/i18n/locales/id/chat.json | 3 +- webview-ui/src/i18n/locales/it/chat.json | 3 +- webview-ui/src/i18n/locales/ja/chat.json | 3 +- webview-ui/src/i18n/locales/ko/chat.json | 3 +- webview-ui/src/i18n/locales/nl/chat.json | 3 +- webview-ui/src/i18n/locales/pl/chat.json | 3 +- webview-ui/src/i18n/locales/pt-BR/chat.json | 3 +- webview-ui/src/i18n/locales/ru/chat.json | 3 +- webview-ui/src/i18n/locales/tr/chat.json | 3 +- webview-ui/src/i18n/locales/vi/chat.json | 3 +- webview-ui/src/i18n/locales/zh-CN/chat.json | 3 +- webview-ui/src/i18n/locales/zh-TW/chat.json | 3 +- 22 files changed, 104 insertions(+), 66 deletions(-) diff --git a/webview-ui/src/components/chat/AutoApproveDropdown.tsx b/webview-ui/src/components/chat/AutoApproveDropdown.tsx index d760048cc6..ac3d582194 100644 --- a/webview-ui/src/components/chat/AutoApproveDropdown.tsx +++ b/webview-ui/src/components/chat/AutoApproveDropdown.tsx @@ -1,14 +1,15 @@ import React from "react" -import { ListChecks, LayoutList, Settings, CheckCheck } from "lucide-react" +import { ListChecks, LayoutList, Settings, CheckCheck, X } from "lucide-react" import { vscode } from "@/utils/vscode" import { cn } from "@/lib/utils" import { useExtensionState } from "@/context/ExtensionStateContext" import { useAppTranslation } from "@/i18n/TranslationContext" import { useRooPortal } from "@/components/ui/hooks/useRooPortal" -import { Popover, PopoverContent, PopoverTrigger, StandardTooltip } from "@/components/ui" +import { Popover, PopoverContent, PopoverTrigger, StandardTooltip, ToggleSwitch } from "@/components/ui" import { AutoApproveSetting, autoApproveSettingsConfig } from "../settings/AutoApproveToggle" import { useAutoApprovalToggles } from "@/hooks/useAutoApprovalToggles" +import { useAutoApprovalState } from "@/hooks/useAutoApprovalState" interface AutoApproveDropdownProps { disabled?: boolean @@ -124,12 +125,7 @@ export const AutoApproveDropdown = ({ disabled = false, triggerClassName = "" }: Object.keys(autoApproveSettingsConfig).forEach((key) => { onAutoApproveToggle(key as AutoApproveSetting, false) }) - // Disable master auto-approval - if (autoApprovalEnabled) { - setAutoApprovalEnabled(false) - vscode.postMessage({ type: "autoApprovalEnabled", bool: false }) - } - }, [onAutoApproveToggle, autoApprovalEnabled, setAutoApprovalEnabled]) + }, [onAutoApproveToggle]) const handleOpenSettings = React.useCallback( () => @@ -137,7 +133,16 @@ export const AutoApproveDropdown = ({ disabled = false, triggerClassName = "" }: [], ) + // Handle the main auto-approval toggle + const handleAutoApprovalToggle = React.useCallback(() => { + const newValue = !(autoApprovalEnabled ?? false) + setAutoApprovalEnabled(newValue) + vscode.postMessage({ type: "autoApprovalEnabled", bool: newValue }) + }, [autoApprovalEnabled, setAutoApprovalEnabled]) + // Calculate enabled and total counts as separate properties + const settingsArray = Object.values(autoApproveSettingsConfig) + const enabledCount = React.useMemo(() => { return Object.values(toggles).filter((value) => !!value).length }, [toggles]) @@ -146,8 +151,7 @@ export const AutoApproveDropdown = ({ disabled = false, triggerClassName = "" }: return Object.keys(toggles).length }, [toggles]) - // Split settings into two columns - const settingsArray = Object.values(autoApproveSettingsConfig) + const { effectiveAutoApprovalEnabled } = useAutoApprovalState(toggles, autoApprovalEnabled) return ( @@ -164,11 +168,18 @@ export const AutoApproveDropdown = ({ disabled = false, triggerClassName = "" }: : "opacity-90 hover:opacity-100 hover:bg-[rgba(255,255,255,0.03)] hover:border-[rgba(255,255,255,0.15)] cursor-pointer", triggerClassName, )}> - + {!effectiveAutoApprovalEnabled ? ( + + ) : ( + + )} + - {enabledCount === totalCount - ? t("chat:autoApprove.triggerLabelAll") - : t("chat:autoApprove.triggerLabel", { count: enabledCount })} + {!effectiveAutoApprovalEnabled + ? t("chat:autoApprove.triggerLabelOff") + : enabledCount === totalCount + ? t("chat:autoApprove.triggerLabelAll") + : t("chat:autoApprove.triggerLabel", { count: enabledCount })} @@ -206,10 +217,13 @@ export const AutoApproveDropdown = ({ disabled = false, triggerClassName = "" }: "transition-all duration-150", "opacity-100 hover:opacity-70", "cursor-pointer", + !effectiveAutoApprovalEnabled && + "opacity-50 cursor-not-allowed hover:opacity-50", isEnabled ? "bg-vscode-button-background text-vscode-button-foreground" : "bg-vscode-button-background/15 text-vscode-foreground hover:bg-vscode-list-hoverBackground", )} + disabled={!effectiveAutoApprovalEnabled} data-testid={`auto-approve-${key}`}> {t(labelKey)} @@ -225,6 +239,7 @@ export const AutoApproveDropdown = ({ disabled = false, triggerClassName = "" }:
+ + diff --git a/webview-ui/src/components/settings/AutoApproveSettings.tsx b/webview-ui/src/components/settings/AutoApproveSettings.tsx index 5ce44c747d..eabd2ddf80 100644 --- a/webview-ui/src/components/settings/AutoApproveSettings.tsx +++ b/webview-ui/src/components/settings/AutoApproveSettings.tsx @@ -4,7 +4,7 @@ import { X, CheckCheck } from "lucide-react" import { useAppTranslation } from "@/i18n/TranslationContext" import { VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react" import { vscode } from "@/utils/vscode" -import { Button, Input, Slider, StandardTooltip } from "@/components/ui" +import { Button, Input, Slider } from "@/components/ui" import { SetCachedStateField } from "./types" import { SectionHeader } from "./SectionHeader" @@ -88,7 +88,7 @@ export const AutoApproveSettings = ({ const toggles = useAutoApprovalToggles() - const { hasEnabledOptions, effectiveAutoApprovalEnabled } = useAutoApprovalState(toggles, autoApprovalEnabled) + const { effectiveAutoApprovalEnabled } = useAutoApprovalState(toggles, autoApprovalEnabled) const handleAddCommand = () => { const currentCommands = allowedCommands ?? [] @@ -124,32 +124,16 @@ export const AutoApproveSettings = ({
- {!hasEnabledOptions ? ( - - { - // Do nothing when no options are enabled - return - }}> - {t("settings:autoApprove.enabled")} - - - ) : ( - { - const newValue = !(autoApprovalEnabled ?? false) - setAutoApprovalEnabled(newValue) - vscode.postMessage({ type: "autoApprovalEnabled", bool: newValue }) - }}> - {t("settings:autoApprove.enabled")} - - )} + { + const newValue = !(autoApprovalEnabled ?? false) + setAutoApprovalEnabled(newValue) + vscode.postMessage({ type: "autoApprovalEnabled", bool: newValue }) + }}> + {t("settings:autoApprove.enabled")} +
{t("settings:autoApprove.description")}
diff --git a/webview-ui/src/hooks/__tests__/useAutoApprovalState.spec.ts b/webview-ui/src/hooks/__tests__/useAutoApprovalState.spec.ts index a0c2d65f84..18aed4964e 100644 --- a/webview-ui/src/hooks/__tests__/useAutoApprovalState.spec.ts +++ b/webview-ui/src/hooks/__tests__/useAutoApprovalState.spec.ts @@ -124,7 +124,7 @@ describe("useAutoApprovalState", () => { expect(result.current.effectiveAutoApprovalEnabled).toBe(false) }) - it("should return false when autoApprovalEnabled is true but no toggles are enabled", () => { + it("should return true when autoApprovalEnabled is true but no toggles are enabled", () => { const toggles = { alwaysAllowReadOnly: false, alwaysAllowWrite: false, @@ -140,7 +140,7 @@ describe("useAutoApprovalState", () => { const { result } = renderHook(() => useAutoApprovalState(toggles, true)) - expect(result.current.effectiveAutoApprovalEnabled).toBe(false) + expect(result.current.effectiveAutoApprovalEnabled).toBe(true) }) it("should return true when autoApprovalEnabled is true and at least one toggle is enabled", () => { @@ -217,7 +217,7 @@ describe("useAutoApprovalState", () => { rerender({ toggles: newToggles, autoApprovalEnabled: true }) expect(result.current.hasEnabledOptions).toBe(false) - expect(result.current.effectiveAutoApprovalEnabled).toBe(false) + expect(result.current.effectiveAutoApprovalEnabled).toBe(true) }) it("should recompute effectiveAutoApprovalEnabled when autoApprovalEnabled changes", () => { @@ -263,7 +263,7 @@ describe("useAutoApprovalState", () => { const { result } = renderHook(() => useAutoApprovalState(toggles, true)) expect(result.current.hasEnabledOptions).toBe(false) - expect(result.current.effectiveAutoApprovalEnabled).toBe(false) + expect(result.current.effectiveAutoApprovalEnabled).toBe(true) }) it("should handle mixed truthy/falsy values correctly", () => { diff --git a/webview-ui/src/hooks/useAutoApprovalState.ts b/webview-ui/src/hooks/useAutoApprovalState.ts index 74a165c09b..dd1d6d27f8 100644 --- a/webview-ui/src/hooks/useAutoApprovalState.ts +++ b/webview-ui/src/hooks/useAutoApprovalState.ts @@ -19,8 +19,8 @@ export function useAutoApprovalState(toggles: AutoApprovalToggles, autoApprovalE }, [toggles]) const effectiveAutoApprovalEnabled = useMemo(() => { - return hasEnabledOptions && (autoApprovalEnabled ?? false) - }, [hasEnabledOptions, autoApprovalEnabled]) + return autoApprovalEnabled ?? false + }, [autoApprovalEnabled]) return { hasEnabledOptions, diff --git a/webview-ui/src/i18n/locales/ca/chat.json b/webview-ui/src/i18n/locales/ca/chat.json index a46ec80537..347318b4be 100644 --- a/webview-ui/src/i18n/locales/ca/chat.json +++ b/webview-ui/src/i18n/locales/ca/chat.json @@ -258,7 +258,8 @@ "triggerLabel_zero": "Sense aprovació automàtica", "triggerLabel_one": "1 aprovació automàtica", "triggerLabel_other": "{{count}} aprovacions automàtiques", - "triggerLabelAll": "YOLO" + "triggerLabelAll": "YOLO", + "triggerLabelOff": "Auto-approve desactivat" }, "reasoning": { "thinking": "Pensant", diff --git a/webview-ui/src/i18n/locales/de/chat.json b/webview-ui/src/i18n/locales/de/chat.json index 29db3f3137..39514a5ea1 100644 --- a/webview-ui/src/i18n/locales/de/chat.json +++ b/webview-ui/src/i18n/locales/de/chat.json @@ -258,7 +258,8 @@ "triggerLabel_zero": "Keine automatische Genehmigung", "triggerLabel_one": "1 automatisch genehmigt", "triggerLabel_other": "{{count}} automatisch genehmigt", - "triggerLabelAll": "YOLO" + "triggerLabelAll": "YOLO", + "triggerLabelOff": "Automatische Genehmigung aus" }, "reasoning": { "thinking": "Denke nach", diff --git a/webview-ui/src/i18n/locales/en/chat.json b/webview-ui/src/i18n/locales/en/chat.json index 0261978af8..3c2152d578 100644 --- a/webview-ui/src/i18n/locales/en/chat.json +++ b/webview-ui/src/i18n/locales/en/chat.json @@ -279,7 +279,8 @@ "selectOptionsFirst": "Select at least one option below to enable auto-approval", "toggleAriaLabel": "Toggle auto-approval", "disabledAriaLabel": "Auto-approval disabled - select options first", - "triggerLabel_zero": "No auto-approve", + "triggerLabelOff": "Auto-approve off", + "triggerLabel_zero": "0 auto-approve", "triggerLabel_one": "1 auto-approved", "triggerLabel_other": "{{count}} auto-approved", "triggerLabelAll": "YOLO" diff --git a/webview-ui/src/i18n/locales/es/chat.json b/webview-ui/src/i18n/locales/es/chat.json index 9fee0075b7..84e157ae6f 100644 --- a/webview-ui/src/i18n/locales/es/chat.json +++ b/webview-ui/src/i18n/locales/es/chat.json @@ -258,7 +258,8 @@ "triggerLabel_zero": "Sin aprobación automática", "triggerLabel_one": "1 aprobado automáticamente", "triggerLabel_other": "{{count}} aprobados automáticamente", - "triggerLabelAll": "YOLO" + "triggerLabelAll": "YOLO", + "triggerLabelOff": "Auto-aprobar desactivado" }, "reasoning": { "thinking": "Pensando", diff --git a/webview-ui/src/i18n/locales/fr/chat.json b/webview-ui/src/i18n/locales/fr/chat.json index eaa16946d3..9932bd334f 100644 --- a/webview-ui/src/i18n/locales/fr/chat.json +++ b/webview-ui/src/i18n/locales/fr/chat.json @@ -258,7 +258,8 @@ "triggerLabel_zero": "Pas d'approbation automatique", "triggerLabel_one": "1 approuvé automatiquement", "triggerLabel_other": "{{count}} approuvés automatiquement", - "triggerLabelAll": "YOLO" + "triggerLabelAll": "YOLO", + "triggerLabelOff": "Approbation automatique désactivée" }, "reasoning": { "thinking": "Réflexion", diff --git a/webview-ui/src/i18n/locales/hi/chat.json b/webview-ui/src/i18n/locales/hi/chat.json index 1017801679..6a60ee0bc9 100644 --- a/webview-ui/src/i18n/locales/hi/chat.json +++ b/webview-ui/src/i18n/locales/hi/chat.json @@ -258,7 +258,8 @@ "triggerLabel_zero": "कोई स्वतः-अनुमोदन नहीं", "triggerLabel_one": "1 स्वतः-अनुमोदित", "triggerLabel_other": "{{count}} स्वतः-अनुमोदित", - "triggerLabelAll": "योलो" + "triggerLabelAll": "योलो", + "triggerLabelOff": "स्वतः-अनुमोदन बंद" }, "reasoning": { "thinking": "विचार कर रहा है", diff --git a/webview-ui/src/i18n/locales/id/chat.json b/webview-ui/src/i18n/locales/id/chat.json index 229c74f36d..437bfa19f4 100644 --- a/webview-ui/src/i18n/locales/id/chat.json +++ b/webview-ui/src/i18n/locales/id/chat.json @@ -285,7 +285,8 @@ "triggerLabel_zero": "Tidak ada persetujuan otomatis", "triggerLabel_one": "1 disetujui otomatis", "triggerLabel_other": "{{count}} disetujui otomatis", - "triggerLabelAll": "YOLO" + "triggerLabelAll": "YOLO", + "triggerLabelOff": "Persetujuan otomatis nonaktif" }, "announcement": { "title": "🎉 Roo Code {{version}} Dirilis", diff --git a/webview-ui/src/i18n/locales/it/chat.json b/webview-ui/src/i18n/locales/it/chat.json index c5da5760c9..504d640ae3 100644 --- a/webview-ui/src/i18n/locales/it/chat.json +++ b/webview-ui/src/i18n/locales/it/chat.json @@ -258,7 +258,8 @@ "triggerLabel_zero": "Nessuna approvazione automatica", "triggerLabel_one": "1 approvato automaticamente", "triggerLabel_other": "{{count}} approvati automaticamente", - "triggerLabelAll": "YOLO" + "triggerLabelAll": "YOLO", + "triggerLabelOff": "Approvazione automatica disattivata" }, "reasoning": { "thinking": "Sto pensando", diff --git a/webview-ui/src/i18n/locales/ja/chat.json b/webview-ui/src/i18n/locales/ja/chat.json index 9f8d70d41b..1be15af122 100644 --- a/webview-ui/src/i18n/locales/ja/chat.json +++ b/webview-ui/src/i18n/locales/ja/chat.json @@ -258,7 +258,8 @@ "triggerLabel_zero": "自動承認なし", "triggerLabel_one": "1件自動承認済み", "triggerLabel_other": "{{count}}件自動承認済み", - "triggerLabelAll": "YOLO" + "triggerLabelAll": "YOLO", + "triggerLabelOff": "自動承認オフ" }, "reasoning": { "thinking": "考え中", diff --git a/webview-ui/src/i18n/locales/ko/chat.json b/webview-ui/src/i18n/locales/ko/chat.json index 131e90b5c5..c3dde9de65 100644 --- a/webview-ui/src/i18n/locales/ko/chat.json +++ b/webview-ui/src/i18n/locales/ko/chat.json @@ -258,7 +258,8 @@ "triggerLabel_zero": "자동 승인 없음", "triggerLabel_one": "1개 자동 승인됨", "triggerLabel_other": "{{count}}개 자동 승인됨", - "triggerLabelAll": "욜로" + "triggerLabelAll": "욜로", + "triggerLabelOff": "자동 승인 꺼짐" }, "reasoning": { "thinking": "생각 중", diff --git a/webview-ui/src/i18n/locales/nl/chat.json b/webview-ui/src/i18n/locales/nl/chat.json index 15e40fcf5a..b0b87facf0 100644 --- a/webview-ui/src/i18n/locales/nl/chat.json +++ b/webview-ui/src/i18n/locales/nl/chat.json @@ -258,7 +258,8 @@ "triggerLabel_zero": "Geen automatische goedkeuring", "triggerLabel_one": "1 automatisch goedgekeurd", "triggerLabel_other": "{{count}} automatisch goedgekeurd", - "triggerLabelAll": "YOLO" + "triggerLabelAll": "YOLO", + "triggerLabelOff": "Automatisch goedkeuren uit" }, "announcement": { "title": "🎉 Roo Code {{version}} uitgebracht", diff --git a/webview-ui/src/i18n/locales/pl/chat.json b/webview-ui/src/i18n/locales/pl/chat.json index eab7ea57b3..bc9a82dea7 100644 --- a/webview-ui/src/i18n/locales/pl/chat.json +++ b/webview-ui/src/i18n/locales/pl/chat.json @@ -260,7 +260,8 @@ "triggerLabel_few": "{{count}} automatycznie zaakceptowane", "triggerLabel_many": "{{count}} automatycznie zaakceptowanych", "triggerLabel_other": "{{count}} automatycznie zaakceptowanych", - "triggerLabelAll": "YOLO" + "triggerLabelAll": "YOLO", + "triggerLabelOff": "Automatyczne zatwierdzanie wyłączone" }, "reasoning": { "thinking": "Myślenie", diff --git a/webview-ui/src/i18n/locales/pt-BR/chat.json b/webview-ui/src/i18n/locales/pt-BR/chat.json index 23dac32d1f..3a071031ae 100644 --- a/webview-ui/src/i18n/locales/pt-BR/chat.json +++ b/webview-ui/src/i18n/locales/pt-BR/chat.json @@ -258,7 +258,8 @@ "triggerLabel_zero": "Nenhuma aprovação automática", "triggerLabel_one": "1 aprovado automaticamente", "triggerLabel_other": "{{count}} aprovados automaticamente", - "triggerLabelAll": "YOLO" + "triggerLabelAll": "YOLO", + "triggerLabelOff": "Aprovação automática desativada" }, "reasoning": { "thinking": "Pensando", diff --git a/webview-ui/src/i18n/locales/ru/chat.json b/webview-ui/src/i18n/locales/ru/chat.json index 7ac8dbcd66..5f8b24a4da 100644 --- a/webview-ui/src/i18n/locales/ru/chat.json +++ b/webview-ui/src/i18n/locales/ru/chat.json @@ -260,7 +260,8 @@ "triggerLabel_few": "{{count}} авто-утверждено", "triggerLabel_many": "{{count}} авто-утверждено", "triggerLabel_other": "{{count}} авто-утверждено", - "triggerLabelAll": "YOLO" + "triggerLabelAll": "YOLO", + "triggerLabelOff": "Авто-утверждение выкл" }, "announcement": { "title": "🎉 Выпущен Roo Code {{version}}", diff --git a/webview-ui/src/i18n/locales/tr/chat.json b/webview-ui/src/i18n/locales/tr/chat.json index 3fa655475b..2c9f57269c 100644 --- a/webview-ui/src/i18n/locales/tr/chat.json +++ b/webview-ui/src/i18n/locales/tr/chat.json @@ -258,7 +258,8 @@ "triggerLabel_zero": "Otomatik onay yok", "triggerLabel_one": "1 otomatik onaylandı", "triggerLabel_other": "{{count}} otomatik onaylandı", - "triggerLabelAll": "YOLO" + "triggerLabelAll": "YOLO", + "triggerLabelOff": "Otomatik onay kapalı" }, "reasoning": { "thinking": "Düşünüyor", diff --git a/webview-ui/src/i18n/locales/vi/chat.json b/webview-ui/src/i18n/locales/vi/chat.json index 8c66d8c850..10546abbaf 100644 --- a/webview-ui/src/i18n/locales/vi/chat.json +++ b/webview-ui/src/i18n/locales/vi/chat.json @@ -258,7 +258,8 @@ "triggerLabel_zero": "Không có tự động phê duyệt", "triggerLabel_one": "1 được tự động phê duyệt", "triggerLabel_other": "{{count}} được tự động phê duyệt", - "triggerLabelAll": "YOLO" + "triggerLabelAll": "YOLO", + "triggerLabelOff": "Tự động phê duyệt tắt" }, "reasoning": { "thinking": "Đang suy nghĩ", diff --git a/webview-ui/src/i18n/locales/zh-CN/chat.json b/webview-ui/src/i18n/locales/zh-CN/chat.json index 66629df274..77b1f8d338 100644 --- a/webview-ui/src/i18n/locales/zh-CN/chat.json +++ b/webview-ui/src/i18n/locales/zh-CN/chat.json @@ -258,7 +258,8 @@ "triggerLabel_zero": "无自动批准", "triggerLabel_one": "1 个自动批准", "triggerLabel_other": "{{count}} 个自动批准", - "triggerLabelAll": "人生只有一次" + "triggerLabelAll": "人生只有一次", + "triggerLabelOff": "自动批准已关闭" }, "reasoning": { "thinking": "思考中", diff --git a/webview-ui/src/i18n/locales/zh-TW/chat.json b/webview-ui/src/i18n/locales/zh-TW/chat.json index 2a9dc60f83..64f7126ebb 100644 --- a/webview-ui/src/i18n/locales/zh-TW/chat.json +++ b/webview-ui/src/i18n/locales/zh-TW/chat.json @@ -282,7 +282,8 @@ "triggerLabel_zero": "無自動核准", "triggerLabel_one": "1 個自動核准", "triggerLabel_other": "{{count}} 個自動核准", - "triggerLabelAll": "人生只有一次" + "triggerLabelAll": "人生只有一次", + "triggerLabelOff": "自動批准已關閉" }, "announcement": { "title": "🎉 Roo Code {{version}} 已發布",