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/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 33e2febb9b2..8142639d671 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -1792,6 +1792,7 @@ export class ClineProvider maxTotalImageSize, terminalCompressProgressBar, historyPreviewCollapsed, + reasoningBlockCollapsed, cloudUserInfo, cloudIsAuthenticated, sharingEnabled, @@ -1925,6 +1926,7 @@ export class ClineProvider terminalCompressProgressBar: terminalCompressProgressBar ?? true, hasSystemPromptOverride, historyPreviewCollapsed: historyPreviewCollapsed ?? false, + reasoningBlockCollapsed: reasoningBlockCollapsed ?? true, cloudUserInfo, cloudIsAuthenticated: cloudIsAuthenticated ?? false, cloudOrganizations, @@ -2139,6 +2141,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/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 8f8ab55d733..c3e57c67a20 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/ExtensionMessage.ts b/src/shared/ExtensionMessage.ts index 70d3a75e148..66f389f81c1 100644 --- a/src/shared/ExtensionMessage.ts +++ b/src/shared/ExtensionMessage.ts @@ -287,6 +287,7 @@ export type ExtensionState = Pick< | "maxDiagnosticMessages" | "openRouterImageGenerationSelectedModel" | "includeTaskHistoryInEnhance" + | "reasoningBlockCollapsed" > & { version: string clineMessages: ClineMessage[] diff --git a/src/shared/WebviewMessage.ts b/src/shared/WebviewMessage.ts index 023bfa36b62..d43a2fce043 100644 --- a/src/shared/WebviewMessage.ts +++ b/src/shared/WebviewMessage.ts @@ -194,6 +194,7 @@ export interface WebviewMessage { | "focusPanelRequest" | "profileThresholds" | "setHistoryPreviewCollapsed" + | "setReasoningBlockCollapsed" | "openExternal" | "filterMarketplaceItems" | "marketplaceButtonClicked" 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 3fa46df5701..1fd0c770a08 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 { 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, ChevronUp } from "lucide-react" +import { cn } from "@/lib/utils" interface ReasoningBlockProps { content: string @@ -12,18 +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) - */ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockProps) => { const { t } = useTranslation() + const { reasoningBlockCollapsed } = useExtensionState() + + const [isCollapsed, setIsCollapsed] = useState(reasoningBlockCollapsed) const startTimeRef = useRef(Date.now()) const [elapsed, setElapsed] = useState(0) + const contentRef = useRef(null) + + useEffect(() => { + setIsCollapsed(reasoningBlockCollapsed) + }, [reasoningBlockCollapsed]) - // Simple timer that runs while streaming useEffect(() => { if (isLast && isStreaming) { const tick = () => setElapsed(Date.now() - startTimeRef.current) @@ -36,21 +40,35 @@ 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} + )} +
+
+
- {elapsed > 0 && ( - - {secondsLabel} - - )}
- {(content?.trim()?.length ?? 0) > 0 && ( -
+ {(content?.trim()?.length ?? 0) > 0 && !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/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 247eb9426b2..542b2385c02 100644 --- a/webview-ui/src/context/ExtensionStateContext.tsx +++ b/webview-ui/src/context/ExtensionStateContext.tsx @@ -144,6 +144,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 @@ -240,6 +241,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, cloudOrganizations: [], @@ -416,6 +418,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode const contextValue: ExtensionStateContextType = { ...state, + reasoningBlockCollapsed: state.reasoningBlockCollapsed ?? true, didHydrateState, showWelcome, theme, @@ -532,6 +535,8 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode }), setHistoryPreviewCollapsed: (value) => setState((prevState) => ({ ...prevState, historyPreviewCollapsed: value })), + 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/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/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index 91a02e7a1c9..2aa6b7ad729 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": "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/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/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index fd89eb96378..a96e2151851 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": "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/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/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/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/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index 8e6968e8c26..44c1b9496d1 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": "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/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/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index fd48e1e358f..cd2b3bef876 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": "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/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/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index 1383eb8703a..d9d8184fbbd 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": "सोच संदेशों को डिफ़ॉल्ट रूप से संक्षिप्त करें", + "description": "सक्षम होने पर, सोच ब्लॉक आपके द्वारा उनके साथ इंटरैक्ट करने तक डिफ़ॉल्ट रूप से संक्षिप्त रहेंगे" + } } } 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/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index c29f6cf88c1..187f42958b6 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": "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/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/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index a930c53a5e7..335877b0a87 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": "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/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/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index c6b24dcd58d..bce95eeab20 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": "デフォルトで思考メッセージを折りたたむ", + "description": "有効にすると、操作するまで思考ブロックがデフォルトで折りたたまれます" + } } } 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/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 49ff40ebc79..f7aec2f4ced 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": "기본적으로 생각 메시지 접기", + "description": "활성화하면 상호 작용할 때까지 생각 블록이 기본적으로 접힙니다" + } } } 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/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index 571453c4b3b..d5b246e22ae 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": "Denkberichten standaard samenvouwen", + "description": "Indien ingeschakeld, worden denkblokken standaard samengevouwen totdat je ermee interageert" + } } } 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/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 51a5b4c3894..385a38fe2c4 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": "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/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/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index 09320ea7196..be2ff89ff78 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": "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/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/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index 3bed3624da2..b429f01f4e2 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": "Сворачивать сообщения о размышлениях по умолчанию", + "description": "Если включено, блоки с размышлениями будут свернуты по умолчанию, пока вы не начнете с ними взаимодействовать" + } } } 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/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index 7de08d48261..429599d7ea0 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": "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/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/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index 46dc077d4d1..35fd639ba66 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": "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/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-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index ab47a2c9e08..abb3e44637c 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": "默认折叠“思考”消息", + "description": "启用后,“思考”块将默认折叠,直到您与其交互" + } } } 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": "您說" }, diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index 57d647d9cf8..91f7c5677a4 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": "預設折疊“思考”訊息", + "description": "啟用後,“思考”塊將預設折疊,直到您與其互動" + } } }