diff --git a/packages/types/src/__tests__/defaults.spec.ts b/packages/types/src/__tests__/defaults.spec.ts index fb7780f74f..103d1f1173 100644 --- a/packages/types/src/__tests__/defaults.spec.ts +++ b/packages/types/src/__tests__/defaults.spec.ts @@ -1,9 +1,29 @@ import { describe, expect, it } from "vitest" import { settingDefaults, getSettingWithDefault } from "../defaults.js" -import { DEFAULT_CHECKPOINT_TIMEOUT_SECONDS } from "../global-settings.js" +import { DEFAULT_CHECKPOINT_TIMEOUT_SECONDS, DEFAULT_WRITE_DELAY_MS } from "../global-settings.js" describe("settingDefaults", () => { it("should have all expected default values", () => { + // Auto-approval settings (all default to false for safety) + expect(settingDefaults.autoApprovalEnabled).toBe(false) + expect(settingDefaults.alwaysAllowReadOnly).toBe(false) + expect(settingDefaults.alwaysAllowReadOnlyOutsideWorkspace).toBe(false) + expect(settingDefaults.alwaysAllowWrite).toBe(false) + expect(settingDefaults.alwaysAllowWriteOutsideWorkspace).toBe(false) + expect(settingDefaults.alwaysAllowWriteProtected).toBe(false) + expect(settingDefaults.alwaysAllowBrowser).toBe(false) + expect(settingDefaults.alwaysAllowMcp).toBe(false) + expect(settingDefaults.alwaysAllowModeSwitch).toBe(false) + expect(settingDefaults.alwaysAllowSubtasks).toBe(false) + expect(settingDefaults.alwaysAllowExecute).toBe(false) + expect(settingDefaults.alwaysAllowFollowupQuestions).toBe(false) + expect(settingDefaults.requestDelaySeconds).toBe(0) + expect(settingDefaults.followupAutoApproveTimeoutMs).toBe(0) + expect(settingDefaults.commandExecutionTimeout).toBe(0) + expect(settingDefaults.preventCompletionWithOpenTodos).toBe(false) + expect(settingDefaults.autoCondenseContext).toBe(false) + expect(settingDefaults.autoCondenseContextPercent).toBe(50) + // Browser settings expect(settingDefaults.browserToolEnabled).toBe(true) expect(settingDefaults.browserViewportSize).toBe("900x600") @@ -16,10 +36,6 @@ describe("settingDefaults", () => { expect(settingDefaults.ttsEnabled).toBe(true) expect(settingDefaults.ttsSpeed).toBe(1.0) - // Diff/Editor settings - expect(settingDefaults.diffEnabled).toBe(true) - expect(settingDefaults.fuzzyMatchThreshold).toBe(1.0) - // Checkpoint settings expect(settingDefaults.enableCheckpoints).toBe(false) expect(settingDefaults.checkpointTimeout).toBe(DEFAULT_CHECKPOINT_TIMEOUT_SECONDS) @@ -28,6 +44,14 @@ describe("settingDefaults", () => { expect(settingDefaults.terminalOutputLineLimit).toBe(500) expect(settingDefaults.terminalOutputCharacterLimit).toBe(50_000) expect(settingDefaults.terminalShellIntegrationTimeout).toBe(30_000) + expect(settingDefaults.terminalShellIntegrationDisabled).toBe(false) + expect(settingDefaults.terminalCommandDelay).toBe(0) + expect(settingDefaults.terminalPowershellCounter).toBe(false) + expect(settingDefaults.terminalZshClearEolMark).toBe(false) + expect(settingDefaults.terminalZshOhMy).toBe(false) + expect(settingDefaults.terminalZshP10k).toBe(false) + expect(settingDefaults.terminalZdotdir).toBe(false) + expect(settingDefaults.terminalCompressProgressBar).toBe(false) // Context management settings expect(settingDefaults.maxOpenTabsContext).toBe(20) @@ -40,18 +64,19 @@ describe("settingDefaults", () => { expect(settingDefaults.maxConcurrentFileReads).toBe(5) // Diagnostic settings + expect(settingDefaults.diagnosticsEnabled).toBe(false) expect(settingDefaults.includeDiagnosticMessages).toBe(true) expect(settingDefaults.maxDiagnosticMessages).toBe(50) - - // Auto-approval settings - expect(settingDefaults.alwaysAllowFollowupQuestions).toBe(false) + expect(settingDefaults.writeDelayMs).toBe(DEFAULT_WRITE_DELAY_MS) // Prompt enhancement settings expect(settingDefaults.includeTaskHistoryInEnhance).toBe(true) // UI settings expect(settingDefaults.reasoningBlockCollapsed).toBe(true) + expect(settingDefaults.historyPreviewCollapsed).toBe(false) expect(settingDefaults.enterBehavior).toBe("send") + expect(settingDefaults.hasOpenedModeSelector).toBe(false) // Environment details settings expect(settingDefaults.includeCurrentTime).toBe(true) @@ -63,6 +88,24 @@ describe("settingDefaults", () => { // MCP settings expect(settingDefaults.mcpEnabled).toBe(true) + expect(settingDefaults.enableMcpServerCreation).toBe(false) + + // Rate limiting + expect(settingDefaults.rateLimitSeconds).toBe(0) + + // Indexing settings + expect(settingDefaults.codebaseIndexEnabled).toBe(false) + expect(settingDefaults.codebaseIndexQdrantUrl).toBe("http://localhost:6333") + expect(settingDefaults.codebaseIndexEmbedderProvider).toBe("openai") + expect(settingDefaults.codebaseIndexEmbedderBaseUrl).toBe("") + expect(settingDefaults.codebaseIndexEmbedderModelId).toBe("") + expect(settingDefaults.codebaseIndexEmbedderModelDimension).toBe(1536) + expect(settingDefaults.codebaseIndexOpenAiCompatibleBaseUrl).toBe("") + expect(settingDefaults.codebaseIndexBedrockRegion).toBe("us-east-1") + expect(settingDefaults.codebaseIndexBedrockProfile).toBe("") + expect(settingDefaults.codebaseIndexSearchMaxResults).toBe(100) + expect(settingDefaults.codebaseIndexSearchMinScore).toBe(0.4) + expect(settingDefaults.codebaseIndexOpenRouterSpecificProvider).toBe("") }) it("should be immutable (readonly)", () => { diff --git a/packages/types/src/defaults.ts b/packages/types/src/defaults.ts index 966fe76e41..7d64767a57 100644 --- a/packages/types/src/defaults.ts +++ b/packages/types/src/defaults.ts @@ -12,7 +12,7 @@ * - On read: apply defaults using `value ?? settingDefaults.settingName` */ -import { DEFAULT_CHECKPOINT_TIMEOUT_SECONDS } from "./global-settings.js" +import { DEFAULT_CHECKPOINT_TIMEOUT_SECONDS, DEFAULT_WRITE_DELAY_MS } from "./global-settings.js" /** * Default values for all settings that can be reset to default. @@ -20,34 +20,63 @@ import { DEFAULT_CHECKPOINT_TIMEOUT_SECONDS } from "./global-settings.js" * These values are the source of truth for defaults throughout the application. * When a setting is undefined in storage, these defaults should be applied * at consumption time. + * + * IMPORTANT: Every setting that has a default value MUST be listed here. + * The clearDefaultSettings() function uses this registry to remove default + * values from storage on every startup. */ export const settingDefaults = { - // Browser settings + // ===== Auto-approval settings ===== + // All auto-approval settings default to false for safety + autoApprovalEnabled: false, + alwaysAllowReadOnly: false, + alwaysAllowReadOnlyOutsideWorkspace: false, + alwaysAllowWrite: false, + alwaysAllowWriteOutsideWorkspace: false, + alwaysAllowWriteProtected: false, + alwaysAllowBrowser: false, + alwaysAllowMcp: false, + alwaysAllowModeSwitch: false, + alwaysAllowSubtasks: false, + alwaysAllowExecute: false, + alwaysAllowFollowupQuestions: false, + requestDelaySeconds: 0, + followupAutoApproveTimeoutMs: 0, + commandExecutionTimeout: 0, + preventCompletionWithOpenTodos: false, + autoCondenseContext: false, + autoCondenseContextPercent: 50, + + // ===== Browser settings ===== browserToolEnabled: true, browserViewportSize: "900x600", remoteBrowserEnabled: false, screenshotQuality: 75, - // Audio/TTS settings + // ===== Audio/TTS settings ===== soundEnabled: true, soundVolume: 0.5, ttsEnabled: true, ttsSpeed: 1.0, - // Diff/Editor settings - diffEnabled: true, - fuzzyMatchThreshold: 1.0, - - // Checkpoint settings + // ===== Checkpoint settings ===== enableCheckpoints: false, checkpointTimeout: DEFAULT_CHECKPOINT_TIMEOUT_SECONDS, - // Terminal settings + // ===== Terminal settings ===== terminalOutputLineLimit: 500, terminalOutputCharacterLimit: 50_000, terminalShellIntegrationTimeout: 30_000, + terminalShellIntegrationDisabled: false, + terminalCommandDelay: 0, + terminalPowershellCounter: false, + terminalZshClearEolMark: false, + terminalZshOhMy: false, + terminalZshP10k: false, + terminalZdotdir: false, + terminalCompressProgressBar: false, - // Context management settings + // ===== Context management settings ===== maxOpenTabsContext: 20, maxWorkspaceFiles: 200, showRooIgnoredFiles: false, @@ -57,33 +86,37 @@ export const settingDefaults = { maxTotalImageSize: 20, maxConcurrentFileReads: 5, - // Diagnostic settings + // ===== Diagnostic settings ===== + diagnosticsEnabled: false, includeDiagnosticMessages: true, maxDiagnosticMessages: 50, - writeDelayMs: 1000, + writeDelayMs: DEFAULT_WRITE_DELAY_MS, - // Auto-approval settings - alwaysAllowFollowupQuestions: false, - - // Prompt enhancement settings + // ===== Prompt enhancement settings ===== includeTaskHistoryInEnhance: true, - // UI settings + // ===== UI settings ===== reasoningBlockCollapsed: true, + historyPreviewCollapsed: false, enterBehavior: "send" as const, + hasOpenedModeSelector: false, - // Environment details settings + // ===== Environment details settings ===== includeCurrentTime: true, includeCurrentCost: true, maxGitStatusFiles: 0, - // Language settings + // ===== Language settings ===== language: "en" as const, - // MCP settings + // ===== MCP settings ===== mcpEnabled: true, + enableMcpServerCreation: false, - // Indexing settings + // ===== Rate limiting ===== + rateLimitSeconds: 0, + + // ===== Indexing settings ===== codebaseIndexEnabled: false, codebaseIndexQdrantUrl: "http://localhost:6333", codebaseIndexEmbedderProvider: "openai" as const,