From e42dbe95bea0b3fb89066d32fc5e910f4fa96707 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Tue, 23 Sep 2025 05:40:08 +0000 Subject: [PATCH 01/14] feat: Add collapsed/expanded states to ReasoningBlock - Add collapsible UI with chevron icon that shows on hover - Default to collapsed state showing only last 2 lines - Move elapsed time counter next to thinking label - Add smooth transitions and gradient mask for collapsed state --- .../src/components/chat/ReasoningBlock.tsx | 61 ++++++++++++++++--- .../src/context/ExtensionStateContext.tsx | 9 +++ 2 files changed, 60 insertions(+), 10 deletions(-) diff --git a/webview-ui/src/components/chat/ReasoningBlock.tsx b/webview-ui/src/components/chat/ReasoningBlock.tsx index 3fa46df5701..397fc24f953 100644 --- a/webview-ui/src/components/chat/ReasoningBlock.tsx +++ b/webview-ui/src/components/chat/ReasoningBlock.tsx @@ -1,8 +1,10 @@ import React, { useEffect, useRef, useState } from "react" import { useTranslation } from "react-i18next" +import { useExtensionState } from "@src/context/ExtensionStateContext" import MarkdownBlock from "../common/MarkdownBlock" -import { Lightbulb } from "lucide-react" +import { Lightbulb, ChevronDown, ChevronRight } from "lucide-react" +import { cn } from "@/lib/utils" interface ReasoningBlockProps { content: string @@ -16,12 +18,23 @@ interface ReasoningBlockProps { * Render reasoning with a heading and a simple timer. * - Heading uses i18n key chat:reasoning.thinking * - Timer runs while reasoning is active (no persistence) + * - Can be collapsed to show only last 2 lines of content */ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockProps) => { const { t } = useTranslation() + const { reasoningBlockCollapsed } = useExtensionState() + + // Initialize collapsed state based on global setting (default to collapsed) + const [isCollapsed, setIsCollapsed] = useState(reasoningBlockCollapsed !== false) const startTimeRef = useRef(Date.now()) const [elapsed, setElapsed] = useState(0) + const contentRef = useRef(null) + + // Update collapsed state when global setting changes + useEffect(() => { + setIsCollapsed(reasoningBlockCollapsed !== false) + }, [reasoningBlockCollapsed]) // Simple timer that runs while streaming useEffect(() => { @@ -36,22 +49,50 @@ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockP const seconds = Math.floor(elapsed / 1000) const secondsLabel = t("chat:reasoning.seconds", { count: seconds }) + const handleToggle = () => { + setIsCollapsed(!isCollapsed) + } + return ( -
-
+
+
{t("chat:reasoning.thinking")} + {elapsed > 0 && ( + {secondsLabel} + )} +
+
+ {isCollapsed ? : }
- {elapsed > 0 && ( - - {secondsLabel} - - )}
{(content?.trim()?.length ?? 0) > 0 && ( -
- +
+ {isCollapsed ? ( + // When collapsed, render content in a container that shows bottom-aligned text +
+ +
+ ) : ( + + )}
)}
diff --git a/webview-ui/src/context/ExtensionStateContext.tsx b/webview-ui/src/context/ExtensionStateContext.tsx index 7acff476298..81e54306b05 100644 --- a/webview-ui/src/context/ExtensionStateContext.tsx +++ b/webview-ui/src/context/ExtensionStateContext.tsx @@ -26,6 +26,7 @@ import { convertTextMateToHljs } from "@src/utils/textMateToHljs" export interface ExtensionStateContextType extends ExtensionState { historyPreviewCollapsed?: boolean // Add the new state property + reasoningBlockCollapsed?: boolean // Add reasoning block collapsed state didHydrateState: boolean showWelcome: boolean theme: any @@ -142,6 +143,7 @@ export interface ExtensionStateContextType extends ExtensionState { terminalCompressProgressBar?: boolean setTerminalCompressProgressBar: (value: boolean) => void setHistoryPreviewCollapsed: (value: boolean) => void + setReasoningBlockCollapsed: (value: boolean) => void autoCondenseContext: boolean setAutoCondenseContext: (value: boolean) => void autoCondenseContextPercent: number @@ -280,6 +282,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode global: {}, }) const [includeTaskHistoryInEnhance, setIncludeTaskHistoryInEnhance] = useState(true) + const [reasoningBlockCollapsed, setReasoningBlockCollapsed] = useState(true) // Default to collapsed const setListApiConfigMeta = useCallback( (value: ProviderSettingsEntry[]) => setState((prevState) => ({ ...prevState, listApiConfigMeta: value })), @@ -317,6 +320,10 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode if ((newState as any).includeTaskHistoryInEnhance !== undefined) { setIncludeTaskHistoryInEnhance((newState as any).includeTaskHistoryInEnhance) } + // Update reasoningBlockCollapsed if present in state message + if ((newState as any).reasoningBlockCollapsed !== undefined) { + setReasoningBlockCollapsed((newState as any).reasoningBlockCollapsed) + } // Handle marketplace data if present in state message if (newState.marketplaceItems !== undefined) { setMarketplaceItems(newState.marketplaceItems) @@ -413,6 +420,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode const contextValue: ExtensionStateContextType = { ...state, + reasoningBlockCollapsed, didHydrateState, showWelcome, theme, @@ -528,6 +536,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode }), setHistoryPreviewCollapsed: (value) => setState((prevState) => ({ ...prevState, historyPreviewCollapsed: value })), + setReasoningBlockCollapsed, setHasOpenedModeSelector: (value) => setState((prevState) => ({ ...prevState, hasOpenedModeSelector: value })), setAutoCondenseContext: (value) => setState((prevState) => ({ ...prevState, autoCondenseContext: value })), setAutoCondenseContextPercent: (value) => From 164d732b76359ec17d5b30f95845cf53c8fd29a6 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Tue, 23 Sep 2025 05:44:17 +0000 Subject: [PATCH 02/14] feat: Add global setting and keyboard shortcut for reasoning blocks - Add reasoningBlockCollapsed setting to global state - Add backend message handler for persisting collapsed state - Add keyboard shortcut (Ctrl/Cmd+Shift+T) to toggle all reasoning blocks - Default to collapsed state for better UX --- packages/types/src/global-settings.ts | 1 + src/core/webview/webviewMessageHandler.ts | 4 +++ src/shared/WebviewMessage.ts | 1 + .../src/components/chat/ReasoningBlock.tsx | 27 +++++++++++++++++-- 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/packages/types/src/global-settings.ts b/packages/types/src/global-settings.ts index 7e79855f7e1..a56a00fc355 100644 --- a/packages/types/src/global-settings.ts +++ b/packages/types/src/global-settings.ts @@ -147,6 +147,7 @@ export const globalSettingsSchema = z.object({ enhancementApiConfigId: z.string().optional(), includeTaskHistoryInEnhance: z.boolean().optional(), historyPreviewCollapsed: z.boolean().optional(), + reasoningBlockCollapsed: z.boolean().optional(), profileThresholds: z.record(z.string(), z.number()).optional(), hasOpenedModeSelector: z.boolean().optional(), lastModeExportPath: z.string().optional(), diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 6274694da2a..0308fa9657a 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -1617,6 +1617,10 @@ export const webviewMessageHandler = async ( await updateGlobalState("historyPreviewCollapsed", message.bool ?? false) // No need to call postStateToWebview here as the UI already updated optimistically break + case "setReasoningBlockCollapsed": + await updateGlobalState("reasoningBlockCollapsed", message.bool ?? true) + // No need to call postStateToWebview here as the UI already updated optimistically + break case "toggleApiConfigPin": if (message.text) { const currentPinned = getGlobalState("pinnedApiConfigs") ?? {} diff --git a/src/shared/WebviewMessage.ts b/src/shared/WebviewMessage.ts index 541b445fb21..4ff3d76902e 100644 --- a/src/shared/WebviewMessage.ts +++ b/src/shared/WebviewMessage.ts @@ -193,6 +193,7 @@ export interface WebviewMessage { | "focusPanelRequest" | "profileThresholds" | "setHistoryPreviewCollapsed" + | "setReasoningBlockCollapsed" | "openExternal" | "filterMarketplaceItems" | "marketplaceButtonClicked" diff --git a/webview-ui/src/components/chat/ReasoningBlock.tsx b/webview-ui/src/components/chat/ReasoningBlock.tsx index 397fc24f953..a68e34d6175 100644 --- a/webview-ui/src/components/chat/ReasoningBlock.tsx +++ b/webview-ui/src/components/chat/ReasoningBlock.tsx @@ -1,6 +1,7 @@ -import React, { useEffect, useRef, useState } from "react" +import React, { useEffect, useRef, useState, useCallback } from "react" import { useTranslation } from "react-i18next" import { useExtensionState } from "@src/context/ExtensionStateContext" +import { vscode } from "@src/utils/vscode" import MarkdownBlock from "../common/MarkdownBlock" import { Lightbulb, ChevronDown, ChevronRight } from "lucide-react" @@ -22,7 +23,7 @@ interface ReasoningBlockProps { */ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockProps) => { const { t } = useTranslation() - const { reasoningBlockCollapsed } = useExtensionState() + const { reasoningBlockCollapsed, setReasoningBlockCollapsed } = useExtensionState() // Initialize collapsed state based on global setting (default to collapsed) const [isCollapsed, setIsCollapsed] = useState(reasoningBlockCollapsed !== false) @@ -36,6 +37,28 @@ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockP setIsCollapsed(reasoningBlockCollapsed !== false) }, [reasoningBlockCollapsed]) + // Handle keyboard shortcut for toggling collapsed state + const handleKeyDown = useCallback( + (e: KeyboardEvent) => { + // Ctrl/Cmd + Shift + T to toggle reasoning blocks + if ((e.ctrlKey || e.metaKey) && e.shiftKey && e.key === "T") { + e.preventDefault() + const newState = !isCollapsed + setIsCollapsed(newState) + // Update global setting + setReasoningBlockCollapsed(!newState) + // Persist to backend + vscode.postMessage({ type: "setReasoningBlockCollapsed", bool: !newState }) + } + }, + [isCollapsed, setReasoningBlockCollapsed], + ) + + useEffect(() => { + window.addEventListener("keydown", handleKeyDown) + return () => window.removeEventListener("keydown", handleKeyDown) + }, [handleKeyDown]) + // Simple timer that runs while streaming useEffect(() => { if (isLast && isStreaming) { From fb0c26299b57d18e1f63e5324e4ff3be41f473fc Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Tue, 23 Sep 2025 11:59:57 +0100 Subject: [PATCH 03/14] Simpler collapsed state, improvements to 'Roo said' blocks which help with Thinking blocks --- webview-ui/src/components/chat/ChatRow.tsx | 23 +++++++---- .../src/components/chat/ReasoningBlock.tsx | 39 +++++++------------ .../src/components/common/MarkdownBlock.tsx | 6 +++ 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 ++ 21 files changed, 89 insertions(+), 33 deletions(-) diff --git a/webview-ui/src/components/chat/ChatRow.tsx b/webview-ui/src/components/chat/ChatRow.tsx index dc5b007dabe..f1dfd9115b6 100644 --- a/webview-ui/src/components/chat/ChatRow.tsx +++ b/webview-ui/src/components/chat/ChatRow.tsx @@ -60,6 +60,7 @@ import { PocketKnife, FolderTree, TerminalSquare, + MessageCircle, } from "lucide-react" import { cn } from "@/lib/utils" @@ -1118,14 +1119,20 @@ export const ChatRowContent = ({ case "text": return (
- - {message.images && message.images.length > 0 && ( -
- {message.images.map((image, index) => ( - - ))} -
- )} +
+ + {t("chat:text.rooSaid")} +
+
+ + {message.images && message.images.length > 0 && ( +
+ {message.images.map((image, index) => ( + + ))} +
+ )} +
) case "user_feedback": diff --git a/webview-ui/src/components/chat/ReasoningBlock.tsx b/webview-ui/src/components/chat/ReasoningBlock.tsx index a68e34d6175..c7473d6105d 100644 --- a/webview-ui/src/components/chat/ReasoningBlock.tsx +++ b/webview-ui/src/components/chat/ReasoningBlock.tsx @@ -4,7 +4,7 @@ import { useExtensionState } from "@src/context/ExtensionStateContext" import { vscode } from "@src/utils/vscode" import MarkdownBlock from "../common/MarkdownBlock" -import { Lightbulb, ChevronDown, ChevronRight } from "lucide-react" +import { Lightbulb, ChevronDown } from "lucide-react" import { cn } from "@/lib/utils" interface ReasoningBlockProps { @@ -76,6 +76,14 @@ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockP setIsCollapsed(!isCollapsed) } + /* + Thinking blocks should be + - Collapsed by default + - When streaming, show 1-2 lines of content + - When not streaming, not show any content + - When expanded, always show full content + */ + return (
{secondsLabel} )}
-
- {isCollapsed ? : } -
+
{(content?.trim()?.length ?? 0) > 0 && (
- {isCollapsed ? ( - // When collapsed, render content in a container that shows bottom-aligned text -
- -
- ) : ( - - )} + className="border-l border-vscode-descriptionForeground/20 ml-2 pl-4 pb-1 text-vscode-descriptionForeground"> + {!isCollapsed && }
)}
diff --git a/webview-ui/src/components/common/MarkdownBlock.tsx b/webview-ui/src/components/common/MarkdownBlock.tsx index 24b0eaa4b43..47c61a5ce02 100644 --- a/webview-ui/src/components/common/MarkdownBlock.tsx +++ b/webview-ui/src/components/common/MarkdownBlock.tsx @@ -146,6 +146,12 @@ const StyledMarkdown = styled.div` } } + h1 { + font-size: 1.65em; + font-weight: 700; + margin: 1.35em 0 0.5em; + } + h2 { font-size: 1.35em; font-weight: 500; diff --git a/webview-ui/src/i18n/locales/ca/chat.json b/webview-ui/src/i18n/locales/ca/chat.json index 0d84ca17c88..65ffdfa0151 100644 --- a/webview-ui/src/i18n/locales/ca/chat.json +++ b/webview-ui/src/i18n/locales/ca/chat.json @@ -220,6 +220,9 @@ }, "response": "Resposta", "arguments": "Arguments", + "text": { + "rooSaid": "En Roo ha dit" + }, "feedback": { "youSaid": "Has dit" }, diff --git a/webview-ui/src/i18n/locales/de/chat.json b/webview-ui/src/i18n/locales/de/chat.json index 43f20643458..a68bc69b932 100644 --- a/webview-ui/src/i18n/locales/de/chat.json +++ b/webview-ui/src/i18n/locales/de/chat.json @@ -220,6 +220,9 @@ }, "response": "Antwort", "arguments": "Argumente", + "text": { + "rooSaid": "Roo hat gesagt" + }, "feedback": { "youSaid": "Du hast gesagt" }, diff --git a/webview-ui/src/i18n/locales/en/chat.json b/webview-ui/src/i18n/locales/en/chat.json index 99464dfb607..7bd0cde9d34 100644 --- a/webview-ui/src/i18n/locales/en/chat.json +++ b/webview-ui/src/i18n/locales/en/chat.json @@ -239,6 +239,9 @@ }, "response": "Response", "arguments": "Arguments", + "text": { + "rooSaid": "Roo said" + }, "feedback": { "youSaid": "You said" }, diff --git a/webview-ui/src/i18n/locales/es/chat.json b/webview-ui/src/i18n/locales/es/chat.json index a64927e05e8..20de4dcaba6 100644 --- a/webview-ui/src/i18n/locales/es/chat.json +++ b/webview-ui/src/i18n/locales/es/chat.json @@ -220,6 +220,9 @@ }, "response": "Respuesta", "arguments": "Argumentos", + "text": { + "rooSaid": "Roo ha dicho" + }, "feedback": { "youSaid": "Has dicho" }, diff --git a/webview-ui/src/i18n/locales/fr/chat.json b/webview-ui/src/i18n/locales/fr/chat.json index 151fe3932eb..4d31f328ad3 100644 --- a/webview-ui/src/i18n/locales/fr/chat.json +++ b/webview-ui/src/i18n/locales/fr/chat.json @@ -220,6 +220,9 @@ }, "response": "Réponse", "arguments": "Arguments", + "text": { + "rooSaid": "Roo a dit" + }, "feedback": { "youSaid": "Tu as dit" }, diff --git a/webview-ui/src/i18n/locales/hi/chat.json b/webview-ui/src/i18n/locales/hi/chat.json index a53070834c4..17b5ceef01d 100644 --- a/webview-ui/src/i18n/locales/hi/chat.json +++ b/webview-ui/src/i18n/locales/hi/chat.json @@ -220,6 +220,9 @@ }, "response": "प्रतिक्रिया", "arguments": "आर्ग्युमेंट्स", + "text": { + "rooSaid": "रू ने कहा" + }, "feedback": { "youSaid": "आपने कहा" }, diff --git a/webview-ui/src/i18n/locales/id/chat.json b/webview-ui/src/i18n/locales/id/chat.json index e5b73067f40..532ab413031 100644 --- a/webview-ui/src/i18n/locales/id/chat.json +++ b/webview-ui/src/i18n/locales/id/chat.json @@ -242,6 +242,9 @@ }, "response": "Respons", "arguments": "Argumen", + "text": { + "rooSaid": "Roo berkata" + }, "feedback": { "youSaid": "Anda bilang" }, diff --git a/webview-ui/src/i18n/locales/it/chat.json b/webview-ui/src/i18n/locales/it/chat.json index f3fadd84d8e..fd3bf967d32 100644 --- a/webview-ui/src/i18n/locales/it/chat.json +++ b/webview-ui/src/i18n/locales/it/chat.json @@ -220,6 +220,9 @@ }, "response": "Risposta", "arguments": "Argomenti", + "text": { + "rooSaid": "Roo ha detto" + }, "feedback": { "youSaid": "Hai detto" }, diff --git a/webview-ui/src/i18n/locales/ja/chat.json b/webview-ui/src/i18n/locales/ja/chat.json index 1b0945e0d60..52e633b3ef5 100644 --- a/webview-ui/src/i18n/locales/ja/chat.json +++ b/webview-ui/src/i18n/locales/ja/chat.json @@ -220,6 +220,9 @@ }, "response": "応答", "arguments": "引数", + "text": { + "rooSaid": "Rooの発言" + }, "feedback": { "youSaid": "あなたの発言" }, diff --git a/webview-ui/src/i18n/locales/ko/chat.json b/webview-ui/src/i18n/locales/ko/chat.json index a33131fb519..991955f1e8a 100644 --- a/webview-ui/src/i18n/locales/ko/chat.json +++ b/webview-ui/src/i18n/locales/ko/chat.json @@ -220,6 +220,9 @@ }, "response": "응답", "arguments": "인수", + "text": { + "rooSaid": "루가 말했다" + }, "feedback": { "youSaid": "당신은 말했다" }, diff --git a/webview-ui/src/i18n/locales/nl/chat.json b/webview-ui/src/i18n/locales/nl/chat.json index 3de1b2f23cc..e5d779f70c2 100644 --- a/webview-ui/src/i18n/locales/nl/chat.json +++ b/webview-ui/src/i18n/locales/nl/chat.json @@ -215,6 +215,9 @@ }, "response": "Antwoord", "arguments": "Argumenten", + "text": { + "rooSaid": "Roo zei" + }, "feedback": { "youSaid": "Jij zei" }, diff --git a/webview-ui/src/i18n/locales/pl/chat.json b/webview-ui/src/i18n/locales/pl/chat.json index 30353c2eabb..26e8e59e2c6 100644 --- a/webview-ui/src/i18n/locales/pl/chat.json +++ b/webview-ui/src/i18n/locales/pl/chat.json @@ -220,6 +220,9 @@ }, "response": "Odpowiedź", "arguments": "Argumenty", + "text": { + "rooSaid": "Roo powiedział" + }, "feedback": { "youSaid": "Powiedziałeś" }, diff --git a/webview-ui/src/i18n/locales/pt-BR/chat.json b/webview-ui/src/i18n/locales/pt-BR/chat.json index d6d0ba13fc9..b14a1bbaa79 100644 --- a/webview-ui/src/i18n/locales/pt-BR/chat.json +++ b/webview-ui/src/i18n/locales/pt-BR/chat.json @@ -220,6 +220,9 @@ }, "response": "Resposta", "arguments": "Argumentos", + "text": { + "rooSaid": "Roo disse" + }, "feedback": { "youSaid": "Você disse" }, diff --git a/webview-ui/src/i18n/locales/ru/chat.json b/webview-ui/src/i18n/locales/ru/chat.json index 2d6e08377c0..c5acc9f25a3 100644 --- a/webview-ui/src/i18n/locales/ru/chat.json +++ b/webview-ui/src/i18n/locales/ru/chat.json @@ -216,6 +216,9 @@ }, "response": "Ответ", "arguments": "Аргументы", + "text": { + "rooSaid": "Ру сказал" + }, "feedback": { "youSaid": "Вы сказали" }, diff --git a/webview-ui/src/i18n/locales/tr/chat.json b/webview-ui/src/i18n/locales/tr/chat.json index 660766f0c5d..8e2a1077dfb 100644 --- a/webview-ui/src/i18n/locales/tr/chat.json +++ b/webview-ui/src/i18n/locales/tr/chat.json @@ -221,6 +221,9 @@ }, "response": "Yanıt", "arguments": "Argümanlar", + "text": { + "rooSaid": "Roo dedi" + }, "feedback": { "youSaid": "Dediniz ki" }, diff --git a/webview-ui/src/i18n/locales/vi/chat.json b/webview-ui/src/i18n/locales/vi/chat.json index ed328e44149..221ced0377a 100644 --- a/webview-ui/src/i18n/locales/vi/chat.json +++ b/webview-ui/src/i18n/locales/vi/chat.json @@ -221,6 +221,9 @@ }, "response": "Phản hồi", "arguments": "Tham số", + "text": { + "rooSaid": "Roo đã nói" + }, "feedback": { "youSaid": "Bạn đã nói" }, diff --git a/webview-ui/src/i18n/locales/zh-CN/chat.json b/webview-ui/src/i18n/locales/zh-CN/chat.json index 388a0cafe2b..cbb0e8633ce 100644 --- a/webview-ui/src/i18n/locales/zh-CN/chat.json +++ b/webview-ui/src/i18n/locales/zh-CN/chat.json @@ -221,6 +221,9 @@ }, "response": "响应", "arguments": "参数", + "text": { + "rooSaid": "Roo 说" + }, "feedback": { "youSaid": "你说" }, diff --git a/webview-ui/src/i18n/locales/zh-TW/chat.json b/webview-ui/src/i18n/locales/zh-TW/chat.json index bd1d9566d8d..dbc4b3dd9f8 100644 --- a/webview-ui/src/i18n/locales/zh-TW/chat.json +++ b/webview-ui/src/i18n/locales/zh-TW/chat.json @@ -240,6 +240,9 @@ }, "response": "回應", "arguments": "參數", + "text": { + "rooSaid": "Roo 說" + }, "feedback": { "youSaid": "您說" }, From 16a00ae6b3cc688afaae1d18acee9b7a7094ee2c Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Tue, 23 Sep 2025 12:31:47 +0100 Subject: [PATCH 04/14] Switches the keyboard shortcut to be a proper, global, customizable one --- packages/types/src/vscode.ts | 1 + src/activate/registerCommands.ts | 12 +++++ src/package.json | 12 +++++ src/package.nls.json | 1 + src/shared/ExtensionMessage.ts | 1 + .../src/components/chat/ReasoningBlock.tsx | 51 +++++-------------- .../src/context/ExtensionStateContext.tsx | 8 +++ webview-ui/src/i18n/locales/ca/chat.json | 4 +- webview-ui/src/i18n/locales/de/chat.json | 4 +- webview-ui/src/i18n/locales/en/chat.json | 4 +- webview-ui/src/i18n/locales/es/chat.json | 4 +- webview-ui/src/i18n/locales/fr/chat.json | 4 +- webview-ui/src/i18n/locales/hi/chat.json | 4 +- webview-ui/src/i18n/locales/id/chat.json | 4 +- webview-ui/src/i18n/locales/it/chat.json | 4 +- webview-ui/src/i18n/locales/ja/chat.json | 4 +- webview-ui/src/i18n/locales/ko/chat.json | 4 +- webview-ui/src/i18n/locales/nl/chat.json | 4 +- webview-ui/src/i18n/locales/pl/chat.json | 4 +- webview-ui/src/i18n/locales/pt-BR/chat.json | 4 +- webview-ui/src/i18n/locales/ru/chat.json | 4 +- webview-ui/src/i18n/locales/tr/chat.json | 4 +- webview-ui/src/i18n/locales/vi/chat.json | 4 +- webview-ui/src/i18n/locales/zh-CN/chat.json | 4 +- webview-ui/src/i18n/locales/zh-TW/chat.json | 4 +- 25 files changed, 103 insertions(+), 55 deletions(-) diff --git a/packages/types/src/vscode.ts b/packages/types/src/vscode.ts index d22ebdab229..57d8c9a1eb0 100644 --- a/packages/types/src/vscode.ts +++ b/packages/types/src/vscode.ts @@ -54,6 +54,7 @@ export const commandIds = [ "acceptInput", "focusPanel", "toggleAutoApprove", + "toggleThinkingBlocks", ] as const export type CommandId = (typeof commandIds)[number] diff --git a/src/activate/registerCommands.ts b/src/activate/registerCommands.ts index 41c127333d8..ac216f24b51 100644 --- a/src/activate/registerCommands.ts +++ b/src/activate/registerCommands.ts @@ -233,6 +233,18 @@ const getCommandsMap = ({ context, outputChannel, provider }: RegisterCommandOpt action: "toggleAutoApprove", }) }, + toggleThinkingBlocks: async () => { + const visibleProvider = getVisibleProviderOrLog(outputChannel) + + if (!visibleProvider) { + return + } + + visibleProvider.postMessageToWebview({ + type: "action", + action: "toggleThinkingBlocks", + }) + }, }) export const openClineInNewTab = async ({ context, outputChannel }: Omit) => { diff --git a/src/package.json b/src/package.json index 51c68ace574..92727a6f330 100644 --- a/src/package.json +++ b/src/package.json @@ -179,6 +179,11 @@ "command": "roo-cline.toggleAutoApprove", "title": "%command.toggleAutoApprove.title%", "category": "%configuration.title%" + }, + { + "command": "roo-cline.toggleThinkingBlocks", + "title": "%command.toggleThinkingBlocks.title%", + "category": "%configuration.title%" } ], "menus": { @@ -322,6 +327,13 @@ "mac": "cmd+alt+a", "win": "ctrl+alt+a", "linux": "ctrl+alt+a" + }, + { + "command": "roo-cline.toggleThinkingBlocks", + "key": "cmd+alt+shift+t", + "mac": "cmd+alt+shift+t", + "win": "ctrl+alt+shift+t", + "linux": "ctrl+alt+shift+t" } ], "submenus": [ diff --git a/src/package.nls.json b/src/package.nls.json index 1db69777ac1..1b927a38cae 100644 --- a/src/package.nls.json +++ b/src/package.nls.json @@ -27,6 +27,7 @@ "command.terminal.explainCommand.title": "Explain This Command", "command.acceptInput.title": "Accept Input/Suggestion", "command.toggleAutoApprove.title": "Toggle Auto-Approve", + "command.toggleThinkingBlocks.title": "Toggle Thinking Blocks", "configuration.title": "Roo Code", "commands.allowedCommands.description": "Commands that can be auto-executed when 'Always approve execute operations' is enabled", "commands.deniedCommands.description": "Command prefixes that will be automatically denied without asking for approval. In case of conflicts with allowed commands, the longest prefix match takes precedence. Add * to deny all commands.", diff --git a/src/shared/ExtensionMessage.ts b/src/shared/ExtensionMessage.ts index 7772e8d8174..b746807616b 100644 --- a/src/shared/ExtensionMessage.ts +++ b/src/shared/ExtensionMessage.ts @@ -138,6 +138,7 @@ export interface ExtensionMessage { | "focusInput" | "switchTab" | "toggleAutoApprove" + | "toggleThinkingBlocks" invoke?: "newChat" | "sendMessage" | "primaryButtonClick" | "secondaryButtonClick" | "setChatBoxMessage" state?: ExtensionState images?: string[] diff --git a/webview-ui/src/components/chat/ReasoningBlock.tsx b/webview-ui/src/components/chat/ReasoningBlock.tsx index c7473d6105d..e7a75bd855b 100644 --- a/webview-ui/src/components/chat/ReasoningBlock.tsx +++ b/webview-ui/src/components/chat/ReasoningBlock.tsx @@ -1,10 +1,9 @@ -import React, { useEffect, useRef, useState, useCallback } from "react" +import { useEffect, useRef, useState } from "react" import { useTranslation } from "react-i18next" import { useExtensionState } from "@src/context/ExtensionStateContext" -import { vscode } from "@src/utils/vscode" import MarkdownBlock from "../common/MarkdownBlock" -import { Lightbulb, ChevronDown } from "lucide-react" +import { Lightbulb, ChevronUp } from "lucide-react" import { cn } from "@/lib/utils" interface ReasoningBlockProps { @@ -23,7 +22,7 @@ interface ReasoningBlockProps { */ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockProps) => { const { t } = useTranslation() - const { reasoningBlockCollapsed, setReasoningBlockCollapsed } = useExtensionState() + const { reasoningBlockCollapsed } = useExtensionState() // Initialize collapsed state based on global setting (default to collapsed) const [isCollapsed, setIsCollapsed] = useState(reasoningBlockCollapsed !== false) @@ -37,28 +36,6 @@ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockP setIsCollapsed(reasoningBlockCollapsed !== false) }, [reasoningBlockCollapsed]) - // Handle keyboard shortcut for toggling collapsed state - const handleKeyDown = useCallback( - (e: KeyboardEvent) => { - // Ctrl/Cmd + Shift + T to toggle reasoning blocks - if ((e.ctrlKey || e.metaKey) && e.shiftKey && e.key === "T") { - e.preventDefault() - const newState = !isCollapsed - setIsCollapsed(newState) - // Update global setting - setReasoningBlockCollapsed(!newState) - // Persist to backend - vscode.postMessage({ type: "setReasoningBlockCollapsed", bool: !newState }) - } - }, - [isCollapsed, setReasoningBlockCollapsed], - ) - - useEffect(() => { - window.addEventListener("keydown", handleKeyDown) - return () => window.removeEventListener("keydown", handleKeyDown) - }, [handleKeyDown]) - // Simple timer that runs while streaming useEffect(() => { if (isLast && isStreaming) { @@ -76,14 +53,6 @@ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockP setIsCollapsed(!isCollapsed) } - /* - Thinking blocks should be - - Collapsed by default - - When streaming, show 1-2 lines of content - - When not streaming, not show any content - - When expanded, always show full content - */ - return (
{secondsLabel} )}
- +
+ + {isCollapsed ? t("chat:reasoning.expand") : t("chat:reasoning.collapse")} + + +
{(content?.trim()?.length ?? 0) > 0 && (
{ + const newValue = !prev + // Also send the update to the extension to persist + vscode.postMessage({ type: "setReasoningBlockCollapsed", bool: newValue }) + return newValue + }) } break } diff --git a/webview-ui/src/i18n/locales/ca/chat.json b/webview-ui/src/i18n/locales/ca/chat.json index 65ffdfa0151..e5ce304e920 100644 --- a/webview-ui/src/i18n/locales/ca/chat.json +++ b/webview-ui/src/i18n/locales/ca/chat.json @@ -271,7 +271,9 @@ }, "reasoning": { "thinking": "Pensant", - "seconds": "{{count}}s" + "seconds": "{{count}}s", + "collapse": "Replegar", + "expand": "Expandir" }, "contextCondense": { "title": "Context condensat", diff --git a/webview-ui/src/i18n/locales/de/chat.json b/webview-ui/src/i18n/locales/de/chat.json index a68bc69b932..bc399a7a92b 100644 --- a/webview-ui/src/i18n/locales/de/chat.json +++ b/webview-ui/src/i18n/locales/de/chat.json @@ -271,7 +271,9 @@ }, "reasoning": { "thinking": "Denke nach", - "seconds": "{{count}}s" + "seconds": "{{count}}s", + "collapse": "Einklappen", + "expand": "Erweitern" }, "contextCondense": { "title": "Kontext komprimiert", diff --git a/webview-ui/src/i18n/locales/en/chat.json b/webview-ui/src/i18n/locales/en/chat.json index 7bd0cde9d34..01a1413b3c7 100644 --- a/webview-ui/src/i18n/locales/en/chat.json +++ b/webview-ui/src/i18n/locales/en/chat.json @@ -305,7 +305,9 @@ }, "reasoning": { "thinking": "Thinking", - "seconds": "{{count}}s" + "seconds": "{{count}}s", + "collapse": "Collapse", + "expand": "Expand" }, "followUpSuggest": { "copyToInput": "Copy to input (same as shift + click)", diff --git a/webview-ui/src/i18n/locales/es/chat.json b/webview-ui/src/i18n/locales/es/chat.json index 20de4dcaba6..b2f9da4770f 100644 --- a/webview-ui/src/i18n/locales/es/chat.json +++ b/webview-ui/src/i18n/locales/es/chat.json @@ -271,7 +271,9 @@ }, "reasoning": { "thinking": "Pensando", - "seconds": "{{count}}s" + "seconds": "{{count}}s", + "collapse": "Contraer", + "expand": "Expandir" }, "contextCondense": { "title": "Contexto condensado", diff --git a/webview-ui/src/i18n/locales/fr/chat.json b/webview-ui/src/i18n/locales/fr/chat.json index 4d31f328ad3..755f1bf0965 100644 --- a/webview-ui/src/i18n/locales/fr/chat.json +++ b/webview-ui/src/i18n/locales/fr/chat.json @@ -271,7 +271,9 @@ }, "reasoning": { "thinking": "Réflexion", - "seconds": "{{count}}s" + "seconds": "{{count}}s", + "collapse": "Réduire", + "expand": "Développer" }, "contextCondense": { "title": "Contexte condensé", diff --git a/webview-ui/src/i18n/locales/hi/chat.json b/webview-ui/src/i18n/locales/hi/chat.json index 17b5ceef01d..5e9dcbcca11 100644 --- a/webview-ui/src/i18n/locales/hi/chat.json +++ b/webview-ui/src/i18n/locales/hi/chat.json @@ -271,7 +271,9 @@ }, "reasoning": { "thinking": "विचार कर रहा है", - "seconds": "{{count}} सेकंड" + "seconds": "{{count}} सेकंड", + "collapse": "संक्षिप्त करें", + "expand": "विस्तृत करें" }, "contextCondense": { "title": "संदर्भ संक्षिप्त किया गया", diff --git a/webview-ui/src/i18n/locales/id/chat.json b/webview-ui/src/i18n/locales/id/chat.json index 532ab413031..eb1850ab240 100644 --- a/webview-ui/src/i18n/locales/id/chat.json +++ b/webview-ui/src/i18n/locales/id/chat.json @@ -309,7 +309,9 @@ }, "reasoning": { "thinking": "Berpikir", - "seconds": "{{count}}d" + "seconds": "{{count}}d", + "collapse": "Ciutkan", + "expand": "Perluas" }, "followUpSuggest": { "copyToInput": "Salin ke input (sama dengan shift + klik)", diff --git a/webview-ui/src/i18n/locales/it/chat.json b/webview-ui/src/i18n/locales/it/chat.json index fd3bf967d32..39c12526463 100644 --- a/webview-ui/src/i18n/locales/it/chat.json +++ b/webview-ui/src/i18n/locales/it/chat.json @@ -271,7 +271,9 @@ }, "reasoning": { "thinking": "Sto pensando", - "seconds": "{{count}}s" + "seconds": "{{count}}s", + "collapse": "Comprimi", + "expand": "Espandi" }, "contextCondense": { "title": "Contesto condensato", diff --git a/webview-ui/src/i18n/locales/ja/chat.json b/webview-ui/src/i18n/locales/ja/chat.json index 52e633b3ef5..fee68afc1be 100644 --- a/webview-ui/src/i18n/locales/ja/chat.json +++ b/webview-ui/src/i18n/locales/ja/chat.json @@ -271,7 +271,9 @@ }, "reasoning": { "thinking": "考え中", - "seconds": "{{count}}秒" + "seconds": "{{count}}秒", + "collapse": "折りたたむ", + "expand": "展開" }, "contextCondense": { "title": "コンテキスト要約", diff --git a/webview-ui/src/i18n/locales/ko/chat.json b/webview-ui/src/i18n/locales/ko/chat.json index 991955f1e8a..ef730f51925 100644 --- a/webview-ui/src/i18n/locales/ko/chat.json +++ b/webview-ui/src/i18n/locales/ko/chat.json @@ -271,7 +271,9 @@ }, "reasoning": { "thinking": "생각 중", - "seconds": "{{count}}초" + "seconds": "{{count}}초", + "collapse": "접기", + "expand": "펼치기" }, "contextCondense": { "title": "컨텍스트 요약됨", diff --git a/webview-ui/src/i18n/locales/nl/chat.json b/webview-ui/src/i18n/locales/nl/chat.json index e5d779f70c2..b7280c0242d 100644 --- a/webview-ui/src/i18n/locales/nl/chat.json +++ b/webview-ui/src/i18n/locales/nl/chat.json @@ -282,7 +282,9 @@ }, "reasoning": { "thinking": "Denkt na", - "seconds": "{{count}}s" + "seconds": "{{count}}s", + "collapse": "Samenvouwen", + "expand": "Uitvouwen" }, "contextCondense": { "title": "Context samengevat", diff --git a/webview-ui/src/i18n/locales/pl/chat.json b/webview-ui/src/i18n/locales/pl/chat.json index 26e8e59e2c6..407db726b3b 100644 --- a/webview-ui/src/i18n/locales/pl/chat.json +++ b/webview-ui/src/i18n/locales/pl/chat.json @@ -271,7 +271,9 @@ }, "reasoning": { "thinking": "Myślenie", - "seconds": "{{count}} s" + "seconds": "{{count}} s", + "collapse": "Zwiń", + "expand": "Rozwiń" }, "contextCondense": { "title": "Kontekst skondensowany", diff --git a/webview-ui/src/i18n/locales/pt-BR/chat.json b/webview-ui/src/i18n/locales/pt-BR/chat.json index b14a1bbaa79..39320d31f8f 100644 --- a/webview-ui/src/i18n/locales/pt-BR/chat.json +++ b/webview-ui/src/i18n/locales/pt-BR/chat.json @@ -271,7 +271,9 @@ }, "reasoning": { "thinking": "Pensando", - "seconds": "{{count}}s" + "seconds": "{{count}}s", + "collapse": "Recolher", + "expand": "Expandir" }, "contextCondense": { "title": "Contexto condensado", diff --git a/webview-ui/src/i18n/locales/ru/chat.json b/webview-ui/src/i18n/locales/ru/chat.json index c5acc9f25a3..9d819c6e8cf 100644 --- a/webview-ui/src/i18n/locales/ru/chat.json +++ b/webview-ui/src/i18n/locales/ru/chat.json @@ -283,7 +283,9 @@ }, "reasoning": { "thinking": "Обдумывание", - "seconds": "{{count}}с" + "seconds": "{{count}}с", + "collapse": "Свернуть", + "expand": "Развернуть" }, "contextCondense": { "title": "Контекст сжат", diff --git a/webview-ui/src/i18n/locales/tr/chat.json b/webview-ui/src/i18n/locales/tr/chat.json index 8e2a1077dfb..48f605f126d 100644 --- a/webview-ui/src/i18n/locales/tr/chat.json +++ b/webview-ui/src/i18n/locales/tr/chat.json @@ -272,7 +272,9 @@ }, "reasoning": { "thinking": "Düşünüyor", - "seconds": "{{count}}sn" + "seconds": "{{count}}sn", + "collapse": "Daralt", + "expand": "Genişlet" }, "contextCondense": { "title": "Bağlam Özetlendi", diff --git a/webview-ui/src/i18n/locales/vi/chat.json b/webview-ui/src/i18n/locales/vi/chat.json index 221ced0377a..ca48d0901bc 100644 --- a/webview-ui/src/i18n/locales/vi/chat.json +++ b/webview-ui/src/i18n/locales/vi/chat.json @@ -272,7 +272,9 @@ }, "reasoning": { "thinking": "Đang suy nghĩ", - "seconds": "{{count}} giây" + "seconds": "{{count}} giây", + "collapse": "Thu gọn", + "expand": "Mở rộng" }, "contextCondense": { "title": "Ngữ cảnh đã tóm tắt", diff --git a/webview-ui/src/i18n/locales/zh-CN/chat.json b/webview-ui/src/i18n/locales/zh-CN/chat.json index cbb0e8633ce..b2a6040f622 100644 --- a/webview-ui/src/i18n/locales/zh-CN/chat.json +++ b/webview-ui/src/i18n/locales/zh-CN/chat.json @@ -272,7 +272,9 @@ }, "reasoning": { "thinking": "思考中", - "seconds": "{{count}}秒" + "seconds": "{{count}}秒", + "collapse": "收起", + "expand": "展开" }, "contextCondense": { "title": "上下文已压缩", diff --git a/webview-ui/src/i18n/locales/zh-TW/chat.json b/webview-ui/src/i18n/locales/zh-TW/chat.json index dbc4b3dd9f8..b3220412a7f 100644 --- a/webview-ui/src/i18n/locales/zh-TW/chat.json +++ b/webview-ui/src/i18n/locales/zh-TW/chat.json @@ -307,7 +307,9 @@ }, "reasoning": { "thinking": "思考中", - "seconds": "{{count}} 秒" + "seconds": "{{count}} 秒", + "collapse": "收合", + "expand": "展開" }, "followUpSuggest": { "copyToInput": "複製到輸入框 (或按住 Shift 並點選)", From 08b068041f1812d752d91005ca79a92636ee433b Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Tue, 23 Sep 2025 12:41:02 +0100 Subject: [PATCH 05/14] Roo has the need to comment on everything --- webview-ui/src/components/chat/ReasoningBlock.tsx | 9 --------- 1 file changed, 9 deletions(-) diff --git a/webview-ui/src/components/chat/ReasoningBlock.tsx b/webview-ui/src/components/chat/ReasoningBlock.tsx index e7a75bd855b..91fddccb587 100644 --- a/webview-ui/src/components/chat/ReasoningBlock.tsx +++ b/webview-ui/src/components/chat/ReasoningBlock.tsx @@ -14,29 +14,20 @@ interface ReasoningBlockProps { metadata?: any } -/** - * Render reasoning with a heading and a simple timer. - * - Heading uses i18n key chat:reasoning.thinking - * - Timer runs while reasoning is active (no persistence) - * - Can be collapsed to show only last 2 lines of content - */ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockProps) => { const { t } = useTranslation() const { reasoningBlockCollapsed } = useExtensionState() - // Initialize collapsed state based on global setting (default to collapsed) const [isCollapsed, setIsCollapsed] = useState(reasoningBlockCollapsed !== false) const startTimeRef = useRef(Date.now()) const [elapsed, setElapsed] = useState(0) const contentRef = useRef(null) - // Update collapsed state when global setting changes useEffect(() => { setIsCollapsed(reasoningBlockCollapsed !== false) }, [reasoningBlockCollapsed]) - // Simple timer that runs while streaming useEffect(() => { if (isLast && isStreaming) { const tick = () => setElapsed(Date.now() - startTimeRef.current) From 20413b13baaa17356a60566682eae5446b607fd3 Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Tue, 23 Sep 2025 12:49:22 +0100 Subject: [PATCH 06/14] feat: add missing translations for toggleThinkingBlocks and newTaskRequireTodos - Added 'Toggle Thinking Blocks' translation to all 17 language files - Added 'Require todos parameter' translation to all 17 language files - Ensures consistency across all supported locales --- src/package.nls.ca.json | 2 ++ src/package.nls.de.json | 2 ++ src/package.nls.es.json | 2 ++ src/package.nls.fr.json | 2 ++ src/package.nls.hi.json | 2 ++ src/package.nls.id.json | 2 ++ src/package.nls.it.json | 2 ++ src/package.nls.ja.json | 2 ++ src/package.nls.ko.json | 2 ++ src/package.nls.nl.json | 2 ++ src/package.nls.pl.json | 2 ++ src/package.nls.pt-BR.json | 2 ++ src/package.nls.ru.json | 2 ++ src/package.nls.tr.json | 2 ++ src/package.nls.vi.json | 2 ++ src/package.nls.zh-CN.json | 2 ++ src/package.nls.zh-TW.json | 2 ++ webview-ui/src/components/chat/ReasoningBlock.tsx | 4 ++-- 18 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/package.nls.ca.json b/src/package.nls.ca.json index 024de068700..6f011f4430b 100644 --- a/src/package.nls.ca.json +++ b/src/package.nls.ca.json @@ -15,6 +15,7 @@ "command.terminal.explainCommand.title": "Explicar Aquesta Ordre", "command.acceptInput.title": "Acceptar Entrada/Suggeriment", "command.toggleAutoApprove.title": "Alternar Auto-Aprovació", + "command.toggleThinkingBlocks.title": "Alternar Blocs de Pensament", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", @@ -40,5 +41,6 @@ "settings.autoImportSettingsPath.description": "Ruta a un fitxer de configuració de RooCode per importar automàticament en iniciar l'extensió. Admet rutes absolutes i rutes relatives al directori d'inici (per exemple, '~/Documents/roo-code-settings.json'). Deixeu-ho en blanc per desactivar la importació automàtica.", "settings.useAgentRules.description": "Activa la càrrega de fitxers AGENTS.md per a regles específiques de l'agent (vegeu https://agent-rules.org/)", "settings.apiRequestTimeout.description": "Temps màxim en segons per esperar les respostes de l'API (0 = sense temps d'espera, 1-3600s, per defecte: 600s). Es recomanen valors més alts per a proveïdors locals com LM Studio i Ollama que poden necessitar més temps de processament.", + "settings.newTaskRequireTodos.description": "Requereix el paràmetre 'todos' en crear noves tasques amb l'eina new_task", "settings.codeIndex.embeddingBatchSize.description": "La mida del lot per a operacions d'incrustació durant la indexació de codi. Ajusta això segons els límits del teu proveïdor d'API. Per defecte és 60." } diff --git a/src/package.nls.de.json b/src/package.nls.de.json index fe693c5ce60..ec5eee5de3a 100644 --- a/src/package.nls.de.json +++ b/src/package.nls.de.json @@ -15,6 +15,7 @@ "command.terminal.explainCommand.title": "Diesen Befehl Erklären", "command.acceptInput.title": "Eingabe/Vorschlag Akzeptieren", "command.toggleAutoApprove.title": "Auto-Genehmigung Umschalten", + "command.toggleThinkingBlocks.title": "Denkblöcke Umschalten", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", @@ -40,5 +41,6 @@ "settings.autoImportSettingsPath.description": "Pfad zu einer RooCode-Konfigurationsdatei, die beim Start der Erweiterung automatisch importiert wird. Unterstützt absolute Pfade und Pfade relativ zum Home-Verzeichnis (z.B. '~/Documents/roo-code-settings.json'). Leer lassen, um den automatischen Import zu deaktivieren.", "settings.useAgentRules.description": "Aktiviert das Laden von AGENTS.md-Dateien für agentenspezifische Regeln (siehe https://agent-rules.org/)", "settings.apiRequestTimeout.description": "Maximale Wartezeit in Sekunden auf API-Antworten (0 = kein Timeout, 1-3600s, Standard: 600s). Höhere Werte werden für lokale Anbieter wie LM Studio und Ollama empfohlen, die möglicherweise mehr Verarbeitungszeit benötigen.", + "settings.newTaskRequireTodos.description": "Erfordert den Parameter 'todos', wenn neue Aufgaben mit dem new_task-Tool erstellt werden", "settings.codeIndex.embeddingBatchSize.description": "Die Batch-Größe für Embedding-Operationen während der Code-Indexierung. Passe dies an die Limits deines API-Anbieters an. Standard ist 60." } diff --git a/src/package.nls.es.json b/src/package.nls.es.json index ae046b62cab..e4d0d1457bf 100644 --- a/src/package.nls.es.json +++ b/src/package.nls.es.json @@ -15,6 +15,7 @@ "command.terminal.explainCommand.title": "Explicar Este Comando", "command.acceptInput.title": "Aceptar Entrada/Sugerencia", "command.toggleAutoApprove.title": "Alternar Auto-Aprobación", + "command.toggleThinkingBlocks.title": "Alternar Bloques de Pensamiento", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", @@ -40,5 +41,6 @@ "settings.autoImportSettingsPath.description": "Ruta a un archivo de configuración de RooCode para importar automáticamente al iniciar la extensión. Admite rutas absolutas y rutas relativas al directorio de inicio (por ejemplo, '~/Documents/roo-code-settings.json'). Dejar vacío para desactivar la importación automática.", "settings.useAgentRules.description": "Habilita la carga de archivos AGENTS.md para reglas específicas del agente (ver https://agent-rules.org/)", "settings.apiRequestTimeout.description": "Tiempo máximo en segundos de espera para las respuestas de la API (0 = sin tiempo de espera, 1-3600s, por defecto: 600s). Se recomiendan valores más altos para proveedores locales como LM Studio y Ollama que puedan necesitar más tiempo de procesamiento.", + "settings.newTaskRequireTodos.description": "Requiere el parámetro 'todos' al crear nuevas tareas con la herramienta new_task", "settings.codeIndex.embeddingBatchSize.description": "El tamaño del lote para operaciones de embedding durante la indexación de código. Ajusta esto según los límites de tu proveedor de API. Por defecto es 60." } diff --git a/src/package.nls.fr.json b/src/package.nls.fr.json index 45191a0a351..9ad1bce9906 100644 --- a/src/package.nls.fr.json +++ b/src/package.nls.fr.json @@ -15,6 +15,7 @@ "command.terminal.explainCommand.title": "Expliquer cette Commande", "command.acceptInput.title": "Accepter l'Entrée/Suggestion", "command.toggleAutoApprove.title": "Basculer Auto-Approbation", + "command.toggleThinkingBlocks.title": "Basculer les Blocs de Réflexion", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", @@ -40,5 +41,6 @@ "settings.autoImportSettingsPath.description": "Chemin d'accès à un fichier de configuration RooCode à importer automatiquement au démarrage de l'extension. Prend en charge les chemins absolus et les chemins relatifs au répertoire de base (par exemple, '~/Documents/roo-code-settings.json'). Laisser vide pour désactiver l'importation automatique.", "settings.useAgentRules.description": "Activer le chargement des fichiers AGENTS.md pour les règles spécifiques à l'agent (voir https://agent-rules.org/)", "settings.apiRequestTimeout.description": "Temps maximum en secondes d'attente pour les réponses de l'API (0 = pas de timeout, 1-3600s, par défaut : 600s). Des valeurs plus élevées sont recommandées pour les fournisseurs locaux comme LM Studio et Ollama qui peuvent nécessiter plus de temps de traitement.", + "settings.newTaskRequireTodos.description": "Nécessite le paramètre 'todos' lors de la création de nouvelles tâches avec l'outil new_task", "settings.codeIndex.embeddingBatchSize.description": "La taille du lot pour les opérations d'embedding lors de l'indexation du code. Ajustez ceci selon les limites de votre fournisseur d'API. Par défaut, c'est 60." } diff --git a/src/package.nls.hi.json b/src/package.nls.hi.json index 59eb711dbbf..cba0cea45e5 100644 --- a/src/package.nls.hi.json +++ b/src/package.nls.hi.json @@ -15,6 +15,7 @@ "command.terminal.explainCommand.title": "यह कमांड समझाएं", "command.acceptInput.title": "इनपुट/सुझाव स्वीकारें", "command.toggleAutoApprove.title": "ऑटो-अनुमोदन टॉगल करें", + "command.toggleThinkingBlocks.title": "थिंकिंग ब्लॉक्स टॉगल करें", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", @@ -40,5 +41,6 @@ "settings.autoImportSettingsPath.description": "RooCode कॉन्फ़िगरेशन फ़ाइल का पथ जिसे एक्सटेंशन स्टार्टअप पर स्वचालित रूप से आयात किया जाएगा। होम डायरेक्टरी के सापेक्ष पूर्ण पथ और पथों का समर्थन करता है (उदाहरण के लिए '~/Documents/roo-code-settings.json')। ऑटो-इंपोर्ट को अक्षम करने के लिए खाली छोड़ दें।", "settings.useAgentRules.description": "एजेंट-विशिष्ट नियमों के लिए AGENTS.md फ़ाइलों को लोड करना सक्षम करें (देखें https://agent-rules.org/)", "settings.apiRequestTimeout.description": "एपीआई प्रतिक्रियाओं की प्रतीक्षा करने के लिए सेकंड में अधिकतम समय (0 = कोई टाइमआउट नहीं, 1-3600s, डिफ़ॉल्ट: 600s)। एलएम स्टूडियो और ओलामा जैसे स्थानीय प्रदाताओं के लिए उच्च मानों की सिफारिश की जाती है जिन्हें अधिक प्रसंस्करण समय की आवश्यकता हो सकती है।", + "settings.newTaskRequireTodos.description": "new_task टूल के साथ नए कार्य बनाते समय 'todos' पैरामीटर की आवश्यकता है", "settings.codeIndex.embeddingBatchSize.description": "कोड इंडेक्सिंग के दौरान एम्बेडिंग ऑपरेशन के लिए बैच साइज़। इसे अपने API प्रदाता की सीमाओं के अनुसार समायोजित करें। डिफ़ॉल्ट 60 है।" } diff --git a/src/package.nls.id.json b/src/package.nls.id.json index da639a85ecb..ddecd523d5e 100644 --- a/src/package.nls.id.json +++ b/src/package.nls.id.json @@ -27,6 +27,7 @@ "command.terminal.explainCommand.title": "Jelaskan Perintah Ini", "command.acceptInput.title": "Terima Input/Saran", "command.toggleAutoApprove.title": "Alihkan Persetujuan Otomatis", + "command.toggleThinkingBlocks.title": "Alihkan Blok Berpikir", "configuration.title": "Roo Code", "commands.allowedCommands.description": "Perintah yang dapat dijalankan secara otomatis ketika 'Selalu setujui operasi eksekusi' diaktifkan", "commands.deniedCommands.description": "Awalan perintah yang akan otomatis ditolak tanpa meminta persetujuan. Jika terjadi konflik dengan perintah yang diizinkan, pencocokan awalan terpanjang akan diprioritaskan. Tambahkan * untuk menolak semua perintah.", @@ -40,5 +41,6 @@ "settings.autoImportSettingsPath.description": "Path ke file konfigurasi RooCode untuk diimpor secara otomatis saat ekstensi dimulai. Mendukung path absolut dan path relatif terhadap direktori home (misalnya '~/Documents/roo-code-settings.json'). Biarkan kosong untuk menonaktifkan impor otomatis.", "settings.useAgentRules.description": "Aktifkan pemuatan file AGENTS.md untuk aturan khusus agen (lihat https://agent-rules.org/)", "settings.apiRequestTimeout.description": "Waktu maksimum dalam detik untuk menunggu respons API (0 = tidak ada batas waktu, 1-3600s, default: 600s). Nilai yang lebih tinggi disarankan untuk penyedia lokal seperti LM Studio dan Ollama yang mungkin memerlukan lebih banyak waktu pemrosesan.", + "settings.newTaskRequireTodos.description": "Memerlukan parameter 'todos' saat membuat tugas baru dengan alat new_task", "settings.codeIndex.embeddingBatchSize.description": "Ukuran batch untuk operasi embedding selama pengindeksan kode. Sesuaikan ini berdasarkan batas penyedia API kamu. Default adalah 60." } diff --git a/src/package.nls.it.json b/src/package.nls.it.json index 21f921b5637..7fd73bdcbf8 100644 --- a/src/package.nls.it.json +++ b/src/package.nls.it.json @@ -15,6 +15,7 @@ "command.terminal.explainCommand.title": "Spiega Questo Comando", "command.acceptInput.title": "Accetta Input/Suggerimento", "command.toggleAutoApprove.title": "Attiva/Disattiva Auto-Approvazione", + "command.toggleThinkingBlocks.title": "Attiva/Disattiva Blocchi di Pensiero", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", @@ -40,5 +41,6 @@ "settings.autoImportSettingsPath.description": "Percorso di un file di configurazione di RooCode da importare automaticamente all'avvio dell'estensione. Supporta percorsi assoluti e percorsi relativi alla directory home (ad es. '~/Documents/roo-code-settings.json'). Lasciare vuoto per disabilitare l'importazione automatica.", "settings.useAgentRules.description": "Abilita il caricamento dei file AGENTS.md per regole specifiche dell'agente (vedi https://agent-rules.org/)", "settings.apiRequestTimeout.description": "Tempo massimo in secondi di attesa per le risposte API (0 = nessun timeout, 1-3600s, predefinito: 600s). Valori più alti sono consigliati per provider locali come LM Studio e Ollama che potrebbero richiedere più tempo di elaborazione.", + "settings.newTaskRequireTodos.description": "Richiede il parametro 'todos' durante la creazione di nuove attività con lo strumento new_task", "settings.codeIndex.embeddingBatchSize.description": "La dimensione del batch per le operazioni di embedding durante l'indicizzazione del codice. Regola questo in base ai limiti del tuo provider API. Il valore predefinito è 60." } diff --git a/src/package.nls.ja.json b/src/package.nls.ja.json index ce22881ce28..c380d9b16c8 100644 --- a/src/package.nls.ja.json +++ b/src/package.nls.ja.json @@ -27,6 +27,7 @@ "command.terminal.explainCommand.title": "このコマンドを説明", "command.acceptInput.title": "入力/提案を承認", "command.toggleAutoApprove.title": "自動承認を切替", + "command.toggleThinkingBlocks.title": "思考ブロックの切り替え", "configuration.title": "Roo Code", "commands.allowedCommands.description": "'常に実行操作を承認する'が有効な場合に自動実行できるコマンド", "commands.deniedCommands.description": "承認を求めずに自動的に拒否されるコマンドプレフィックス。許可されたコマンドとの競合がある場合、最長プレフィックスマッチが優先されます。すべてのコマンドを拒否するには * を追加してください。", @@ -40,5 +41,6 @@ "settings.autoImportSettingsPath.description": "拡張機能の起動時に自動的にインポートするRooCode設定ファイルへのパス。絶対パスとホームディレクトリからの相対パスをサポートします(例:'~/Documents/roo-code-settings.json')。自動インポートを無効にするには、空のままにします。", "settings.useAgentRules.description": "エージェント固有のルールのためにAGENTS.mdファイルの読み込みを有効にします(参照:https://agent-rules.org/)", "settings.apiRequestTimeout.description": "API応答を待機する最大時間(秒)(0 = タイムアウトなし、1-3600秒、デフォルト: 600秒)。LM StudioやOllamaのような、より多くの処理時間を必要とする可能性のあるローカルプロバイダーには、より高い値が推奨されます。", + "settings.newTaskRequireTodos.description": "new_taskツールで新しいタスクを作成する際に'todos'パラメータが必要です", "settings.codeIndex.embeddingBatchSize.description": "コードインデックス作成中のエンベディング操作のバッチサイズ。APIプロバイダーの制限に基づいてこれを調整してください。デフォルトは60です。" } diff --git a/src/package.nls.ko.json b/src/package.nls.ko.json index f87c93801e8..060caec9b54 100644 --- a/src/package.nls.ko.json +++ b/src/package.nls.ko.json @@ -15,6 +15,7 @@ "command.terminal.explainCommand.title": "이 명령어 설명", "command.acceptInput.title": "입력/제안 수락", "command.toggleAutoApprove.title": "자동 승인 전환", + "command.toggleThinkingBlocks.title": "생각 블록 전환", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", @@ -40,5 +41,6 @@ "settings.autoImportSettingsPath.description": "확장 프로그램 시작 시 자동으로 가져올 RooCode 구성 파일의 경로입니다. 절대 경로 및 홈 디렉토리에 대한 상대 경로를 지원합니다(예: '~/Documents/roo-code-settings.json'). 자동 가져오기를 비활성화하려면 비워 둡니다.", "settings.useAgentRules.description": "에이전트별 규칙에 대한 AGENTS.md 파일 로드를 활성화합니다 (참조: https://agent-rules.org/)", "settings.apiRequestTimeout.description": "API 응답을 기다리는 최대 시간(초) (0 = 시간 초과 없음, 1-3600초, 기본값: 600초). 더 많은 처리 시간이 필요할 수 있는 LM Studio 및 Ollama와 같은 로컬 공급자에게는 더 높은 값을 사용하는 것이 좋습니다.", + "settings.newTaskRequireTodos.description": "new_task 도구로 새 작업을 만들 때 'todos' 매개변수가 필요합니다", "settings.codeIndex.embeddingBatchSize.description": "코드 인덱싱 중 임베딩 작업의 배치 크기입니다. API 공급자의 제한에 따라 이를 조정하세요. 기본값은 60입니다." } diff --git a/src/package.nls.nl.json b/src/package.nls.nl.json index 3f5f5fd8893..c3d36b4b810 100644 --- a/src/package.nls.nl.json +++ b/src/package.nls.nl.json @@ -27,6 +27,7 @@ "command.terminal.explainCommand.title": "Leg Dit Commando Uit", "command.acceptInput.title": "Invoer/Suggestie Accepteren", "command.toggleAutoApprove.title": "Auto-Goedkeuring Schakelen", + "command.toggleThinkingBlocks.title": "Denkblokken Schakelen", "configuration.title": "Roo Code", "commands.allowedCommands.description": "Commando's die automatisch kunnen worden uitgevoerd wanneer 'Altijd goedkeuren uitvoerbewerkingen' is ingeschakeld", "commands.deniedCommands.description": "Commando-prefixen die automatisch worden geweigerd zonder om goedkeuring te vragen. Bij conflicten met toegestane commando's heeft de langste prefix-match voorrang. Voeg * toe om alle commando's te weigeren.", @@ -40,5 +41,6 @@ "settings.autoImportSettingsPath.description": "Pad naar een RooCode-configuratiebestand om automatisch te importeren bij het opstarten van de extensie. Ondersteunt absolute paden en paden ten opzichte van de thuismap (bijv. '~/Documents/roo-code-settings.json'). Laat leeg om automatisch importeren uit te schakelen.", "settings.useAgentRules.description": "Laden van AGENTS.md-bestanden voor agentspecifieke regels inschakelen (zie https://agent-rules.org/)", "settings.apiRequestTimeout.description": "Maximale tijd in seconden om te wachten op API-reacties (0 = geen time-out, 1-3600s, standaard: 600s). Hogere waarden worden aanbevolen voor lokale providers zoals LM Studio en Ollama die mogelijk meer verwerkingstijd nodig hebben.", + "settings.newTaskRequireTodos.description": "Vereist 'todos'-parameter bij het maken van nieuwe taken met de new_task-tool", "settings.codeIndex.embeddingBatchSize.description": "De batchgrootte voor embedding-operaties tijdens code-indexering. Pas dit aan op basis van de limieten van je API-provider. Standaard is 60." } diff --git a/src/package.nls.pl.json b/src/package.nls.pl.json index 26a74ba5b66..dbff50a04f6 100644 --- a/src/package.nls.pl.json +++ b/src/package.nls.pl.json @@ -15,6 +15,7 @@ "command.terminal.explainCommand.title": "Wyjaśnij tę Komendę", "command.acceptInput.title": "Akceptuj Wprowadzanie/Sugestię", "command.toggleAutoApprove.title": "Przełącz Auto-Zatwierdzanie", + "command.toggleThinkingBlocks.title": "Przełącz Bloki Myślenia", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", @@ -40,5 +41,6 @@ "settings.autoImportSettingsPath.description": "Ścieżka do pliku konfiguracyjnego RooCode, który ma być automatycznie importowany podczas uruchamiania rozszerzenia. Obsługuje ścieżki bezwzględne i ścieżki względne do katalogu domowego (np. '~/Documents/roo-code-settings.json'). Pozostaw puste, aby wyłączyć automatyczne importowanie.", "settings.useAgentRules.description": "Włącz wczytywanie plików AGENTS.md dla reguł specyficznych dla agenta (zobacz https://agent-rules.org/)", "settings.apiRequestTimeout.description": "Maksymalny czas w sekundach oczekiwania na odpowiedzi API (0 = brak limitu czasu, 1-3600s, domyślnie: 600s). Wyższe wartości są zalecane dla lokalnych dostawców, takich jak LM Studio i Ollama, którzy mogą potrzebować więcej czasu na przetwarzanie.", + "settings.newTaskRequireTodos.description": "Wymaga parametru 'todos' podczas tworzenia nowych zadań za pomocą narzędzia new_task", "settings.codeIndex.embeddingBatchSize.description": "Rozmiar partii dla operacji osadzania podczas indeksowania kodu. Dostosuj to w oparciu o limity twojego dostawcy API. Domyślnie to 60." } diff --git a/src/package.nls.pt-BR.json b/src/package.nls.pt-BR.json index 7f904d98df0..8f2c9284405 100644 --- a/src/package.nls.pt-BR.json +++ b/src/package.nls.pt-BR.json @@ -15,6 +15,7 @@ "command.terminal.explainCommand.title": "Explicar Este Comando", "command.acceptInput.title": "Aceitar Entrada/Sugestão", "command.toggleAutoApprove.title": "Alternar Auto-Aprovação", + "command.toggleThinkingBlocks.title": "Alternar Blocos de Pensamento", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", @@ -40,5 +41,6 @@ "settings.autoImportSettingsPath.description": "Caminho para um arquivo de configuração do RooCode para importar automaticamente na inicialização da extensão. Suporta caminhos absolutos e caminhos relativos ao diretório inicial (por exemplo, '~/Documents/roo-code-settings.json'). Deixe em branco para desativar a importação automática.", "settings.useAgentRules.description": "Habilita o carregamento de arquivos AGENTS.md para regras específicas do agente (consulte https://agent-rules.org/)", "settings.apiRequestTimeout.description": "Tempo máximo em segundos de espera pelas respostas da API (0 = sem tempo limite, 1-3600s, padrão: 600s). Valores mais altos são recomendados para provedores locais como LM Studio e Ollama que podem precisar de mais tempo de processamento.", + "settings.newTaskRequireTodos.description": "Requer o parâmetro 'todos' ao criar novas tarefas com a ferramenta new_task", "settings.codeIndex.embeddingBatchSize.description": "O tamanho do lote para operações de embedding durante a indexação de código. Ajuste isso com base nos limites do seu provedor de API. O padrão é 60." } diff --git a/src/package.nls.ru.json b/src/package.nls.ru.json index 46ce4b95c98..d7643c9473e 100644 --- a/src/package.nls.ru.json +++ b/src/package.nls.ru.json @@ -27,6 +27,7 @@ "command.terminal.explainCommand.title": "Объяснить эту команду", "command.acceptInput.title": "Принять ввод/предложение", "command.toggleAutoApprove.title": "Переключить Авто-Подтверждение", + "command.toggleThinkingBlocks.title": "Переключить Блоки Размышлений", "configuration.title": "Roo Code", "commands.allowedCommands.description": "Команды, которые могут быть автоматически выполнены, когда включена опция 'Всегда подтверждать операции выполнения'", "commands.deniedCommands.description": "Префиксы команд, которые будут автоматически отклонены без запроса подтверждения. В случае конфликтов с разрешенными командами приоритет имеет самое длинное совпадение префикса. Добавьте * чтобы отклонить все команды.", @@ -40,5 +41,6 @@ "settings.autoImportSettingsPath.description": "Путь к файлу конфигурации RooCode для автоматического импорта при запуске расширения. Поддерживает абсолютные пути и пути относительно домашнего каталога (например, '~/Documents/roo-code-settings.json'). Оставьте пустым, чтобы отключить автоматический импорт.", "settings.useAgentRules.description": "Включить загрузку файлов AGENTS.md для специфичных для агента правил (см. https://agent-rules.org/)", "settings.apiRequestTimeout.description": "Максимальное время в секундах для ожидания ответов API (0 = нет тайм-аута, 1-3600 с, по умолчанию: 600 с). Рекомендуются более высокие значения для локальных провайдеров, таких как LM Studio и Ollama, которым может потребоваться больше времени на обработку.", + "settings.newTaskRequireTodos.description": "Требуется параметр 'todos' при создании новых задач с помощью инструмента new_task", "settings.codeIndex.embeddingBatchSize.description": "Размер пакета для операций встраивания во время индексации кода. Настройте это в соответствии с ограничениями вашего API-провайдера. По умолчанию 60." } diff --git a/src/package.nls.tr.json b/src/package.nls.tr.json index 9606822a1ce..df8252c8262 100644 --- a/src/package.nls.tr.json +++ b/src/package.nls.tr.json @@ -15,6 +15,7 @@ "command.terminal.explainCommand.title": "Bu Komutu Açıkla", "command.acceptInput.title": "Girişi/Öneriyi Kabul Et", "command.toggleAutoApprove.title": "Otomatik Onayı Değiştir", + "command.toggleThinkingBlocks.title": "Düşünme Bloklarını Değiştir", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", @@ -40,5 +41,6 @@ "settings.autoImportSettingsPath.description": "Uzantı başlangıcında otomatik olarak içe aktarılacak bir RooCode yapılandırma dosyasının yolu. Mutlak yolları ve ana dizine göreli yolları destekler (ör. '~/Documents/roo-code-settings.json'). Otomatik içe aktarmayı devre dışı bırakmak için boş bırakın.", "settings.useAgentRules.description": "Aracıya özgü kurallar için AGENTS.md dosyalarının yüklenmesini etkinleştirin (bkz. https://agent-rules.org/)", "settings.apiRequestTimeout.description": "API yanıtları için beklenecek maksimum süre (saniye cinsinden) (0 = zaman aşımı yok, 1-3600s, varsayılan: 600s). LM Studio ve Ollama gibi daha fazla işlem süresi gerektirebilecek yerel sağlayıcılar için daha yüksek değerler önerilir.", + "settings.newTaskRequireTodos.description": "new_task aracıyla yeni görevler oluştururken 'todos' parametresi gerekir", "settings.codeIndex.embeddingBatchSize.description": "Kod indeksleme sırasında gömme işlemleri için toplu iş boyutu. Bunu API sağlayıcınızın sınırlarına göre ayarlayın. Varsayılan 60'tır." } diff --git a/src/package.nls.vi.json b/src/package.nls.vi.json index b25e9d74f80..08407679aca 100644 --- a/src/package.nls.vi.json +++ b/src/package.nls.vi.json @@ -15,6 +15,7 @@ "command.terminal.explainCommand.title": "Giải Thích Lệnh Này", "command.acceptInput.title": "Chấp Nhận Đầu Vào/Gợi Ý", "command.toggleAutoApprove.title": "Bật/Tắt Tự Động Phê Duyệt", + "command.toggleThinkingBlocks.title": "Bật/Tắt các khối Suy nghĩ", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", @@ -40,5 +41,6 @@ "settings.autoImportSettingsPath.description": "Đường dẫn đến tệp cấu hình RooCode để tự động nhập khi khởi động tiện ích mở rộng. Hỗ trợ đường dẫn tuyệt đối và đường dẫn tương đối đến thư mục chính (ví dụ: '~/Documents/roo-code-settings.json'). Để trống để tắt tính năng tự động nhập.", "settings.useAgentRules.description": "Bật tải tệp AGENTS.md cho các quy tắc dành riêng cho tác nhân (xem https://agent-rules.org/)", "settings.apiRequestTimeout.description": "Thời gian tối đa tính bằng giây để đợi phản hồi API (0 = không có thời gian chờ, 1-3600 giây, mặc định: 600 giây). Nên sử dụng các giá trị cao hơn cho các nhà cung cấp cục bộ như LM Studio và Ollama có thể cần thêm thời gian xử lý.", + "settings.newTaskRequireTodos.description": "Yêu cầu tham số 'todos' khi tạo nhiệm vụ mới bằng công cụ new_task", "settings.codeIndex.embeddingBatchSize.description": "Kích thước lô cho các hoạt động nhúng trong quá trình lập chỉ mục mã. Điều chỉnh điều này dựa trên giới hạn của nhà cung cấp API của bạn. Mặc định là 60." } diff --git a/src/package.nls.zh-CN.json b/src/package.nls.zh-CN.json index 64684443fc2..ba4431f5ebc 100644 --- a/src/package.nls.zh-CN.json +++ b/src/package.nls.zh-CN.json @@ -15,6 +15,7 @@ "command.terminal.explainCommand.title": "解释此命令", "command.acceptInput.title": "接受输入/建议", "command.toggleAutoApprove.title": "切换自动批准", + "command.toggleThinkingBlocks.title": "切换思维块", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", @@ -40,5 +41,6 @@ "settings.autoImportSettingsPath.description": "RooCode 配置文件的路径,用于在扩展启动时自动导入。支持绝对路径和相对于主目录的路径(例如 '~/Documents/roo-code-settings.json')。留空以禁用自动导入。", "settings.useAgentRules.description": "为特定于代理的规则启用 AGENTS.md 文件的加载(请参阅 https://agent-rules.org/)", "settings.apiRequestTimeout.description": "等待 API 响应的最长时间(秒)(0 = 无超时,1-3600秒,默认值:600秒)。对于像 LM Studio 和 Ollama 这样可能需要更多处理时间的本地提供商,建议使用更高的值。", + "settings.newTaskRequireTodos.description": "使用 new_task 工具创建新任务时需要 'todos' 参数", "settings.codeIndex.embeddingBatchSize.description": "代码索引期间嵌入操作的批处理大小。根据 API 提供商的限制调整此设置。默认值为 60。" } diff --git a/src/package.nls.zh-TW.json b/src/package.nls.zh-TW.json index cc095664ccf..1d86e863bfa 100644 --- a/src/package.nls.zh-TW.json +++ b/src/package.nls.zh-TW.json @@ -15,6 +15,7 @@ "command.terminal.explainCommand.title": "解釋此命令", "command.acceptInput.title": "接受輸入/建議", "command.toggleAutoApprove.title": "切換自動批准", + "command.toggleThinkingBlocks.title": "切換思維區塊", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", @@ -40,5 +41,6 @@ "settings.autoImportSettingsPath.description": "RooCode 設定檔案的路徑,用於在擴充功能啟動時自動匯入。支援絕對路徑和相對於主目錄的路徑(例如 '~/Documents/roo-code-settings.json')。留空以停用自動匯入。", "settings.useAgentRules.description": "為特定於代理的規則啟用 AGENTS.md 檔案的載入(請參閱 https://agent-rules.org/)", "settings.apiRequestTimeout.description": "等待 API 回應的最長時間(秒)(0 = 無超時,1-3600秒,預設值:600秒)。對於像 LM Studio 和 Ollama 這樣可能需要更多處理時間的本地提供商,建議使用更高的值。", + "settings.newTaskRequireTodos.description": "使用 new_task 工具建立新任務時需要 'todos' 參數", "settings.codeIndex.embeddingBatchSize.description": "程式碼索引期間嵌入操作的批次大小。根據 API 提供商的限制調整此設定。預設值為 60。" } diff --git a/webview-ui/src/components/chat/ReasoningBlock.tsx b/webview-ui/src/components/chat/ReasoningBlock.tsx index 91fddccb587..7c324ef2d69 100644 --- a/webview-ui/src/components/chat/ReasoningBlock.tsx +++ b/webview-ui/src/components/chat/ReasoningBlock.tsx @@ -18,7 +18,7 @@ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockP const { t } = useTranslation() const { reasoningBlockCollapsed } = useExtensionState() - const [isCollapsed, setIsCollapsed] = useState(reasoningBlockCollapsed !== false) + const [isCollapsed, setIsCollapsed] = useState(reasoningBlockCollapsed) const startTimeRef = useRef(Date.now()) const [elapsed, setElapsed] = useState(0) @@ -57,7 +57,7 @@ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockP )}
- + {isCollapsed ? t("chat:reasoning.expand") : t("chat:reasoning.collapse")} Date: Tue, 23 Sep 2025 14:13:27 +0100 Subject: [PATCH 07/14] Final twaks --- webview-ui/src/components/chat/ReasoningBlock.tsx | 7 ++----- 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 +-- 19 files changed, 20 insertions(+), 41 deletions(-) diff --git a/webview-ui/src/components/chat/ReasoningBlock.tsx b/webview-ui/src/components/chat/ReasoningBlock.tsx index 7c324ef2d69..2883c61a359 100644 --- a/webview-ui/src/components/chat/ReasoningBlock.tsx +++ b/webview-ui/src/components/chat/ReasoningBlock.tsx @@ -25,7 +25,7 @@ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockP const contentRef = useRef(null) useEffect(() => { - setIsCollapsed(reasoningBlockCollapsed !== false) + setIsCollapsed(reasoningBlockCollapsed) }, [reasoningBlockCollapsed]) useEffect(() => { @@ -57,13 +57,10 @@ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockP )}
- - {isCollapsed ? t("chat:reasoning.expand") : t("chat:reasoning.collapse")} -
diff --git a/webview-ui/src/i18n/locales/ca/chat.json b/webview-ui/src/i18n/locales/ca/chat.json index e5ce304e920..c5a393e208c 100644 --- a/webview-ui/src/i18n/locales/ca/chat.json +++ b/webview-ui/src/i18n/locales/ca/chat.json @@ -272,8 +272,7 @@ "reasoning": { "thinking": "Pensant", "seconds": "{{count}}s", - "collapse": "Replegar", - "expand": "Expandir" + "seconds": "{{count}}s" }, "contextCondense": { "title": "Context condensat", diff --git a/webview-ui/src/i18n/locales/de/chat.json b/webview-ui/src/i18n/locales/de/chat.json index bc399a7a92b..faf1f52b6c8 100644 --- a/webview-ui/src/i18n/locales/de/chat.json +++ b/webview-ui/src/i18n/locales/de/chat.json @@ -272,8 +272,7 @@ "reasoning": { "thinking": "Denke nach", "seconds": "{{count}}s", - "collapse": "Einklappen", - "expand": "Erweitern" + "seconds": "{{count}}s" }, "contextCondense": { "title": "Kontext komprimiert", diff --git a/webview-ui/src/i18n/locales/en/chat.json b/webview-ui/src/i18n/locales/en/chat.json index 01a1413b3c7..4fd1bb39bd6 100644 --- a/webview-ui/src/i18n/locales/en/chat.json +++ b/webview-ui/src/i18n/locales/en/chat.json @@ -306,8 +306,7 @@ "reasoning": { "thinking": "Thinking", "seconds": "{{count}}s", - "collapse": "Collapse", - "expand": "Expand" + "seconds": "{{count}}s" }, "followUpSuggest": { "copyToInput": "Copy to input (same as shift + click)", diff --git a/webview-ui/src/i18n/locales/es/chat.json b/webview-ui/src/i18n/locales/es/chat.json index b2f9da4770f..14c1b2197ce 100644 --- a/webview-ui/src/i18n/locales/es/chat.json +++ b/webview-ui/src/i18n/locales/es/chat.json @@ -272,8 +272,7 @@ "reasoning": { "thinking": "Pensando", "seconds": "{{count}}s", - "collapse": "Contraer", - "expand": "Expandir" + "seconds": "{{count}}s" }, "contextCondense": { "title": "Contexto condensado", diff --git a/webview-ui/src/i18n/locales/fr/chat.json b/webview-ui/src/i18n/locales/fr/chat.json index 755f1bf0965..3f3591093b3 100644 --- a/webview-ui/src/i18n/locales/fr/chat.json +++ b/webview-ui/src/i18n/locales/fr/chat.json @@ -272,8 +272,7 @@ "reasoning": { "thinking": "Réflexion", "seconds": "{{count}}s", - "collapse": "Réduire", - "expand": "Développer" + "seconds": "{{count}}s" }, "contextCondense": { "title": "Contexte condensé", diff --git a/webview-ui/src/i18n/locales/hi/chat.json b/webview-ui/src/i18n/locales/hi/chat.json index 5e9dcbcca11..595eee5ecc1 100644 --- a/webview-ui/src/i18n/locales/hi/chat.json +++ b/webview-ui/src/i18n/locales/hi/chat.json @@ -272,8 +272,7 @@ "reasoning": { "thinking": "विचार कर रहा है", "seconds": "{{count}} सेकंड", - "collapse": "संक्षिप्त करें", - "expand": "विस्तृत करें" + "seconds": "{{count}} सेकंड" }, "contextCondense": { "title": "संदर्भ संक्षिप्त किया गया", diff --git a/webview-ui/src/i18n/locales/id/chat.json b/webview-ui/src/i18n/locales/id/chat.json index eb1850ab240..931a2cbf13c 100644 --- a/webview-ui/src/i18n/locales/id/chat.json +++ b/webview-ui/src/i18n/locales/id/chat.json @@ -310,8 +310,7 @@ "reasoning": { "thinking": "Berpikir", "seconds": "{{count}}d", - "collapse": "Ciutkan", - "expand": "Perluas" + "seconds": "{{count}}d" }, "followUpSuggest": { "copyToInput": "Salin ke input (sama dengan shift + klik)", diff --git a/webview-ui/src/i18n/locales/it/chat.json b/webview-ui/src/i18n/locales/it/chat.json index 39c12526463..a776629f857 100644 --- a/webview-ui/src/i18n/locales/it/chat.json +++ b/webview-ui/src/i18n/locales/it/chat.json @@ -272,8 +272,7 @@ "reasoning": { "thinking": "Sto pensando", "seconds": "{{count}}s", - "collapse": "Comprimi", - "expand": "Espandi" + "seconds": "{{count}}s" }, "contextCondense": { "title": "Contesto condensato", diff --git a/webview-ui/src/i18n/locales/ja/chat.json b/webview-ui/src/i18n/locales/ja/chat.json index fee68afc1be..ccd50790fcc 100644 --- a/webview-ui/src/i18n/locales/ja/chat.json +++ b/webview-ui/src/i18n/locales/ja/chat.json @@ -272,8 +272,7 @@ "reasoning": { "thinking": "考え中", "seconds": "{{count}}秒", - "collapse": "折りたたむ", - "expand": "展開" + "seconds": "{{count}}秒" }, "contextCondense": { "title": "コンテキスト要約", diff --git a/webview-ui/src/i18n/locales/ko/chat.json b/webview-ui/src/i18n/locales/ko/chat.json index ef730f51925..fdef42032ba 100644 --- a/webview-ui/src/i18n/locales/ko/chat.json +++ b/webview-ui/src/i18n/locales/ko/chat.json @@ -272,8 +272,7 @@ "reasoning": { "thinking": "생각 중", "seconds": "{{count}}초", - "collapse": "접기", - "expand": "펼치기" + "seconds": "{{count}}초" }, "contextCondense": { "title": "컨텍스트 요약됨", diff --git a/webview-ui/src/i18n/locales/nl/chat.json b/webview-ui/src/i18n/locales/nl/chat.json index b7280c0242d..ac236708a41 100644 --- a/webview-ui/src/i18n/locales/nl/chat.json +++ b/webview-ui/src/i18n/locales/nl/chat.json @@ -283,8 +283,7 @@ "reasoning": { "thinking": "Denkt na", "seconds": "{{count}}s", - "collapse": "Samenvouwen", - "expand": "Uitvouwen" + "seconds": "{{count}}s" }, "contextCondense": { "title": "Context samengevat", diff --git a/webview-ui/src/i18n/locales/pl/chat.json b/webview-ui/src/i18n/locales/pl/chat.json index 407db726b3b..b181fcd04b4 100644 --- a/webview-ui/src/i18n/locales/pl/chat.json +++ b/webview-ui/src/i18n/locales/pl/chat.json @@ -272,8 +272,7 @@ "reasoning": { "thinking": "Myślenie", "seconds": "{{count}} s", - "collapse": "Zwiń", - "expand": "Rozwiń" + "seconds": "{{count}} s" }, "contextCondense": { "title": "Kontekst skondensowany", diff --git a/webview-ui/src/i18n/locales/pt-BR/chat.json b/webview-ui/src/i18n/locales/pt-BR/chat.json index 39320d31f8f..99d758cd0ff 100644 --- a/webview-ui/src/i18n/locales/pt-BR/chat.json +++ b/webview-ui/src/i18n/locales/pt-BR/chat.json @@ -272,8 +272,7 @@ "reasoning": { "thinking": "Pensando", "seconds": "{{count}}s", - "collapse": "Recolher", - "expand": "Expandir" + "seconds": "{{count}}s" }, "contextCondense": { "title": "Contexto condensado", diff --git a/webview-ui/src/i18n/locales/ru/chat.json b/webview-ui/src/i18n/locales/ru/chat.json index 9d819c6e8cf..453cb3e012a 100644 --- a/webview-ui/src/i18n/locales/ru/chat.json +++ b/webview-ui/src/i18n/locales/ru/chat.json @@ -284,8 +284,7 @@ "reasoning": { "thinking": "Обдумывание", "seconds": "{{count}}с", - "collapse": "Свернуть", - "expand": "Развернуть" + "seconds": "{{count}}с" }, "contextCondense": { "title": "Контекст сжат", diff --git a/webview-ui/src/i18n/locales/tr/chat.json b/webview-ui/src/i18n/locales/tr/chat.json index 48f605f126d..9efaafac75e 100644 --- a/webview-ui/src/i18n/locales/tr/chat.json +++ b/webview-ui/src/i18n/locales/tr/chat.json @@ -273,8 +273,7 @@ "reasoning": { "thinking": "Düşünüyor", "seconds": "{{count}}sn", - "collapse": "Daralt", - "expand": "Genişlet" + "seconds": "{{count}}sn" }, "contextCondense": { "title": "Bağlam Özetlendi", diff --git a/webview-ui/src/i18n/locales/vi/chat.json b/webview-ui/src/i18n/locales/vi/chat.json index ca48d0901bc..b8aa0c2d5a1 100644 --- a/webview-ui/src/i18n/locales/vi/chat.json +++ b/webview-ui/src/i18n/locales/vi/chat.json @@ -273,8 +273,7 @@ "reasoning": { "thinking": "Đang suy nghĩ", "seconds": "{{count}} giây", - "collapse": "Thu gọn", - "expand": "Mở rộng" + "seconds": "{{count}} giây" }, "contextCondense": { "title": "Ngữ cảnh đã tóm tắt", diff --git a/webview-ui/src/i18n/locales/zh-CN/chat.json b/webview-ui/src/i18n/locales/zh-CN/chat.json index b2a6040f622..551518cc1b1 100644 --- a/webview-ui/src/i18n/locales/zh-CN/chat.json +++ b/webview-ui/src/i18n/locales/zh-CN/chat.json @@ -273,8 +273,7 @@ "reasoning": { "thinking": "思考中", "seconds": "{{count}}秒", - "collapse": "收起", - "expand": "展开" + "seconds": "{{count}}秒" }, "contextCondense": { "title": "上下文已压缩", diff --git a/webview-ui/src/i18n/locales/zh-TW/chat.json b/webview-ui/src/i18n/locales/zh-TW/chat.json index b3220412a7f..69bb4b7096f 100644 --- a/webview-ui/src/i18n/locales/zh-TW/chat.json +++ b/webview-ui/src/i18n/locales/zh-TW/chat.json @@ -308,8 +308,7 @@ "reasoning": { "thinking": "思考中", "seconds": "{{count}} 秒", - "collapse": "收合", - "expand": "展開" + "seconds": "{{count}} 秒" }, "followUpSuggest": { "copyToInput": "複製到輸入框 (或按住 Shift 並點選)", From 77db77dbed2f3e143c5d7df1f0b16e6045c1da61 Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Tue, 23 Sep 2025 14:22:08 +0100 Subject: [PATCH 08/14] Update webview-ui/src/i18n/locales/it/chat.json Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> --- webview-ui/src/i18n/locales/it/chat.json | 1 - 1 file changed, 1 deletion(-) diff --git a/webview-ui/src/i18n/locales/it/chat.json b/webview-ui/src/i18n/locales/it/chat.json index a776629f857..718a19d9081 100644 --- a/webview-ui/src/i18n/locales/it/chat.json +++ b/webview-ui/src/i18n/locales/it/chat.json @@ -272,7 +272,6 @@ "reasoning": { "thinking": "Sto pensando", "seconds": "{{count}}s", - "seconds": "{{count}}s" }, "contextCondense": { "title": "Contesto condensato", From 02e158eefb76483c8176965e67cfc8299a619c88 Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Tue, 23 Sep 2025 14:22:16 +0100 Subject: [PATCH 09/14] Update webview-ui/src/i18n/locales/zh-CN/chat.json Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> --- webview-ui/src/i18n/locales/zh-CN/chat.json | 1 - 1 file changed, 1 deletion(-) diff --git a/webview-ui/src/i18n/locales/zh-CN/chat.json b/webview-ui/src/i18n/locales/zh-CN/chat.json index 551518cc1b1..fb10978f0e7 100644 --- a/webview-ui/src/i18n/locales/zh-CN/chat.json +++ b/webview-ui/src/i18n/locales/zh-CN/chat.json @@ -273,7 +273,6 @@ "reasoning": { "thinking": "思考中", "seconds": "{{count}}秒", - "seconds": "{{count}}秒" }, "contextCondense": { "title": "上下文已压缩", From c41a8e997c37ba765e5c3532f0f24aaaa8bffed3 Mon Sep 17 00:00:00 2001 From: Matt Rubens Date: Tue, 23 Sep 2025 09:36:33 -0400 Subject: [PATCH 10/14] Fix trailing comma --- webview-ui/src/i18n/locales/it/chat.json | 2 +- webview-ui/src/i18n/locales/zh-CN/chat.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/webview-ui/src/i18n/locales/it/chat.json b/webview-ui/src/i18n/locales/it/chat.json index 718a19d9081..fd3bf967d32 100644 --- a/webview-ui/src/i18n/locales/it/chat.json +++ b/webview-ui/src/i18n/locales/it/chat.json @@ -271,7 +271,7 @@ }, "reasoning": { "thinking": "Sto pensando", - "seconds": "{{count}}s", + "seconds": "{{count}}s" }, "contextCondense": { "title": "Contesto condensato", diff --git a/webview-ui/src/i18n/locales/zh-CN/chat.json b/webview-ui/src/i18n/locales/zh-CN/chat.json index fb10978f0e7..cbb0e8633ce 100644 --- a/webview-ui/src/i18n/locales/zh-CN/chat.json +++ b/webview-ui/src/i18n/locales/zh-CN/chat.json @@ -272,7 +272,7 @@ }, "reasoning": { "thinking": "思考中", - "seconds": "{{count}}秒", + "seconds": "{{count}}秒" }, "contextCondense": { "title": "上下文已压缩", From 4f576e6a064b69b169f83e64877b19ac98843ea2 Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Tue, 23 Sep 2025 15:49:32 +0100 Subject: [PATCH 11/14] Visual fixes --- webview-ui/src/components/chat/ReasoningBlock.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/webview-ui/src/components/chat/ReasoningBlock.tsx b/webview-ui/src/components/chat/ReasoningBlock.tsx index 2883c61a359..1fd0c770a08 100644 --- a/webview-ui/src/components/chat/ReasoningBlock.tsx +++ b/webview-ui/src/components/chat/ReasoningBlock.tsx @@ -53,7 +53,7 @@ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockP {t("chat:reasoning.thinking")} {elapsed > 0 && ( - {secondsLabel} + {secondsLabel} )}
@@ -65,11 +65,11 @@ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockP />
- {(content?.trim()?.length ?? 0) > 0 && ( + {(content?.trim()?.length ?? 0) > 0 && !isCollapsed && (
- {!isCollapsed && } +
)} From a917cd035403c3c85d3d81b85d8178a9f3ef6d40 Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Tue, 23 Sep 2025 16:51:16 +0100 Subject: [PATCH 12/14] Makes collapsed default a setting in a new 'UI' tab in settings; removes the global shortcut as it's no longer necessary --- packages/types/src/vscode.ts | 1 - src/activate/registerCommands.ts | 12 ---- src/core/webview/ClineProvider.ts | 3 + src/package.json | 12 ---- src/package.nls.ca.json | 1 - src/package.nls.de.json | 1 - src/package.nls.es.json | 1 - src/package.nls.fr.json | 1 - src/package.nls.hi.json | 1 - src/package.nls.id.json | 1 - src/package.nls.it.json | 1 - src/package.nls.ja.json | 1 - src/package.nls.json | 1 - src/package.nls.ko.json | 1 - src/package.nls.nl.json | 1 - src/package.nls.pl.json | 1 - src/package.nls.pt-BR.json | 1 - src/package.nls.ru.json | 1 - src/package.nls.tr.json | 1 - src/package.nls.vi.json | 1 - src/package.nls.zh-CN.json | 1 - src/package.nls.zh-TW.json | 1 - src/shared/ExtensionMessage.ts | 2 +- .../src/components/settings/SettingsView.tsx | 14 +++++ .../src/components/settings/UISettings.tsx | 56 +++++++++++++++++++ .../settings/__tests__/UISettings.spec.tsx | 43 ++++++++++++++ .../src/context/ExtensionStateContext.tsx | 20 ++----- webview-ui/src/i18n/locales/ca/settings.json | 7 +++ webview-ui/src/i18n/locales/de/settings.json | 7 +++ webview-ui/src/i18n/locales/en/settings.json | 7 +++ webview-ui/src/i18n/locales/es/settings.json | 7 +++ webview-ui/src/i18n/locales/fr/settings.json | 7 +++ webview-ui/src/i18n/locales/hi/settings.json | 7 +++ webview-ui/src/i18n/locales/id/settings.json | 7 +++ webview-ui/src/i18n/locales/it/settings.json | 7 +++ webview-ui/src/i18n/locales/ja/settings.json | 7 +++ webview-ui/src/i18n/locales/ko/settings.json | 7 +++ webview-ui/src/i18n/locales/nl/settings.json | 7 +++ webview-ui/src/i18n/locales/pl/settings.json | 7 +++ .../src/i18n/locales/pt-BR/settings.json | 7 +++ webview-ui/src/i18n/locales/ru/settings.json | 7 +++ webview-ui/src/i18n/locales/tr/settings.json | 7 +++ webview-ui/src/i18n/locales/vi/settings.json | 7 +++ .../src/i18n/locales/zh-CN/settings.json | 7 +++ .../src/i18n/locales/zh-TW/settings.json | 7 +++ 45 files changed, 247 insertions(+), 60 deletions(-) create mode 100644 webview-ui/src/components/settings/UISettings.tsx create mode 100644 webview-ui/src/components/settings/__tests__/UISettings.spec.tsx diff --git a/packages/types/src/vscode.ts b/packages/types/src/vscode.ts index 57d8c9a1eb0..d22ebdab229 100644 --- a/packages/types/src/vscode.ts +++ b/packages/types/src/vscode.ts @@ -54,7 +54,6 @@ export const commandIds = [ "acceptInput", "focusPanel", "toggleAutoApprove", - "toggleThinkingBlocks", ] as const export type CommandId = (typeof commandIds)[number] diff --git a/src/activate/registerCommands.ts b/src/activate/registerCommands.ts index ac216f24b51..41c127333d8 100644 --- a/src/activate/registerCommands.ts +++ b/src/activate/registerCommands.ts @@ -233,18 +233,6 @@ const getCommandsMap = ({ context, outputChannel, provider }: RegisterCommandOpt action: "toggleAutoApprove", }) }, - toggleThinkingBlocks: async () => { - const visibleProvider = getVisibleProviderOrLog(outputChannel) - - if (!visibleProvider) { - return - } - - visibleProvider.postMessageToWebview({ - type: "action", - action: "toggleThinkingBlocks", - }) - }, }) export const openClineInNewTab = async ({ context, outputChannel }: Omit) => { diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 4b54cbb0af6..7ed9a925e84 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -1791,6 +1791,7 @@ export class ClineProvider maxTotalImageSize, terminalCompressProgressBar, historyPreviewCollapsed, + reasoningBlockCollapsed, cloudUserInfo, cloudIsAuthenticated, sharingEnabled, @@ -1914,6 +1915,7 @@ export class ClineProvider terminalCompressProgressBar: terminalCompressProgressBar ?? true, hasSystemPromptOverride, historyPreviewCollapsed: historyPreviewCollapsed ?? false, + reasoningBlockCollapsed: reasoningBlockCollapsed ?? true, cloudUserInfo, cloudIsAuthenticated: cloudIsAuthenticated ?? false, sharingEnabled: sharingEnabled ?? false, @@ -2127,6 +2129,7 @@ export class ClineProvider maxTotalImageSize: stateValues.maxTotalImageSize ?? 20, maxConcurrentFileReads: stateValues.maxConcurrentFileReads ?? 5, historyPreviewCollapsed: stateValues.historyPreviewCollapsed ?? false, + reasoningBlockCollapsed: stateValues.reasoningBlockCollapsed ?? true, cloudUserInfo, cloudIsAuthenticated, sharingEnabled, diff --git a/src/package.json b/src/package.json index 92727a6f330..51c68ace574 100644 --- a/src/package.json +++ b/src/package.json @@ -179,11 +179,6 @@ "command": "roo-cline.toggleAutoApprove", "title": "%command.toggleAutoApprove.title%", "category": "%configuration.title%" - }, - { - "command": "roo-cline.toggleThinkingBlocks", - "title": "%command.toggleThinkingBlocks.title%", - "category": "%configuration.title%" } ], "menus": { @@ -327,13 +322,6 @@ "mac": "cmd+alt+a", "win": "ctrl+alt+a", "linux": "ctrl+alt+a" - }, - { - "command": "roo-cline.toggleThinkingBlocks", - "key": "cmd+alt+shift+t", - "mac": "cmd+alt+shift+t", - "win": "ctrl+alt+shift+t", - "linux": "ctrl+alt+shift+t" } ], "submenus": [ diff --git a/src/package.nls.ca.json b/src/package.nls.ca.json index 6f011f4430b..32f4515016c 100644 --- a/src/package.nls.ca.json +++ b/src/package.nls.ca.json @@ -15,7 +15,6 @@ "command.terminal.explainCommand.title": "Explicar Aquesta Ordre", "command.acceptInput.title": "Acceptar Entrada/Suggeriment", "command.toggleAutoApprove.title": "Alternar Auto-Aprovació", - "command.toggleThinkingBlocks.title": "Alternar Blocs de Pensament", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.de.json b/src/package.nls.de.json index ec5eee5de3a..61e35fdce54 100644 --- a/src/package.nls.de.json +++ b/src/package.nls.de.json @@ -15,7 +15,6 @@ "command.terminal.explainCommand.title": "Diesen Befehl Erklären", "command.acceptInput.title": "Eingabe/Vorschlag Akzeptieren", "command.toggleAutoApprove.title": "Auto-Genehmigung Umschalten", - "command.toggleThinkingBlocks.title": "Denkblöcke Umschalten", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.es.json b/src/package.nls.es.json index e4d0d1457bf..a8c7c65cf17 100644 --- a/src/package.nls.es.json +++ b/src/package.nls.es.json @@ -15,7 +15,6 @@ "command.terminal.explainCommand.title": "Explicar Este Comando", "command.acceptInput.title": "Aceptar Entrada/Sugerencia", "command.toggleAutoApprove.title": "Alternar Auto-Aprobación", - "command.toggleThinkingBlocks.title": "Alternar Bloques de Pensamiento", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.fr.json b/src/package.nls.fr.json index 9ad1bce9906..7d94d82ad4e 100644 --- a/src/package.nls.fr.json +++ b/src/package.nls.fr.json @@ -15,7 +15,6 @@ "command.terminal.explainCommand.title": "Expliquer cette Commande", "command.acceptInput.title": "Accepter l'Entrée/Suggestion", "command.toggleAutoApprove.title": "Basculer Auto-Approbation", - "command.toggleThinkingBlocks.title": "Basculer les Blocs de Réflexion", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.hi.json b/src/package.nls.hi.json index cba0cea45e5..d59c54d06c1 100644 --- a/src/package.nls.hi.json +++ b/src/package.nls.hi.json @@ -15,7 +15,6 @@ "command.terminal.explainCommand.title": "यह कमांड समझाएं", "command.acceptInput.title": "इनपुट/सुझाव स्वीकारें", "command.toggleAutoApprove.title": "ऑटो-अनुमोदन टॉगल करें", - "command.toggleThinkingBlocks.title": "थिंकिंग ब्लॉक्स टॉगल करें", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.id.json b/src/package.nls.id.json index ddecd523d5e..4cfbfc5b0bb 100644 --- a/src/package.nls.id.json +++ b/src/package.nls.id.json @@ -27,7 +27,6 @@ "command.terminal.explainCommand.title": "Jelaskan Perintah Ini", "command.acceptInput.title": "Terima Input/Saran", "command.toggleAutoApprove.title": "Alihkan Persetujuan Otomatis", - "command.toggleThinkingBlocks.title": "Alihkan Blok Berpikir", "configuration.title": "Roo Code", "commands.allowedCommands.description": "Perintah yang dapat dijalankan secara otomatis ketika 'Selalu setujui operasi eksekusi' diaktifkan", "commands.deniedCommands.description": "Awalan perintah yang akan otomatis ditolak tanpa meminta persetujuan. Jika terjadi konflik dengan perintah yang diizinkan, pencocokan awalan terpanjang akan diprioritaskan. Tambahkan * untuk menolak semua perintah.", diff --git a/src/package.nls.it.json b/src/package.nls.it.json index 7fd73bdcbf8..eb4469c017b 100644 --- a/src/package.nls.it.json +++ b/src/package.nls.it.json @@ -15,7 +15,6 @@ "command.terminal.explainCommand.title": "Spiega Questo Comando", "command.acceptInput.title": "Accetta Input/Suggerimento", "command.toggleAutoApprove.title": "Attiva/Disattiva Auto-Approvazione", - "command.toggleThinkingBlocks.title": "Attiva/Disattiva Blocchi di Pensiero", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.ja.json b/src/package.nls.ja.json index c380d9b16c8..f650fc92fff 100644 --- a/src/package.nls.ja.json +++ b/src/package.nls.ja.json @@ -27,7 +27,6 @@ "command.terminal.explainCommand.title": "このコマンドを説明", "command.acceptInput.title": "入力/提案を承認", "command.toggleAutoApprove.title": "自動承認を切替", - "command.toggleThinkingBlocks.title": "思考ブロックの切り替え", "configuration.title": "Roo Code", "commands.allowedCommands.description": "'常に実行操作を承認する'が有効な場合に自動実行できるコマンド", "commands.deniedCommands.description": "承認を求めずに自動的に拒否されるコマンドプレフィックス。許可されたコマンドとの競合がある場合、最長プレフィックスマッチが優先されます。すべてのコマンドを拒否するには * を追加してください。", diff --git a/src/package.nls.json b/src/package.nls.json index 1b927a38cae..1db69777ac1 100644 --- a/src/package.nls.json +++ b/src/package.nls.json @@ -27,7 +27,6 @@ "command.terminal.explainCommand.title": "Explain This Command", "command.acceptInput.title": "Accept Input/Suggestion", "command.toggleAutoApprove.title": "Toggle Auto-Approve", - "command.toggleThinkingBlocks.title": "Toggle Thinking Blocks", "configuration.title": "Roo Code", "commands.allowedCommands.description": "Commands that can be auto-executed when 'Always approve execute operations' is enabled", "commands.deniedCommands.description": "Command prefixes that will be automatically denied without asking for approval. In case of conflicts with allowed commands, the longest prefix match takes precedence. Add * to deny all commands.", diff --git a/src/package.nls.ko.json b/src/package.nls.ko.json index 060caec9b54..201080898ea 100644 --- a/src/package.nls.ko.json +++ b/src/package.nls.ko.json @@ -15,7 +15,6 @@ "command.terminal.explainCommand.title": "이 명령어 설명", "command.acceptInput.title": "입력/제안 수락", "command.toggleAutoApprove.title": "자동 승인 전환", - "command.toggleThinkingBlocks.title": "생각 블록 전환", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.nl.json b/src/package.nls.nl.json index c3d36b4b810..6ed3da4df22 100644 --- a/src/package.nls.nl.json +++ b/src/package.nls.nl.json @@ -27,7 +27,6 @@ "command.terminal.explainCommand.title": "Leg Dit Commando Uit", "command.acceptInput.title": "Invoer/Suggestie Accepteren", "command.toggleAutoApprove.title": "Auto-Goedkeuring Schakelen", - "command.toggleThinkingBlocks.title": "Denkblokken Schakelen", "configuration.title": "Roo Code", "commands.allowedCommands.description": "Commando's die automatisch kunnen worden uitgevoerd wanneer 'Altijd goedkeuren uitvoerbewerkingen' is ingeschakeld", "commands.deniedCommands.description": "Commando-prefixen die automatisch worden geweigerd zonder om goedkeuring te vragen. Bij conflicten met toegestane commando's heeft de langste prefix-match voorrang. Voeg * toe om alle commando's te weigeren.", diff --git a/src/package.nls.pl.json b/src/package.nls.pl.json index dbff50a04f6..6f90387019e 100644 --- a/src/package.nls.pl.json +++ b/src/package.nls.pl.json @@ -15,7 +15,6 @@ "command.terminal.explainCommand.title": "Wyjaśnij tę Komendę", "command.acceptInput.title": "Akceptuj Wprowadzanie/Sugestię", "command.toggleAutoApprove.title": "Przełącz Auto-Zatwierdzanie", - "command.toggleThinkingBlocks.title": "Przełącz Bloki Myślenia", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.pt-BR.json b/src/package.nls.pt-BR.json index 8f2c9284405..c5269d6de07 100644 --- a/src/package.nls.pt-BR.json +++ b/src/package.nls.pt-BR.json @@ -15,7 +15,6 @@ "command.terminal.explainCommand.title": "Explicar Este Comando", "command.acceptInput.title": "Aceitar Entrada/Sugestão", "command.toggleAutoApprove.title": "Alternar Auto-Aprovação", - "command.toggleThinkingBlocks.title": "Alternar Blocos de Pensamento", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.ru.json b/src/package.nls.ru.json index d7643c9473e..ba9955efda7 100644 --- a/src/package.nls.ru.json +++ b/src/package.nls.ru.json @@ -27,7 +27,6 @@ "command.terminal.explainCommand.title": "Объяснить эту команду", "command.acceptInput.title": "Принять ввод/предложение", "command.toggleAutoApprove.title": "Переключить Авто-Подтверждение", - "command.toggleThinkingBlocks.title": "Переключить Блоки Размышлений", "configuration.title": "Roo Code", "commands.allowedCommands.description": "Команды, которые могут быть автоматически выполнены, когда включена опция 'Всегда подтверждать операции выполнения'", "commands.deniedCommands.description": "Префиксы команд, которые будут автоматически отклонены без запроса подтверждения. В случае конфликтов с разрешенными командами приоритет имеет самое длинное совпадение префикса. Добавьте * чтобы отклонить все команды.", diff --git a/src/package.nls.tr.json b/src/package.nls.tr.json index df8252c8262..85fca8490bb 100644 --- a/src/package.nls.tr.json +++ b/src/package.nls.tr.json @@ -15,7 +15,6 @@ "command.terminal.explainCommand.title": "Bu Komutu Açıkla", "command.acceptInput.title": "Girişi/Öneriyi Kabul Et", "command.toggleAutoApprove.title": "Otomatik Onayı Değiştir", - "command.toggleThinkingBlocks.title": "Düşünme Bloklarını Değiştir", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.vi.json b/src/package.nls.vi.json index 08407679aca..22924906d6a 100644 --- a/src/package.nls.vi.json +++ b/src/package.nls.vi.json @@ -15,7 +15,6 @@ "command.terminal.explainCommand.title": "Giải Thích Lệnh Này", "command.acceptInput.title": "Chấp Nhận Đầu Vào/Gợi Ý", "command.toggleAutoApprove.title": "Bật/Tắt Tự Động Phê Duyệt", - "command.toggleThinkingBlocks.title": "Bật/Tắt các khối Suy nghĩ", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.zh-CN.json b/src/package.nls.zh-CN.json index ba4431f5ebc..b43af88c68b 100644 --- a/src/package.nls.zh-CN.json +++ b/src/package.nls.zh-CN.json @@ -15,7 +15,6 @@ "command.terminal.explainCommand.title": "解释此命令", "command.acceptInput.title": "接受输入/建议", "command.toggleAutoApprove.title": "切换自动批准", - "command.toggleThinkingBlocks.title": "切换思维块", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.zh-TW.json b/src/package.nls.zh-TW.json index 1d86e863bfa..a17547fad85 100644 --- a/src/package.nls.zh-TW.json +++ b/src/package.nls.zh-TW.json @@ -15,7 +15,6 @@ "command.terminal.explainCommand.title": "解釋此命令", "command.acceptInput.title": "接受輸入/建議", "command.toggleAutoApprove.title": "切換自動批准", - "command.toggleThinkingBlocks.title": "切換思維區塊", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/shared/ExtensionMessage.ts b/src/shared/ExtensionMessage.ts index b746807616b..d44352a9b36 100644 --- a/src/shared/ExtensionMessage.ts +++ b/src/shared/ExtensionMessage.ts @@ -138,7 +138,6 @@ export interface ExtensionMessage { | "focusInput" | "switchTab" | "toggleAutoApprove" - | "toggleThinkingBlocks" invoke?: "newChat" | "sendMessage" | "primaryButtonClick" | "secondaryButtonClick" | "setChatBoxMessage" state?: ExtensionState images?: string[] @@ -285,6 +284,7 @@ export type ExtensionState = Pick< | "maxDiagnosticMessages" | "openRouterImageGenerationSelectedModel" | "includeTaskHistoryInEnhance" + | "reasoningBlockCollapsed" > & { version: string clineMessages: ClineMessage[] diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index 66b7ff680fe..39f57613b73 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -24,6 +24,7 @@ import { MessageSquare, LucideIcon, SquareSlash, + Glasses, } from "lucide-react" import type { ProviderSettings, ExperimentId, TelemetrySetting } from "@roo-code/types" @@ -66,6 +67,7 @@ import { About } from "./About" import { Section } from "./Section" import PromptsSettings from "./PromptsSettings" import { SlashCommandsSettings } from "./SlashCommandsSettings" +import { UISettings } from "./UISettings" export const settingsTabsContainer = "flex flex-1 overflow-hidden [&.narrow_.tab-label]:hidden" export const settingsTabList = @@ -88,6 +90,7 @@ const sectionNames = [ "contextManagement", "terminal", "prompts", + "ui", "experimental", "language", "about", @@ -191,6 +194,7 @@ const SettingsView = forwardRef(({ onDone, t includeTaskHistoryInEnhance, openRouterImageApiKey, openRouterImageGenerationSelectedModel, + reasoningBlockCollapsed, } = cachedState const apiConfiguration = useMemo(() => cachedState.apiConfiguration ?? {}, [cachedState.apiConfiguration]) @@ -364,6 +368,7 @@ const SettingsView = forwardRef(({ onDone, t vscode.postMessage({ type: "updateCondensingPrompt", text: customCondensingPrompt || "" }) vscode.postMessage({ type: "updateSupportPrompt", values: customSupportPrompts || {} }) vscode.postMessage({ type: "includeTaskHistoryInEnhance", bool: includeTaskHistoryInEnhance ?? true }) + vscode.postMessage({ type: "setReasoningBlockCollapsed", bool: reasoningBlockCollapsed ?? true }) vscode.postMessage({ type: "upsertApiConfiguration", text: currentApiConfigName, apiConfiguration }) vscode.postMessage({ type: "telemetrySetting", text: telemetrySetting }) vscode.postMessage({ type: "profileThresholds", values: profileThresholds }) @@ -458,6 +463,7 @@ const SettingsView = forwardRef(({ onDone, t { id: "contextManagement", icon: Database }, { id: "terminal", icon: SquareTerminal }, { id: "prompts", icon: MessageSquare }, + { id: "ui", icon: Glasses }, { id: "experimental", icon: FlaskConical }, { id: "language", icon: Globe }, { id: "about", icon: Info }, @@ -757,6 +763,14 @@ const SettingsView = forwardRef(({ onDone, t /> )} + {/* UI Section */} + {activeTab === "ui" && ( + + )} + {/* Experimental Section */} {activeTab === "experimental" && ( { + reasoningBlockCollapsed: boolean + setCachedStateField: SetCachedStateField +} + +export const UISettings = ({ reasoningBlockCollapsed, setCachedStateField, ...props }: UISettingsProps) => { + const { t } = useAppTranslation() + + const handleReasoningBlockCollapsedChange = (value: boolean) => { + setCachedStateField("reasoningBlockCollapsed", value) + + // Track telemetry event + telemetryClient.capture("ui_settings_collapse_thinking_changed", { + enabled: value, + }) + } + + return ( +
+ +
+ +
{t("settings:sections.ui")}
+
+
+ +
+
+ {/* Collapse Thinking Messages Setting */} +
+ handleReasoningBlockCollapsedChange(e.target.checked)} + data-testid="collapse-thinking-checkbox"> + {t("settings:ui.collapseThinking.label")} + +
+ {t("settings:ui.collapseThinking.description")} +
+
+
+
+
+ ) +} diff --git a/webview-ui/src/components/settings/__tests__/UISettings.spec.tsx b/webview-ui/src/components/settings/__tests__/UISettings.spec.tsx new file mode 100644 index 00000000000..43bb013a08f --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/UISettings.spec.tsx @@ -0,0 +1,43 @@ +import { render, fireEvent, waitFor } from "@testing-library/react" +import { describe, it, expect, vi } from "vitest" +import { UISettings } from "../UISettings" + +describe("UISettings", () => { + const defaultProps = { + reasoningBlockCollapsed: false, + setCachedStateField: vi.fn(), + } + + it("renders the collapse thinking checkbox", () => { + const { getByTestId } = render() + const checkbox = getByTestId("collapse-thinking-checkbox") + expect(checkbox).toBeTruthy() + }) + + it("displays the correct initial state", () => { + const { getByTestId } = render() + const checkbox = getByTestId("collapse-thinking-checkbox") as HTMLInputElement + expect(checkbox.checked).toBe(true) + }) + + it("calls setCachedStateField when checkbox is toggled", async () => { + const setCachedStateField = vi.fn() + const { getByTestId } = render() + + const checkbox = getByTestId("collapse-thinking-checkbox") + fireEvent.click(checkbox) + + await waitFor(() => { + expect(setCachedStateField).toHaveBeenCalledWith("reasoningBlockCollapsed", true) + }) + }) + + it("updates checkbox state when prop changes", () => { + const { getByTestId, rerender } = render() + const checkbox = getByTestId("collapse-thinking-checkbox") as HTMLInputElement + expect(checkbox.checked).toBe(false) + + rerender() + expect(checkbox.checked).toBe(true) + }) +}) diff --git a/webview-ui/src/context/ExtensionStateContext.tsx b/webview-ui/src/context/ExtensionStateContext.tsx index b6fa5315ee5..88509b09711 100644 --- a/webview-ui/src/context/ExtensionStateContext.tsx +++ b/webview-ui/src/context/ExtensionStateContext.tsx @@ -26,7 +26,6 @@ import { convertTextMateToHljs } from "@src/utils/textMateToHljs" export interface ExtensionStateContextType extends ExtensionState { historyPreviewCollapsed?: boolean // Add the new state property - reasoningBlockCollapsed?: boolean // Add reasoning block collapsed state didHydrateState: boolean showWelcome: boolean theme: any @@ -240,6 +239,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode terminalZdotdir: false, // Default ZDOTDIR handling setting terminalCompressProgressBar: true, // Default to compress progress bar output historyPreviewCollapsed: false, // Initialize the new state (default to expanded) + reasoningBlockCollapsed: true, // Default to collapsed cloudUserInfo: null, cloudIsAuthenticated: false, sharingEnabled: false, @@ -282,7 +282,6 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode global: {}, }) const [includeTaskHistoryInEnhance, setIncludeTaskHistoryInEnhance] = useState(true) - const [reasoningBlockCollapsed, setReasoningBlockCollapsed] = useState(true) // Default to collapsed const setListApiConfigMeta = useCallback( (value: ProviderSettingsEntry[]) => setState((prevState) => ({ ...prevState, listApiConfigMeta: value })), @@ -320,10 +319,6 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode if ((newState as any).includeTaskHistoryInEnhance !== undefined) { setIncludeTaskHistoryInEnhance((newState as any).includeTaskHistoryInEnhance) } - // Update reasoningBlockCollapsed if present in state message - if ((newState as any).reasoningBlockCollapsed !== undefined) { - setReasoningBlockCollapsed((newState as any).reasoningBlockCollapsed) - } // Handle marketplace data if present in state message if (newState.marketplaceItems !== undefined) { setMarketplaceItems(newState.marketplaceItems) @@ -342,14 +337,6 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode vscode.postMessage({ type: "autoApprovalEnabled", bool: newValue }) return { ...prevState, autoApprovalEnabled: newValue } }) - } else if (message.action === "toggleThinkingBlocks") { - // Toggle the reasoning blocks collapsed state - setReasoningBlockCollapsed((prev) => { - const newValue = !prev - // Also send the update to the extension to persist - vscode.postMessage({ type: "setReasoningBlockCollapsed", bool: newValue }) - return newValue - }) } break } @@ -428,7 +415,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode const contextValue: ExtensionStateContextType = { ...state, - reasoningBlockCollapsed, + reasoningBlockCollapsed: state.reasoningBlockCollapsed ?? true, didHydrateState, showWelcome, theme, @@ -544,7 +531,8 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode }), setHistoryPreviewCollapsed: (value) => setState((prevState) => ({ ...prevState, historyPreviewCollapsed: value })), - setReasoningBlockCollapsed, + setReasoningBlockCollapsed: (value) => + setState((prevState) => ({ ...prevState, reasoningBlockCollapsed: value })), setHasOpenedModeSelector: (value) => setState((prevState) => ({ ...prevState, hasOpenedModeSelector: value })), setAutoCondenseContext: (value) => setState((prevState) => ({ ...prevState, autoCondenseContext: value })), setAutoCondenseContextPercent: (value) => diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index 91a02e7a1c9..dd793b6d64a 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -30,6 +30,7 @@ "terminal": "Terminal", "slashCommands": "Comandes de barra", "prompts": "Indicacions", + "ui": "UI", "experimental": "Experimental", "language": "Idioma", "about": "Sobre Roo Code" @@ -879,5 +880,11 @@ "output": "Sortida", "cacheReads": "Lectures de memòria cau" } + }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } } } diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index fd89eb96378..d143f836bf8 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -30,6 +30,7 @@ "terminal": "Terminal", "slashCommands": "Slash-Befehle", "prompts": "Eingabeaufforderungen", + "ui": "UI", "experimental": "Experimentell", "language": "Sprache", "about": "Über Roo Code" @@ -879,5 +880,11 @@ "output": "Ausgabe", "cacheReads": "Cache-Lesevorgänge" } + }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } } } diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 50d8470abfa..aa3199e8e8b 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -30,6 +30,7 @@ "terminal": "Terminal", "slashCommands": "Slash Commands", "prompts": "Prompts", + "ui": "UI", "experimental": "Experimental", "language": "Language", "about": "About Roo Code" @@ -37,6 +38,12 @@ "slashCommands": { "description": "Manage your slash commands to quickly execute custom workflows and actions. Learn more" }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } + }, "prompts": { "description": "Configure support prompts that are used for quick actions like enhancing prompts, explaining code, and fixing issues. These prompts help Roo provide better assistance for common development tasks." }, diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index 8e6968e8c26..f60061d0fd9 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -30,6 +30,7 @@ "terminal": "Terminal", "slashCommands": "Comandos de Barra", "prompts": "Indicaciones", + "ui": "UI", "experimental": "Experimental", "language": "Idioma", "about": "Acerca de Roo Code" @@ -879,5 +880,11 @@ "output": "Salida", "cacheReads": "Lecturas de caché" } + }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } } } diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index fd48e1e358f..6e85347e4c6 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -30,6 +30,7 @@ "terminal": "Terminal", "slashCommands": "Commandes Slash", "prompts": "Invites", + "ui": "UI", "experimental": "Expérimental", "language": "Langue", "about": "À propos de Roo Code" @@ -879,5 +880,11 @@ "output": "Sortie", "cacheReads": "Lectures du cache" } + }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } } } diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index 1383eb8703a..3c17f371d95 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -30,6 +30,7 @@ "terminal": "टर्मिनल", "slashCommands": "स्लैश कमांड", "prompts": "प्रॉम्प्ट्स", + "ui": "UI", "experimental": "प्रायोगिक", "language": "भाषा", "about": "परिचय" @@ -880,5 +881,11 @@ "output": "आउटपुट", "cacheReads": "कैश रीड" } + }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } } } diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index c29f6cf88c1..d02153d2623 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -30,6 +30,7 @@ "terminal": "Terminal", "slashCommands": "Perintah Slash", "prompts": "Prompt", + "ui": "UI", "experimental": "Eksperimental", "language": "Bahasa", "about": "Tentang Roo Code" @@ -909,5 +910,11 @@ "output": "Output", "cacheReads": "Pembacaan cache" } + }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } } } diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index a930c53a5e7..fc365b9edce 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -30,6 +30,7 @@ "terminal": "Terminal", "slashCommands": "Comandi Slash", "prompts": "Prompt", + "ui": "UI", "experimental": "Sperimentale", "language": "Lingua", "about": "Informazioni su Roo Code" @@ -880,5 +881,11 @@ "output": "Output", "cacheReads": "Letture cache" } + }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } } } diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index c6b24dcd58d..1e82a37fab0 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -30,6 +30,7 @@ "terminal": "ターミナル", "slashCommands": "スラッシュコマンド", "prompts": "プロンプト", + "ui": "UI", "experimental": "実験的", "language": "言語", "about": "Roo Codeについて" @@ -880,5 +881,11 @@ "output": "出力", "cacheReads": "キャッシュ読み取り" } + }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } } } diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 49ff40ebc79..a9bdd81daf8 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -30,6 +30,7 @@ "terminal": "터미널", "slashCommands": "슬래시 명령", "prompts": "프롬프트", + "ui": "UI", "experimental": "실험적", "language": "언어", "about": "Roo Code 정보" @@ -880,5 +881,11 @@ "output": "출력", "cacheReads": "캐시 읽기" } + }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } } } diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index 571453c4b3b..351da6f863d 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -30,6 +30,7 @@ "terminal": "Terminal", "slashCommands": "Slash-opdrachten", "prompts": "Prompts", + "ui": "UI", "experimental": "Experimenteel", "language": "Taal", "about": "Over Roo Code" @@ -880,5 +881,11 @@ "output": "Uitvoer", "cacheReads": "Cache leest" } + }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } } } diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 51a5b4c3894..46e26e0b16a 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -30,6 +30,7 @@ "terminal": "Terminal", "slashCommands": "Polecenia Slash", "prompts": "Podpowiedzi", + "ui": "UI", "experimental": "Eksperymentalne", "language": "Język", "about": "O Roo Code" @@ -880,5 +881,11 @@ "output": "Wyjście", "cacheReads": "Odczyty z pamięci podręcznej" } + }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } } } diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index 09320ea7196..77702939e18 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -30,6 +30,7 @@ "terminal": "Terminal", "slashCommands": "Comandos de Barra", "prompts": "Prompts", + "ui": "UI", "experimental": "Experimental", "language": "Idioma", "about": "Sobre" @@ -880,5 +881,11 @@ "output": "Saída", "cacheReads": "Leituras de cache" } + }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } } } diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index 3bed3624da2..a2096ea2745 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -30,6 +30,7 @@ "terminal": "Терминал", "slashCommands": "Слэш-команды", "prompts": "Промпты", + "ui": "UI", "experimental": "Экспериментальное", "language": "Язык", "about": "О Roo Code" @@ -880,5 +881,11 @@ "output": "Выход", "cacheReads": "Чтения из кэша" } + }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } } } diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index 7de08d48261..5bbfd7b36d6 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -30,6 +30,7 @@ "terminal": "Terminal", "slashCommands": "Eğik Çizgi Komutları", "prompts": "Promptlar", + "ui": "UI", "experimental": "Deneysel", "language": "Dil", "about": "Roo Code Hakkında" @@ -880,5 +881,11 @@ "output": "Çıkış", "cacheReads": "Önbellek okumaları" } + }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } } } diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index 46dc077d4d1..f446fb0dcc5 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -30,6 +30,7 @@ "terminal": "Terminal", "slashCommands": "Lệnh Gạch Chéo", "prompts": "Lời nhắc", + "ui": "UI", "experimental": "Thử nghiệm", "language": "Ngôn ngữ", "about": "Giới thiệu" @@ -880,5 +881,11 @@ "output": "Đầu ra", "cacheReads": "Lượt đọc bộ nhớ đệm" } + }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } } } diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index ab47a2c9e08..da442373865 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -30,6 +30,7 @@ "terminal": "终端", "slashCommands": "斜杠命令", "prompts": "提示词", + "ui": "UI", "experimental": "实验性", "language": "语言", "about": "关于 Roo Code" @@ -880,5 +881,11 @@ "output": "输出", "cacheReads": "缓存读取" } + }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } } } diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index 57d647d9cf8..b9831c817e2 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -30,6 +30,7 @@ "terminal": "終端機", "slashCommands": "斜線命令", "prompts": "提示詞", + "ui": "UI", "experimental": "實驗性", "language": "語言", "about": "關於 Roo Code" @@ -880,5 +881,11 @@ "output": "輸出", "cacheReads": "快取讀取" } + }, + "ui": { + "collapseThinking": { + "label": "Collapse Thinking messages by default", + "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + } } } From c1a6afd93a75b5193c1593d411e29131b3eb06c7 Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Tue, 23 Sep 2025 17:25:05 +0100 Subject: [PATCH 13/14] i18n fixes --- webview-ui/src/i18n/locales/ca/settings.json | 4 ++-- webview-ui/src/i18n/locales/de/settings.json | 4 ++-- webview-ui/src/i18n/locales/es/settings.json | 4 ++-- webview-ui/src/i18n/locales/fr/settings.json | 4 ++-- webview-ui/src/i18n/locales/hi/settings.json | 4 ++-- webview-ui/src/i18n/locales/id/settings.json | 4 ++-- webview-ui/src/i18n/locales/it/settings.json | 4 ++-- webview-ui/src/i18n/locales/ja/settings.json | 4 ++-- webview-ui/src/i18n/locales/ko/settings.json | 4 ++-- webview-ui/src/i18n/locales/nl/settings.json | 4 ++-- webview-ui/src/i18n/locales/pl/settings.json | 4 ++-- webview-ui/src/i18n/locales/pt-BR/settings.json | 4 ++-- webview-ui/src/i18n/locales/ru/settings.json | 4 ++-- webview-ui/src/i18n/locales/tr/settings.json | 4 ++-- webview-ui/src/i18n/locales/vi/settings.json | 4 ++-- webview-ui/src/i18n/locales/zh-CN/settings.json | 4 ++-- webview-ui/src/i18n/locales/zh-TW/settings.json | 4 ++-- 17 files changed, 34 insertions(+), 34 deletions(-) diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index dd793b6d64a..2aa6b7ad729 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -883,8 +883,8 @@ }, "ui": { "collapseThinking": { - "label": "Collapse Thinking messages by default", - "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + "label": "Replega els missatges de pensament per defecte", + "description": "Quan estigui activat, els blocs de pensament es replegaran per defecte fins que interactuïs amb ells" } } } diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index d143f836bf8..a96e2151851 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -883,8 +883,8 @@ }, "ui": { "collapseThinking": { - "label": "Collapse Thinking messages by default", - "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + "label": "Gedankenblöcke standardmäßig ausblenden", + "description": "Wenn aktiviert, werden Gedankenblöcke standardmäßig ausgeblendet, bis du mit ihnen interagierst" } } } diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index f60061d0fd9..44c1b9496d1 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -883,8 +883,8 @@ }, "ui": { "collapseThinking": { - "label": "Collapse Thinking messages by default", - "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + "label": "Colapsar mensajes de pensamiento por defecto", + "description": "Cuando está activado, los bloques de pensamiento se colapsarán por defecto hasta que interactúes con ellos" } } } diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index 6e85347e4c6..cd2b3bef876 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -883,8 +883,8 @@ }, "ui": { "collapseThinking": { - "label": "Collapse Thinking messages by default", - "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + "label": "Réduire les messages de réflexion par défaut", + "description": "Si activé, les blocs de réflexion seront réduits par défaut jusqu'à ce que vous interagissiez avec eux" } } } diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index 3c17f371d95..d9d8184fbbd 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -884,8 +884,8 @@ }, "ui": { "collapseThinking": { - "label": "Collapse Thinking messages by default", - "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + "label": "सोच संदेशों को डिफ़ॉल्ट रूप से संक्षिप्त करें", + "description": "सक्षम होने पर, सोच ब्लॉक आपके द्वारा उनके साथ इंटरैक्ट करने तक डिफ़ॉल्ट रूप से संक्षिप्त रहेंगे" } } } diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index d02153d2623..187f42958b6 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -913,8 +913,8 @@ }, "ui": { "collapseThinking": { - "label": "Collapse Thinking messages by default", - "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + "label": "Ciutkan pesan Berpikir secara default", + "description": "Jika diaktifkan, blok berpikir akan diciutkan secara default sampai Anda berinteraksi dengannya" } } } diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index fc365b9edce..335877b0a87 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -884,8 +884,8 @@ }, "ui": { "collapseThinking": { - "label": "Collapse Thinking messages by default", - "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + "label": "Comprimi i messaggi di pensiero per impostazione predefinita", + "description": "Se abilitato, i blocchi di pensiero verranno compressi per impostazione predefinita finché non interagisci con essi" } } } diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index 1e82a37fab0..bce95eeab20 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -884,8 +884,8 @@ }, "ui": { "collapseThinking": { - "label": "Collapse Thinking messages by default", - "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + "label": "デフォルトで思考メッセージを折りたたむ", + "description": "有効にすると、操作するまで思考ブロックがデフォルトで折りたたまれます" } } } diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index a9bdd81daf8..f7aec2f4ced 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -884,8 +884,8 @@ }, "ui": { "collapseThinking": { - "label": "Collapse Thinking messages by default", - "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + "label": "기본적으로 생각 메시지 접기", + "description": "활성화하면 상호 작용할 때까지 생각 블록이 기본적으로 접힙니다" } } } diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index 351da6f863d..d5b246e22ae 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -884,8 +884,8 @@ }, "ui": { "collapseThinking": { - "label": "Collapse Thinking messages by default", - "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + "label": "Denkberichten standaard samenvouwen", + "description": "Indien ingeschakeld, worden denkblokken standaard samengevouwen totdat je ermee interageert" } } } diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 46e26e0b16a..385a38fe2c4 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -884,8 +884,8 @@ }, "ui": { "collapseThinking": { - "label": "Collapse Thinking messages by default", - "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + "label": "Domyślnie zwijaj komunikaty o myśleniu", + "description": "Gdy włączone, bloki myślenia będą domyślnie zwinięte, dopóki nie wejdziesz z nimi w interakcję" } } } diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index 77702939e18..be2ff89ff78 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -884,8 +884,8 @@ }, "ui": { "collapseThinking": { - "label": "Collapse Thinking messages by default", - "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + "label": "Recolher mensagens de pensamento por padrão", + "description": "Quando ativado, os blocos de pensamento serão recolhidos por padrão até que você interaja com eles" } } } diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index a2096ea2745..b429f01f4e2 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -884,8 +884,8 @@ }, "ui": { "collapseThinking": { - "label": "Collapse Thinking messages by default", - "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + "label": "Сворачивать сообщения о размышлениях по умолчанию", + "description": "Если включено, блоки с размышлениями будут свернуты по умолчанию, пока вы не начнете с ними взаимодействовать" } } } diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index 5bbfd7b36d6..429599d7ea0 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -884,8 +884,8 @@ }, "ui": { "collapseThinking": { - "label": "Collapse Thinking messages by default", - "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + "label": "Düşünme mesajlarını varsayılan olarak daralt", + "description": "Etkinleştirildiğinde, düşünme blokları siz onlarla etkileşime girene kadar varsayılan olarak daraltılır" } } } diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index f446fb0dcc5..35fd639ba66 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -884,8 +884,8 @@ }, "ui": { "collapseThinking": { - "label": "Collapse Thinking messages by default", - "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + "label": "Thu gọn tin nhắn Suy nghĩ theo mặc định", + "description": "Khi được bật, các khối suy nghĩ sẽ được thu gọn theo mặc định cho đến khi bạn tương tác với chúng" } } } diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index da442373865..abb3e44637c 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -884,8 +884,8 @@ }, "ui": { "collapseThinking": { - "label": "Collapse Thinking messages by default", - "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + "label": "默认折叠“思考”消息", + "description": "启用后,“思考”块将默认折叠,直到您与其交互" } } } diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index b9831c817e2..91f7c5677a4 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -884,8 +884,8 @@ }, "ui": { "collapseThinking": { - "label": "Collapse Thinking messages by default", - "description": "When enabled, thinking blocks will be collapsed by default until you interact with them" + "label": "預設折疊“思考”訊息", + "description": "啟用後,“思考”塊將預設折疊,直到您與其互動" } } } From acd8333d275b97c6faaf25f5e562709b0a7ad058 Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Tue, 23 Sep 2025 17:27:41 +0100 Subject: [PATCH 14/14] More i18n fixes --- webview-ui/src/i18n/locales/ca/chat.json | 1 - webview-ui/src/i18n/locales/de/chat.json | 1 - webview-ui/src/i18n/locales/en/chat.json | 1 - webview-ui/src/i18n/locales/es/chat.json | 1 - webview-ui/src/i18n/locales/fr/chat.json | 1 - webview-ui/src/i18n/locales/hi/chat.json | 1 - webview-ui/src/i18n/locales/id/chat.json | 1 - webview-ui/src/i18n/locales/ja/chat.json | 1 - webview-ui/src/i18n/locales/ko/chat.json | 1 - webview-ui/src/i18n/locales/nl/chat.json | 1 - webview-ui/src/i18n/locales/pl/chat.json | 1 - webview-ui/src/i18n/locales/pt-BR/chat.json | 1 - webview-ui/src/i18n/locales/ru/chat.json | 1 - webview-ui/src/i18n/locales/tr/chat.json | 1 - webview-ui/src/i18n/locales/vi/chat.json | 1 - webview-ui/src/i18n/locales/zh-TW/chat.json | 1 - 16 files changed, 16 deletions(-) diff --git a/webview-ui/src/i18n/locales/ca/chat.json b/webview-ui/src/i18n/locales/ca/chat.json index c5a393e208c..65ffdfa0151 100644 --- a/webview-ui/src/i18n/locales/ca/chat.json +++ b/webview-ui/src/i18n/locales/ca/chat.json @@ -271,7 +271,6 @@ }, "reasoning": { "thinking": "Pensant", - "seconds": "{{count}}s", "seconds": "{{count}}s" }, "contextCondense": { diff --git a/webview-ui/src/i18n/locales/de/chat.json b/webview-ui/src/i18n/locales/de/chat.json index faf1f52b6c8..a68bc69b932 100644 --- a/webview-ui/src/i18n/locales/de/chat.json +++ b/webview-ui/src/i18n/locales/de/chat.json @@ -271,7 +271,6 @@ }, "reasoning": { "thinking": "Denke nach", - "seconds": "{{count}}s", "seconds": "{{count}}s" }, "contextCondense": { diff --git a/webview-ui/src/i18n/locales/en/chat.json b/webview-ui/src/i18n/locales/en/chat.json index 4fd1bb39bd6..7bd0cde9d34 100644 --- a/webview-ui/src/i18n/locales/en/chat.json +++ b/webview-ui/src/i18n/locales/en/chat.json @@ -305,7 +305,6 @@ }, "reasoning": { "thinking": "Thinking", - "seconds": "{{count}}s", "seconds": "{{count}}s" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/es/chat.json b/webview-ui/src/i18n/locales/es/chat.json index 14c1b2197ce..20de4dcaba6 100644 --- a/webview-ui/src/i18n/locales/es/chat.json +++ b/webview-ui/src/i18n/locales/es/chat.json @@ -271,7 +271,6 @@ }, "reasoning": { "thinking": "Pensando", - "seconds": "{{count}}s", "seconds": "{{count}}s" }, "contextCondense": { diff --git a/webview-ui/src/i18n/locales/fr/chat.json b/webview-ui/src/i18n/locales/fr/chat.json index 3f3591093b3..4d31f328ad3 100644 --- a/webview-ui/src/i18n/locales/fr/chat.json +++ b/webview-ui/src/i18n/locales/fr/chat.json @@ -271,7 +271,6 @@ }, "reasoning": { "thinking": "Réflexion", - "seconds": "{{count}}s", "seconds": "{{count}}s" }, "contextCondense": { diff --git a/webview-ui/src/i18n/locales/hi/chat.json b/webview-ui/src/i18n/locales/hi/chat.json index 595eee5ecc1..17b5ceef01d 100644 --- a/webview-ui/src/i18n/locales/hi/chat.json +++ b/webview-ui/src/i18n/locales/hi/chat.json @@ -271,7 +271,6 @@ }, "reasoning": { "thinking": "विचार कर रहा है", - "seconds": "{{count}} सेकंड", "seconds": "{{count}} सेकंड" }, "contextCondense": { diff --git a/webview-ui/src/i18n/locales/id/chat.json b/webview-ui/src/i18n/locales/id/chat.json index 931a2cbf13c..532ab413031 100644 --- a/webview-ui/src/i18n/locales/id/chat.json +++ b/webview-ui/src/i18n/locales/id/chat.json @@ -309,7 +309,6 @@ }, "reasoning": { "thinking": "Berpikir", - "seconds": "{{count}}d", "seconds": "{{count}}d" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/ja/chat.json b/webview-ui/src/i18n/locales/ja/chat.json index ccd50790fcc..52e633b3ef5 100644 --- a/webview-ui/src/i18n/locales/ja/chat.json +++ b/webview-ui/src/i18n/locales/ja/chat.json @@ -271,7 +271,6 @@ }, "reasoning": { "thinking": "考え中", - "seconds": "{{count}}秒", "seconds": "{{count}}秒" }, "contextCondense": { diff --git a/webview-ui/src/i18n/locales/ko/chat.json b/webview-ui/src/i18n/locales/ko/chat.json index fdef42032ba..991955f1e8a 100644 --- a/webview-ui/src/i18n/locales/ko/chat.json +++ b/webview-ui/src/i18n/locales/ko/chat.json @@ -271,7 +271,6 @@ }, "reasoning": { "thinking": "생각 중", - "seconds": "{{count}}초", "seconds": "{{count}}초" }, "contextCondense": { diff --git a/webview-ui/src/i18n/locales/nl/chat.json b/webview-ui/src/i18n/locales/nl/chat.json index ac236708a41..e5d779f70c2 100644 --- a/webview-ui/src/i18n/locales/nl/chat.json +++ b/webview-ui/src/i18n/locales/nl/chat.json @@ -282,7 +282,6 @@ }, "reasoning": { "thinking": "Denkt na", - "seconds": "{{count}}s", "seconds": "{{count}}s" }, "contextCondense": { diff --git a/webview-ui/src/i18n/locales/pl/chat.json b/webview-ui/src/i18n/locales/pl/chat.json index b181fcd04b4..26e8e59e2c6 100644 --- a/webview-ui/src/i18n/locales/pl/chat.json +++ b/webview-ui/src/i18n/locales/pl/chat.json @@ -271,7 +271,6 @@ }, "reasoning": { "thinking": "Myślenie", - "seconds": "{{count}} s", "seconds": "{{count}} s" }, "contextCondense": { diff --git a/webview-ui/src/i18n/locales/pt-BR/chat.json b/webview-ui/src/i18n/locales/pt-BR/chat.json index 99d758cd0ff..b14a1bbaa79 100644 --- a/webview-ui/src/i18n/locales/pt-BR/chat.json +++ b/webview-ui/src/i18n/locales/pt-BR/chat.json @@ -271,7 +271,6 @@ }, "reasoning": { "thinking": "Pensando", - "seconds": "{{count}}s", "seconds": "{{count}}s" }, "contextCondense": { diff --git a/webview-ui/src/i18n/locales/ru/chat.json b/webview-ui/src/i18n/locales/ru/chat.json index 453cb3e012a..c5acc9f25a3 100644 --- a/webview-ui/src/i18n/locales/ru/chat.json +++ b/webview-ui/src/i18n/locales/ru/chat.json @@ -283,7 +283,6 @@ }, "reasoning": { "thinking": "Обдумывание", - "seconds": "{{count}}с", "seconds": "{{count}}с" }, "contextCondense": { diff --git a/webview-ui/src/i18n/locales/tr/chat.json b/webview-ui/src/i18n/locales/tr/chat.json index 9efaafac75e..8e2a1077dfb 100644 --- a/webview-ui/src/i18n/locales/tr/chat.json +++ b/webview-ui/src/i18n/locales/tr/chat.json @@ -272,7 +272,6 @@ }, "reasoning": { "thinking": "Düşünüyor", - "seconds": "{{count}}sn", "seconds": "{{count}}sn" }, "contextCondense": { diff --git a/webview-ui/src/i18n/locales/vi/chat.json b/webview-ui/src/i18n/locales/vi/chat.json index b8aa0c2d5a1..221ced0377a 100644 --- a/webview-ui/src/i18n/locales/vi/chat.json +++ b/webview-ui/src/i18n/locales/vi/chat.json @@ -272,7 +272,6 @@ }, "reasoning": { "thinking": "Đang suy nghĩ", - "seconds": "{{count}} giây", "seconds": "{{count}} giây" }, "contextCondense": { diff --git a/webview-ui/src/i18n/locales/zh-TW/chat.json b/webview-ui/src/i18n/locales/zh-TW/chat.json index 69bb4b7096f..dbc4b3dd9f8 100644 --- a/webview-ui/src/i18n/locales/zh-TW/chat.json +++ b/webview-ui/src/i18n/locales/zh-TW/chat.json @@ -307,7 +307,6 @@ }, "reasoning": { "thinking": "思考中", - "seconds": "{{count}} 秒", "seconds": "{{count}} 秒" }, "followUpSuggest": {