diff --git a/.gitignore b/.gitignore index 6f6bcd99dea..65c201c3c25 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ dist out out-* node_modules +package-lock.json coverage/ mock/ diff --git a/packages/types/npm/package.json b/packages/types/npm/package.json index 924e5251cb7..7f364e3d4fb 100644 --- a/packages/types/npm/package.json +++ b/packages/types/npm/package.json @@ -1,6 +1,6 @@ { "name": "@roo-code/types", - "version": "1.35.0", + "version": "1.36.0", "description": "TypeScript type definitions for Roo Code.", "publishConfig": { "access": "public", diff --git a/packages/types/src/global-settings.ts b/packages/types/src/global-settings.ts index 129ddebdd59..32ce5d2e265 100644 --- a/packages/types/src/global-settings.ts +++ b/packages/types/src/global-settings.ts @@ -51,6 +51,7 @@ export const globalSettingsSchema = z.object({ allowedCommands: z.array(z.string()).optional(), deniedCommands: z.array(z.string()).optional(), commandExecutionTimeout: z.number().optional(), + commandTimeoutAllowlist: z.array(z.string()).optional(), preventCompletionWithOpenTodos: z.boolean().optional(), allowedMaxRequests: z.number().nullish(), autoCondenseContext: z.boolean().optional(), @@ -203,6 +204,7 @@ export const EVALS_SETTINGS: RooCodeSettings = { followupAutoApproveTimeoutMs: 0, allowedCommands: ["*"], commandExecutionTimeout: 30_000, + commandTimeoutAllowlist: [], preventCompletionWithOpenTodos: false, browserToolEnabled: false, diff --git a/src/core/tools/__tests__/executeCommandTimeout.integration.spec.ts b/src/core/tools/__tests__/executeCommandTimeout.integration.spec.ts index de98c9df209..b9e0af3a8a3 100644 --- a/src/core/tools/__tests__/executeCommandTimeout.integration.spec.ts +++ b/src/core/tools/__tests__/executeCommandTimeout.integration.spec.ts @@ -3,7 +3,7 @@ import * as vscode from "vscode" import * as fs from "fs/promises" -import { executeCommand, ExecuteCommandOptions } from "../executeCommandTool" +import { executeCommand, executeCommandTool, ExecuteCommandOptions } from "../executeCommandTool" import { Task } from "../../task/Task" import { TerminalRegistry } from "../../../integrations/terminal/TerminalRegistry" @@ -17,6 +17,20 @@ vitest.mock("vscode", () => ({ vitest.mock("fs/promises") vitest.mock("../../../integrations/terminal/TerminalRegistry") vitest.mock("../../task/Task") +vitest.mock("../../prompts/responses", () => ({ + formatResponse: { + toolError: vitest.fn((msg) => `Tool Error: ${msg}`), + rooIgnoreError: vitest.fn((msg) => `RooIgnore Error: ${msg}`), + }, +})) +vitest.mock("../../../utils/text-normalization", () => ({ + unescapeHtmlEntities: vitest.fn((text) => text), +})) +vitest.mock("../../../shared/package", () => ({ + Package: { + name: "roo-cline", + }, +})) describe("Command Execution Timeout Integration", () => { let mockTask: any @@ -186,4 +200,213 @@ describe("Command Execution Timeout Integration", () => { expect(result[0]).toBe(false) // Not rejected expect(result[1]).not.toContain("terminated after exceeding") }) + + describe("Command Timeout Allowlist", () => { + let mockBlock: any + let mockAskApproval: any + let mockHandleError: any + let mockPushToolResult: any + let mockRemoveClosingTag: any + + beforeEach(() => { + // Reset mocks for allowlist tests + vitest.clearAllMocks() + ;(fs.access as any).mockResolvedValue(undefined) + ;(TerminalRegistry.getOrCreateTerminal as any).mockResolvedValue(mockTerminal) + + // Mock the executeCommandTool parameters + mockBlock = { + params: { + command: "", + cwd: undefined, + }, + partial: false, + } + + mockAskApproval = vitest.fn().mockResolvedValue(true) // Always approve + mockHandleError = vitest.fn() + mockPushToolResult = vitest.fn() + mockRemoveClosingTag = vitest.fn() + + // Mock task with additional properties needed by executeCommandTool + mockTask = { + cwd: "/test/directory", + terminalProcess: undefined, + providerRef: { + deref: vitest.fn().mockResolvedValue({ + postMessageToWebview: vitest.fn(), + getState: vitest.fn().mockResolvedValue({ + terminalOutputLineLimit: 500, + terminalShellIntegrationDisabled: false, + }), + }), + }, + say: vitest.fn().mockResolvedValue(undefined), + consecutiveMistakeCount: 0, + recordToolError: vitest.fn(), + sayAndCreateMissingParamError: vitest.fn(), + rooIgnoreController: { + validateCommand: vitest.fn().mockReturnValue(null), + }, + lastMessageTs: Date.now(), + ask: vitest.fn(), + didRejectTool: false, + } + }) + + it("should skip timeout for commands in allowlist", async () => { + // Mock VSCode configuration with timeout and allowlist + const mockGetConfiguration = vitest.fn().mockReturnValue({ + get: vitest.fn().mockImplementation((key: string) => { + if (key === "commandExecutionTimeout") return 1 // 1 second timeout + if (key === "commandTimeoutAllowlist") return ["npm", "git"] + return undefined + }), + }) + ;(vscode.workspace.getConfiguration as any).mockReturnValue(mockGetConfiguration()) + + mockBlock.params.command = "npm install" + + // Create a process that would timeout if not allowlisted + const longRunningProcess = new Promise((resolve) => { + setTimeout(resolve, 2000) // 2 seconds, longer than 1 second timeout + }) + mockTerminal.runCommand.mockReturnValue(longRunningProcess) + + await executeCommandTool( + mockTask as Task, + mockBlock, + mockAskApproval, + mockHandleError, + mockPushToolResult, + mockRemoveClosingTag, + ) + + // Should complete successfully without timeout because "npm" is in allowlist + expect(mockPushToolResult).toHaveBeenCalled() + const result = mockPushToolResult.mock.calls[0][0] + expect(result).not.toContain("terminated after exceeding") + }, 3000) + + it("should apply timeout for commands not in allowlist", async () => { + // Mock VSCode configuration with timeout and allowlist + const mockGetConfiguration = vitest.fn().mockReturnValue({ + get: vitest.fn().mockImplementation((key: string) => { + if (key === "commandExecutionTimeout") return 1 // 1 second timeout + if (key === "commandTimeoutAllowlist") return ["npm", "git"] + return undefined + }), + }) + ;(vscode.workspace.getConfiguration as any).mockReturnValue(mockGetConfiguration()) + + mockBlock.params.command = "sleep 10" // Not in allowlist + + // Create a process that never resolves + const neverResolvingProcess = new Promise(() => {}) + ;(neverResolvingProcess as any).abort = vitest.fn() + mockTerminal.runCommand.mockReturnValue(neverResolvingProcess) + + await executeCommandTool( + mockTask as Task, + mockBlock, + mockAskApproval, + mockHandleError, + mockPushToolResult, + mockRemoveClosingTag, + ) + + // Should timeout because "sleep" is not in allowlist + expect(mockPushToolResult).toHaveBeenCalled() + const result = mockPushToolResult.mock.calls[0][0] + expect(result).toContain("terminated after exceeding") + }, 3000) + + it("should handle empty allowlist", async () => { + // Mock VSCode configuration with timeout and empty allowlist + const mockGetConfiguration = vitest.fn().mockReturnValue({ + get: vitest.fn().mockImplementation((key: string) => { + if (key === "commandExecutionTimeout") return 1 // 1 second timeout + if (key === "commandTimeoutAllowlist") return [] + return undefined + }), + }) + ;(vscode.workspace.getConfiguration as any).mockReturnValue(mockGetConfiguration()) + + mockBlock.params.command = "npm install" + + // Create a process that never resolves + const neverResolvingProcess = new Promise(() => {}) + ;(neverResolvingProcess as any).abort = vitest.fn() + mockTerminal.runCommand.mockReturnValue(neverResolvingProcess) + + await executeCommandTool( + mockTask as Task, + mockBlock, + mockAskApproval, + mockHandleError, + mockPushToolResult, + mockRemoveClosingTag, + ) + + // Should timeout because allowlist is empty + expect(mockPushToolResult).toHaveBeenCalled() + const result = mockPushToolResult.mock.calls[0][0] + expect(result).toContain("terminated after exceeding") + }, 3000) + + it("should match command prefixes correctly", async () => { + // Mock VSCode configuration with timeout and allowlist + const mockGetConfiguration = vitest.fn().mockReturnValue({ + get: vitest.fn().mockImplementation((key: string) => { + if (key === "commandExecutionTimeout") return 1 // 1 second timeout + if (key === "commandTimeoutAllowlist") return ["git log", "npm run"] + return undefined + }), + }) + ;(vscode.workspace.getConfiguration as any).mockReturnValue(mockGetConfiguration()) + + const longRunningProcess = new Promise((resolve) => { + setTimeout(resolve, 2000) // 2 seconds + }) + const neverResolvingProcess = new Promise(() => {}) + ;(neverResolvingProcess as any).abort = vitest.fn() + + // Test exact prefix match - should not timeout + mockBlock.params.command = "git log --oneline" + mockTerminal.runCommand.mockReturnValueOnce(longRunningProcess) + + await executeCommandTool( + mockTask as Task, + mockBlock, + mockAskApproval, + mockHandleError, + mockPushToolResult, + mockRemoveClosingTag, + ) + + expect(mockPushToolResult).toHaveBeenCalled() + const result1 = mockPushToolResult.mock.calls[0][0] + expect(result1).not.toContain("terminated after exceeding") + + // Reset mocks for second test + mockPushToolResult.mockClear() + + // Test partial prefix match (should not match) - should timeout + mockBlock.params.command = "git status" // "git" alone is not in allowlist, only "git log" + mockTerminal.runCommand.mockReturnValueOnce(neverResolvingProcess) + + await executeCommandTool( + mockTask as Task, + mockBlock, + mockAskApproval, + mockHandleError, + mockPushToolResult, + mockRemoveClosingTag, + ) + + expect(mockPushToolResult).toHaveBeenCalled() + const result2 = mockPushToolResult.mock.calls[0][0] + expect(result2).toContain("terminated after exceeding") + }, 5000) + }) }) diff --git a/src/core/tools/executeCommandTool.ts b/src/core/tools/executeCommandTool.ts index 407dc283b50..e8957017217 100644 --- a/src/core/tools/executeCommandTool.ts +++ b/src/core/tools/executeCommandTool.ts @@ -70,8 +70,16 @@ export async function executeCommandTool( .getConfiguration(Package.name) .get("commandExecutionTimeout", 0) - // Convert seconds to milliseconds for internal use - const commandExecutionTimeout = commandExecutionTimeoutSeconds * 1000 + // Get command timeout allowlist from VSCode configuration + const commandTimeoutAllowlist = vscode.workspace + .getConfiguration(Package.name) + .get("commandTimeoutAllowlist", []) + + // Check if command matches any prefix in the allowlist + const isCommandAllowlisted = commandTimeoutAllowlist.some((prefix) => command!.startsWith(prefix.trim())) + + // Convert seconds to milliseconds for internal use, but skip timeout if command is allowlisted + const commandExecutionTimeout = isCommandAllowlisted ? 0 : commandExecutionTimeoutSeconds * 1000 const options: ExecuteCommandOptions = { executionId, diff --git a/src/package.json b/src/package.json index 448463b7507..916a109088a 100644 --- a/src/package.json +++ b/src/package.json @@ -345,6 +345,14 @@ "maximum": 600, "description": "%commands.commandExecutionTimeout.description%" }, + "roo-cline.commandTimeoutAllowlist": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "%commands.commandTimeoutAllowlist.description%" + }, "roo-cline.preventCompletionWithOpenTodos": { "type": "boolean", "default": false, diff --git a/src/package.nls.ca.json b/src/package.nls.ca.json index 339e635f0dd..f7910db978d 100644 --- a/src/package.nls.ca.json +++ b/src/package.nls.ca.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "Ordres que es poden executar automàticament quan 'Aprova sempre les operacions d'execució' està activat", "commands.deniedCommands.description": "Prefixos d'ordres que seran automàticament denegats sense demanar aprovació. En cas de conflictes amb ordres permeses, la coincidència de prefix més llarga té prioritat. Afegeix * per denegar totes les ordres.", "commands.commandExecutionTimeout.description": "Temps màxim en segons per esperar que l'execució de l'ordre es completi abans d'esgotar el temps (0 = sense temps límit, 1-600s, per defecte: 0s)", + "commands.commandTimeoutAllowlist.description": "Prefixos d'ordres que estan exclosos del temps límit d'execució d'ordres. Les ordres que coincideixin amb aquests prefixos s'executaran sense restriccions de temps límit.", "settings.vsCodeLmModelSelector.description": "Configuració per a l'API del model de llenguatge VSCode", "settings.vsCodeLmModelSelector.vendor.description": "El proveïdor del model de llenguatge (p. ex. copilot)", "settings.vsCodeLmModelSelector.family.description": "La família del model de llenguatge (p. ex. gpt-4)", diff --git a/src/package.nls.de.json b/src/package.nls.de.json index 5a6fe65b119..d25145616d9 100644 --- a/src/package.nls.de.json +++ b/src/package.nls.de.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "Befehle, die automatisch ausgeführt werden können, wenn 'Ausführungsoperationen immer genehmigen' aktiviert ist", "commands.deniedCommands.description": "Befehlspräfixe, die automatisch abgelehnt werden, ohne nach Genehmigung zu fragen. Bei Konflikten mit erlaubten Befehlen hat die längste Präfix-Übereinstimmung Vorrang. Füge * hinzu, um alle Befehle abzulehnen.", "commands.commandExecutionTimeout.description": "Maximale Zeit in Sekunden, die auf den Abschluss der Befehlsausführung gewartet wird, bevor ein Timeout auftritt (0 = kein Timeout, 1-600s, Standard: 0s)", + "commands.commandTimeoutAllowlist.description": "Befehlspräfixe, die vom Timeout der Befehlsausführung ausgeschlossen sind. Befehle, die diesen Präfixen entsprechen, werden ohne Timeout-Beschränkungen ausgeführt.", "settings.vsCodeLmModelSelector.description": "Einstellungen für die VSCode-Sprachmodell-API", "settings.vsCodeLmModelSelector.vendor.description": "Der Anbieter des Sprachmodells (z.B. copilot)", "settings.vsCodeLmModelSelector.family.description": "Die Familie des Sprachmodells (z.B. gpt-4)", diff --git a/src/package.nls.es.json b/src/package.nls.es.json index 3e480550d8d..057754dfb5d 100644 --- a/src/package.nls.es.json +++ b/src/package.nls.es.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "Comandos que pueden ejecutarse automáticamente cuando 'Aprobar siempre operaciones de ejecución' está activado", "commands.deniedCommands.description": "Prefijos de comandos que serán automáticamente denegados sin solicitar aprobación. En caso de conflictos con comandos permitidos, la coincidencia de prefijo más larga tiene prioridad. Añade * para denegar todos los comandos.", "commands.commandExecutionTimeout.description": "Tiempo máximo en segundos para esperar que se complete la ejecución del comando antes de que expire (0 = sin tiempo límite, 1-600s, predeterminado: 0s)", + "commands.commandTimeoutAllowlist.description": "Prefijos de comandos que están excluidos del tiempo límite de ejecución de comandos. Los comandos que coincidan con estos prefijos se ejecutarán sin restricciones de tiempo límite.", "settings.vsCodeLmModelSelector.description": "Configuración para la API del modelo de lenguaje VSCode", "settings.vsCodeLmModelSelector.vendor.description": "El proveedor del modelo de lenguaje (ej. copilot)", "settings.vsCodeLmModelSelector.family.description": "La familia del modelo de lenguaje (ej. gpt-4)", diff --git a/src/package.nls.fr.json b/src/package.nls.fr.json index 9e8fb83cc35..7f1193855f1 100644 --- a/src/package.nls.fr.json +++ b/src/package.nls.fr.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "Commandes pouvant être exécutées automatiquement lorsque 'Toujours approuver les opérations d'exécution' est activé", "commands.deniedCommands.description": "Préfixes de commandes qui seront automatiquement refusés sans demander d'approbation. En cas de conflit avec les commandes autorisées, la correspondance de préfixe la plus longue a la priorité. Ajouter * pour refuser toutes les commandes.", "commands.commandExecutionTimeout.description": "Temps maximum en secondes pour attendre que l'exécution de la commande se termine avant expiration (0 = pas de délai, 1-600s, défaut : 0s)", + "commands.commandTimeoutAllowlist.description": "Préfixes de commandes qui sont exclus du délai d'exécution des commandes. Les commandes correspondant à ces préfixes s'exécuteront sans restrictions de délai.", "settings.vsCodeLmModelSelector.description": "Paramètres pour l'API du modèle de langage VSCode", "settings.vsCodeLmModelSelector.vendor.description": "Le fournisseur du modèle de langage (ex: copilot)", "settings.vsCodeLmModelSelector.family.description": "La famille du modèle de langage (ex: gpt-4)", diff --git a/src/package.nls.hi.json b/src/package.nls.hi.json index 88bc8459696..de531a03a87 100644 --- a/src/package.nls.hi.json +++ b/src/package.nls.hi.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "वे कमांड जो स्वचालित रूप से निष्पादित की जा सकती हैं जब 'हमेशा निष्पादन संचालन को स्वीकृत करें' सक्रिय हो", "commands.deniedCommands.description": "कमांड प्रीफिक्स जो स्वचालित रूप से अस्वीकार कर दिए जाएंगे बिना अनुमोदन मांगे। अनुमतित कमांड के साथ संघर्ष की स्थिति में, सबसे लंबा प्रीफिक्स मैच प्राथमिकता लेता है। सभी कमांड को अस्वीकार करने के लिए * जोड़ें।", "commands.commandExecutionTimeout.description": "कमांड निष्पादन पूरा होने का इंतजार करने के लिए अधिकतम समय सेकंड में, समय समाप्त होने से पहले (0 = कोई समय सीमा नहीं, 1-600s, डिफ़ॉल्ट: 0s)", + "commands.commandTimeoutAllowlist.description": "कमांड प्रीफिक्स जो कमांड निष्पादन टाइमआउट से बाहर रखे गए हैं। इन प्रीफिक्स से मेल खाने वाले कमांड बिना टाइमआउट प्रतिबंधों के चलेंगे।", "settings.vsCodeLmModelSelector.description": "VSCode भाषा मॉडल API के लिए सेटिंग्स", "settings.vsCodeLmModelSelector.vendor.description": "भाषा मॉडल का विक्रेता (उदा. copilot)", "settings.vsCodeLmModelSelector.family.description": "भाषा मॉडल का परिवार (उदा. gpt-4)", diff --git a/src/package.nls.id.json b/src/package.nls.id.json index 1a2e038547b..61a98cec1a2 100644 --- a/src/package.nls.id.json +++ b/src/package.nls.id.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "Perintah yang dapat dijalankan secara otomatis ketika 'Selalu setujui operasi eksekusi' diaktifkan", "commands.deniedCommands.description": "Awalan perintah yang akan otomatis ditolak tanpa meminta persetujuan. Jika terjadi konflik dengan perintah yang diizinkan, pencocokan awalan terpanjang akan diprioritaskan. Tambahkan * untuk menolak semua perintah.", "commands.commandExecutionTimeout.description": "Waktu maksimum dalam detik untuk menunggu eksekusi perintah selesai sebelum timeout (0 = tanpa timeout, 1-600s, default: 0s)", + "commands.commandTimeoutAllowlist.description": "Awalan perintah yang dikecualikan dari timeout eksekusi perintah. Perintah yang cocok dengan awalan ini akan berjalan tanpa batasan timeout.", "settings.vsCodeLmModelSelector.description": "Pengaturan untuk API Model Bahasa VSCode", "settings.vsCodeLmModelSelector.vendor.description": "Vendor dari model bahasa (misalnya copilot)", "settings.vsCodeLmModelSelector.family.description": "Keluarga dari model bahasa (misalnya gpt-4)", diff --git a/src/package.nls.it.json b/src/package.nls.it.json index 4d5ac4895d6..383ea1041cd 100644 --- a/src/package.nls.it.json +++ b/src/package.nls.it.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "Comandi che possono essere eseguiti automaticamente quando 'Approva sempre le operazioni di esecuzione' è attivato", "commands.deniedCommands.description": "Prefissi di comandi che verranno automaticamente rifiutati senza richiedere approvazione. In caso di conflitti con comandi consentiti, la corrispondenza del prefisso più lungo ha la precedenza. Aggiungi * per rifiutare tutti i comandi.", "commands.commandExecutionTimeout.description": "Tempo massimo in secondi per attendere il completamento dell'esecuzione del comando prima del timeout (0 = nessun timeout, 1-600s, predefinito: 0s)", + "commands.commandTimeoutAllowlist.description": "Prefissi di comandi che sono esclusi dal timeout di esecuzione dei comandi. I comandi che corrispondono a questi prefissi verranno eseguiti senza restrizioni di timeout.", "settings.vsCodeLmModelSelector.description": "Impostazioni per l'API del modello linguistico VSCode", "settings.vsCodeLmModelSelector.vendor.description": "Il fornitore del modello linguistico (es. copilot)", "settings.vsCodeLmModelSelector.family.description": "La famiglia del modello linguistico (es. gpt-4)", diff --git a/src/package.nls.ja.json b/src/package.nls.ja.json index dcbc01d1640..2e3a75930b2 100644 --- a/src/package.nls.ja.json +++ b/src/package.nls.ja.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "'常に実行操作を承認する'が有効な場合に自動実行できるコマンド", "commands.deniedCommands.description": "承認を求めずに自動的に拒否されるコマンドプレフィックス。許可されたコマンドとの競合がある場合、最長プレフィックスマッチが優先されます。すべてのコマンドを拒否するには * を追加してください。", "commands.commandExecutionTimeout.description": "コマンド実行の完了を待つ最大時間(秒)、タイムアウトまで(0 = タイムアウトなし、1-600秒、デフォルト: 0秒)", + "commands.commandTimeoutAllowlist.description": "コマンド実行タイムアウトから除外されるコマンドプレフィックス。これらのプレフィックスに一致するコマンドは、タイムアウト制限なしで実行されます。", "settings.vsCodeLmModelSelector.description": "VSCode 言語モデル API の設定", "settings.vsCodeLmModelSelector.vendor.description": "言語モデルのベンダー(例:copilot)", "settings.vsCodeLmModelSelector.family.description": "言語モデルのファミリー(例:gpt-4)", diff --git a/src/package.nls.json b/src/package.nls.json index b52f2d11c2a..1eb294ca443 100644 --- a/src/package.nls.json +++ b/src/package.nls.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "Commands that can be auto-executed when 'Always approve execute operations' is enabled", "commands.deniedCommands.description": "Command prefixes that will be automatically denied without asking for approval. In case of conflicts with allowed commands, the longest prefix match takes precedence. Add * to deny all commands.", "commands.commandExecutionTimeout.description": "Maximum time in seconds to wait for command execution to complete before timing out (0 = no timeout, 1-600s, default: 0s)", + "commands.commandTimeoutAllowlist.description": "Command prefixes that are excluded from the command execution timeout. Commands matching these prefixes will run without timeout restrictions.", "commands.preventCompletionWithOpenTodos.description": "Prevent task completion when there are incomplete todos in the todo list", "settings.vsCodeLmModelSelector.description": "Settings for VSCode Language Model API", "settings.vsCodeLmModelSelector.vendor.description": "The vendor of the language model (e.g. copilot)", diff --git a/src/package.nls.ko.json b/src/package.nls.ko.json index 6cb839e793c..fc4142553c0 100644 --- a/src/package.nls.ko.json +++ b/src/package.nls.ko.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "'항상 실행 작업 승인' 이 활성화되어 있을 때 자동으로 실행할 수 있는 명령어", "commands.deniedCommands.description": "승인을 요청하지 않고 자동으로 거부될 명령어 접두사. 허용된 명령어와 충돌하는 경우 가장 긴 접두사 일치가 우선됩니다. 모든 명령어를 거부하려면 *를 추가하세요.", "commands.commandExecutionTimeout.description": "명령어 실행이 완료되기를 기다리는 최대 시간(초), 타임아웃 전까지 (0 = 타임아웃 없음, 1-600초, 기본값: 0초)", + "commands.commandTimeoutAllowlist.description": "명령어 실행 타임아웃에서 제외되는 명령어 접두사. 이러한 접두사와 일치하는 명령어는 타임아웃 제한 없이 실행됩니다.", "settings.vsCodeLmModelSelector.description": "VSCode 언어 모델 API 설정", "settings.vsCodeLmModelSelector.vendor.description": "언어 모델 공급자 (예: copilot)", "settings.vsCodeLmModelSelector.family.description": "언어 모델 계열 (예: gpt-4)", diff --git a/src/package.nls.nl.json b/src/package.nls.nl.json index 51b23ec1a65..36efa6d1e47 100644 --- a/src/package.nls.nl.json +++ b/src/package.nls.nl.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "Commando's die automatisch kunnen worden uitgevoerd wanneer 'Altijd goedkeuren uitvoerbewerkingen' is ingeschakeld", "commands.deniedCommands.description": "Commando-prefixen die automatisch worden geweigerd zonder om goedkeuring te vragen. Bij conflicten met toegestane commando's heeft de langste prefix-match voorrang. Voeg * toe om alle commando's te weigeren.", "commands.commandExecutionTimeout.description": "Maximale tijd in seconden om te wachten tot commando-uitvoering voltooid is voordat er een timeout optreedt (0 = geen timeout, 1-600s, standaard: 0s)", + "commands.commandTimeoutAllowlist.description": "Commando-prefixen die zijn uitgesloten van de commando-uitvoering timeout. Commando's die overeenkomen met deze prefixen worden uitgevoerd zonder timeout-beperkingen.", "settings.vsCodeLmModelSelector.description": "Instellingen voor VSCode Language Model API", "settings.vsCodeLmModelSelector.vendor.description": "De leverancier van het taalmodel (bijv. copilot)", "settings.vsCodeLmModelSelector.family.description": "De familie van het taalmodel (bijv. gpt-4)", diff --git a/src/package.nls.pl.json b/src/package.nls.pl.json index 62daaae24b3..3c500a166ff 100644 --- a/src/package.nls.pl.json +++ b/src/package.nls.pl.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "Polecenia, które mogą być wykonywane automatycznie, gdy włączona jest opcja 'Zawsze zatwierdzaj operacje wykonania'", "commands.deniedCommands.description": "Prefiksy poleceń, które będą automatycznie odrzucane bez pytania o zatwierdzenie. W przypadku konfliktów z dozwolonymi poleceniami, najdłuższe dopasowanie prefiksu ma pierwszeństwo. Dodaj * aby odrzucić wszystkie polecenia.", "commands.commandExecutionTimeout.description": "Maksymalny czas w sekundach oczekiwania na zakończenie wykonania polecenia przed przekroczeniem limitu czasu (0 = brak limitu czasu, 1-600s, domyślnie: 0s)", + "commands.commandTimeoutAllowlist.description": "Prefiksy poleceń, które są wykluczone z limitu czasu wykonania poleceń. Polecenia pasujące do tych prefiksów będą wykonywane bez ograniczeń czasowych.", "settings.vsCodeLmModelSelector.description": "Ustawienia dla API modelu językowego VSCode", "settings.vsCodeLmModelSelector.vendor.description": "Dostawca modelu językowego (np. copilot)", "settings.vsCodeLmModelSelector.family.description": "Rodzina modelu językowego (np. gpt-4)", diff --git a/src/package.nls.pt-BR.json b/src/package.nls.pt-BR.json index 7f3f7aece3c..d5ac0b3b2c3 100644 --- a/src/package.nls.pt-BR.json +++ b/src/package.nls.pt-BR.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "Comandos que podem ser executados automaticamente quando 'Sempre aprovar operações de execução' está ativado", "commands.deniedCommands.description": "Prefixos de comandos que serão automaticamente negados sem solicitar aprovação. Em caso de conflitos com comandos permitidos, a correspondência de prefixo mais longa tem precedência. Adicione * para negar todos os comandos.", "commands.commandExecutionTimeout.description": "Tempo máximo em segundos para aguardar a conclusão da execução do comando antes do timeout (0 = sem timeout, 1-600s, padrão: 0s)", + "commands.commandTimeoutAllowlist.description": "Prefixos de comandos que são excluídos do timeout de execução de comandos. Comandos que correspondem a esses prefixos serão executados sem restrições de timeout.", "settings.vsCodeLmModelSelector.description": "Configurações para a API do modelo de linguagem do VSCode", "settings.vsCodeLmModelSelector.vendor.description": "O fornecedor do modelo de linguagem (ex: copilot)", "settings.vsCodeLmModelSelector.family.description": "A família do modelo de linguagem (ex: gpt-4)", diff --git a/src/package.nls.ru.json b/src/package.nls.ru.json index c1872a759e2..282ff869e7a 100644 --- a/src/package.nls.ru.json +++ b/src/package.nls.ru.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "Команды, которые могут быть автоматически выполнены, когда включена опция 'Всегда подтверждать операции выполнения'", "commands.deniedCommands.description": "Префиксы команд, которые будут автоматически отклонены без запроса подтверждения. В случае конфликтов с разрешенными командами приоритет имеет самое длинное совпадение префикса. Добавьте * чтобы отклонить все команды.", "commands.commandExecutionTimeout.description": "Максимальное время в секундах для ожидания завершения выполнения команды до истечения времени ожидания (0 = без тайм-аута, 1-600с, по умолчанию: 0с)", + "commands.commandTimeoutAllowlist.description": "Префиксы команд, которые исключены из тайм-аута выполнения команд. Команды, соответствующие этим префиксам, будут выполняться без ограничений по времени.", "settings.vsCodeLmModelSelector.description": "Настройки для VSCode Language Model API", "settings.vsCodeLmModelSelector.vendor.description": "Поставщик языковой модели (например, copilot)", "settings.vsCodeLmModelSelector.family.description": "Семейство языковой модели (например, gpt-4)", diff --git a/src/package.nls.tr.json b/src/package.nls.tr.json index 589ce619120..7508c42c6ed 100644 --- a/src/package.nls.tr.json +++ b/src/package.nls.tr.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "'Her zaman yürütme işlemlerini onayla' etkinleştirildiğinde otomatik olarak yürütülebilen komutlar", "commands.deniedCommands.description": "Onay istenmeden otomatik olarak reddedilecek komut önekleri. İzin verilen komutlarla çakışma durumunda en uzun önek eşleşmesi öncelik alır. Tüm komutları reddetmek için * ekleyin.", "commands.commandExecutionTimeout.description": "Komut yürütmesinin tamamlanmasını beklemek için maksimum süre (saniye), zaman aşımından önce (0 = zaman aşımı yok, 1-600s, varsayılan: 0s)", + "commands.commandTimeoutAllowlist.description": "Komut yürütme zaman aşımından hariç tutulan komut önekleri. Bu öneklerle eşleşen komutlar zaman aşımı kısıtlamaları olmadan çalışacaktır.", "settings.vsCodeLmModelSelector.description": "VSCode dil modeli API'si için ayarlar", "settings.vsCodeLmModelSelector.vendor.description": "Dil modelinin sağlayıcısı (örn: copilot)", "settings.vsCodeLmModelSelector.family.description": "Dil modelinin ailesi (örn: gpt-4)", diff --git a/src/package.nls.vi.json b/src/package.nls.vi.json index 067738892d7..58d386deac2 100644 --- a/src/package.nls.vi.json +++ b/src/package.nls.vi.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "Các lệnh có thể được thực thi tự động khi 'Luôn phê duyệt các thao tác thực thi' được bật", "commands.deniedCommands.description": "Các tiền tố lệnh sẽ được tự động từ chối mà không yêu cầu phê duyệt. Trong trường hợp xung đột với các lệnh được phép, việc khớp tiền tố dài nhất sẽ được ưu tiên. Thêm * để từ chối tất cả các lệnh.", "commands.commandExecutionTimeout.description": "Thời gian tối đa tính bằng giây để chờ việc thực thi lệnh hoàn thành trước khi hết thời gian chờ (0 = không có thời gian chờ, 1-600s, mặc định: 0s)", + "commands.commandTimeoutAllowlist.description": "Các tiền tố lệnh được loại trừ khỏi thời gian chờ thực thi lệnh. Các lệnh khớp với những tiền tố này sẽ chạy mà không có giới hạn thời gian chờ.", "settings.vsCodeLmModelSelector.description": "Cài đặt cho API mô hình ngôn ngữ VSCode", "settings.vsCodeLmModelSelector.vendor.description": "Nhà cung cấp mô hình ngôn ngữ (ví dụ: copilot)", "settings.vsCodeLmModelSelector.family.description": "Họ mô hình ngôn ngữ (ví dụ: gpt-4)", diff --git a/src/package.nls.zh-CN.json b/src/package.nls.zh-CN.json index 3a69340f812..07f1877bc0a 100644 --- a/src/package.nls.zh-CN.json +++ b/src/package.nls.zh-CN.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "当启用'始终批准执行操作'时可以自动执行的命令", "commands.deniedCommands.description": "将自动拒绝而无需请求批准的命令前缀。与允许命令冲突时,最长前缀匹配优先。添加 * 拒绝所有命令。", "commands.commandExecutionTimeout.description": "等待命令执行完成的最大时间(秒),超时前(0 = 无超时,1-600秒,默认:0秒)", + "commands.commandTimeoutAllowlist.description": "从命令执行超时中排除的命令前缀。匹配这些前缀的命令将在没有超时限制的情况下运行。", "settings.vsCodeLmModelSelector.description": "VSCode 语言模型 API 的设置", "settings.vsCodeLmModelSelector.vendor.description": "语言模型的供应商(例如:copilot)", "settings.vsCodeLmModelSelector.family.description": "语言模型的系列(例如:gpt-4)", diff --git a/src/package.nls.zh-TW.json b/src/package.nls.zh-TW.json index d6314420f17..237a2c2a6ba 100644 --- a/src/package.nls.zh-TW.json +++ b/src/package.nls.zh-TW.json @@ -29,6 +29,7 @@ "commands.allowedCommands.description": "當啟用'始終批准執行操作'時可以自動執行的命令", "commands.deniedCommands.description": "將自動拒絕而無需請求批准的命令前綴。與允許命令衝突時,最長前綴匹配優先。新增 * 拒絕所有命令。", "commands.commandExecutionTimeout.description": "等待命令執行完成的最大時間(秒),逾時前(0 = 無逾時,1-600秒,預設:0秒)", + "commands.commandTimeoutAllowlist.description": "從命令執行逾時中排除的命令前綴。符合這些前綴的命令將在沒有逾時限制的情況下執行。", "settings.vsCodeLmModelSelector.description": "VSCode 語言模型 API 的設定", "settings.vsCodeLmModelSelector.vendor.description": "語言模型供應商(例如:copilot)", "settings.vsCodeLmModelSelector.family.description": "語言模型系列(例如:gpt-4)",