diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 215936dff6..45d2f68be1 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -3,10 +3,9 @@ // for the documentation about the extensions.json format "recommendations": [ "dbaeumer.vscode-eslint", - "connor4312.esbuild-problem-matchers", - "ms-vscode.extension-test-runner", + "esbenp.prettier-vscode", "csstools.postcss", "bradlc.vscode-tailwindcss", - "tobermory.es6-string-html" + "connor4312.esbuild-problem-matchers" ] } diff --git a/package-lock.json b/package-lock.json index 9f949bc3ed..703318a72a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12547,6 +12547,7 @@ "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "chalk": "^2.4.1", diff --git a/src/activate/registerCommands.ts b/src/activate/registerCommands.ts index 1ca7ee96f8..d271a05434 100644 --- a/src/activate/registerCommands.ts +++ b/src/activate/registerCommands.ts @@ -89,14 +89,11 @@ const getCommandsMap = ({ context, outputChannel, provider }: RegisterCommandOpt } const openClineInNewTab = async ({ context, outputChannel }: Omit) => { - outputChannel.appendLine("Opening Roo Code in new tab") - // (This example uses webviewProvider activation event which is necessary to // deserialize cached webview, but since we use retainContextWhenHidden, we // don't need to use that event). // https://github.com/microsoft/vscode-extension-samples/blob/main/webview-sample/src/extension.ts - const tabProvider = new ClineProvider(context, outputChannel) - // const column = vscode.window.activeTextEditor ? vscode.window.activeTextEditor.viewColumn : undefined + const tabProvider = new ClineProvider(context, outputChannel, "editor") const lastCol = Math.max(...vscode.window.visibleTextEditors.map((editor) => editor.viewColumn || 0)) // Check if there are any visible text editors, otherwise open a new group @@ -115,10 +112,10 @@ const openClineInNewTab = async ({ context, outputChannel }: Omit { setPanel(undefined, "tab") }) - // Lock the editor group so clicking on files doesn't open them over the panel + // Lock the editor group so clicking on files doesn't open them over the panel. await delay(100) await vscode.commands.executeCommand("workbench.action.lockEditorGroup") } diff --git a/src/core/prompts/__tests__/__snapshots__/system.test.ts.snap b/src/core/prompts/__tests__/__snapshots__/system.test.ts.snap index c77816d99e..90e975570d 100644 --- a/src/core/prompts/__tests__/__snapshots__/system.test.ts.snap +++ b/src/core/prompts/__tests__/__snapshots__/system.test.ts.snap @@ -271,7 +271,7 @@ MODES RULES - The project base directory is: /test/path -- All all file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . +- All file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . - You cannot \`cd\` into a different directory to complete a task. You are stuck operating from '/test/path', so be sure to pass in the correct 'path' parameter when using tools that require a path. - Do not use the ~ character or $HOME to refer to the home directory. - Before using the execute_command tool, you must first think about the SYSTEM INFORMATION context provided to understand the user's environment and tailor your commands to ensure they are compatible with their system. You must also consider if the command you need to run should be executed in a specific directory outside of the current working directory '/test/path', and if so prepend with \`cd\`'ing into that directory && then executing the command (as one command since you are stuck operating from '/test/path'). For example, if you needed to run \`npm install\` in a project outside of '/test/path', you would need to prepend with a \`cd\` i.e. pseudocode for this would be \`cd (path to project) && (command, in this case npm install)\`. @@ -691,7 +691,7 @@ MODES RULES - The project base directory is: /test/path -- All all file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . +- All file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . - You cannot \`cd\` into a different directory to complete a task. You are stuck operating from '/test/path', so be sure to pass in the correct 'path' parameter when using tools that require a path. - Do not use the ~ character or $HOME to refer to the home directory. - Before using the execute_command tool, you must first think about the SYSTEM INFORMATION context provided to understand the user's environment and tailor your commands to ensure they are compatible with their system. You must also consider if the command you need to run should be executed in a specific directory outside of the current working directory '/test/path', and if so prepend with \`cd\`'ing into that directory && then executing the command (as one command since you are stuck operating from '/test/path'). For example, if you needed to run \`npm install\` in a project outside of '/test/path', you would need to prepend with a \`cd\` i.e. pseudocode for this would be \`cd (path to project) && (command, in this case npm install)\`. @@ -1080,7 +1080,7 @@ MODES RULES - The project base directory is: /test/path -- All all file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . +- All file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . - You cannot \`cd\` into a different directory to complete a task. You are stuck operating from '/test/path', so be sure to pass in the correct 'path' parameter when using tools that require a path. - Do not use the ~ character or $HOME to refer to the home directory. - Before using the execute_command tool, you must first think about the SYSTEM INFORMATION context provided to understand the user's environment and tailor your commands to ensure they are compatible with their system. You must also consider if the command you need to run should be executed in a specific directory outside of the current working directory '/test/path', and if so prepend with \`cd\`'ing into that directory && then executing the command (as one command since you are stuck operating from '/test/path'). For example, if you needed to run \`npm install\` in a project outside of '/test/path', you would need to prepend with a \`cd\` i.e. pseudocode for this would be \`cd (path to project) && (command, in this case npm install)\`. @@ -1418,7 +1418,7 @@ MODES RULES - The project base directory is: /test/path -- All all file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . +- All file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . - You cannot \`cd\` into a different directory to complete a task. You are stuck operating from '/test/path', so be sure to pass in the correct 'path' parameter when using tools that require a path. - Do not use the ~ character or $HOME to refer to the home directory. - Before using the execute_command tool, you must first think about the SYSTEM INFORMATION context provided to understand the user's environment and tailor your commands to ensure they are compatible with their system. You must also consider if the command you need to run should be executed in a specific directory outside of the current working directory '/test/path', and if so prepend with \`cd\`'ing into that directory && then executing the command (as one command since you are stuck operating from '/test/path'). For example, if you needed to run \`npm install\` in a project outside of '/test/path', you would need to prepend with a \`cd\` i.e. pseudocode for this would be \`cd (path to project) && (command, in this case npm install)\`. @@ -1753,7 +1753,7 @@ MODES RULES - The project base directory is: /test/path -- All all file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . +- All file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . - You cannot \`cd\` into a different directory to complete a task. You are stuck operating from '/test/path', so be sure to pass in the correct 'path' parameter when using tools that require a path. - Do not use the ~ character or $HOME to refer to the home directory. - Before using the execute_command tool, you must first think about the SYSTEM INFORMATION context provided to understand the user's environment and tailor your commands to ensure they are compatible with their system. You must also consider if the command you need to run should be executed in a specific directory outside of the current working directory '/test/path', and if so prepend with \`cd\`'ing into that directory && then executing the command (as one command since you are stuck operating from '/test/path'). For example, if you needed to run \`npm install\` in a project outside of '/test/path', you would need to prepend with a \`cd\` i.e. pseudocode for this would be \`cd (path to project) && (command, in this case npm install)\`. @@ -2088,7 +2088,7 @@ MODES RULES - The project base directory is: /test/path -- All all file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . +- All file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . - You cannot \`cd\` into a different directory to complete a task. You are stuck operating from '/test/path', so be sure to pass in the correct 'path' parameter when using tools that require a path. - Do not use the ~ character or $HOME to refer to the home directory. - Before using the execute_command tool, you must first think about the SYSTEM INFORMATION context provided to understand the user's environment and tailor your commands to ensure they are compatible with their system. You must also consider if the command you need to run should be executed in a specific directory outside of the current working directory '/test/path', and if so prepend with \`cd\`'ing into that directory && then executing the command (as one command since you are stuck operating from '/test/path'). For example, if you needed to run \`npm install\` in a project outside of '/test/path', you would need to prepend with a \`cd\` i.e. pseudocode for this would be \`cd (path to project) && (command, in this case npm install)\`. @@ -2471,7 +2471,7 @@ MODES RULES - The project base directory is: /test/path -- All all file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . +- All file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . - You cannot \`cd\` into a different directory to complete a task. You are stuck operating from '/test/path', so be sure to pass in the correct 'path' parameter when using tools that require a path. - Do not use the ~ character or $HOME to refer to the home directory. - Before using the execute_command tool, you must first think about the SYSTEM INFORMATION context provided to understand the user's environment and tailor your commands to ensure they are compatible with their system. You must also consider if the command you need to run should be executed in a specific directory outside of the current working directory '/test/path', and if so prepend with \`cd\`'ing into that directory && then executing the command (as one command since you are stuck operating from '/test/path'). For example, if you needed to run \`npm install\` in a project outside of '/test/path', you would need to prepend with a \`cd\` i.e. pseudocode for this would be \`cd (path to project) && (command, in this case npm install)\`. @@ -3261,7 +3261,7 @@ MODES RULES - The project base directory is: /test/path -- All all file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . +- All file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . - You cannot \`cd\` into a different directory to complete a task. You are stuck operating from '/test/path', so be sure to pass in the correct 'path' parameter when using tools that require a path. - Do not use the ~ character or $HOME to refer to the home directory. - Before using the execute_command tool, you must first think about the SYSTEM INFORMATION context provided to understand the user's environment and tailor your commands to ensure they are compatible with their system. You must also consider if the command you need to run should be executed in a specific directory outside of the current working directory '/test/path', and if so prepend with \`cd\`'ing into that directory && then executing the command (as one command since you are stuck operating from '/test/path'). For example, if you needed to run \`npm install\` in a project outside of '/test/path', you would need to prepend with a \`cd\` i.e. pseudocode for this would be \`cd (path to project) && (command, in this case npm install)\`. @@ -3644,7 +3644,7 @@ MODES RULES - The project base directory is: /test/path -- All all file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . +- All file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . - You cannot \`cd\` into a different directory to complete a task. You are stuck operating from '/test/path', so be sure to pass in the correct 'path' parameter when using tools that require a path. - Do not use the ~ character or $HOME to refer to the home directory. - Before using the execute_command tool, you must first think about the SYSTEM INFORMATION context provided to understand the user's environment and tailor your commands to ensure they are compatible with their system. You must also consider if the command you need to run should be executed in a specific directory outside of the current working directory '/test/path', and if so prepend with \`cd\`'ing into that directory && then executing the command (as one command since you are stuck operating from '/test/path'). For example, if you needed to run \`npm install\` in a project outside of '/test/path', you would need to prepend with a \`cd\` i.e. pseudocode for this would be \`cd (path to project) && (command, in this case npm install)\`. @@ -4040,7 +4040,7 @@ MODES RULES - The project base directory is: /test/path -- All all file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . +- All file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . - You cannot \`cd\` into a different directory to complete a task. You are stuck operating from '/test/path', so be sure to pass in the correct 'path' parameter when using tools that require a path. - Do not use the ~ character or $HOME to refer to the home directory. - Before using the execute_command tool, you must first think about the SYSTEM INFORMATION context provided to understand the user's environment and tailor your commands to ensure they are compatible with their system. You must also consider if the command you need to run should be executed in a specific directory outside of the current working directory '/test/path', and if so prepend with \`cd\`'ing into that directory && then executing the command (as one command since you are stuck operating from '/test/path'). For example, if you needed to run \`npm install\` in a project outside of '/test/path', you would need to prepend with a \`cd\` i.e. pseudocode for this would be \`cd (path to project) && (command, in this case npm install)\`. @@ -4377,7 +4377,7 @@ MODES RULES - The project base directory is: /test/path -- All all file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . +- All file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . - You cannot \`cd\` into a different directory to complete a task. You are stuck operating from '/test/path', so be sure to pass in the correct 'path' parameter when using tools that require a path. - Do not use the ~ character or $HOME to refer to the home directory. - Before using the execute_command tool, you must first think about the SYSTEM INFORMATION context provided to understand the user's environment and tailor your commands to ensure they are compatible with their system. You must also consider if the command you need to run should be executed in a specific directory outside of the current working directory '/test/path', and if so prepend with \`cd\`'ing into that directory && then executing the command (as one command since you are stuck operating from '/test/path'). For example, if you needed to run \`npm install\` in a project outside of '/test/path', you would need to prepend with a \`cd\` i.e. pseudocode for this would be \`cd (path to project) && (command, in this case npm install)\`. @@ -4901,7 +4901,7 @@ MODES RULES - The project base directory is: /test/path -- All all file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . +- All file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . - You cannot \`cd\` into a different directory to complete a task. You are stuck operating from '/test/path', so be sure to pass in the correct 'path' parameter when using tools that require a path. - Do not use the ~ character or $HOME to refer to the home directory. - Before using the execute_command tool, you must first think about the SYSTEM INFORMATION context provided to understand the user's environment and tailor your commands to ensure they are compatible with their system. You must also consider if the command you need to run should be executed in a specific directory outside of the current working directory '/test/path', and if so prepend with \`cd\`'ing into that directory && then executing the command (as one command since you are stuck operating from '/test/path'). For example, if you needed to run \`npm install\` in a project outside of '/test/path', you would need to prepend with a \`cd\` i.e. pseudocode for this would be \`cd (path to project) && (command, in this case npm install)\`. @@ -5314,7 +5314,7 @@ MODES RULES - The project base directory is: /test/path -- All all file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . +- All file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . - You cannot \`cd\` into a different directory to complete a task. You are stuck operating from '/test/path', so be sure to pass in the correct 'path' parameter when using tools that require a path. - Do not use the ~ character or $HOME to refer to the home directory. - Before using the execute_command tool, you must first think about the SYSTEM INFORMATION context provided to understand the user's environment and tailor your commands to ensure they are compatible with their system. You must also consider if the command you need to run should be executed in a specific directory outside of the current working directory '/test/path', and if so prepend with \`cd\`'ing into that directory && then executing the command (as one command since you are stuck operating from '/test/path'). For example, if you needed to run \`npm install\` in a project outside of '/test/path', you would need to prepend with a \`cd\` i.e. pseudocode for this would be \`cd (path to project) && (command, in this case npm install)\`. @@ -5603,7 +5603,7 @@ MODES RULES - The project base directory is: /test/path -- All all file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . +- All file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . - You cannot \`cd\` into a different directory to complete a task. You are stuck operating from '/test/path', so be sure to pass in the correct 'path' parameter when using tools that require a path. - Do not use the ~ character or $HOME to refer to the home directory. - Before using the execute_command tool, you must first think about the SYSTEM INFORMATION context provided to understand the user's environment and tailor your commands to ensure they are compatible with their system. You must also consider if the command you need to run should be executed in a specific directory outside of the current working directory '/test/path', and if so prepend with \`cd\`'ing into that directory && then executing the command (as one command since you are stuck operating from '/test/path'). For example, if you needed to run \`npm install\` in a project outside of '/test/path', you would need to prepend with a \`cd\` i.e. pseudocode for this would be \`cd (path to project) && (command, in this case npm install)\`. @@ -6510,7 +6510,7 @@ MODES RULES - The project base directory is: /test/path -- All all file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . +- All file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . - You cannot \`cd\` into a different directory to complete a task. You are stuck operating from '/test/path', so be sure to pass in the correct 'path' parameter when using tools that require a path. - Do not use the ~ character or $HOME to refer to the home directory. - Before using the execute_command tool, you must first think about the SYSTEM INFORMATION context provided to understand the user's environment and tailor your commands to ensure they are compatible with their system. You must also consider if the command you need to run should be executed in a specific directory outside of the current working directory '/test/path', and if so prepend with \`cd\`'ing into that directory && then executing the command (as one command since you are stuck operating from '/test/path'). For example, if you needed to run \`npm install\` in a project outside of '/test/path', you would need to prepend with a \`cd\` i.e. pseudocode for this would be \`cd (path to project) && (command, in this case npm install)\`. diff --git a/src/core/prompts/sections/rules.ts b/src/core/prompts/sections/rules.ts index a68017970c..02d8a25cdb 100644 --- a/src/core/prompts/sections/rules.ts +++ b/src/core/prompts/sections/rules.ts @@ -1,7 +1,4 @@ import { DiffStrategy } from "../../diff/DiffStrategy" -import { modes, ModeConfig } from "../../../shared/modes" -import * as vscode from "vscode" -import * as path from "path" function getEditingInstructions(diffStrategy?: DiffStrategy, experiments?: Record): string { const instructions: string[] = [] @@ -65,7 +62,7 @@ export function getRulesSection( RULES - The project base directory is: ${cwd.toPosix()} -- All all file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . +- All file paths must be relative to this directory. However, commands may change directories in terminals, so respect working directory specified by the response to . - You cannot \`cd\` into a different directory to complete a task. You are stuck operating from '${cwd.toPosix()}', so be sure to pass in the correct 'path' parameter when using tools that require a path. - Do not use the ~ character or $HOME to refer to the home directory. - Before using the execute_command tool, you must first think about the SYSTEM INFORMATION context provided to understand the user's environment and tailor your commands to ensure they are compatible with their system. You must also consider if the command you need to run should be executed in a specific directory outside of the current working directory '${cwd.toPosix()}', and if so prepend with \`cd\`'ing into that directory && then executing the command (as one command since you are stuck operating from '${cwd.toPosix()}'). For example, if you needed to run \`npm install\` in a project outside of '${cwd.toPosix()}', you would need to prepend with a \`cd\` i.e. pseudocode for this would be \`cd (path to project) && (command, in this case npm install)\`. diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index d71f7a65e5..3880032217 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -6,7 +6,6 @@ import fs from "fs/promises" import os from "os" import pWaitFor from "p-wait-for" import * as path from "path" -import { Terminal } from "../../integrations/terminal/Terminal" import * as vscode from "vscode" import { setPanel } from "../../activate/registerCommands" @@ -28,6 +27,7 @@ import { Mode, PromptComponent, defaultModeSlug, ModeConfig } from "../../shared import { checkExistKey } from "../../shared/checkExistApiConfig" import { EXPERIMENT_IDS, experiments as Experiments, experimentDefault, ExperimentId } from "../../shared/experiments" import { formatLanguage } from "../../shared/language" +import { Terminal, TERMINAL_SHELL_INTEGRATION_TIMEOUT } from "../../integrations/terminal/Terminal" import { downloadTask } from "../../integrations/misc/export-markdown" import { openFile, openImage } from "../../integrations/misc/open-file" import { selectImages } from "../../integrations/misc/process-images" @@ -95,6 +95,7 @@ export class ClineProvider extends EventEmitter implements constructor( readonly context: vscode.ExtensionContext, private readonly outputChannel: vscode.OutputChannel, + private readonly renderContext: "sidebar" | "editor" = "sidebar", ) { super() @@ -359,7 +360,7 @@ export class ClineProvider extends EventEmitter implements // Initialize out-of-scope variables that need to recieve persistent global state values this.getState().then(({ soundEnabled, terminalShellIntegrationTimeout }) => { setSoundEnabled(soundEnabled ?? false) - Terminal.setShellIntegrationTimeout(terminalShellIntegrationTimeout ?? 4000) + Terminal.setShellIntegrationTimeout(terminalShellIntegrationTimeout ?? TERMINAL_SHELL_INTEGRATION_TIMEOUT) }) // Initialize tts enabled state @@ -2400,11 +2401,10 @@ export class ClineProvider extends EventEmitter implements showRooIgnoredFiles, language, } = await this.getState() + const telemetryKey = process.env.POSTHOG_API_KEY const machineId = vscode.env.machineId - const allowedCommands = vscode.workspace.getConfiguration("roo-cline").get("allowedCommands") || [] - const cwd = this.cwd return { @@ -2442,7 +2442,7 @@ export class ClineProvider extends EventEmitter implements remoteBrowserEnabled: remoteBrowserEnabled ?? false, writeDelayMs: writeDelayMs ?? 1000, terminalOutputLineLimit: terminalOutputLineLimit ?? 500, - terminalShellIntegrationTimeout: terminalShellIntegrationTimeout ?? 4000, + terminalShellIntegrationTimeout: terminalShellIntegrationTimeout ?? TERMINAL_SHELL_INTEGRATION_TIMEOUT, fuzzyMatchThreshold: fuzzyMatchThreshold ?? 1.0, mcpEnabled: mcpEnabled ?? true, enableMcpServerCreation: enableMcpServerCreation ?? true, @@ -2468,6 +2468,7 @@ export class ClineProvider extends EventEmitter implements machineId, showRooIgnoredFiles: showRooIgnoredFiles ?? true, language, + renderContext: this.renderContext, } } @@ -2602,7 +2603,8 @@ export class ClineProvider extends EventEmitter implements fuzzyMatchThreshold: stateValues.fuzzyMatchThreshold ?? 1.0, writeDelayMs: stateValues.writeDelayMs ?? 1000, terminalOutputLineLimit: stateValues.terminalOutputLineLimit ?? 500, - terminalShellIntegrationTimeout: stateValues.terminalShellIntegrationTimeout ?? 4000, + terminalShellIntegrationTimeout: + stateValues.terminalShellIntegrationTimeout ?? TERMINAL_SHELL_INTEGRATION_TIMEOUT, mode: stateValues.mode ?? defaultModeSlug, language: stateValues.language ?? formatLanguage(vscode.env.language), mcpEnabled: stateValues.mcpEnabled ?? true, diff --git a/src/core/webview/__tests__/ClineProvider.test.ts b/src/core/webview/__tests__/ClineProvider.test.ts index 54a4b2dac2..c4fcb4fc3b 100644 --- a/src/core/webview/__tests__/ClineProvider.test.ts +++ b/src/core/webview/__tests__/ClineProvider.test.ts @@ -531,6 +531,7 @@ describe("ClineProvider", () => { browserToolEnabled: true, telemetrySetting: "unset", showRooIgnoredFiles: true, + renderContext: "sidebar", } const message: ExtensionMessage = { diff --git a/src/extension.ts b/src/extension.ts index 66d04ecff6..9ff86e0c39 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -56,7 +56,7 @@ export function activate(context: vscode.ExtensionContext) { context.globalState.update("allowedCommands", defaultCommands) } - const provider = new ClineProvider(context, outputChannel) + const provider = new ClineProvider(context, outputChannel, "sidebar") telemetryService.setProvider(provider) // Validate task history on extension activation diff --git a/src/integrations/terminal/Terminal.ts b/src/integrations/terminal/Terminal.ts index d0cc660a6a..a48a898682 100644 --- a/src/integrations/terminal/Terminal.ts +++ b/src/integrations/terminal/Terminal.ts @@ -3,8 +3,10 @@ import pWaitFor from "p-wait-for" import { ExitCodeDetails, mergePromise, TerminalProcess, TerminalProcessResultPromise } from "./TerminalProcess" import { truncateOutput, applyRunLengthEncoding } from "../misc/extract-text" +export const TERMINAL_SHELL_INTEGRATION_TIMEOUT = 5000 + export class Terminal { - private static shellIntegrationTimeout: number = 4000 + private static shellIntegrationTimeout: number = TERMINAL_SHELL_INTEGRATION_TIMEOUT public terminal: vscode.Terminal public busy: boolean diff --git a/src/shared/ExtensionMessage.ts b/src/shared/ExtensionMessage.ts index e88027b64d..17b5fc4c68 100644 --- a/src/shared/ExtensionMessage.ts +++ b/src/shared/ExtensionMessage.ts @@ -156,6 +156,7 @@ export interface ExtensionState { telemetryKey?: string machineId?: string showRooIgnoredFiles: boolean // Whether to show .rooignore'd files in listings + renderContext: "sidebar" | "editor" } export type { ClineMessage, ClineAsk, ClineSay } diff --git a/webview-ui/src/components/common/Tab.tsx b/webview-ui/src/components/common/Tab.tsx index 982fb7e103..48794320fe 100644 --- a/webview-ui/src/components/common/Tab.tsx +++ b/webview-ui/src/components/common/Tab.tsx @@ -1,5 +1,6 @@ -import { HTMLAttributes } from "react" +import { HTMLAttributes, useCallback } from "react" +import { useExtensionState } from "@/context/ExtensionStateContext" import { cn } from "@/lib/utils" type TabProps = HTMLAttributes @@ -16,8 +17,31 @@ export const TabHeader = ({ className, children, ...props }: TabProps) => ( ) -export const TabContent = ({ className, children, ...props }: TabProps) => ( -
- {children} -
-) +export const TabContent = ({ className, children, ...props }: TabProps) => { + const { renderContext } = useExtensionState() + + const onWheel = useCallback( + (e: React.WheelEvent) => { + if (renderContext !== "editor") { + return + } + + const target = e.target as HTMLElement + + // Prevent scrolling if the target is a listbox or option + // (e.g. selects, dropdowns, etc). + if (target.role === "listbox" || target.role === "option") { + return + } + + e.currentTarget.scrollTop += e.deltaY + }, + [renderContext], + ) + + return ( +
+ {children} +
+ ) +} diff --git a/webview-ui/src/components/prompts/PromptsView.tsx b/webview-ui/src/components/prompts/PromptsView.tsx index 55c3dcbb18..4011e15950 100644 --- a/webview-ui/src/components/prompts/PromptsView.tsx +++ b/webview-ui/src/components/prompts/PromptsView.tsx @@ -45,6 +45,7 @@ function getGroupName(group: GroupEntry): ToolGroup { const PromptsView = ({ onDone }: PromptsViewProps) => { const { t } = useAppTranslation() + const { customModePrompts, customSupportPrompts, diff --git a/webview-ui/src/components/settings/About.tsx b/webview-ui/src/components/settings/About.tsx new file mode 100644 index 0000000000..d196ec037d --- /dev/null +++ b/webview-ui/src/components/settings/About.tsx @@ -0,0 +1,79 @@ +import { HTMLAttributes } from "react" +import { useAppTranslation } from "@/i18n/TranslationContext" +import { Trans } from "react-i18next" +import { Info } from "lucide-react" + +import { VSCodeButton, VSCodeCheckbox, VSCodeLink } from "@vscode/webview-ui-toolkit/react" + +import { TelemetrySetting } from "../../../../src/shared/TelemetrySetting" + +import { vscode } from "@/utils/vscode" +import { cn } from "@/lib/utils" + +import { SectionHeader } from "./SectionHeader" +import { Section } from "./Section" + +type AboutProps = HTMLAttributes & { + version: string + telemetrySetting: TelemetrySetting + setTelemetrySetting: (setting: TelemetrySetting) => void +} + +export const About = ({ version, telemetrySetting, setTelemetrySetting, className, ...props }: AboutProps) => { + const { t } = useAppTranslation() + + return ( +
+ +
+ +
{t("settings:sections.about")}
+
+
+ +
+
+ { + const checked = e.target.checked === true + setTelemetrySetting(checked ? "enabled" : "disabled") + }}> + {t("settings:footer.telemetry.label")} + +

+ {t("settings:footer.telemetry.description")} +

+
+ +
+ , + redditLink: , + discordLink: , + }} + /> +
+ +
+

{t("settings:footer.reset.description")}

+ vscode.postMessage({ type: "resetState" })} + appearance="secondary" + className="shrink-0"> + + {t("settings:footer.reset.button")} + +
+
+
+ ) +} diff --git a/webview-ui/src/components/settings/AdvancedSettings.tsx b/webview-ui/src/components/settings/AdvancedSettings.tsx index a03676ad9f..fa61dce256 100644 --- a/webview-ui/src/components/settings/AdvancedSettings.tsx +++ b/webview-ui/src/components/settings/AdvancedSettings.tsx @@ -150,7 +150,6 @@ export const AdvancedSettings = ({ - {/* Description for selected strategy */}

{!experiments[EXPERIMENT_IDS.DIFF_STRATEGY] && !experiments[EXPERIMENT_IDS.MULTI_SEARCH_AND_REPLACE] && @@ -161,7 +160,6 @@ export const AdvancedSettings = ({ t("settings:advanced.diff.strategy.descriptions.multiBlock")}

- {/* Match precision slider */} {t("settings:advanced.diff.matchPrecision.label")}
& { browserToolEnabled?: boolean @@ -35,22 +36,22 @@ export const BrowserSettings = ({ ...props }: BrowserSettingsProps) => { const { t } = useAppTranslation() + const [testingConnection, setTestingConnection] = useState(false) const [testResult, setTestResult] = useState<{ success: boolean; message: string } | null>(null) const [discovering, setDiscovering] = useState(false) - // We don't need a local state for useRemoteBrowser since we're using the enableRemoteBrowser prop directly - // This ensures the checkbox always reflects the current global state - // Set up message listener for browser connection results + // We don't need a local state for useRemoteBrowser since we're using the + // `enableRemoteBrowser` prop directly. This ensures the checkbox always + // reflects the current global state. + + // Set up message listener for browser connection results. useEffect(() => { const handleMessage = (event: MessageEvent) => { const message = event.data if (message.type === "browserConnectionResult") { - setTestResult({ - success: message.success, - message: message.text, - }) + setTestResult({ success: message.success, message: message.text }) setTestingConnection(false) setDiscovering(false) } @@ -68,11 +69,8 @@ export const BrowserSettings = ({ setTestResult(null) try { - // Send a message to the extension to test the connection - vscode.postMessage({ - type: "testBrowserConnection", - text: remoteBrowserHost, - }) + // Send a message to the extension to test the connection. + vscode.postMessage({ type: "testBrowserConnection", text: remoteBrowserHost }) } catch (error) { setTestResult({ success: false, @@ -87,10 +85,8 @@ export const BrowserSettings = ({ setTestResult(null) try { - // Send a message to the extension to discover Chrome instances - vscode.postMessage({ - type: "discoverBrowser", - }) + // Send a message to the extension to discover Chrome instances. + vscode.postMessage({ type: "discoverBrowser" }) } catch (error) { setTestResult({ success: false, @@ -99,6 +95,23 @@ export const BrowserSettings = ({ setDiscovering(false) } } + + const options = useMemo( + () => [ + { + value: "1280x800", + label: t("settings:browser.viewport.options.largeDesktop"), + }, + { + value: "900x600", + label: t("settings:browser.viewport.options.smallDesktop"), + }, + { value: "768x1024", label: t("settings:browser.viewport.options.tablet") }, + { value: "360x640", label: t("settings:browser.viewport.options.mobile") }, + ], + [t], + ) + return (
@@ -126,31 +139,24 @@ export const BrowserSettings = ({ borderLeft: "2px solid var(--vscode-button-background)", }}>
- -
- { - setCachedStateField("browserViewportSize", (value as DropdownOption).value) - }} - style={{ width: "100%" }} - options={[ - { - value: "1280x800", - label: t("settings:browser.viewport.options.largeDesktop"), - }, - { - value: "900x600", - label: t("settings:browser.viewport.options.smallDesktop"), - }, - { value: "768x1024", label: t("settings:browser.viewport.options.tablet") }, - { value: "360x640", label: t("settings:browser.viewport.options.mobile") }, - ]} - /> -
-

+ + +

{t("settings:browser.viewport.description")}

diff --git a/webview-ui/src/components/settings/ContextManagementSettings.tsx b/webview-ui/src/components/settings/ContextManagementSettings.tsx index de17de8dd5..8d90f93af6 100644 --- a/webview-ui/src/components/settings/ContextManagementSettings.tsx +++ b/webview-ui/src/components/settings/ContextManagementSettings.tsx @@ -11,17 +11,13 @@ import { SectionHeader } from "./SectionHeader" import { Section } from "./Section" type ContextManagementSettingsProps = HTMLAttributes & { - terminalOutputLineLimit?: number maxOpenTabsContext: number maxWorkspaceFiles: number showRooIgnoredFiles?: boolean - setCachedStateField: SetCachedStateField< - "terminalOutputLineLimit" | "maxOpenTabsContext" | "maxWorkspaceFiles" | "showRooIgnoredFiles" - > + setCachedStateField: SetCachedStateField<"maxOpenTabsContext" | "maxWorkspaceFiles" | "showRooIgnoredFiles"> } export const ContextManagementSettings = ({ - terminalOutputLineLimit, maxOpenTabsContext, maxWorkspaceFiles, showRooIgnoredFiles, @@ -40,30 +36,6 @@ export const ContextManagementSettings = ({
-
-
- {t("settings:contextManagement.terminal.label")} -
- - setCachedStateField("terminalOutputLineLimit", parseInt(e.target.value)) - } - className="h-2 focus:outline-0 w-4/5 accent-vscode-button-background" - data-testid="terminal-output-limit-slider" - /> - {terminalOutputLineLimit ?? 500} -
-
-

- {t("settings:contextManagement.terminal.description")} -

-
-
{t("settings:contextManagement.openTabs.label")} diff --git a/webview-ui/src/components/settings/ExperimentalSettings.tsx b/webview-ui/src/components/settings/ExperimentalSettings.tsx index 8700670b92..bff96d092b 100644 --- a/webview-ui/src/components/settings/ExperimentalSettings.tsx +++ b/webview-ui/src/components/settings/ExperimentalSettings.tsx @@ -27,6 +27,7 @@ export const ExperimentalSettings = ({ ...props }: ExperimentalSettingsProps) => { const { t } = useAppTranslation() + return (
diff --git a/webview-ui/src/components/settings/LanguageSettings.tsx b/webview-ui/src/components/settings/LanguageSettings.tsx new file mode 100644 index 0000000000..8bfa39c5aa --- /dev/null +++ b/webview-ui/src/components/settings/LanguageSettings.tsx @@ -0,0 +1,66 @@ +import { HTMLAttributes } from "react" +import { useAppTranslation } from "@/i18n/TranslationContext" +import { Globe } from "lucide-react" + +import { cn } from "@/lib/utils" +import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from "@/components/ui" + +import { SetCachedStateField } from "./types" +import { SectionHeader } from "./SectionHeader" +import { Section } from "./Section" + +const LANGUAGES: Record = { + ca: "Català", + de: "Deutsch", + en: "English", + es: "Español", + fr: "Français", + hi: "हिन्दी", + it: "Italiano", + ja: "日本語", + ko: "한국어", + pl: "Polski", + "pt-BR": "Português", + tr: "Türkçe", + vi: "Tiếng Việt", + "zh-CN": "简体中文", + "zh-TW": "繁體中文", +} + +type LanguageSettingsProps = HTMLAttributes & { + language: string + setCachedStateField: SetCachedStateField<"language"> +} + +export const LanguageSettings = ({ language, setCachedStateField, className, ...props }: LanguageSettingsProps) => { + const { t } = useAppTranslation() + + return ( +
+ +
+ +
{t("settings:sections.language")}
+
+
+ +
+ +
+
+ ) +} diff --git a/webview-ui/src/components/settings/SettingsFooter.tsx b/webview-ui/src/components/settings/SettingsFooter.tsx deleted file mode 100644 index ad8d3a3da7..0000000000 --- a/webview-ui/src/components/settings/SettingsFooter.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import { HTMLAttributes } from "react" -import { useAppTranslation } from "@/i18n/TranslationContext" -import { Trans } from "react-i18next" -import { Globe } from "lucide-react" - -import { VSCodeButton, VSCodeCheckbox, VSCodeLink } from "@vscode/webview-ui-toolkit/react" - -import { vscode } from "@/utils/vscode" -import { cn } from "@/lib/utils" -import { TelemetrySetting } from "../../../../src/shared/TelemetrySetting" -import { SetCachedStateField } from "./types" - -// Map of language codes to their display names -const LANGUAGES: Record = { - ca: "Català", - de: "Deutsch", - en: "English", - es: "Español", - fr: "Français", - hi: "हिन्दी", - it: "Italiano", - ja: "日本語", - ko: "한국어", - pl: "Polski", - "pt-BR": "Português", - tr: "Türkçe", - vi: "Tiếng Việt", - "zh-CN": "简体中文", - "zh-TW": "繁體中文", -} - -type SettingsFooterProps = HTMLAttributes & { - version: string - telemetrySetting: TelemetrySetting - setTelemetrySetting: (setting: TelemetrySetting) => void - language: string - setCachedStateField: SetCachedStateField<"language"> -} - -export const SettingsFooter = ({ - version, - telemetrySetting, - setTelemetrySetting, - language, - setCachedStateField, - className, - ...props -}: SettingsFooterProps) => { - const { t } = useAppTranslation() - - return ( -
-

- , - redditLink: , - discordLink: , - }} - /> -

-
-
-

Roo Code

-

v{version}

-
-
- - -
-
-
-
- { - const checked = e.target.checked === true - setTelemetrySetting(checked ? "enabled" : "disabled") - }}> - {t("settings:footer.telemetry.label")} - -

- {t("settings:footer.telemetry.description")} -

-
-
-
-

{t("settings:footer.reset.description")}

- vscode.postMessage({ type: "resetState" })} - appearance="secondary" - className="shrink-0"> - - {t("settings:footer.reset.button")} - -
-
- ) -} diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index 87636fc4cb..abb69f58c3 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -7,19 +7,23 @@ import { Webhook, GitBranch, Bell, + Database, + SquareTerminal, Cog, FlaskConical, AlertTriangle, + Globe, + Info, + LucideIcon, } from "lucide-react" +import { CaretSortIcon } from "@radix-ui/react-icons" -import { Database } from "lucide-react" import { ExperimentId } from "../../../../src/shared/experiments" import { TelemetrySetting } from "../../../../src/shared/TelemetrySetting" import { ApiConfiguration } from "../../../../src/shared/api" import { vscode } from "@/utils/vscode" import { ExtensionStateContextType, useExtensionState } from "@/context/ExtensionStateContext" -import { cn } from "@/lib/utils" import { AlertDialog, AlertDialogContent, @@ -30,6 +34,10 @@ import { AlertDialogHeader, AlertDialogFooter, Button, + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, } from "@/components/ui" import { Tab, TabContent, TabHeader } from "../common/Tab" @@ -42,21 +50,40 @@ import { BrowserSettings } from "./BrowserSettings" import { CheckpointSettings } from "./CheckpointSettings" import { NotificationSettings } from "./NotificationSettings" import { ContextManagementSettings } from "./ContextManagementSettings" +import { TerminalSettings } from "./TerminalSettings" import { AdvancedSettings } from "./AdvancedSettings" -import { SettingsFooter } from "./SettingsFooter" -import { Section } from "./Section" import { ExperimentalSettings } from "./ExperimentalSettings" +import { LanguageSettings } from "./LanguageSettings" +import { About } from "./About" +import { Section } from "./Section" export interface SettingsViewRef { checkUnsaveChanges: (then: () => void) => void } +const sectionNames = [ + "providers", + "autoApprove", + "browser", + "checkpoints", + "notifications", + "contextManagement", + "terminal", + "advanced", + "experimental", + "language", + "about", +] as const + +type SectionName = (typeof sectionNames)[number] + type SettingsViewProps = { onDone: () => void } const SettingsView = forwardRef(({ onDone }, ref) => { const { t } = useAppTranslation() + const extensionState = useExtensionState() const { currentApiConfigName, listApiConfigMeta, uriScheme, version } = extensionState @@ -242,81 +269,64 @@ const SettingsView = forwardRef(({ onDone }, const providersRef = useRef(null) const autoApproveRef = useRef(null) const browserRef = useRef(null) - const checkpointRef = useRef(null) + const checkpointsRef = useRef(null) const notificationsRef = useRef(null) - const contextRef = useRef(null) + const contextManagementRef = useRef(null) + const terminalRef = useRef(null) const advancedRef = useRef(null) const experimentalRef = useRef(null) + const languageRef = useRef(null) + const aboutRef = useRef(null) - const [activeSection, setActiveSection] = useState("providers") - - const sections = useMemo( + const sections: { id: SectionName; icon: LucideIcon; ref: React.RefObject }[] = useMemo( () => [ { id: "providers", icon: Webhook, ref: providersRef }, { id: "autoApprove", icon: CheckCheck, ref: autoApproveRef }, { id: "browser", icon: SquareMousePointer, ref: browserRef }, - { id: "checkpoint", icon: GitBranch, ref: checkpointRef }, + { id: "checkpoints", icon: GitBranch, ref: checkpointsRef }, { id: "notifications", icon: Bell, ref: notificationsRef }, - { id: "context", icon: Database, ref: contextRef }, + { id: "contextManagement", icon: Database, ref: contextManagementRef }, + { id: "terminal", icon: SquareTerminal, ref: terminalRef }, { id: "advanced", icon: Cog, ref: advancedRef }, { id: "experimental", icon: FlaskConical, ref: experimentalRef }, + { id: "language", icon: Globe, ref: languageRef }, + { id: "about", icon: Info, ref: aboutRef }, ], [ providersRef, autoApproveRef, browserRef, - checkpointRef, + checkpointsRef, notificationsRef, - contextRef, + contextManagementRef, + terminalRef, advancedRef, experimentalRef, ], ) - const handleScroll = useCallback((e: React.UIEvent) => { - const sections = [ - { ref: providersRef, id: "providers" }, - { ref: autoApproveRef, id: "autoApprove" }, - { ref: browserRef, id: "browser" }, - { ref: checkpointRef, id: "checkpoint" }, - { ref: notificationsRef, id: "notifications" }, - { ref: contextRef, id: "context" }, - { ref: advancedRef, id: "advanced" }, - { ref: experimentalRef, id: "experimental" }, - ] - - for (const section of sections) { - const element = section.ref.current - - if (element) { - const { top } = element.getBoundingClientRect() - - if (top >= 0 && top <= 50) { - setActiveSection(section.id) - break - } - } - } - }, []) - const scrollToSection = (ref: React.RefObject) => ref.current?.scrollIntoView() return ( -
+

{t("settings:header.title")}

-
- {sections.map(({ id, icon: Icon, ref }) => ( - - ))} -
+ + + {sections.map(({ id, icon: Icon, ref }) => ( + scrollToSection(ref)}> + + {t(`settings:sections.${id}`)} + + ))} + +
(({ onDone },
- (e.currentTarget.scrollTop += e.deltaY)} - onScroll={handleScroll}> +
@@ -426,7 +428,7 @@ const SettingsView = forwardRef(({ onDone }, />
-
+
(({ onDone }, />
-
+
(({ onDone }, />
+
+ +
+
(({ onDone }, />
- +
+ +
+ +
+ +
diff --git a/webview-ui/src/components/settings/TerminalSettings.tsx b/webview-ui/src/components/settings/TerminalSettings.tsx new file mode 100644 index 0000000000..2bd0c529d2 --- /dev/null +++ b/webview-ui/src/components/settings/TerminalSettings.tsx @@ -0,0 +1,91 @@ +import { HTMLAttributes } from "react" +import { useAppTranslation } from "@/i18n/TranslationContext" +import { SquareTerminal } from "lucide-react" + +import { cn } from "@/lib/utils" + +import { SetCachedStateField } from "./types" +import { sliderLabelStyle } from "./styles" +import { SectionHeader } from "./SectionHeader" +import { Section } from "./Section" + +type TerminalSettingsProps = HTMLAttributes & { + terminalOutputLineLimit?: number + terminalShellIntegrationTimeout?: number + setCachedStateField: SetCachedStateField<"terminalOutputLineLimit" | "terminalShellIntegrationTimeout"> +} + +export const TerminalSettings = ({ + terminalOutputLineLimit, + terminalShellIntegrationTimeout, + setCachedStateField, + className, + ...props +}: TerminalSettingsProps) => { + const { t } = useAppTranslation() + + return ( +
+ +
+ +
{t("settings:sections.terminal")}
+
+
+ +
+
+
+ {t("settings:terminal.outputLineLimit.label")} +
+ + setCachedStateField("terminalOutputLineLimit", parseInt(e.target.value)) + } + className="h-2 focus:outline-0 w-4/5 accent-vscode-button-background" + data-testid="terminal-output-limit-slider" + /> + {terminalOutputLineLimit ?? 500} +
+
+

+ {t("settings:terminal.outputLineLimit.description")} +

+
+ +
+
+ {t("settings:terminal.shellIntegrationTimeout.label")} +
+ + setCachedStateField( + "terminalShellIntegrationTimeout", + Math.min(60000, Math.max(1000, parseInt(e.target.value))), + ) + } + className="h-2 focus:outline-0 w-4/5 accent-vscode-button-background" + /> + + {(terminalShellIntegrationTimeout ?? 5000) / 1000}s + +
+

+ {t("settings:terminal.shellIntegrationTimeout.description")} +

+
+
+
+
+ ) +} diff --git a/webview-ui/src/components/settings/__tests__/ContextManagementSettings.test.tsx b/webview-ui/src/components/settings/__tests__/ContextManagementSettings.test.tsx index a9708d260e..99bfeb721d 100644 --- a/webview-ui/src/components/settings/__tests__/ContextManagementSettings.test.tsx +++ b/webview-ui/src/components/settings/__tests__/ContextManagementSettings.test.tsx @@ -17,11 +17,6 @@ describe("ContextManagementSettings", () => { it("renders all controls", () => { render() - // Terminal output limit - const terminalSlider = screen.getByTestId("terminal-output-limit-slider") - expect(terminalSlider).toBeInTheDocument() - expect(terminalSlider).toHaveValue("500") - // Open tabs context limit const openTabsSlider = screen.getByTestId("open-tabs-limit-slider") expect(openTabsSlider).toBeInTheDocument() @@ -38,15 +33,6 @@ describe("ContextManagementSettings", () => { expect(screen.getByTestId("show-rooignored-files-checkbox")).not.toBeChecked() }) - it("updates terminal output limit", () => { - render() - - const slider = screen.getByTestId("terminal-output-limit-slider") - fireEvent.change(slider, { target: { value: "1000" } }) - - expect(defaultProps.setCachedStateField).toHaveBeenCalledWith("terminalOutputLineLimit", 1000) - }) - it("updates open tabs context limit", () => { render() diff --git a/webview-ui/src/context/ExtensionStateContext.tsx b/webview-ui/src/context/ExtensionStateContext.tsx index b72d5f8654..6d3ade317e 100644 --- a/webview-ui/src/context/ExtensionStateContext.tsx +++ b/webview-ui/src/context/ExtensionStateContext.tsx @@ -151,7 +151,8 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode cwd: "", browserToolEnabled: true, telemetrySetting: "unset", - showRooIgnoredFiles: true, // Default to showing .rooignore'd files with lock symbol (current behavior) + showRooIgnoredFiles: true, // Default to showing .rooignore'd files with lock symbol (current behavior). + renderContext: "sidebar", }) const [didHydrateState, setDidHydrateState] = useState(false) diff --git a/webview-ui/src/context/__tests__/ExtensionStateContext.test.tsx b/webview-ui/src/context/__tests__/ExtensionStateContext.test.tsx index 30225ef4b8..34f69f4073 100644 --- a/webview-ui/src/context/__tests__/ExtensionStateContext.test.tsx +++ b/webview-ui/src/context/__tests__/ExtensionStateContext.test.tsx @@ -202,6 +202,7 @@ describe("mergeExtensionState", () => { apiConfiguration: { providerId: "openrouter" } as ApiConfiguration, telemetrySetting: "unset", showRooIgnoredFiles: true, + renderContext: "sidebar", } const prevState: ExtensionState = { diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index cb743d7a66..86c3d075a5 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -24,8 +24,11 @@ "checkpoints": "Punts de control", "notifications": "Notificacions", "contextManagement": "Gestió de context", + "terminal": "Terminal", "advanced": "Avançat", - "experimental": "Funcions experimentals" + "experimental": "Funcions experimentals", + "language": "Idioma", + "about": "Sobre Roo Code" }, "autoApprove": { "description": "Permet que Roo realitzi operacions automàticament sense requerir aprovació. Activeu aquesta configuració només si confieu plenament en la IA i enteneu els riscos de seguretat associats.", @@ -250,10 +253,6 @@ }, "contextManagement": { "description": "Controleu quina informació s'inclou a la finestra de context de la IA, afectant l'ús de token i la qualitat de resposta", - "terminal": { - "label": "Límit de sortida de terminal", - "description": "Nombre màxim de línies a incloure a la sortida del terminal en executar comandes. Quan s'excedeix, s'eliminaran línies del mig, estalviant token." - }, "openTabs": { "label": "Límit de context de pestanyes obertes", "description": "Nombre màxim de pestanyes obertes de VSCode a incloure al context. Valors més alts proporcionen més context però augmenten l'ús de token." @@ -267,6 +266,16 @@ "description": "Quan està habilitat, els fitxers que coincideixen amb els patrons a .rooignore es mostraran en llistes amb un símbol de cadenat. Quan està deshabilitat, aquests fitxers s'ocultaran completament de les llistes de fitxers i cerques." } }, + "terminal": { + "outputLineLimit": { + "label": "Límit de sortida de terminal", + "description": "Nombre màxim de línies a incloure a la sortida del terminal en executar comandes. Quan s'excedeix, s'eliminaran línies del mig, estalviant token." + }, + "shellIntegrationTimeout": { + "label": "Temps d'espera d'integració de shell del terminal", + "description": "Temps màxim d'espera per a la inicialització de la integració de shell abans d'executar comandes. Per a usuaris amb temps d'inici de shell llargs, aquest valor pot necessitar ser augmentat si veieu errors \"Shell Integration Unavailable\" al terminal." + } + }, "advanced": { "rateLimit": { "label": "Límit de freqüència", diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index 0c93810977..8483558d0f 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -24,8 +24,11 @@ "checkpoints": "Kontrollpunkte", "notifications": "Benachrichtigungen", "contextManagement": "Kontext-Management", + "terminal": "Terminal", "advanced": "Erweitert", - "experimental": "Experimentelle Funktionen" + "experimental": "Experimentelle Funktionen", + "language": "Sprache", + "about": "Über Roo Code" }, "autoApprove": { "description": "Erlaubt Roo, Operationen automatisch ohne Genehmigung durchzuführen. Aktivieren Sie diese Einstellungen nur, wenn Sie der KI vollständig vertrauen und die damit verbundenen Sicherheitsrisiken verstehen.", @@ -250,10 +253,6 @@ }, "contextManagement": { "description": "Steuern Sie, welche Informationen im KI-Kontextfenster enthalten sind, was den Token-Verbrauch und die Antwortqualität beeinflusst", - "terminal": { - "label": "Terminal-Ausgabelimit", - "description": "Maximale Anzahl von Zeilen, die in der Terminal-Ausgabe bei der Ausführung von Befehlen enthalten sein sollen. Bei Überschreitung werden Zeilen aus der Mitte entfernt, wodurch Token gespart werden." - }, "openTabs": { "label": "Geöffnete Tabs Kontextlimit", "description": "Maximale Anzahl von geöffneten VSCode-Tabs, die im Kontext enthalten sein sollen. Höhere Werte bieten mehr Kontext, erhöhen aber den Token-Verbrauch." @@ -267,6 +266,16 @@ "description": "Wenn aktiviert, werden Dateien, die mit Mustern in .rooignore übereinstimmen, in Listen mit einem Schlosssymbol angezeigt. Wenn deaktiviert, werden diese Dateien vollständig aus Dateilisten und Suchen ausgeblendet." } }, + "terminal": { + "outputLineLimit": { + "label": "Terminal-Ausgabelimit", + "description": "Maximale Anzahl von Zeilen, die in der Terminal-Ausgabe bei der Ausführung von Befehlen enthalten sein sollen. Bei Überschreitung werden Zeilen aus der Mitte entfernt, wodurch Token gespart werden." + }, + "shellIntegrationTimeout": { + "label": "Terminal-Shell-Integrationszeit-Limit", + "description": "Maximale Wartezeit für die Shell-Integration, bevor Befehle ausgeführt werden. Für Benutzer mit langen Shell-Startzeiten muss dieser Wert möglicherweise erhöht werden, wenn Sie Fehler vom Typ \"Shell Integration Unavailable\" im Terminal sehen." + } + }, "advanced": { "rateLimit": { "label": "Ratenbegrenzung", diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index a44cc32b57..d03207e190 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -24,8 +24,11 @@ "checkpoints": "Checkpoints", "notifications": "Notifications", "contextManagement": "Context Management", + "terminal": "Terminal", "advanced": "Advanced", - "experimental": "Experimental Features" + "experimental": "Experimental Features", + "language": "Language", + "about": "About Roo Code" }, "autoApprove": { "description": "Allow Roo to automatically perform operations without requiring approval. Enable these settings only if you fully trust the AI and understand the associated security risks.", @@ -250,10 +253,6 @@ }, "contextManagement": { "description": "Control what information is included in the AI's context window, affecting token usage and response quality", - "terminal": { - "label": "Terminal output limit", - "description": "Maximum number of lines to include in terminal output when executing commands. When exceeded lines will be removed from the middle, saving tokens." - }, "openTabs": { "label": "Open tabs context limit", "description": "Maximum number of VSCode open tabs to include in context. Higher values provide more context but increase token usage." @@ -267,6 +266,16 @@ "description": "When enabled, files matching patterns in .rooignore will be shown in lists with a lock symbol. When disabled, these files will be completely hidden from file lists and searches." } }, + "terminal": { + "outputLineLimit": { + "label": "Terminal output limit", + "description": "Maximum number of lines to include in terminal output when executing commands. When exceeded lines will be removed from the middle, saving tokens." + }, + "shellIntegrationTimeout": { + "label": "Terminal shell integration timeout", + "description": "Maximum time to wait for shell integration to initialize before executing commands. For users with long shell startup times, this value may need to be increased if you see \"Shell Integration Unavailable\" errors in the terminal." + } + }, "advanced": { "rateLimit": { "label": "Rate limit", @@ -347,7 +356,6 @@ }, "footer": { "feedback": "If you have any questions or feedback, feel free to open an issue at github.com/RooVetGit/Roo-Code or join reddit.com/r/RooCode or discord.gg/roocode", - "version": "Roo Code v{{version}}", "telemetry": { "label": "Allow anonymous error and usage reporting", "description": "Help improve Roo Code by sending anonymous usage data and error reports. No code, prompts, or personal information is ever sent. See our privacy policy for more details." diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index fb7d1f5677..3a4c231ba6 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -24,8 +24,11 @@ "checkpoints": "Puntos de control", "notifications": "Notificaciones", "contextManagement": "Gestión de contexto", + "terminal": "Terminal", "advanced": "Avanzado", - "experimental": "Funciones experimentales" + "experimental": "Funciones experimentales", + "language": "Idioma", + "about": "Acerca de Roo Code" }, "autoApprove": { "description": "Permitir que Roo realice operaciones automáticamente sin requerir aprobación. Habilite esta configuración solo si confía plenamente en la IA y comprende los riesgos de seguridad asociados.", @@ -250,10 +253,6 @@ }, "contextManagement": { "description": "Controle qué información se incluye en la ventana de contexto de la IA, afectando el uso de token y la calidad de respuesta", - "terminal": { - "label": "Límite de salida de terminal", - "description": "Número máximo de líneas a incluir en la salida del terminal al ejecutar comandos. Cuando se excede, se eliminarán líneas del medio, ahorrando token." - }, "openTabs": { "label": "Límite de contexto de pestañas abiertas", "description": "Número máximo de pestañas abiertas de VSCode a incluir en el contexto. Valores más altos proporcionan más contexto pero aumentan el uso de token." @@ -267,6 +266,16 @@ "description": "Cuando está habilitado, los archivos que coinciden con los patrones en .rooignore se mostrarán en listas con un símbolo de candado. Cuando está deshabilitado, estos archivos se ocultarán completamente de las listas de archivos y búsquedas." } }, + "terminal": { + "outputLineLimit": { + "label": "Límite de salida de terminal", + "description": "Número máximo de líneas a incluir en la salida del terminal al ejecutar comandos. Cuando se excede, se eliminarán líneas del medio, ahorrando token." + }, + "shellIntegrationTimeout": { + "label": "Tiempo de espera de integración del shell del terminal", + "description": "Tiempo máximo de espera para la inicialización de la integración del shell antes de ejecutar comandos. Para usuarios con tiempos de inicio de shell largos, este valor puede necesitar ser aumentado si ve errores \"Shell Integration Unavailable\" en el terminal." + } + }, "advanced": { "rateLimit": { "label": "Límite de tasa", diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index b06265c95c..ac75893194 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -24,8 +24,11 @@ "checkpoints": "Points de contrôle", "notifications": "Notifications", "contextManagement": "Gestion du contexte", + "terminal": "Terminal", "advanced": "Avancé", - "experimental": "Fonctionnalités expérimentales" + "experimental": "Fonctionnalités expérimentales", + "language": "Langue", + "about": "À propos de Roo Code" }, "autoApprove": { "description": "Permettre à Roo d'effectuer automatiquement des opérations sans requérir d'approbation. Activez ces paramètres uniquement si vous faites entièrement confiance à l'IA et que vous comprenez les risques de sécurité associés.", @@ -250,10 +253,6 @@ }, "contextManagement": { "description": "Contrôlez quelles informations sont incluses dans la fenêtre de contexte de l'IA, affectant l'utilisation de token et la qualité des réponses", - "terminal": { - "label": "Limite de sortie du terminal", - "description": "Nombre maximum de lignes à inclure dans la sortie du terminal lors de l'exécution de commandes. Lorsque ce nombre est dépassé, les lignes seront supprimées du milieu, économisant des token." - }, "openTabs": { "label": "Limite de contexte des onglets ouverts", "description": "Nombre maximum d'onglets VSCode ouverts à inclure dans le contexte. Des valeurs plus élevées fournissent plus de contexte mais augmentent l'utilisation de token." @@ -267,6 +266,16 @@ "description": "Lorsque cette option est activée, les fichiers correspondant aux modèles dans .rooignore seront affichés dans les listes avec un symbole de cadenas. Lorsqu'elle est désactivée, ces fichiers seront complètement masqués des listes de fichiers et des recherches." } }, + "terminal": { + "outputLineLimit": { + "label": "Limite de sortie du terminal", + "description": "Nombre maximum de lignes à inclure dans la sortie du terminal lors de l'exécution de commandes. Lorsque ce nombre est dépassé, les lignes seront supprimées du milieu, économisant des token." + }, + "shellIntegrationTimeout": { + "label": "Délai d'intégration du shell du terminal", + "description": "Temps maximum d'attente pour l'initialisation de l'intégration du shell avant d'exécuter des commandes. Pour les utilisateurs avec des temps de démarrage de shell longs, cette valeur peut nécessiter d'être augmentée si vous voyez des erreurs \"Shell Integration Unavailable\" dans le terminal." + } + }, "advanced": { "rateLimit": { "label": "Limite de débit", diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index 4c2abed911..c045959f81 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -24,8 +24,11 @@ "checkpoints": "चेकपॉइंट", "notifications": "सूचनाएँ", "contextManagement": "संदर्भ प्रबंधन", + "terminal": "टर्मिनल", "advanced": "उन्नत", - "experimental": "प्रायोगिक सुविधाएँ" + "experimental": "प्रायोगिक सुविधाएँ", + "language": "भाषा", + "about": "Roo Code के बारे में" }, "autoApprove": { "description": "Roo को अनुमोदन की आवश्यकता के बिना स्वचालित रूप से ऑपरेशन करने की अनुमति दें। इन सेटिंग्स को केवल तभी सक्षम करें जब आप AI पर पूरी तरह से भरोसा करते हों और संबंधित सुरक्षा जोखिमों को समझते हों।", @@ -250,10 +253,6 @@ }, "contextManagement": { "description": "AI के संदर्भ विंडो में शामिल जानकारी को नियंत्रित करें, जो token उपयोग और प्रतिक्रिया गुणवत्ता को प्रभावित करता है", - "terminal": { - "label": "टर्मिनल आउटपुट सीमा", - "description": "कमांड निष्पादित करते समय टर्मिनल आउटपुट में शामिल करने के लिए पंक्तियों की अधिकतम संख्या। पार होने पर पंक्तियाँ मध्य से हटा दी जाएंगी, token बचाते हुए।" - }, "openTabs": { "label": "खुले टैब संदर्भ सीमा", "description": "संदर्भ में शामिल करने के लिए VSCode खुले टैब की अधिकतम संख्या। उच्च मान अधिक संदर्भ प्रदान करते हैं लेकिन token उपयोग बढ़ाते हैं।" @@ -267,6 +266,16 @@ "description": "जब सक्षम होता है, .rooignore में पैटर्न से मेल खाने वाली फाइलें लॉक प्रतीक के साथ सूचियों में दिखाई जाएंगी। जब अक्षम होता है, ये फाइलें फाइल सूचियों और खोजों से पूरी तरह छिपा दी जाएंगी।" } }, + "terminal": { + "outputLineLimit": { + "label": "टर्मिनल आउटपुट सीमा", + "description": "कमांड निष्पादित करते समय टर्मिनल आउटपुट में शामिल करने के लिए पंक्तियों की अधिकतम संख्या। पार होने पर पंक्तियाँ मध्य से हटा दी जाएंगी, token बचाते हुए।" + }, + "shellIntegrationTimeout": { + "label": "टर्मिनल शेल एकीकरण टाइमआउट", + "description": "कमांड निष्पादित करने से पहले शेल एकीकरण के आरंभ होने के लिए प्रतीक्षा का अधिकतम समय। लंबे शेल स्टार्टअप समय वाले उपयोगकर्ताओं के लिए, यदि आप टर्मिनल में \"Shell Integration Unavailable\" त्रुटियाँ देखते हैं तो इस मान को बढ़ाने की आवश्यकता हो सकती है।" + } + }, "advanced": { "rateLimit": { "label": "दर सीमा", diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index 823a7e16d3..c9be9d6e66 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -24,8 +24,11 @@ "checkpoints": "Punti di controllo", "notifications": "Notifiche", "contextManagement": "Gestione del contesto", + "terminal": "Terminal", "advanced": "Avanzate", - "experimental": "Funzionalità sperimentali" + "experimental": "Funzionalità sperimentali", + "language": "Lingua", + "about": "Informazioni su Roo Code" }, "autoApprove": { "description": "Permetti a Roo di eseguire automaticamente operazioni senza richiedere approvazione. Abilita queste impostazioni solo se ti fidi completamente dell'IA e comprendi i rischi di sicurezza associati.", @@ -250,10 +253,6 @@ }, "contextManagement": { "description": "Controlla quali informazioni sono incluse nella finestra di contesto dell'IA, influenzando l'utilizzo di token e la qualità delle risposte", - "terminal": { - "label": "Limite output terminale", - "description": "Numero massimo di righe da includere nell'output del terminale durante l'esecuzione dei comandi. Quando superato, le righe verranno rimosse dal centro, risparmiando token." - }, "openTabs": { "label": "Limite contesto schede aperte", "description": "Numero massimo di schede VSCode aperte da includere nel contesto. Valori più alti forniscono più contesto ma aumentano l'utilizzo di token." @@ -267,6 +266,16 @@ "description": "Quando abilitato, i file che corrispondono ai pattern in .rooignore verranno mostrati negli elenchi con un simbolo di blocco. Quando disabilitato, questi file saranno completamente nascosti dagli elenchi di file e dalle ricerche." } }, + "terminal": { + "outputLineLimit": { + "label": "Limite output terminale", + "description": "Numero massimo di righe da includere nell'output del terminale durante l'esecuzione dei comandi. Quando superato, le righe verranno rimosse dal centro, risparmiando token." + }, + "shellIntegrationTimeout": { + "label": "Timeout integrazione shell del terminale", + "description": "Tempo massimo di attesa per l'inizializzazione dell'integrazione della shell prima di eseguire i comandi. Per gli utenti con tempi di avvio della shell lunghi, questo valore potrebbe dover essere aumentato se si vedono errori \"Shell Integration Unavailable\" nel terminale." + } + }, "advanced": { "rateLimit": { "label": "Limite di frequenza", diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index a0ff866923..eb37754b7d 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -24,8 +24,11 @@ "checkpoints": "チェックポイント", "notifications": "通知", "contextManagement": "コンテキスト管理", + "terminal": "ターミナル", "advanced": "詳細設定", - "experimental": "実験的機能" + "experimental": "実験的機能", + "language": "言語", + "about": "Roo Codeについて" }, "autoApprove": { "description": "Rooが承認なしで自動的に操作を実行できるようにします。AIを完全に信頼し、関連するセキュリティリスクを理解している場合にのみ、これらの設定を有効にしてください。", @@ -250,10 +253,6 @@ }, "contextManagement": { "description": "AIのコンテキストウィンドウに含まれる情報を制御し、token使用量とレスポンスの品質に影響します", - "terminal": { - "label": "ターミナル出力制限", - "description": "コマンド実行時にターミナル出力に含める最大行数。超過すると中央から行が削除され、tokenを節約します。" - }, "openTabs": { "label": "オープンタブコンテキスト制限", "description": "コンテキストに含めるVSCodeオープンタブの最大数。高い値はより多くのコンテキストを提供しますが、token使用量が増加します。" @@ -267,6 +266,16 @@ "description": "有効にすると、.rooignoreのパターンに一致するファイルがロックシンボル付きでリストに表示されます。無効にすると、これらのファイルはファイルリストや検索から完全に非表示になります。" } }, + "terminal": { + "outputLineLimit": { + "label": "ターミナル出力制限", + "description": "コマンド実行時にターミナル出力に含める最大行数。超過すると中央から行が削除され、tokenを節約します。" + }, + "shellIntegrationTimeout": { + "label": "ターミナルシェル統合タイムアウト", + "description": "コマンドを実行する前にシェル統合の初期化を待つ最大時間。シェルの起動時間が長いユーザーの場合、ターミナルで「Shell Integration Unavailable」エラーが表示される場合は、この値を増やす必要があるかもしれません。" + } + }, "advanced": { "rateLimit": { "label": "レート制限", diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 86dc687930..3bf7974f52 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -24,8 +24,11 @@ "checkpoints": "체크포인트", "notifications": "알림", "contextManagement": "컨텍스트 관리", + "terminal": "터미널", "advanced": "고급", - "experimental": "실험적 기능" + "experimental": "실험적 기능", + "language": "언어", + "about": "Roo Code 정보" }, "autoApprove": { "description": "Roo가 승인 없이 자동으로 작업을 수행할 수 있도록 허용합니다. AI를 완전히 신뢰하고 관련 보안 위험을 이해하는 경우에만 이러한 설정을 활성화하세요.", @@ -250,10 +253,6 @@ }, "contextManagement": { "description": "AI의 컨텍스트 창에 포함되는 정보를 제어하여 token 사용량과 응답 품질에 영향을 미칩니다", - "terminal": { - "label": "터미널 출력 제한", - "description": "명령 실행 시 터미널 출력에 포함할 최대 라인 수. 초과 시 중간에서 라인이 제거되어 token이 절약됩니다." - }, "openTabs": { "label": "열린 탭 컨텍스트 제한", "description": "컨텍스트에 포함할 VSCode 열린 탭의 최대 수. 높은 값은 더 많은 컨텍스트를 제공하지만 token 사용량이 증가합니다." @@ -267,6 +266,16 @@ "description": "활성화되면 .rooignore의 패턴과 일치하는 파일이 잠금 기호와 함께 목록에 표시됩니다. 비활성화되면 이러한 파일은 파일 목록 및 검색에서 완전히 숨겨집니다." } }, + "terminal": { + "outputLineLimit": { + "label": "터미널 출력 제한", + "description": "명령 실행 시 터미널 출력에 포함할 최대 라인 수. 초과 시 중간에서 라인이 제거되어 token이 절약됩니다." + }, + "shellIntegrationTimeout": { + "label": "터미널 쉘 통합 타임아웃", + "description": "명령을 실행하기 전에 쉘 통합이 초기화될 때까지 기다리는 최대 시간. 쉘 시작 시간이 긴 사용자의 경우, 터미널에서 \"Shell Integration Unavailable\" 오류가 표시되면 이 값을 늘려야 할 수 있습니다." + } + }, "advanced": { "rateLimit": { "label": "속도 제한", diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index a07db6fc2b..f1b66e8a8b 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -24,8 +24,11 @@ "checkpoints": "Punkty kontrolne", "notifications": "Powiadomienia", "contextManagement": "Zarządzanie kontekstem", + "terminal": "Terminal", "advanced": "Zaawansowane", - "experimental": "Funkcje eksperymentalne" + "experimental": "Funkcje eksperymentalne", + "language": "Język", + "about": "O Roo Code" }, "autoApprove": { "description": "Pozwól Roo na automatyczne wykonywanie operacji bez wymagania zatwierdzenia. Włącz te ustawienia tylko jeśli w pełni ufasz AI i rozumiesz związane z tym zagrożenia bezpieczeństwa.", @@ -250,10 +253,6 @@ }, "contextManagement": { "description": "Kontroluj, jakie informacje są zawarte w oknie kontekstu AI, wpływając na zużycie token i jakość odpowiedzi", - "terminal": { - "label": "Limit wyjścia terminala", - "description": "Maksymalna liczba linii do uwzględnienia w wyjściu terminala podczas wykonywania poleceń. Po przekroczeniu linie będą usuwane ze środka, oszczędzając token." - }, "openTabs": { "label": "Limit kontekstu otwartych kart", "description": "Maksymalna liczba otwartych kart VSCode do uwzględnienia w kontekście. Wyższe wartości zapewniają więcej kontekstu, ale zwiększają zużycie token." @@ -267,6 +266,16 @@ "description": "Gdy włączone, pliki pasujące do wzorców w .rooignore będą pokazywane na listach z symbolem kłódki. Gdy wyłączone, te pliki będą całkowicie ukryte z list plików i wyszukiwań." } }, + "terminal": { + "outputLineLimit": { + "label": "Limit wyjścia terminala", + "description": "Maksymalna liczba linii do uwzględnienia w wyjściu terminala podczas wykonywania poleceń. Po przekroczeniu linie będą usuwane ze środka, oszczędzając token." + }, + "shellIntegrationTimeout": { + "label": "Limit czasu integracji powłoki terminala", + "description": "Maksymalny czas oczekiwania na inicjalizację integracji powłoki przed wykonaniem poleceń. Dla użytkowników z długim czasem uruchamiania powłoki, ta wartość może wymagać zwiększenia, jeśli widzisz błędy \"Shell Integration Unavailable\" w terminalu." + } + }, "advanced": { "rateLimit": { "label": "Limit szybkości", diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index e76a2dca43..2167a08739 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -24,8 +24,11 @@ "checkpoints": "Pontos de verificação", "notifications": "Notificações", "contextManagement": "Gestão de contexto", + "terminal": "Terminal", "advanced": "Avançado", - "experimental": "Recursos experimentais" + "experimental": "Recursos experimentais", + "language": "Idioma", + "about": "Sobre o Roo Code" }, "autoApprove": { "description": "Permitir que o Roo realize operações automaticamente sem exigir aprovação. Ative essas configurações apenas se confiar totalmente na IA e compreender os riscos de segurança associados.", @@ -250,10 +253,6 @@ }, "contextManagement": { "description": "Controle quais informações são incluídas na janela de contexto da IA, afetando o uso de token e a qualidade da resposta", - "terminal": { - "label": "Limite de saída do terminal", - "description": "Número máximo de linhas a incluir na saída do terminal ao executar comandos. Quando excedido, as linhas serão removidas do meio, economizando token." - }, "openTabs": { "label": "Limite de contexto de abas abertas", "description": "Número máximo de abas abertas do VSCode a incluir no contexto. Valores mais altos fornecem mais contexto, mas aumentam o uso de token." @@ -267,6 +266,16 @@ "description": "Quando ativado, os arquivos que correspondem aos padrões em .rooignore serão mostrados em listas com um símbolo de cadeado. Quando desativado, esses arquivos serão completamente ocultos das listas de arquivos e pesquisas." } }, + "terminal": { + "outputLineLimit": { + "label": "Limite de saída do terminal", + "description": "Número máximo de linhas a incluir na saída do terminal ao executar comandos. Quando excedido, as linhas serão removidas do meio, economizando token." + }, + "shellIntegrationTimeout": { + "label": "Tempo limite de integração do shell do terminal", + "description": "Tempo máximo de espera para a inicialização da integração do shell antes de executar comandos. Para usuários com tempos de inicialização de shell longos, este valor pode precisar ser aumentado se você vir erros \"Shell Integration Unavailable\" no terminal." + } + }, "advanced": { "rateLimit": { "label": "Limite de taxa", diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index b9e1400aed..3ca91d570f 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -24,8 +24,11 @@ "checkpoints": "Kontrol Noktaları", "notifications": "Bildirimler", "contextManagement": "Bağlam Yönetimi", + "terminal": "Terminal", "advanced": "Gelişmiş", - "experimental": "Deneysel Özellikler" + "experimental": "Deneysel Özellikler", + "language": "Dil", + "about": "Roo Code Hakkında" }, "autoApprove": { "description": "Roo'nun onay gerektirmeden otomatik olarak işlemler gerçekleştirmesine izin verin. Bu ayarları yalnızca yapay zekaya tamamen güveniyorsanız ve ilgili güvenlik risklerini anlıyorsanız etkinleştirin.", @@ -250,10 +253,6 @@ }, "contextManagement": { "description": "Yapay zekanın bağlam penceresine hangi bilgilerin dahil edileceğini kontrol edin, token kullanımını ve yanıt kalitesini etkiler", - "terminal": { - "label": "Terminal çıktısı sınırı", - "description": "Komutları yürütürken terminal çıktısına dahil edilecek maksimum satır sayısı. Aşıldığında, token tasarrufu sağlayarak satırlar ortadan kaldırılacaktır." - }, "openTabs": { "label": "Açık sekmeler bağlam sınırı", "description": "Bağlama dahil edilecek maksimum VSCode açık sekme sayısı. Daha yüksek değerler daha fazla bağlam sağlar ancak token kullanımını artırır." @@ -267,6 +266,16 @@ "description": "Etkinleştirildiğinde, .rooignore'daki desenlerle eşleşen dosyalar kilit sembolü ile listelerde gösterilecektir. Devre dışı bırakıldığında, bu dosyalar dosya listelerinden ve aramalardan tamamen gizlenecektir." } }, + "terminal": { + "outputLineLimit": { + "label": "Terminal çıktısı sınırı", + "description": "Komutları yürütürken terminal çıktısına dahil edilecek maksimum satır sayısı. Aşıldığında, token tasarrufu sağlayarak satırlar ortadan kaldırılacaktır." + }, + "shellIntegrationTimeout": { + "label": "Terminal kabuk entegrasyonu zaman aşımı", + "description": "Komutları yürütmeden önce kabuk entegrasyonunun başlatılması için beklenecek maksimum süre. Kabuk başlatma süresi uzun olan kullanıcılar için, terminalde \"Shell Integration Unavailable\" hatalarını görürseniz bu değerin artırılması gerekebilir." + } + }, "advanced": { "rateLimit": { "label": "Hız sınırı", diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index 2bff3fb1f4..e23b99df41 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -24,8 +24,11 @@ "checkpoints": "Điểm kiểm tra", "notifications": "Thông báo", "contextManagement": "Quản lý ngữ cảnh", + "terminal": "Terminal", "advanced": "Nâng cao", - "experimental": "Tính năng thử nghiệm" + "experimental": "Tính năng thử nghiệm", + "language": "Ngôn ngữ", + "about": "Về Roo Code" }, "autoApprove": { "description": "Cho phép Roo tự động thực hiện các hoạt động mà không cần phê duyệt. Chỉ bật những cài đặt này nếu bạn hoàn toàn tin tưởng AI và hiểu rõ các rủi ro bảo mật liên quan.", @@ -250,10 +253,6 @@ }, "contextManagement": { "description": "Kiểm soát thông tin nào được đưa vào cửa sổ ngữ cảnh của AI, ảnh hưởng đến việc sử dụng token và chất lượng phản hồi", - "terminal": { - "label": "Giới hạn đầu ra terminal", - "description": "Số dòng tối đa để đưa vào đầu ra terminal khi thực hiện lệnh. Khi vượt quá, các dòng sẽ bị xóa khỏi phần giữa, tiết kiệm token." - }, "openTabs": { "label": "Giới hạn ngữ cảnh tab đang mở", "description": "Số lượng tab VSCode đang mở tối đa để đưa vào ngữ cảnh. Giá trị cao hơn cung cấp nhiều ngữ cảnh hơn nhưng tăng sử dụng token." @@ -267,6 +266,16 @@ "description": "Khi được bật, các tệp khớp với mẫu trong .rooignore sẽ được hiển thị trong danh sách với biểu tượng khóa. Khi bị tắt, các tệp này sẽ hoàn toàn bị ẩn khỏi danh sách tệp và tìm kiếm." } }, + "terminal": { + "outputLineLimit": { + "label": "Giới hạn đầu ra terminal", + "description": "Số dòng tối đa để đưa vào đầu ra terminal khi thực hiện lệnh. Khi vượt quá, các dòng sẽ bị xóa khỏi phần giữa, tiết kiệm token." + }, + "shellIntegrationTimeout": { + "label": "Thời gian chờ tích hợp shell terminal", + "description": "Thời gian tối đa để chờ tích hợp shell khởi tạo trước khi thực hiện lệnh. Đối với người dùng có thời gian khởi động shell dài, giá trị này có thể cần được tăng lên nếu bạn thấy lỗi \"Shell Integration Unavailable\" trong terminal." + } + }, "advanced": { "rateLimit": { "label": "Giới hạn tốc độ", diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index c28550d920..1b569f7b1d 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -24,8 +24,11 @@ "checkpoints": "检查点", "notifications": "通知", "contextManagement": "上下文管理", + "terminal": "终端", "advanced": "高级", - "experimental": "实验性功能" + "experimental": "实验性功能", + "language": "语言", + "about": "关于 Roo Code" }, "autoApprove": { "description": "允许 Roo 自动执行操作而无需批准。只有在您完全信任 AI 并了解相关安全风险的情况下才启用这些设置。", @@ -250,10 +253,6 @@ }, "contextManagement": { "description": "控制在 AI 的上下文窗口中包含哪些信息,影响 token 使用和响应质量", - "terminal": { - "label": "终端输出限制", - "description": "执行命令时在终端输出中包含的最大行数。超过时将从中间删除行,节省 token。" - }, "openTabs": { "label": "打开标签上下文限制", "description": "在上下文中包含的 VSCode 打开标签的最大数量。较高的值提供更多上下文,但会增加 token 使用量。" @@ -267,6 +266,16 @@ "description": "启用后,与 .rooignore 中模式匹配的文件将在列表中显示锁定符号。禁用时,这些文件将从文件列表和搜索中完全隐藏。" } }, + "terminal": { + "outputLineLimit": { + "label": "终端输出限制", + "description": "执行命令时在终端输出中包含的最大行数。超过时将从中间删除行,节省 token。" + }, + "shellIntegrationTimeout": { + "label": "终端 Shell 集成超时", + "description": "执行命令前等待 Shell 集成初始化的最长时间。对于 Shell 启动时间较长的用户,如果在终端中看到\"Shell Integration Unavailable\"错误,可能需要增加此值。" + } + }, "advanced": { "rateLimit": { "label": "速率限制", diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index cdbbd6d310..1da4c04354 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -24,8 +24,11 @@ "checkpoints": "檢查點", "notifications": "通知", "contextManagement": "內容管理", + "terminal": "終端機", "advanced": "進階", - "experimental": "實驗性功能" + "experimental": "實驗性功能", + "language": "語言", + "about": "關於 Roo Code" }, "autoApprove": { "description": "允許 Roo 自動執行操作而無需核准。僅在您完全信任 AI 並理解相關安全風險的情況下啟用這些設定。", @@ -250,10 +253,6 @@ }, "contextManagement": { "description": "控制在 AI 的內容視窗中包含哪些資訊,影響 token 使用和回應品質", - "terminal": { - "label": "終端機輸出限制", - "description": "執行命令時在終端機輸出中包含的最大行數。超過時將從中間刪除行,節省 token。" - }, "openTabs": { "label": "開啟分頁內容限制", "description": "在內容中包含的 VSCode 開啟分頁的最大數量。較高的值提供更多內容,但會增加 token 使用量。" @@ -267,6 +266,16 @@ "description": "啟用後,與 .rooignore 中模式匹配的檔案將在列表中顯示鎖定符號。禁用時,這些檔案將從檔案列表和搜尋中完全隱藏。" } }, + "terminal": { + "outputLineLimit": { + "label": "終端機輸出限制", + "description": "執行命令時在終端機輸出中包含的最大行數。超過時將從中間刪除行,節省 token。" + }, + "shellIntegrationTimeout": { + "label": "終端機 Shell 整合逾時", + "description": "執行命令前等待 Shell 整合初始化的最長時間。對於 Shell 啟動時間較長的使用者,如果在終端機中看到\"Shell Integration Unavailable\"錯誤,可能需要增加此值。" + } + }, "advanced": { "rateLimit": { "label": "速率限制",