lsd-pi 1.2.4 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -16
- package/dist/app-paths.d.ts +4 -0
- package/dist/app-paths.js +4 -0
- package/dist/bedrock-auth.d.ts +4 -0
- package/dist/bedrock-auth.js +4 -0
- package/dist/bundled-extension-paths.d.ts +4 -0
- package/dist/bundled-extension-paths.js +4 -0
- package/dist/cli-theme.d.ts +2 -2
- package/dist/cli-theme.js +13 -14
- package/dist/cli.js +43 -3
- package/dist/codex-rotate-settings.d.ts +4 -0
- package/dist/codex-rotate-settings.js +4 -0
- package/dist/help-text.d.ts +4 -0
- package/dist/help-text.js +4 -0
- package/dist/lsd-brand.d.ts +4 -0
- package/dist/lsd-brand.js +4 -0
- package/dist/onboarding-llm.d.ts +5 -0
- package/dist/onboarding-llm.js +5 -0
- package/dist/project-sessions.d.ts +4 -0
- package/dist/project-sessions.js +4 -0
- package/dist/resources/agents/generic.md +1 -0
- package/dist/resources/agents/scout.md +8 -1
- package/dist/resources/agents/worker.md +1 -0
- package/dist/resources/extensions/ask-user-questions.js +70 -0
- package/dist/resources/extensions/bg-shell/bg-shell-tool.js +6 -16
- package/dist/resources/extensions/mac-tools/index.js +19 -34
- package/dist/resources/extensions/memory/index.js +20 -2
- package/dist/resources/extensions/shared/interview-ui.js +103 -20
- package/dist/resources/extensions/slash-commands/plan.js +18 -17
- package/dist/resources/extensions/slash-commands/tools.js +40 -4
- package/dist/resources/extensions/subagent/agent-switcher-component.js +208 -0
- package/dist/resources/extensions/subagent/agent-switcher-model.js +107 -0
- package/dist/resources/extensions/subagent/background-job-manager.js +11 -6
- package/dist/resources/extensions/subagent/background-runner.js +4 -0
- package/dist/resources/extensions/subagent/index.js +714 -21
- package/dist/resources/extensions/subagent/launch-helpers.js +19 -5
- package/dist/shared-paths.d.ts +4 -0
- package/dist/shared-paths.js +4 -0
- package/dist/shared-preferences.d.ts +4 -0
- package/dist/shared-preferences.js +4 -0
- package/dist/startup-model-validation.d.ts +1 -1
- package/dist/startup-timings.d.ts +4 -0
- package/dist/startup-timings.js +4 -0
- package/dist/update-check.d.ts +4 -0
- package/dist/update-check.js +4 -0
- package/dist/update-cmd.d.ts +4 -0
- package/dist/update-cmd.js +4 -0
- package/dist/welcome-screen.js +4 -4
- package/dist/wizard.d.ts +4 -0
- package/dist/wizard.js +4 -0
- package/package.json +1 -1
- package/packages/pi-agent-core/dist/agent.d.ts +9 -0
- package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent.js +89 -5
- package/packages/pi-agent-core/dist/agent.js.map +1 -1
- package/packages/pi-agent-core/dist/types.d.ts +13 -2
- package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/types.js.map +1 -1
- package/packages/pi-agent-core/src/agent.ts +110 -4
- package/packages/pi-agent-core/src/types.ts +12 -3
- package/packages/pi-ai/dist/adaptive/classifier.d.ts +29 -0
- package/packages/pi-ai/dist/adaptive/classifier.d.ts.map +1 -0
- package/packages/pi-ai/dist/adaptive/classifier.js +72 -0
- package/packages/pi-ai/dist/adaptive/classifier.js.map +1 -0
- package/packages/pi-ai/dist/adaptive/classifier.test.d.ts +2 -0
- package/packages/pi-ai/dist/adaptive/classifier.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/adaptive/classifier.test.js +32 -0
- package/packages/pi-ai/dist/adaptive/classifier.test.js.map +1 -0
- package/packages/pi-ai/dist/index.d.ts +1 -0
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +1 -0
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.js +0 -2
- package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +0 -2
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/azure-openai-responses.d.ts +1 -1
- package/packages/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.js +0 -4
- package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-vertex.js +0 -5
- package/packages/pi-ai/dist/providers/google-vertex.js.map +1 -1
- package/packages/pi-ai/dist/providers/google.js +0 -5
- package/packages/pi-ai/dist/providers/google.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-codex-responses.d.ts +1 -1
- package/packages/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-codex-responses.js +0 -2
- package/packages/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.d.ts +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.js +0 -1
- package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-responses.d.ts +1 -1
- package/packages/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-responses.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-shared.d.ts +0 -1
- package/packages/pi-ai/dist/providers/openai-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-shared.js +0 -4
- package/packages/pi-ai/dist/providers/openai-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/simple-options.js +0 -1
- package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
- package/packages/pi-ai/dist/types.d.ts +1 -2
- package/packages/pi-ai/dist/types.d.ts.map +1 -1
- package/packages/pi-ai/dist/types.js.map +1 -1
- package/packages/pi-ai/src/adaptive/classifier.test.ts +38 -0
- package/packages/pi-ai/src/adaptive/classifier.ts +107 -0
- package/packages/pi-ai/src/index.ts +1 -0
- package/packages/pi-ai/src/providers/amazon-bedrock.ts +0 -2
- package/packages/pi-ai/src/providers/anthropic-shared.ts +0 -2
- package/packages/pi-ai/src/providers/azure-openai-responses.ts +1 -1
- package/packages/pi-ai/src/providers/google-gemini-cli.ts +0 -4
- package/packages/pi-ai/src/providers/google-vertex.ts +0 -5
- package/packages/pi-ai/src/providers/google.ts +0 -5
- package/packages/pi-ai/src/providers/openai-codex-responses.ts +1 -3
- package/packages/pi-ai/src/providers/openai-completions.ts +1 -2
- package/packages/pi-ai/src/providers/openai-responses.ts +1 -1
- package/packages/pi-ai/src/providers/openai-shared.ts +0 -3
- package/packages/pi-ai/src/providers/simple-options.ts +0 -1
- package/packages/pi-ai/src/types.ts +1 -2
- package/packages/pi-coding-agent/dist/cli/args.js +2 -2
- package/packages/pi-coding-agent/dist/cli/args.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +7 -2
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +53 -20
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lsp.md +3 -1
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +32 -6
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.test.js +37 -0
- package/packages/pi-coding-agent/dist/core/sdk.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts +8 -0
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js +4 -0
- package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +12 -7
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +20 -2
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/skills.js +4 -1
- package/packages/pi-coding-agent/dist/core/skills.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -1
- package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +6 -2
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/grep.js +1 -1
- package/packages/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.js +2 -0
- package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/pty.d.ts +10 -1
- package/packages/pi-coding-agent/dist/core/tools/pty.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/pty.js +29 -3
- package/packages/pi-coding-agent/dist/core/tools/pty.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/embedded-terminal.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/embedded-terminal.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +12 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +7 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +23 -4
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/thinking-selector.js +1 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +9 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +53 -2
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +10 -6
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/print-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/print-mode.js +6 -0
- package/packages/pi-coding-agent/dist/modes/print-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +20 -0
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/tests/path-display.test.js +15 -0
- package/packages/pi-coding-agent/dist/tests/path-display.test.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/cli/args.ts +2 -2
- package/packages/pi-coding-agent/src/core/agent-session.ts +58 -21
- package/packages/pi-coding-agent/src/core/lsp/lsp.md +3 -1
- package/packages/pi-coding-agent/src/core/sdk.test.ts +45 -0
- package/packages/pi-coding-agent/src/core/sdk.ts +35 -6
- package/packages/pi-coding-agent/src/core/session-manager.ts +12 -0
- package/packages/pi-coding-agent/src/core/settings-manager.ts +32 -9
- package/packages/pi-coding-agent/src/core/skills.ts +4 -1
- package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -1
- package/packages/pi-coding-agent/src/core/system-prompt.ts +8 -2
- package/packages/pi-coding-agent/src/core/tools/grep.ts +1 -1
- package/packages/pi-coding-agent/src/core/tools/index.ts +3 -0
- package/packages/pi-coding-agent/src/core/tools/pty.ts +45 -6
- package/packages/pi-coding-agent/src/modes/interactive/components/embedded-terminal.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +10 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +31 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/thinking-selector.ts +1 -2
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +9 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +65 -3
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +11 -7
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +1 -1
- package/packages/pi-coding-agent/src/modes/print-mode.ts +6 -0
- package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +29 -0
- package/packages/pi-coding-agent/src/tests/path-display.test.ts +17 -0
- package/packages/pi-tui/dist/components/loader.d.ts +5 -2
- package/packages/pi-tui/dist/components/loader.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/loader.js +33 -3
- package/packages/pi-tui/dist/components/loader.js.map +1 -1
- package/packages/pi-tui/src/components/loader.ts +31 -3
- package/packages/rpc-client/src/index.ts +1 -1
- package/packages/rpc-client/src/rpc-client.ts +29 -0
- package/packages/rpc-client/src/rpc-types.ts +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts +2 -2
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +10 -6
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/agents/generic.md +1 -0
- package/src/resources/agents/scout.md +8 -1
- package/src/resources/agents/worker.md +1 -0
- package/src/resources/extensions/ask-user-questions.ts +88 -0
- package/src/resources/extensions/bg-shell/bg-shell-tool.ts +6 -16
- package/src/resources/extensions/mac-tools/index.ts +19 -34
- package/src/resources/extensions/memory/index.ts +22 -2
- package/src/resources/extensions/shared/interview-ui.ts +108 -15
- package/src/resources/extensions/shared/tests/ask-user-freetext.test.ts +61 -0
- package/src/resources/extensions/shared/tests/custom-ui-fallbacks.test.ts +46 -0
- package/src/resources/extensions/slash-commands/plan.ts +18 -19
- package/src/resources/extensions/slash-commands/tools.ts +43 -4
- package/src/resources/extensions/subagent/agent-switcher-component.ts +228 -0
- package/src/resources/extensions/subagent/agent-switcher-model.ts +160 -0
- package/src/resources/extensions/subagent/background-job-manager.ts +29 -6
- package/src/resources/extensions/subagent/background-runner.ts +8 -0
- package/src/resources/extensions/subagent/background-types.ts +4 -0
- package/src/resources/extensions/subagent/index.ts +834 -19
- package/src/resources/extensions/subagent/launch-helpers.ts +15 -4
|
@@ -444,6 +444,9 @@ export class SettingsManager {
|
|
|
444
444
|
getClassifierModel() {
|
|
445
445
|
return this.settings.classifierModel;
|
|
446
446
|
}
|
|
447
|
+
getAdaptiveClassifierModel() {
|
|
448
|
+
return this.settings.adaptiveClassifierModel;
|
|
449
|
+
}
|
|
447
450
|
setDefaultProvider(provider) {
|
|
448
451
|
this.setScopedSetting("defaultProvider", provider);
|
|
449
452
|
}
|
|
@@ -519,6 +522,15 @@ export class SettingsManager {
|
|
|
519
522
|
}
|
|
520
523
|
this.setGlobalSetting("classifierModel", modelRef);
|
|
521
524
|
}
|
|
525
|
+
setAdaptiveClassifierModel(modelRef) {
|
|
526
|
+
if (modelRef === undefined) {
|
|
527
|
+
delete this.globalSettings.adaptiveClassifierModel;
|
|
528
|
+
this.markModified("adaptiveClassifierModel");
|
|
529
|
+
this.save();
|
|
530
|
+
return;
|
|
531
|
+
}
|
|
532
|
+
this.setGlobalSetting("adaptiveClassifierModel", modelRef);
|
|
533
|
+
}
|
|
522
534
|
setDefaultModelAndProvider(provider, modelId) {
|
|
523
535
|
if (this.hasProjectSettings()) {
|
|
524
536
|
this.projectSettings.defaultProvider = provider;
|
|
@@ -577,6 +589,12 @@ export class SettingsManager {
|
|
|
577
589
|
setAnthropicAdaptiveByDefault(enabled) {
|
|
578
590
|
this.setGlobalSetting("anthropicAdaptiveByDefault", enabled);
|
|
579
591
|
}
|
|
592
|
+
getClientAdaptiveByDefault() {
|
|
593
|
+
return this.settings.clientAdaptiveByDefault ?? true;
|
|
594
|
+
}
|
|
595
|
+
setClientAdaptiveByDefault(enabled) {
|
|
596
|
+
this.setGlobalSetting("clientAdaptiveByDefault", enabled);
|
|
597
|
+
}
|
|
580
598
|
getTransport() {
|
|
581
599
|
return this.settings.transport ?? "sse";
|
|
582
600
|
}
|
|
@@ -721,12 +739,12 @@ export class SettingsManager {
|
|
|
721
739
|
}
|
|
722
740
|
getToolProfile() {
|
|
723
741
|
const profile = this.settings.toolProfile;
|
|
724
|
-
if (profile === "balanced" || profile === "full")
|
|
742
|
+
if (profile === "balanced" || profile === "standard" || profile === "full")
|
|
725
743
|
return profile;
|
|
726
744
|
// Migrate legacy minimal/toolSearch settings to balanced.
|
|
727
745
|
if (this.settings.toolSearch !== undefined)
|
|
728
746
|
return "balanced";
|
|
729
|
-
return "
|
|
747
|
+
return "standard";
|
|
730
748
|
}
|
|
731
749
|
setToolProfile(profile) {
|
|
732
750
|
this.setGlobalSetting("toolProfile", profile);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-manager.js","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Transport } from \"@gsd/pi-ai\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"fs\";\nimport { dirname, join } from \"path\";\nimport lockfile from \"proper-lockfile\";\nimport { CONFIG_DIR_NAME, getAgentDir } from \"../config.js\";\nimport {\n\tCOMPACTION_KEEP_RECENT_TOKENS,\n\tCOMPACTION_RESERVE_TOKENS,\n\tRETRY_BASE_DELAY_MS,\n\tRETRY_MAX_DELAY_MS,\n} from \"./constants.js\";\nimport type { BashInterceptorRule } from \"./tools/bash-interceptor.js\";\n\nexport interface CompactionSettings {\n\tenabled?: boolean; // default: true\n\tthresholdPercent?: number; // default: 85\n\treserveTokens?: number; // default: 16384 (used for compaction summary generation budget)\n\tkeepRecentTokens?: number; // default: 20000\n}\n\nexport interface BranchSummarySettings {\n\treserveTokens?: number; // default: 16384 (tokens reserved for prompt + LLM response)\n\tskipPrompt?: boolean; // default: false - when true, skips \"Summarize branch?\" prompt and defaults to no summary\n}\n\nexport interface RetrySettings {\n\tenabled?: boolean; // default: true\n\tmaxRetries?: number; // default: 3\n\tbaseDelayMs?: number; // default: 2000 (exponential backoff: 2s, 4s, 8s)\n\tmaxDelayMs?: number; // default: 300000 (max server-requested delay before failing)\n}\n\nexport interface TerminalSettings {\n\tshowImages?: boolean; // default: true (only relevant if terminal supports images)\n\tclearOnShrink?: boolean; // default: false (clear empty rows when content shrinks)\n}\n\nexport interface ImageSettings {\n\tautoResize?: boolean; // default: true (resize images to 2000x2000 max for better model compatibility)\n\tblockImages?: boolean; // default: false - when true, prevents all images from being sent to LLM providers\n}\n\nexport interface ThinkingBudgetsSettings {\n\tminimal?: number;\n\tlow?: number;\n\tmedium?: number;\n\thigh?: number;\n}\n\nexport interface BashInterceptorSettings {\n\tenabled?: boolean; // default: true\n\trules?: BashInterceptorRule[]; // override default rules\n}\n\nexport interface SandboxSettings {\n\tenabled?: boolean; // default: true on supported platforms\n\tautoAllowBashIfSandboxed?: boolean; // default: true\n\twritableRoots?: string[]; // additional writable roots beyond cwd and /tmp\n\treadOnlySubpaths?: string[]; // protected subpaths within writable roots\n\tnetworkEnabled?: boolean; // legacy boolean override; prefer networkMode\n\tnetworkMode?: \"allow\" | \"ask\" | \"deny\"; // default: ask\n}\n\nexport interface MarkdownSettings {\n\tcodeBlockIndent?: string; // default: \" \"\n}\n\nexport interface MemorySettings {\n\tenabled?: boolean; // default: false\n\tmaxRolloutsPerStartup?: number; // default: 64\n\tmaxRolloutAgeDays?: number; // default: 30\n\tminRolloutIdleHours?: number; // default: 12\n\tstage1Concurrency?: number; // default: 8\n\tsummaryInjectionTokenLimit?: number; // default: 5000\n}\n\nexport interface AsyncSettings {\n\tenabled?: boolean; // default: false\n\tmaxJobs?: number; // default: 100\n}\n\nexport interface TaskIsolationSettings {\n\tmode?: \"none\" | \"worktree\" | \"fuse-overlay\"; // default: \"none\"\n\tmerge?: \"patch\" | \"branch\"; // default: \"patch\"\n}\n\nexport interface FallbackChainEntry {\n\tprovider: string;\n\tmodel: string;\n\tpriority: number;\n}\n\nexport interface FallbackSettings {\n\tenabled?: boolean; // default: false\n\tchains?: Record<string, FallbackChainEntry[]>; // keyed by chain name\n}\n\nexport interface ModelDiscoverySettings {\n\tenabled?: boolean; // default: false\n\tproviders?: string[]; // limit discovery to specific providers\n\tttlMinutes?: number; // override default TTLs (in minutes)\n\tautoRefreshOnModelSelect?: boolean; // default: false - refresh discovery when opening model selector\n}\n\nexport type TransportSetting = Transport;\n\n/**\n * Package source for npm/git packages.\n * - String form: load all resources from the package\n * - Object form: filter which resources to load\n */\nexport type PackageSource =\n\t| string\n\t| {\n\t\t\tsource: string;\n\t\t\textensions?: string[];\n\t\t\tskills?: string[];\n\t\t\tprompts?: string[];\n\t\t\tthemes?: string[];\n\t };\n\nexport interface Settings {\n\tlastChangelogVersion?: string;\n\tdefaultProvider?: string;\n\tdefaultModel?: string;\n\tbudgetSubagentModel?: string;\n\tplanModeReasoningModel?: string;\n\tplanModeReviewModel?: string;\n\tplanModeCodingModel?: string;\n\tautoSuggestPlanMode?: boolean; // default: false — append a system-prompt instruction so the LLM proposes plan mode for large tasks\n\tautoSwitchPlanModel?: boolean; // default: false — enable opusplan-style model switching (auto-switch to reasoning model on entry, new-session option on approval)\n\tpermissionMode?: \"danger-full-access\" | \"accept-on-edit\" | \"auto\" | \"plan\";\n\tclassifierModel?: string;\n\tdefaultThinkingLevel?: \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"adaptive\";\n\tanthropicAdaptiveByDefault?: boolean; // default: false — prefer adaptive thinking when using supported Anthropic models\n\ttransport?: TransportSetting; // default: \"sse\"\n\tsteeringMode?: \"all\" | \"one-at-a-time\";\n\tfollowUpMode?: \"all\" | \"one-at-a-time\";\n\ttheme?: string;\n\tthemeAccent?: string;\n\tcompaction?: CompactionSettings;\n\tbranchSummary?: BranchSummarySettings;\n\tretry?: RetrySettings;\n\thideThinkingBlock?: boolean;\n\tshellPath?: string; // Custom shell path (e.g., for Cygwin users on Windows)\n\tquietStartup?: boolean;\n\tshellCommandPrefix?: string; // Prefix prepended to every bash command (e.g., \"shopt -s expand_aliases\" for alias support)\n\tcollapseChangelog?: boolean; // Show condensed changelog after update (use /changelog for full)\n\tpackages?: PackageSource[]; // Array of npm/git package sources (string or object with filtering)\n\textensions?: string[]; // Array of local extension file paths or directories\n\tskills?: string[]; // Array of local skill file paths or directories\n\tprompts?: string[]; // Array of local prompt template paths or directories\n\tthemes?: string[]; // Array of local theme file paths or directories\n\tenableSkillCommands?: boolean; // default: true - register skills as /skill:name commands\n\ttoolSearch?: boolean; // legacy boolean toggle from deprecated minimal profile; retained for migration only\n\ttoolProfile?: \"balanced\" | \"full\"; // default: \"balanced\"\n\tterminal?: TerminalSettings;\n\timages?: ImageSettings;\n\tenabledModels?: string[]; // Model patterns for cycling (same format as --models CLI flag)\n\tcodexRotate?: boolean; // Enable the bundled codex-rotate extension (default: false)\n\tcacheTimer?: boolean; // Show elapsed time since last response in the footer (default: true)\n\tpinLastPrompt?: boolean; // Pin last sent prompt above the editor as a reminder (default: false)\n\tdoubleEscapeAction?: \"fork\" | \"tree\" | \"none\"; // Action for double-escape with empty editor (default: \"tree\")\n\ttreeFilterMode?: \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\"; // Default filter when opening /tree\n\tthinkingBudgets?: ThinkingBudgetsSettings; // Custom token budgets for thinking levels\n\teditorPaddingX?: number; // Horizontal padding for input editor (default: 0)\n\tautocompleteMaxVisible?: number; // Max visible items in autocomplete dropdown (default: 5)\n\trespectGitignoreInPicker?: boolean; // When false, @ file picker shows gitignored files (default: true)\n\tsearchExcludeDirs?: string[]; // Directories to exclude from @ file search (e.g., [\"node_modules\", \".git\", \"dist\"])\n\tshowHardwareCursor?: boolean; // Show terminal cursor while still positioning it for IME\n\tmarkdown?: MarkdownSettings;\n\tmemory?: MemorySettings;\n\tasync?: AsyncSettings;\n\tbashInterceptor?: BashInterceptorSettings;\n\tsandbox?: SandboxSettings;\n\ttaskIsolation?: TaskIsolationSettings;\n\tfallback?: FallbackSettings;\n\tmodelDiscovery?: ModelDiscoverySettings;\n\teditMode?: \"standard\" | \"hashline\"; // Edit tool mode: \"standard\" (text match) or \"hashline\" (LINE#ID anchors). Default: \"standard\"\n\ttimestampFormat?: \"date-time-iso\" | \"date-time-us\"; // Timestamp display format for messages. Default: \"date-time-iso\"\n\ttoolOutputMode?: \"minimal\" | \"normal\"; // Collapsed tool rendering mode. \"minimal\" hides previews until expanded.\n\tlspAutoInstall?: boolean; // default: false — whether to auto-install missing language servers during onboarding\n\tlspInstalledServers?: string[]; // list of server names installed via the onboarding wizard\n\trtk?: boolean; // default: false — enable RTK shell-command compression (requires restart)\n\teditorScheme?: \"auto\" | \"vscode\" | \"cursor\" | \"zed\" | \"jetbrains\" | \"sublime\" | \"file\"; // URI scheme for Cmd+click file links (default: \"auto\")\n\tautoDream?: boolean; // default: false — enable automatic memory consolidation (dream) after sessions\n\tautoMemory?: boolean; // default: false — enable automatic memory extraction from session transcripts\n\ttelegramLiveRelayAutoConnect?: boolean; // default: false — auto-run /lsd telegram connect on startup\n}\n\nfunction isQualifiedProviderModelRef(value: unknown): value is string {\n\tif (typeof value !== \"string\") return false;\n\tconst trimmed = value.trim();\n\tif (!trimmed) return false;\n\tconst parts = trimmed.split(\"/\");\n\treturn parts.length === 2 && parts.every((part) => part.trim().length > 0);\n}\n\n/** Deep merge settings: project/overrides take precedence, nested objects merge recursively */\nfunction deepMergeSettings(base: Settings, overrides: Settings): Settings {\n\tconst result: Settings = { ...base };\n\n\tfor (const key of Object.keys(overrides) as (keyof Settings)[]) {\n\t\tconst overrideValue = overrides[key];\n\t\tconst baseValue = base[key];\n\n\t\tif (overrideValue === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// For nested objects, merge recursively\n\t\tif (\n\t\t\ttypeof overrideValue === \"object\" &&\n\t\t\toverrideValue !== null &&\n\t\t\t!Array.isArray(overrideValue) &&\n\t\t\ttypeof baseValue === \"object\" &&\n\t\t\tbaseValue !== null &&\n\t\t\t!Array.isArray(baseValue)\n\t\t) {\n\t\t\t(result as Record<string, unknown>)[key] = { ...baseValue, ...overrideValue };\n\t\t} else {\n\t\t\t// For primitives and arrays, override value wins\n\t\t\t(result as Record<string, unknown>)[key] = overrideValue;\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport type SettingsScope = \"global\" | \"project\";\n\nexport interface SettingsStorage {\n\twithLock(scope: SettingsScope, fn: (current: string | undefined) => string | undefined): void;\n}\n\nexport interface SettingsError {\n\tscope: SettingsScope;\n\terror: Error;\n}\n\nclass FileSettingsStorage implements SettingsStorage {\n\tprivate globalSettingsPath: string;\n\tprivate projectSettingsPath: string;\n\n\tconstructor(cwd: string = process.cwd(), agentDir: string = getAgentDir()) {\n\t\tthis.globalSettingsPath = join(agentDir, \"settings.json\");\n\t\tthis.projectSettingsPath = join(cwd, CONFIG_DIR_NAME, \"settings.json\");\n\t}\n\n\tprivate acquireLockSyncWithRetry(path: string): () => void {\n\t\tconst maxAttempts = 10;\n\t\tconst delayMs = 20;\n\t\tlet lastError: unknown;\n\n\t\tfor (let attempt = 1; attempt <= maxAttempts; attempt++) {\n\t\t\ttry {\n\t\t\t\treturn lockfile.lockSync(path, { realpath: false });\n\t\t\t} catch (error) {\n\t\t\t\tconst code =\n\t\t\t\t\ttypeof error === \"object\" && error !== null && \"code\" in error\n\t\t\t\t\t\t? String((error as { code?: unknown }).code)\n\t\t\t\t\t\t: undefined;\n\t\t\t\tif (code !== \"ELOCKED\" || attempt === maxAttempts) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tlastError = error;\n\t\t\t\tconst start = Date.now();\n\t\t\t\twhile (Date.now() - start < delayMs) {\n\t\t\t\t\t// Sleep synchronously to avoid changing callers to async.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow (lastError as Error) ?? new Error(\"Failed to acquire settings lock\");\n\t}\n\n\twithLock(scope: SettingsScope, fn: (current: string | undefined) => string | undefined): void {\n\t\tconst path = scope === \"global\" ? this.globalSettingsPath : this.projectSettingsPath;\n\t\tconst dir = dirname(path);\n\n\t\tlet release: (() => void) | undefined;\n\t\ttry {\n\t\t\t// Only create directory and lock if file exists or we need to write\n\t\t\tconst fileExists = existsSync(path);\n\t\t\tif (fileExists) {\n\t\t\t\trelease = this.acquireLockSyncWithRetry(path);\n\t\t\t}\n\t\t\tconst current = fileExists ? readFileSync(path, \"utf-8\") : undefined;\n\t\t\tconst next = fn(current);\n\t\t\tif (next !== undefined) {\n\t\t\t\t// Only create directory when we actually need to write\n\t\t\t\tif (!existsSync(dir)) {\n\t\t\t\t\tmkdirSync(dir, { recursive: true });\n\t\t\t\t}\n\t\t\t\tif (!release) {\n\t\t\t\t\trelease = this.acquireLockSyncWithRetry(path);\n\t\t\t\t}\n\t\t\t\twriteFileSync(path, next, \"utf-8\");\n\t\t\t}\n\t\t} finally {\n\t\t\tif (release) {\n\t\t\t\trelease();\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass InMemorySettingsStorage implements SettingsStorage {\n\tprivate global: string | undefined;\n\tprivate project: string | undefined;\n\n\twithLock(scope: SettingsScope, fn: (current: string | undefined) => string | undefined): void {\n\t\tconst current = scope === \"global\" ? this.global : this.project;\n\t\tconst next = fn(current);\n\t\tif (next !== undefined) {\n\t\t\tif (scope === \"global\") {\n\t\t\t\tthis.global = next;\n\t\t\t} else {\n\t\t\t\tthis.project = next;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class SettingsManager {\n\tprivate storage: SettingsStorage;\n\tprivate globalSettings: Settings;\n\tprivate projectSettings: Settings;\n\tprivate settings: Settings;\n\tprivate modifiedFields = new Set<keyof Settings>(); // Track global fields modified during session\n\tprivate modifiedNestedFields = new Map<keyof Settings, Set<string>>(); // Track global nested field modifications\n\tprivate modifiedProjectFields = new Set<keyof Settings>(); // Track project fields modified during session\n\tprivate modifiedProjectNestedFields = new Map<keyof Settings, Set<string>>(); // Track project nested field modifications\n\tprivate globalSettingsLoadError: Error | null = null; // Track if global settings file had parse errors\n\tprivate projectSettingsLoadError: Error | null = null; // Track if project settings file had parse errors\n\tprivate writeQueue: Promise<void> = Promise.resolve();\n\tprivate errors: SettingsError[];\n\n\tprivate constructor(\n\t\tstorage: SettingsStorage,\n\t\tinitialGlobal: Settings,\n\t\tinitialProject: Settings,\n\t\tglobalLoadError: Error | null = null,\n\t\tprojectLoadError: Error | null = null,\n\t\tinitialErrors: SettingsError[] = [],\n\t) {\n\t\tthis.storage = storage;\n\t\tthis.globalSettings = initialGlobal;\n\t\tthis.projectSettings = initialProject;\n\t\tthis.globalSettingsLoadError = globalLoadError;\n\t\tthis.projectSettingsLoadError = projectLoadError;\n\t\tthis.errors = [...initialErrors];\n\t\tthis.settings = deepMergeSettings(this.globalSettings, this.projectSettings);\n\t}\n\n\t/** Create a SettingsManager that loads from files */\n\tstatic create(cwd: string = process.cwd(), agentDir: string = getAgentDir()): SettingsManager {\n\t\tconst storage = new FileSettingsStorage(cwd, agentDir);\n\t\treturn SettingsManager.fromStorage(storage);\n\t}\n\n\t/** Create a SettingsManager from an arbitrary storage backend */\n\tstatic fromStorage(storage: SettingsStorage): SettingsManager {\n\t\tconst globalLoad = SettingsManager.tryLoadFromStorage(storage, \"global\");\n\t\tconst projectLoad = SettingsManager.tryLoadFromStorage(storage, \"project\");\n\t\tconst initialErrors: SettingsError[] = [];\n\t\tif (globalLoad.error) {\n\t\t\tinitialErrors.push({ scope: \"global\", error: globalLoad.error });\n\t\t}\n\t\tif (projectLoad.error) {\n\t\t\tinitialErrors.push({ scope: \"project\", error: projectLoad.error });\n\t\t}\n\n\t\treturn new SettingsManager(\n\t\t\tstorage,\n\t\t\tglobalLoad.settings,\n\t\t\tprojectLoad.settings,\n\t\t\tglobalLoad.error,\n\t\t\tprojectLoad.error,\n\t\t\tinitialErrors,\n\t\t);\n\t}\n\n\t/** Create an in-memory SettingsManager (no file I/O) */\n\tstatic inMemory(settings: Partial<Settings> = {}): SettingsManager {\n\t\tconst storage = new InMemorySettingsStorage();\n\t\treturn new SettingsManager(storage, settings, {});\n\t}\n\n\tprivate static loadFromStorage(storage: SettingsStorage, scope: SettingsScope): Settings {\n\t\tlet content: string | undefined;\n\t\tstorage.withLock(scope, (current) => {\n\t\t\tcontent = current;\n\t\t\treturn undefined;\n\t\t});\n\n\t\tif (!content) {\n\t\t\treturn {};\n\t\t}\n\t\tconst settings = JSON.parse(content);\n\t\treturn SettingsManager.migrateSettings(settings);\n\t}\n\n\tprivate static tryLoadFromStorage(\n\t\tstorage: SettingsStorage,\n\t\tscope: SettingsScope,\n\t): { settings: Settings; error: Error | null } {\n\t\ttry {\n\t\t\treturn { settings: SettingsManager.loadFromStorage(storage, scope), error: null };\n\t\t} catch (error) {\n\t\t\treturn { settings: {}, error: error as Error };\n\t\t}\n\t}\n\n\t/** Migrate old settings format to new format */\n\tprivate static migrateSettings(settings: Record<string, unknown>): Settings {\n\t\t// Migrate queueMode -> steeringMode\n\t\tif (\"queueMode\" in settings && !(\"steeringMode\" in settings)) {\n\t\t\tsettings.steeringMode = settings.queueMode;\n\t\t\tdelete settings.queueMode;\n\t\t}\n\n\t\t// Migrate legacy websockets boolean -> transport enum\n\t\tif (!(\"transport\" in settings) && typeof settings.websockets === \"boolean\") {\n\t\t\tsettings.transport = settings.websockets ? \"websocket\" : \"sse\";\n\t\t\tdelete settings.websockets;\n\t\t}\n\n\t\t// Migrate old skills object format to new array format\n\t\tif (\n\t\t\t\"skills\" in settings &&\n\t\t\ttypeof settings.skills === \"object\" &&\n\t\t\tsettings.skills !== null &&\n\t\t\t!Array.isArray(settings.skills)\n\t\t) {\n\t\t\tconst skillsSettings = settings.skills as {\n\t\t\t\tenableSkillCommands?: boolean;\n\t\t\t\tcustomDirectories?: unknown;\n\t\t\t};\n\t\t\tif (skillsSettings.enableSkillCommands !== undefined && settings.enableSkillCommands === undefined) {\n\t\t\t\tsettings.enableSkillCommands = skillsSettings.enableSkillCommands;\n\t\t\t}\n\t\t\tif (Array.isArray(skillsSettings.customDirectories) && skillsSettings.customDirectories.length > 0) {\n\t\t\t\tsettings.skills = skillsSettings.customDirectories;\n\t\t\t} else {\n\t\t\t\tdelete settings.skills;\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\t\"planModeReasoningModel\" in settings &&\n\t\t\tsettings.planModeReasoningModel !== undefined &&\n\t\t\t!isQualifiedProviderModelRef(settings.planModeReasoningModel)\n\t\t) {\n\t\t\tdelete settings.planModeReasoningModel;\n\t\t}\n\n\t\tif (\n\t\t\t\"planModeReviewModel\" in settings &&\n\t\t\tsettings.planModeReviewModel !== undefined &&\n\t\t\t!isQualifiedProviderModelRef(settings.planModeReviewModel)\n\t\t) {\n\t\t\tdelete settings.planModeReviewModel;\n\t\t}\n\n\t\tif (\n\t\t\t\"planModeCodingModel\" in settings &&\n\t\t\tsettings.planModeCodingModel !== undefined &&\n\t\t\t!isQualifiedProviderModelRef(settings.planModeCodingModel)\n\t\t) {\n\t\t\tdelete settings.planModeCodingModel;\n\t\t}\n\n\t\treturn settings as Settings;\n\t}\n\n\tgetGlobalSettings(): Settings {\n\t\treturn structuredClone(this.globalSettings);\n\t}\n\n\tgetProjectSettings(): Settings {\n\t\treturn structuredClone(this.projectSettings);\n\t}\n\n\tgetBashInterceptorEnabled(): boolean {\n\t\treturn this.settings.bashInterceptor?.enabled ?? true;\n\t}\n\n\tgetBashInterceptorRules(): BashInterceptorRule[] | undefined {\n\t\treturn this.settings.bashInterceptor?.rules;\n\t}\n\n\treload(): void {\n\t\tconst globalLoad = SettingsManager.tryLoadFromStorage(this.storage, \"global\");\n\t\tif (!globalLoad.error) {\n\t\t\tthis.globalSettings = globalLoad.settings;\n\t\t\tthis.globalSettingsLoadError = null;\n\t\t} else {\n\t\t\tthis.globalSettingsLoadError = globalLoad.error;\n\t\t\tthis.recordError(\"global\", globalLoad.error);\n\t\t}\n\n\t\tthis.modifiedFields.clear();\n\t\tthis.modifiedNestedFields.clear();\n\t\tthis.modifiedProjectFields.clear();\n\t\tthis.modifiedProjectNestedFields.clear();\n\n\t\tconst projectLoad = SettingsManager.tryLoadFromStorage(this.storage, \"project\");\n\t\tif (!projectLoad.error) {\n\t\t\tthis.projectSettings = projectLoad.settings;\n\t\t\tthis.projectSettingsLoadError = null;\n\t\t} else {\n\t\t\tthis.projectSettingsLoadError = projectLoad.error;\n\t\t\tthis.recordError(\"project\", projectLoad.error);\n\t\t}\n\n\t\tthis.settings = deepMergeSettings(this.globalSettings, this.projectSettings);\n\t}\n\n\t/** Apply additional overrides on top of current settings */\n\tapplyOverrides(overrides: Partial<Settings>): void {\n\t\tthis.settings = deepMergeSettings(this.settings, overrides);\n\t}\n\n\t/** Mark a global field as modified during this session */\n\tprivate markModified(field: keyof Settings, nestedKey?: string): void {\n\t\tthis.modifiedFields.add(field);\n\t\tif (nestedKey) {\n\t\t\tif (!this.modifiedNestedFields.has(field)) {\n\t\t\t\tthis.modifiedNestedFields.set(field, new Set());\n\t\t\t}\n\t\t\tthis.modifiedNestedFields.get(field)!.add(nestedKey);\n\t\t}\n\t}\n\n\t/** Mark a project field as modified during this session */\n\tprivate markProjectModified(field: keyof Settings, nestedKey?: string): void {\n\t\tthis.modifiedProjectFields.add(field);\n\t\tif (nestedKey) {\n\t\t\tif (!this.modifiedProjectNestedFields.has(field)) {\n\t\t\t\tthis.modifiedProjectNestedFields.set(field, new Set());\n\t\t\t}\n\t\t\tthis.modifiedProjectNestedFields.get(field)!.add(nestedKey);\n\t\t}\n\t}\n\n\tprivate recordError(scope: SettingsScope, error: unknown): void {\n\t\tconst normalizedError = error instanceof Error ? error : new Error(String(error));\n\t\tthis.errors.push({ scope, error: normalizedError });\n\t}\n\n\t/**\n\t * Check if project-level settings are active (loaded from a file).\n\t * Used to scope model persistence to the project when possible,\n\t * preventing model config bleed between concurrent instances (#650).\n\t */\n\tprivate hasProjectSettings(): boolean {\n\t\t// Project settings are active if we loaded them and they weren't empty/errored\n\t\treturn !this.projectSettingsLoadError && Object.keys(this.projectSettings).length > 0;\n\t}\n\n\tprivate clearModifiedScope(scope: SettingsScope): void {\n\t\tif (scope === \"global\") {\n\t\t\tthis.modifiedFields.clear();\n\t\t\tthis.modifiedNestedFields.clear();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.modifiedProjectFields.clear();\n\t\tthis.modifiedProjectNestedFields.clear();\n\t}\n\n\tprivate enqueueWrite(scope: SettingsScope, task: () => void): void {\n\t\tthis.writeQueue = this.writeQueue\n\t\t\t.then(() => {\n\t\t\t\ttask();\n\t\t\t\tthis.clearModifiedScope(scope);\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tthis.recordError(scope, error);\n\t\t\t});\n\t}\n\n\tprivate cloneModifiedNestedFields(source: Map<keyof Settings, Set<string>>): Map<keyof Settings, Set<string>> {\n\t\tconst snapshot = new Map<keyof Settings, Set<string>>();\n\t\tfor (const [key, value] of source.entries()) {\n\t\t\tsnapshot.set(key, new Set(value));\n\t\t}\n\t\treturn snapshot;\n\t}\n\n\tprivate persistScopedSettings(\n\t\tscope: SettingsScope,\n\t\tsnapshotSettings: Settings,\n\t\tmodifiedFields: Set<keyof Settings>,\n\t\tmodifiedNestedFields: Map<keyof Settings, Set<string>>,\n\t): void {\n\t\tthis.storage.withLock(scope, (current) => {\n\t\t\tconst currentFileSettings = current\n\t\t\t\t? SettingsManager.migrateSettings(JSON.parse(current) as Record<string, unknown>)\n\t\t\t\t: {};\n\t\t\tconst mergedSettings: Settings = { ...currentFileSettings };\n\t\t\tfor (const field of modifiedFields) {\n\t\t\t\tconst value = snapshotSettings[field];\n\t\t\t\tif (modifiedNestedFields.has(field) && typeof value === \"object\" && value !== null) {\n\t\t\t\t\tconst nestedModified = modifiedNestedFields.get(field)!;\n\t\t\t\t\tconst baseNested = (currentFileSettings[field] as Record<string, unknown>) ?? {};\n\t\t\t\t\tconst inMemoryNested = value as Record<string, unknown>;\n\t\t\t\t\tconst mergedNested = { ...baseNested };\n\t\t\t\t\tfor (const nestedKey of nestedModified) {\n\t\t\t\t\t\tmergedNested[nestedKey] = inMemoryNested[nestedKey];\n\t\t\t\t\t}\n\t\t\t\t\t(mergedSettings as Record<string, unknown>)[field] = mergedNested;\n\t\t\t\t} else {\n\t\t\t\t\t(mergedSettings as Record<string, unknown>)[field] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn JSON.stringify(mergedSettings, null, 2);\n\t\t});\n\t}\n\n\tprivate save(): void {\n\t\tthis.settings = deepMergeSettings(this.globalSettings, this.projectSettings);\n\n\t\tif (this.globalSettingsLoadError) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst snapshotGlobalSettings = structuredClone(this.globalSettings);\n\t\tconst modifiedFields = new Set(this.modifiedFields);\n\t\tconst modifiedNestedFields = this.cloneModifiedNestedFields(this.modifiedNestedFields);\n\n\t\tthis.enqueueWrite(\"global\", () => {\n\t\t\tthis.persistScopedSettings(\"global\", snapshotGlobalSettings, modifiedFields, modifiedNestedFields);\n\t\t});\n\t}\n\n\tprivate saveProjectSettings(settings: Settings): void {\n\t\tthis.projectSettings = structuredClone(settings);\n\t\tthis.settings = deepMergeSettings(this.globalSettings, this.projectSettings);\n\n\t\tif (this.projectSettingsLoadError) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst snapshotProjectSettings = structuredClone(this.projectSettings);\n\t\tconst modifiedFields = new Set(this.modifiedProjectFields);\n\t\tconst modifiedNestedFields = this.cloneModifiedNestedFields(this.modifiedProjectNestedFields);\n\t\tthis.enqueueWrite(\"project\", () => {\n\t\t\tthis.persistScopedSettings(\"project\", snapshotProjectSettings, modifiedFields, modifiedNestedFields);\n\t\t});\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tawait this.writeQueue;\n\t}\n\n\tdrainErrors(): SettingsError[] {\n\t\tconst drained = [...this.errors];\n\t\tthis.errors = [];\n\t\treturn drained;\n\t}\n\n\t// ── Generic setter helpers ──────────────────────────────────────────\n\n\t/** Set a top-level global setting field, mark modified, and save. */\n\tprivate setGlobalSetting<K extends keyof Settings>(key: K, value: Settings[K]): void {\n\t\tthis.globalSettings[key] = value;\n\t\tthis.markModified(key);\n\t\tthis.save();\n\t}\n\n\t/** Set a top-level setting, scoped to project when project settings are active. */\n\tprivate setScopedSetting<K extends keyof Settings>(key: K, value: Settings[K]): void {\n\t\tif (this.hasProjectSettings()) {\n\t\t\tthis.projectSettings[key] = value;\n\t\t\tthis.markProjectModified(key);\n\t\t\tthis.saveProjectSettings(this.projectSettings);\n\t\t} else {\n\t\t\tthis.setGlobalSetting(key, value);\n\t\t}\n\t}\n\n\t/** Set a nested field within a global settings object (e.g. compaction.enabled). */\n\tprivate setNestedGlobalSetting<K extends keyof Settings, NK extends string & keyof NonNullable<Settings[K]>>(\n\t\tkey: K,\n\t\tnestedKey: NK,\n\t\tvalue: NonNullable<Settings[K]>[NK],\n\t): void {\n\t\tif (!this.globalSettings[key]) {\n\t\t\t(this.globalSettings as Record<string, unknown>)[key] = {};\n\t\t}\n\t\t(this.globalSettings[key] as Record<string, unknown>)[nestedKey] = value;\n\t\tthis.markModified(key, nestedKey);\n\t\tthis.save();\n\t}\n\n\t/** Set a field on project settings (clone, set, mark modified, save). */\n\tprivate setProjectSetting<K extends keyof Settings>(key: K, value: Settings[K]): void {\n\t\tconst projectSettings = structuredClone(this.projectSettings);\n\t\tprojectSettings[key] = value;\n\t\tthis.markProjectModified(key);\n\t\tthis.saveProjectSettings(projectSettings);\n\t}\n\n\t// ── Public getters and setters ──────────────────────────────────────\n\n\tgetLastChangelogVersion(): string | undefined {\n\t\treturn this.settings.lastChangelogVersion;\n\t}\n\n\tsetLastChangelogVersion(version: string): void {\n\t\tthis.setGlobalSetting(\"lastChangelogVersion\", version);\n\t}\n\n\tgetDefaultProvider(): string | undefined {\n\t\treturn this.settings.defaultProvider;\n\t}\n\n\tgetDefaultModel(): string | undefined {\n\t\treturn this.settings.defaultModel;\n\t}\n\n\tgetBudgetSubagentModel(): string | undefined {\n\t\treturn this.settings.budgetSubagentModel;\n\t}\n\n\tgetPlanModeReasoningModel(): string | undefined {\n\t\treturn isQualifiedProviderModelRef(this.settings.planModeReasoningModel)\n\t\t\t? this.settings.planModeReasoningModel.trim()\n\t\t\t: undefined;\n\t}\n\n\tgetPlanModeReviewModel(): string | undefined {\n\t\treturn isQualifiedProviderModelRef(this.settings.planModeReviewModel)\n\t\t\t? this.settings.planModeReviewModel.trim()\n\t\t\t: undefined;\n\t}\n\n\tgetPlanModeCodingModel(): string | undefined {\n\t\treturn isQualifiedProviderModelRef(this.settings.planModeCodingModel)\n\t\t\t? this.settings.planModeCodingModel.trim()\n\t\t\t: undefined;\n\t}\n\n\tgetPermissionMode(): \"danger-full-access\" | \"accept-on-edit\" | \"auto\" | \"plan\" {\n\t\treturn this.settings.permissionMode ?? \"accept-on-edit\";\n\t}\n\n\tgetClassifierModel(): string | undefined {\n\t\treturn this.settings.classifierModel;\n\t}\n\n\tsetDefaultProvider(provider: string): void {\n\t\tthis.setScopedSetting(\"defaultProvider\", provider);\n\t}\n\n\tsetDefaultModel(modelId: string): void {\n\t\tthis.setScopedSetting(\"defaultModel\", modelId);\n\t}\n\n\tsetBudgetSubagentModel(modelRef: string | undefined): void {\n\t\tif (modelRef === undefined) {\n\t\t\tdelete this.globalSettings.budgetSubagentModel;\n\t\t\tthis.markModified(\"budgetSubagentModel\");\n\t\t\tthis.save();\n\t\t\treturn;\n\t\t}\n\t\tthis.setGlobalSetting(\"budgetSubagentModel\", modelRef);\n\t}\n\n\tsetPlanModeReasoningModel(modelRef: string | undefined): void {\n\t\tif (modelRef === undefined) {\n\t\t\tdelete this.globalSettings.planModeReasoningModel;\n\t\t\tthis.markModified(\"planModeReasoningModel\");\n\t\t\tthis.save();\n\t\t\treturn;\n\t\t}\n\t\tif (!isQualifiedProviderModelRef(modelRef)) {\n\t\t\tthrow new Error(`planModeReasoningModel must be in provider/id format. Received: ${modelRef}`);\n\t\t}\n\t\tthis.setGlobalSetting(\"planModeReasoningModel\", modelRef.trim());\n\t}\n\n\tsetPlanModeReviewModel(modelRef: string | undefined): void {\n\t\tif (modelRef === undefined) {\n\t\t\tdelete this.globalSettings.planModeReviewModel;\n\t\t\tthis.markModified(\"planModeReviewModel\");\n\t\t\tthis.save();\n\t\t\treturn;\n\t\t}\n\t\tif (!isQualifiedProviderModelRef(modelRef)) {\n\t\t\tthrow new Error(`planModeReviewModel must be in provider/id format. Received: ${modelRef}`);\n\t\t}\n\t\tthis.setGlobalSetting(\"planModeReviewModel\", modelRef.trim());\n\t}\n\n\tsetPlanModeCodingModel(modelRef: string | undefined): void {\n\t\tif (modelRef === undefined) {\n\t\t\tdelete this.globalSettings.planModeCodingModel;\n\t\t\tthis.markModified(\"planModeCodingModel\");\n\t\t\tthis.save();\n\t\t\treturn;\n\t\t}\n\t\tif (!isQualifiedProviderModelRef(modelRef)) {\n\t\t\tthrow new Error(`planModeCodingModel must be in provider/id format. Received: ${modelRef}`);\n\t\t}\n\t\tthis.setGlobalSetting(\"planModeCodingModel\", modelRef.trim());\n\t}\n\n\tgetAutoSuggestPlanMode(): boolean {\n\t\treturn this.settings.autoSuggestPlanMode ?? false;\n\t}\n\n\tsetAutoSuggestPlanMode(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"autoSuggestPlanMode\", enabled);\n\t}\n\n\tgetAutoSwitchPlanModel(): boolean {\n\t\treturn this.settings.autoSwitchPlanModel ?? false;\n\t}\n\n\tsetAutoSwitchPlanModel(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"autoSwitchPlanModel\", enabled);\n\t}\n\n\tsetPermissionMode(mode: \"danger-full-access\" | \"accept-on-edit\" | \"auto\" | \"plan\"): void {\n\t\tthis.setGlobalSetting(\"permissionMode\", mode);\n\t}\n\n\tsetClassifierModel(modelRef: string | undefined): void {\n\t\tif (modelRef === undefined) {\n\t\t\tdelete this.globalSettings.classifierModel;\n\t\t\tthis.markModified(\"classifierModel\");\n\t\t\tthis.save();\n\t\t\treturn;\n\t\t}\n\t\tthis.setGlobalSetting(\"classifierModel\", modelRef);\n\t}\n\n\tsetDefaultModelAndProvider(provider: string, modelId: string): void {\n\t\tif (this.hasProjectSettings()) {\n\t\t\tthis.projectSettings.defaultProvider = provider;\n\t\t\tthis.projectSettings.defaultModel = modelId;\n\t\t\tthis.markProjectModified(\"defaultProvider\");\n\t\t\tthis.markProjectModified(\"defaultModel\");\n\t\t\tthis.saveProjectSettings(this.projectSettings);\n\t\t} else {\n\t\t\tthis.globalSettings.defaultProvider = provider;\n\t\t\tthis.globalSettings.defaultModel = modelId;\n\t\t\tthis.markModified(\"defaultProvider\");\n\t\t\tthis.markModified(\"defaultModel\");\n\t\t\tthis.save();\n\t\t}\n\t}\n\n\tgetSteeringMode(): \"all\" | \"one-at-a-time\" {\n\t\treturn this.settings.steeringMode || \"one-at-a-time\";\n\t}\n\n\tsetSteeringMode(mode: \"all\" | \"one-at-a-time\"): void {\n\t\tthis.setGlobalSetting(\"steeringMode\", mode);\n\t}\n\n\tgetFollowUpMode(): \"all\" | \"one-at-a-time\" {\n\t\treturn this.settings.followUpMode || \"one-at-a-time\";\n\t}\n\n\tsetFollowUpMode(mode: \"all\" | \"one-at-a-time\"): void {\n\t\tthis.setGlobalSetting(\"followUpMode\", mode);\n\t}\n\n\tgetTheme(): string | undefined {\n\t\treturn this.settings.theme;\n\t}\n\n\tsetTheme(theme: string): void {\n\t\tthis.setGlobalSetting(\"theme\", theme);\n\t}\n\n\tgetThemeAccent(): string | undefined {\n\t\treturn this.settings.themeAccent;\n\t}\n\n\tsetThemeAccent(accent: string | undefined): void {\n\t\tif (accent === undefined) {\n\t\t\tdelete this.globalSettings.themeAccent;\n\t\t\tthis.markModified(\"themeAccent\");\n\t\t\tthis.save();\n\t\t\treturn;\n\t\t}\n\t\tthis.setGlobalSetting(\"themeAccent\", accent);\n\t}\n\n\tgetDefaultThinkingLevel(): \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"adaptive\" | undefined {\n\t\treturn this.settings.defaultThinkingLevel;\n\t}\n\n\tsetDefaultThinkingLevel(level: \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"adaptive\"): void {\n\t\tthis.setGlobalSetting(\"defaultThinkingLevel\", level);\n\t}\n\n\tgetAnthropicAdaptiveByDefault(): boolean {\n\t\treturn this.settings.anthropicAdaptiveByDefault ?? false;\n\t}\n\n\tsetAnthropicAdaptiveByDefault(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"anthropicAdaptiveByDefault\", enabled);\n\t}\n\n\tgetTransport(): TransportSetting {\n\t\treturn this.settings.transport ?? \"sse\";\n\t}\n\n\tsetTransport(transport: TransportSetting): void {\n\t\tthis.setGlobalSetting(\"transport\", transport);\n\t}\n\n\tgetCompactionEnabled(): boolean {\n\t\treturn this.settings.compaction?.enabled ?? true;\n\t}\n\n\tsetCompactionEnabled(enabled: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"compaction\", \"enabled\", enabled);\n\t}\n\n\tsetCompactionThresholdPercent(percent: number): void {\n\t\tthis.setNestedGlobalSetting(\"compaction\", \"thresholdPercent\", percent);\n\t}\n\n\tgetCompactionThresholdPercent(): number {\n\t\treturn this.settings.compaction?.thresholdPercent ?? 85;\n\t}\n\n\tgetCompactionReserveTokens(): number {\n\t\treturn this.settings.compaction?.reserveTokens ?? COMPACTION_RESERVE_TOKENS;\n\t}\n\n\tgetCompactionKeepRecentTokens(): number {\n\t\treturn this.settings.compaction?.keepRecentTokens ?? COMPACTION_KEEP_RECENT_TOKENS;\n\t}\n\n\tgetCompactionSettings(): { enabled: boolean; reserveTokens: number; keepRecentTokens: number; thresholdPercent: number } {\n\t\treturn {\n\t\t\tenabled: this.getCompactionEnabled(),\n\t\t\treserveTokens: this.getCompactionReserveTokens(),\n\t\t\tkeepRecentTokens: this.getCompactionKeepRecentTokens(),\n\t\t\tthresholdPercent: this.getCompactionThresholdPercent(),\n\t\t};\n\t}\n\n\tgetBranchSummarySettings(): { reserveTokens: number; skipPrompt: boolean } {\n\t\treturn {\n\t\t\treserveTokens: this.settings.branchSummary?.reserveTokens ?? COMPACTION_RESERVE_TOKENS,\n\t\t\tskipPrompt: this.settings.branchSummary?.skipPrompt ?? false,\n\t\t};\n\t}\n\n\tgetBranchSummarySkipPrompt(): boolean {\n\t\treturn this.settings.branchSummary?.skipPrompt ?? false;\n\t}\n\n\tgetRetryEnabled(): boolean {\n\t\treturn this.settings.retry?.enabled ?? true;\n\t}\n\n\tsetRetryEnabled(enabled: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"retry\", \"enabled\", enabled);\n\t}\n\n\tgetRetrySettings(): { enabled: boolean; maxRetries: number; baseDelayMs: number; maxDelayMs: number } {\n\t\treturn {\n\t\t\tenabled: this.getRetryEnabled(),\n\t\t\tmaxRetries: this.settings.retry?.maxRetries ?? 3,\n\t\t\tbaseDelayMs: this.settings.retry?.baseDelayMs ?? RETRY_BASE_DELAY_MS,\n\t\t\tmaxDelayMs: this.settings.retry?.maxDelayMs ?? RETRY_MAX_DELAY_MS,\n\t\t};\n\t}\n\n\tgetHideThinkingBlock(): boolean {\n\t\treturn this.settings.hideThinkingBlock ?? true;\n\t}\n\n\tsetHideThinkingBlock(hide: boolean): void {\n\t\tthis.setGlobalSetting(\"hideThinkingBlock\", hide);\n\t}\n\n\tgetShellPath(): string | undefined {\n\t\treturn this.settings.shellPath;\n\t}\n\n\tsetShellPath(path: string | undefined): void {\n\t\tthis.setGlobalSetting(\"shellPath\", path);\n\t}\n\n\tgetQuietStartup(): boolean {\n\t\treturn this.settings.quietStartup ?? false;\n\t}\n\n\tsetQuietStartup(quiet: boolean): void {\n\t\tthis.setGlobalSetting(\"quietStartup\", quiet);\n\t}\n\n\tgetShellCommandPrefix(): string | undefined {\n\t\treturn this.settings.shellCommandPrefix;\n\t}\n\n\tsetShellCommandPrefix(prefix: string | undefined): void {\n\t\tthis.setGlobalSetting(\"shellCommandPrefix\", prefix);\n\t}\n\n\tgetCollapseChangelog(): boolean {\n\t\treturn this.settings.collapseChangelog ?? false;\n\t}\n\n\tsetCollapseChangelog(collapse: boolean): void {\n\t\tthis.setGlobalSetting(\"collapseChangelog\", collapse);\n\t}\n\n\tgetToolOutputMode(): \"minimal\" | \"normal\" {\n\t\treturn this.settings.toolOutputMode === \"minimal\" ? \"minimal\" : \"normal\";\n\t}\n\n\tsetToolOutputMode(mode: \"minimal\" | \"normal\"): void {\n\t\tthis.setGlobalSetting(\"toolOutputMode\", mode);\n\t}\n\n\tgetPackages(): PackageSource[] {\n\t\treturn [...(this.settings.packages ?? [])];\n\t}\n\n\tsetPackages(packages: PackageSource[]): void {\n\t\tthis.setGlobalSetting(\"packages\", packages);\n\t}\n\n\tsetProjectPackages(packages: PackageSource[]): void {\n\t\tthis.setProjectSetting(\"packages\", packages);\n\t}\n\n\tgetExtensionPaths(): string[] {\n\t\treturn [...(this.settings.extensions ?? [])];\n\t}\n\n\tsetExtensionPaths(paths: string[]): void {\n\t\tthis.setGlobalSetting(\"extensions\", paths);\n\t}\n\n\tsetProjectExtensionPaths(paths: string[]): void {\n\t\tthis.setProjectSetting(\"extensions\", paths);\n\t}\n\n\tgetSkillPaths(): string[] {\n\t\treturn [...(this.settings.skills ?? [])];\n\t}\n\n\tsetSkillPaths(paths: string[]): void {\n\t\tthis.setGlobalSetting(\"skills\", paths);\n\t}\n\n\tsetProjectSkillPaths(paths: string[]): void {\n\t\tthis.setProjectSetting(\"skills\", paths);\n\t}\n\n\tgetPromptTemplatePaths(): string[] {\n\t\treturn [...(this.settings.prompts ?? [])];\n\t}\n\n\tsetPromptTemplatePaths(paths: string[]): void {\n\t\tthis.setGlobalSetting(\"prompts\", paths);\n\t}\n\n\tsetProjectPromptTemplatePaths(paths: string[]): void {\n\t\tthis.setProjectSetting(\"prompts\", paths);\n\t}\n\n\tgetThemePaths(): string[] {\n\t\treturn [...(this.settings.themes ?? [])];\n\t}\n\n\tsetThemePaths(paths: string[]): void {\n\t\tthis.setGlobalSetting(\"themes\", paths);\n\t}\n\n\tsetProjectThemePaths(paths: string[]): void {\n\t\tthis.setProjectSetting(\"themes\", paths);\n\t}\n\n\tgetEnableSkillCommands(): boolean {\n\t\treturn this.settings.enableSkillCommands ?? true;\n\t}\n\n\tsetEnableSkillCommands(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"enableSkillCommands\", enabled);\n\t}\n\n\tgetToolProfile(): \"balanced\" | \"full\" {\n\t\tconst profile = this.settings.toolProfile;\n\t\tif (profile === \"balanced\" || profile === \"full\") return profile;\n\t\t// Migrate legacy minimal/toolSearch settings to balanced.\n\t\tif (this.settings.toolSearch !== undefined) return \"balanced\";\n\t\treturn \"full\";\n\t}\n\n\tsetToolProfile(profile: \"balanced\" | \"full\"): void {\n\t\tthis.setGlobalSetting(\"toolProfile\", profile);\n\t\t// Keep legacy field in sync with deprecated minimal mode removal.\n\t\tthis.setGlobalSetting(\"toolSearch\", false);\n\t}\n\n\tgetThinkingBudgets(): ThinkingBudgetsSettings | undefined {\n\t\treturn this.settings.thinkingBudgets;\n\t}\n\n\tgetShowImages(): boolean {\n\t\treturn this.settings.terminal?.showImages ?? true;\n\t}\n\n\tsetShowImages(show: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"terminal\", \"showImages\", show);\n\t}\n\n\tgetClearOnShrink(): boolean {\n\t\t// Settings takes precedence, then env var, then default false\n\t\tif (this.settings.terminal?.clearOnShrink !== undefined) {\n\t\t\treturn this.settings.terminal.clearOnShrink;\n\t\t}\n\t\treturn process.env.PI_CLEAR_ON_SHRINK === \"1\";\n\t}\n\n\tsetClearOnShrink(enabled: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"terminal\", \"clearOnShrink\", enabled);\n\t}\n\n\tgetImageAutoResize(): boolean {\n\t\treturn this.settings.images?.autoResize ?? true;\n\t}\n\n\tsetImageAutoResize(enabled: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"images\", \"autoResize\", enabled);\n\t}\n\n\tgetBlockImages(): boolean {\n\t\treturn this.settings.images?.blockImages ?? false;\n\t}\n\n\tsetBlockImages(blocked: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"images\", \"blockImages\", blocked);\n\t}\n\n\tgetEnabledModels(): string[] | undefined {\n\t\treturn this.settings.enabledModels;\n\t}\n\n\tsetEnabledModels(patterns: string[] | undefined): void {\n\t\tthis.setGlobalSetting(\"enabledModels\", patterns);\n\t}\n\n\tgetCodexRotate(): boolean {\n\t\treturn this.settings.codexRotate ?? false;\n\t}\n\n\tsetCodexRotate(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"codexRotate\", enabled);\n\t}\n\n\tgetCacheTimer(): boolean {\n\t\treturn this.settings.cacheTimer ?? true;\n\t}\n\n\tsetCacheTimer(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"cacheTimer\", enabled);\n\t}\n\n\tgetPinLastPrompt(): boolean {\n\t\treturn this.settings.pinLastPrompt ?? false;\n\t}\n\n\tsetPinLastPrompt(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"pinLastPrompt\", enabled);\n\t}\n\n\tgetDoubleEscapeAction(): \"fork\" | \"tree\" | \"none\" {\n\t\treturn this.settings.doubleEscapeAction ?? \"tree\";\n\t}\n\n\tsetDoubleEscapeAction(action: \"fork\" | \"tree\" | \"none\"): void {\n\t\tthis.setGlobalSetting(\"doubleEscapeAction\", action);\n\t}\n\n\tgetTreeFilterMode(): \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\" {\n\t\tconst mode = this.settings.treeFilterMode;\n\t\tconst valid = [\"default\", \"no-tools\", \"user-only\", \"labeled-only\", \"all\"];\n\t\treturn mode && valid.includes(mode) ? mode : \"default\";\n\t}\n\n\tsetTreeFilterMode(mode: \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\"): void {\n\t\tthis.setGlobalSetting(\"treeFilterMode\", mode);\n\t}\n\n\tgetShowHardwareCursor(): boolean {\n\t\treturn this.settings.showHardwareCursor ?? process.env.PI_HARDWARE_CURSOR === \"1\";\n\t}\n\n\tsetShowHardwareCursor(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"showHardwareCursor\", enabled);\n\t}\n\n\tgetEditorPaddingX(): number {\n\t\treturn this.settings.editorPaddingX ?? 0;\n\t}\n\n\tsetEditorPaddingX(padding: number): void {\n\t\tthis.setGlobalSetting(\"editorPaddingX\", Math.max(0, Math.min(3, Math.floor(padding))));\n\t}\n\n\tgetAutocompleteMaxVisible(): number {\n\t\treturn this.settings.autocompleteMaxVisible ?? 5;\n\t}\n\n\tsetAutocompleteMaxVisible(maxVisible: number): void {\n\t\tthis.setGlobalSetting(\"autocompleteMaxVisible\", Math.max(3, Math.min(20, Math.floor(maxVisible))));\n\t}\n\n\tgetRespectGitignoreInPicker(): boolean {\n\t\treturn this.settings.respectGitignoreInPicker ?? true;\n\t}\n\n\tsetRespectGitignoreInPicker(value: boolean): void {\n\t\tthis.setGlobalSetting(\"respectGitignoreInPicker\", value);\n\t}\n\n\tgetSearchExcludeDirs(): string[] {\n\t\treturn this.settings.searchExcludeDirs ?? [];\n\t}\n\n\tsetSearchExcludeDirs(dirs: string[]): void {\n\t\tthis.setGlobalSetting(\"searchExcludeDirs\", dirs.filter(Boolean));\n\t}\n\n\tgetCodeBlockIndent(): string {\n\t\treturn this.settings.markdown?.codeBlockIndent ?? \" \";\n\t}\n\n\tgetMemorySettings(): {\n\t\tenabled: boolean;\n\t\tmaxRolloutsPerStartup: number;\n\t\tmaxRolloutAgeDays: number;\n\t\tminRolloutIdleHours: number;\n\t\tstage1Concurrency: number;\n\t\tsummaryInjectionTokenLimit: number;\n\t} {\n\t\treturn {\n\t\t\tenabled: this.settings.memory?.enabled ?? false,\n\t\t\tmaxRolloutsPerStartup: this.settings.memory?.maxRolloutsPerStartup ?? 64,\n\t\t\tmaxRolloutAgeDays: this.settings.memory?.maxRolloutAgeDays ?? 30,\n\t\t\tminRolloutIdleHours: this.settings.memory?.minRolloutIdleHours ?? 12,\n\t\t\tstage1Concurrency: this.settings.memory?.stage1Concurrency ?? 8,\n\t\t\tsummaryInjectionTokenLimit: this.settings.memory?.summaryInjectionTokenLimit ?? 5000,\n\t\t};\n\t}\n\n\tgetAsyncEnabled(): boolean {\n\t\treturn this.settings.async?.enabled ?? false;\n\t}\n\n\tgetAsyncMaxJobs(): number {\n\t\treturn this.settings.async?.maxJobs ?? 100;\n\t}\n\n\tgetSandboxSettings(): SandboxSettings {\n\t\treturn {\n\t\t\tenabled: this.settings.sandbox?.enabled,\n\t\t\tautoAllowBashIfSandboxed: this.settings.sandbox?.autoAllowBashIfSandboxed,\n\t\t\twritableRoots: this.settings.sandbox?.writableRoots ? [...this.settings.sandbox.writableRoots] : undefined,\n\t\t\treadOnlySubpaths: this.settings.sandbox?.readOnlySubpaths ? [...this.settings.sandbox.readOnlySubpaths] : undefined,\n\t\t\tnetworkEnabled: this.settings.sandbox?.networkEnabled,\n\t\t\tnetworkMode: this.settings.sandbox?.networkMode,\n\t\t};\n\t}\n\n\tsetSandboxEnabled(enabled: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"sandbox\", \"enabled\", enabled);\n\t}\n\n\tsetSandboxNetworkEnabled(enabled: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"sandbox\", \"networkEnabled\", enabled);\n\t\tthis.setNestedGlobalSetting(\"sandbox\", \"networkMode\", enabled ? \"allow\" : \"deny\");\n\t}\n\n\tsetSandboxNetworkMode(mode: \"allow\" | \"ask\" | \"deny\"): void {\n\t\tthis.setNestedGlobalSetting(\"sandbox\", \"networkMode\", mode);\n\t\tthis.setNestedGlobalSetting(\"sandbox\", \"networkEnabled\", mode === \"allow\");\n\t}\n\n\tgetTaskIsolationMode(): \"none\" | \"worktree\" | \"fuse-overlay\" {\n\t\treturn this.settings.taskIsolation?.mode ?? \"none\";\n\t}\n\n\tgetTaskIsolationMerge(): \"patch\" | \"branch\" {\n\t\treturn this.settings.taskIsolation?.merge ?? \"patch\";\n\t}\n\n\tgetFallbackEnabled(): boolean {\n\t\treturn this.settings.fallback?.enabled ?? false;\n\t}\n\n\tsetFallbackEnabled(enabled: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"fallback\", \"enabled\", enabled);\n\t}\n\n\tgetFallbackChains(): Record<string, FallbackChainEntry[]> {\n\t\treturn this.settings.fallback?.chains ?? {};\n\t}\n\n\tgetFallbackChain(name: string): FallbackChainEntry[] | undefined {\n\t\treturn this.settings.fallback?.chains?.[name];\n\t}\n\n\tsetFallbackChain(name: string, entries: FallbackChainEntry[]): void {\n\t\tif (!this.globalSettings.fallback) {\n\t\t\tthis.globalSettings.fallback = {};\n\t\t}\n\t\tif (!this.globalSettings.fallback.chains) {\n\t\t\tthis.globalSettings.fallback.chains = {};\n\t\t}\n\t\t// Sort by priority\n\t\tthis.globalSettings.fallback.chains[name] = [...entries].sort((a, b) => a.priority - b.priority);\n\t\tthis.markModified(\"fallback\");\n\t\tthis.save();\n\t}\n\n\tremoveFallbackChain(name: string): boolean {\n\t\tif (!this.globalSettings.fallback?.chains?.[name]) {\n\t\t\treturn false;\n\t\t}\n\t\tdelete this.globalSettings.fallback.chains[name];\n\t\tif (Object.keys(this.globalSettings.fallback.chains).length === 0) {\n\t\t\tdelete this.globalSettings.fallback.chains;\n\t\t}\n\t\tthis.markModified(\"fallback\");\n\t\tthis.save();\n\t\treturn true;\n\t}\n\n\tgetFallbackSettings(): { enabled: boolean; chains: Record<string, FallbackChainEntry[]> } {\n\t\treturn {\n\t\t\tenabled: this.getFallbackEnabled(),\n\t\t\tchains: this.getFallbackChains(),\n\t\t};\n\t}\n\n\tgetModelDiscoverySettings(): ModelDiscoverySettings {\n\t\treturn this.settings.modelDiscovery ?? {};\n\t}\n\n\tsetModelDiscoveryEnabled(enabled: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"modelDiscovery\", \"enabled\", enabled);\n\t}\n\n\tgetEditMode(): \"standard\" | \"hashline\" {\n\t\treturn this.settings.editMode ?? \"standard\";\n\t}\n\n\tsetEditMode(mode: \"standard\" | \"hashline\"): void {\n\t\tthis.setGlobalSetting(\"editMode\", mode);\n\t}\n\n\tgetTimestampFormat(): \"date-time-iso\" | \"date-time-us\" {\n\t\treturn this.settings.timestampFormat ?? \"date-time-iso\";\n\t}\n\n\tsetTimestampFormat(format: \"date-time-iso\" | \"date-time-us\"): void {\n\t\tthis.setGlobalSetting(\"timestampFormat\", format);\n\t}\n\n\tgetLspAutoInstall(): boolean {\n\t\treturn this.settings.lspAutoInstall ?? false;\n\t}\n\n\tsetLspAutoInstall(v: boolean): void {\n\t\tthis.setGlobalSetting(\"lspAutoInstall\", v);\n\t}\n\n\tgetLspInstalledServers(): string[] {\n\t\treturn [...(this.settings.lspInstalledServers ?? [])];\n\t}\n\n\tsetLspInstalledServers(v: string[]): void {\n\t\tthis.setGlobalSetting(\"lspInstalledServers\", v);\n\t}\n\n\tgetRtk(): boolean {\n\t\treturn this.settings.rtk ?? false;\n\t}\n\n\tsetRtk(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"rtk\", enabled);\n\t}\n\n\tgetEditorScheme(): \"auto\" | \"vscode\" | \"cursor\" | \"zed\" | \"jetbrains\" | \"sublime\" | \"file\" {\n\t\treturn this.settings.editorScheme ?? \"auto\";\n\t}\n\n\tsetEditorScheme(scheme: \"auto\" | \"vscode\" | \"cursor\" | \"zed\" | \"jetbrains\" | \"sublime\" | \"file\"): void {\n\t\tthis.setGlobalSetting(\"editorScheme\", scheme);\n\t}\n\n\tgetAutoDream(): boolean {\n\t\treturn this.settings.autoDream ?? false;\n\t}\n\n\tsetAutoDream(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"autoDream\", enabled);\n\t}\n\n\tgetAutoMemory(): boolean {\n\t\treturn this.settings.autoMemory ?? false;\n\t}\n\n\tsetAutoMemory(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"autoMemory\", enabled);\n\t}\n\n\tgetTelegramLiveRelayAutoConnect(): boolean {\n\t\treturn this.settings.telegramLiveRelayAutoConnect ?? false;\n\t}\n\n\tsetTelegramLiveRelayAutoConnect(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"telegramLiveRelayAutoConnect\", enabled);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"settings-manager.js","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Transport } from \"@gsd/pi-ai\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"fs\";\nimport { dirname, join } from \"path\";\nimport lockfile from \"proper-lockfile\";\nimport { CONFIG_DIR_NAME, getAgentDir } from \"../config.js\";\nimport {\n\tCOMPACTION_KEEP_RECENT_TOKENS,\n\tCOMPACTION_RESERVE_TOKENS,\n\tRETRY_BASE_DELAY_MS,\n\tRETRY_MAX_DELAY_MS,\n} from \"./constants.js\";\nimport type { BashInterceptorRule } from \"./tools/bash-interceptor.js\";\n\nexport interface CompactionSettings {\n\tenabled?: boolean; // default: true\n\tthresholdPercent?: number; // default: 85\n\treserveTokens?: number; // default: 16384 (used for compaction summary generation budget)\n\tkeepRecentTokens?: number; // default: 20000\n}\n\nexport interface BranchSummarySettings {\n\treserveTokens?: number; // default: 16384 (tokens reserved for prompt + LLM response)\n\tskipPrompt?: boolean; // default: false - when true, skips \"Summarize branch?\" prompt and defaults to no summary\n}\n\nexport interface RetrySettings {\n\tenabled?: boolean; // default: true\n\tmaxRetries?: number; // default: 3\n\tbaseDelayMs?: number; // default: 2000 (exponential backoff: 2s, 4s, 8s)\n\tmaxDelayMs?: number; // default: 300000 (max server-requested delay before failing)\n}\n\nexport interface TerminalSettings {\n\tshowImages?: boolean; // default: true (only relevant if terminal supports images)\n\tclearOnShrink?: boolean; // default: false (clear empty rows when content shrinks)\n}\n\nexport interface ImageSettings {\n\tautoResize?: boolean; // default: true (resize images to 2000x2000 max for better model compatibility)\n\tblockImages?: boolean; // default: false - when true, prevents all images from being sent to LLM providers\n}\n\nexport interface ThinkingBudgetsSettings {\n\tlow?: number;\n\tmedium?: number;\n\thigh?: number;\n}\n\nexport interface BashInterceptorSettings {\n\tenabled?: boolean; // default: true\n\trules?: BashInterceptorRule[]; // override default rules\n}\n\nexport interface SandboxSettings {\n\tenabled?: boolean; // default: true on supported platforms\n\tautoAllowBashIfSandboxed?: boolean; // default: true\n\twritableRoots?: string[]; // additional writable roots beyond cwd and /tmp\n\treadOnlySubpaths?: string[]; // protected subpaths within writable roots\n\tnetworkEnabled?: boolean; // legacy boolean override; prefer networkMode\n\tnetworkMode?: \"allow\" | \"ask\" | \"deny\"; // default: ask\n}\n\nexport interface MarkdownSettings {\n\tcodeBlockIndent?: string; // default: \" \"\n}\n\nexport interface MemorySettings {\n\tenabled?: boolean; // default: false\n\tmaxRolloutsPerStartup?: number; // default: 64\n\tmaxRolloutAgeDays?: number; // default: 30\n\tminRolloutIdleHours?: number; // default: 12\n\tstage1Concurrency?: number; // default: 8\n\tsummaryInjectionTokenLimit?: number; // default: 5000\n}\n\nexport interface AsyncSettings {\n\tenabled?: boolean; // default: false\n\tmaxJobs?: number; // default: 100\n}\n\nexport interface TaskIsolationSettings {\n\tmode?: \"none\" | \"worktree\" | \"fuse-overlay\"; // default: \"none\"\n\tmerge?: \"patch\" | \"branch\"; // default: \"patch\"\n}\n\nexport interface FallbackChainEntry {\n\tprovider: string;\n\tmodel: string;\n\tpriority: number;\n}\n\nexport interface FallbackSettings {\n\tenabled?: boolean; // default: false\n\tchains?: Record<string, FallbackChainEntry[]>; // keyed by chain name\n}\n\nexport interface ModelDiscoverySettings {\n\tenabled?: boolean; // default: false\n\tproviders?: string[]; // limit discovery to specific providers\n\tttlMinutes?: number; // override default TTLs (in minutes)\n\tautoRefreshOnModelSelect?: boolean; // default: false - refresh discovery when opening model selector\n}\n\nexport type TransportSetting = Transport;\n\n/**\n * Package source for npm/git packages.\n * - String form: load all resources from the package\n * - Object form: filter which resources to load\n */\nexport type PackageSource =\n\t| string\n\t| {\n\t\t\tsource: string;\n\t\t\textensions?: string[];\n\t\t\tskills?: string[];\n\t\t\tprompts?: string[];\n\t\t\tthemes?: string[];\n\t };\n\nexport interface Settings {\n\tlastChangelogVersion?: string;\n\tdefaultProvider?: string;\n\tdefaultModel?: string;\n\tbudgetSubagentModel?: string;\n\tplanModeReasoningModel?: string;\n\tplanModeReviewModel?: string;\n\tplanModeCodingModel?: string;\n\tautoSuggestPlanMode?: boolean; // default: false — append a system-prompt instruction so the LLM proposes plan mode for large tasks\n\tautoSwitchPlanModel?: boolean; // default: false — enable opusplan-style model switching (auto-switch to reasoning model on entry, new-session option on approval)\n\tpermissionMode?: \"danger-full-access\" | \"accept-on-edit\" | \"auto\" | \"plan\";\n\tclassifierModel?: string;\n\tadaptiveClassifierModel?: string;\n\tdefaultThinkingLevel?: \"off\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"adaptive\";\n\tanthropicAdaptiveByDefault?: boolean; // default: false — prefer adaptive thinking when using supported Anthropic models\n\tclientAdaptiveByDefault?: boolean; // default: true — prefer adaptive thinking for any reasoning-capable model\n\ttransport?: TransportSetting; // default: \"sse\"\n\tsteeringMode?: \"all\" | \"one-at-a-time\";\n\tfollowUpMode?: \"all\" | \"one-at-a-time\";\n\ttheme?: string;\n\tthemeAccent?: string;\n\tcompaction?: CompactionSettings;\n\tbranchSummary?: BranchSummarySettings;\n\tretry?: RetrySettings;\n\thideThinkingBlock?: boolean;\n\tshellPath?: string; // Custom shell path (e.g., for Cygwin users on Windows)\n\tquietStartup?: boolean;\n\tshellCommandPrefix?: string; // Prefix prepended to every bash command (e.g., \"shopt -s expand_aliases\" for alias support)\n\tcollapseChangelog?: boolean; // Show condensed changelog after update (use /changelog for full)\n\tpackages?: PackageSource[]; // Array of npm/git package sources (string or object with filtering)\n\textensions?: string[]; // Array of local extension file paths or directories\n\tskills?: string[]; // Array of local skill file paths or directories\n\tprompts?: string[]; // Array of local prompt template paths or directories\n\tthemes?: string[]; // Array of local theme file paths or directories\n\tenableSkillCommands?: boolean; // default: true - register skills as /skill:name commands\n\ttoolSearch?: boolean; // legacy boolean toggle from deprecated minimal profile; retained for migration only\n\ttoolProfile?: \"balanced\" | \"standard\" | \"full\"; // default: \"balanced\"\n\tterminal?: TerminalSettings;\n\timages?: ImageSettings;\n\tenabledModels?: string[]; // Model patterns for cycling (same format as --models CLI flag)\n\tcodexRotate?: boolean; // Enable the bundled codex-rotate extension (default: false)\n\tcacheTimer?: boolean; // Show elapsed time since last response in the footer (default: true)\n\tpinLastPrompt?: boolean; // Pin last sent prompt above the editor as a reminder (default: false)\n\tdoubleEscapeAction?: \"fork\" | \"tree\" | \"none\"; // Action for double-escape with empty editor (default: \"tree\")\n\ttreeFilterMode?: \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\"; // Default filter when opening /tree\n\tthinkingBudgets?: ThinkingBudgetsSettings; // Custom token budgets for thinking levels\n\teditorPaddingX?: number; // Horizontal padding for input editor (default: 0)\n\tautocompleteMaxVisible?: number; // Max visible items in autocomplete dropdown (default: 5)\n\trespectGitignoreInPicker?: boolean; // When false, @ file picker shows gitignored files (default: true)\n\tsearchExcludeDirs?: string[]; // Directories to exclude from @ file search (e.g., [\"node_modules\", \".git\", \"dist\"])\n\tshowHardwareCursor?: boolean; // Show terminal cursor while still positioning it for IME\n\tmarkdown?: MarkdownSettings;\n\tmemory?: MemorySettings;\n\tasync?: AsyncSettings;\n\tbashInterceptor?: BashInterceptorSettings;\n\tsandbox?: SandboxSettings;\n\ttaskIsolation?: TaskIsolationSettings;\n\tfallback?: FallbackSettings;\n\tmodelDiscovery?: ModelDiscoverySettings;\n\teditMode?: \"standard\" | \"hashline\"; // Edit tool mode: \"standard\" (text match) or \"hashline\" (LINE#ID anchors). Default: \"standard\"\n\ttimestampFormat?: \"date-time-iso\" | \"date-time-us\"; // Timestamp display format for messages. Default: \"date-time-iso\"\n\ttoolOutputMode?: \"minimal\" | \"normal\"; // Collapsed tool rendering mode. \"minimal\" hides previews until expanded.\n\tlspAutoInstall?: boolean; // default: false — whether to auto-install missing language servers during onboarding\n\tlspInstalledServers?: string[]; // list of server names installed via the onboarding wizard\n\trtk?: boolean; // default: false — enable RTK shell-command compression (requires restart)\n\teditorScheme?: \"auto\" | \"vscode\" | \"cursor\" | \"zed\" | \"jetbrains\" | \"sublime\" | \"file\"; // URI scheme for Cmd+click file links (default: \"auto\")\n\tautoDream?: boolean; // default: false — enable automatic memory consolidation (dream) after sessions\n\tautoMemory?: boolean; // default: false — enable automatic memory extraction from session transcripts\n\ttelegramLiveRelayAutoConnect?: boolean; // default: false — auto-run /lsd telegram connect on startup\n}\n\nfunction isQualifiedProviderModelRef(value: unknown): value is string {\n\tif (typeof value !== \"string\") return false;\n\tconst trimmed = value.trim();\n\tif (!trimmed) return false;\n\tconst parts = trimmed.split(\"/\");\n\treturn parts.length === 2 && parts.every((part) => part.trim().length > 0);\n}\n\n/** Deep merge settings: project/overrides take precedence, nested objects merge recursively */\nfunction deepMergeSettings(base: Settings, overrides: Settings): Settings {\n\tconst result: Settings = { ...base };\n\n\tfor (const key of Object.keys(overrides) as (keyof Settings)[]) {\n\t\tconst overrideValue = overrides[key];\n\t\tconst baseValue = base[key];\n\n\t\tif (overrideValue === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// For nested objects, merge recursively\n\t\tif (\n\t\t\ttypeof overrideValue === \"object\" &&\n\t\t\toverrideValue !== null &&\n\t\t\t!Array.isArray(overrideValue) &&\n\t\t\ttypeof baseValue === \"object\" &&\n\t\t\tbaseValue !== null &&\n\t\t\t!Array.isArray(baseValue)\n\t\t) {\n\t\t\t(result as Record<string, unknown>)[key] = { ...baseValue, ...overrideValue };\n\t\t} else {\n\t\t\t// For primitives and arrays, override value wins\n\t\t\t(result as Record<string, unknown>)[key] = overrideValue;\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport type SettingsScope = \"global\" | \"project\";\n\nexport interface SettingsStorage {\n\twithLock(scope: SettingsScope, fn: (current: string | undefined) => string | undefined): void;\n}\n\nexport interface SettingsError {\n\tscope: SettingsScope;\n\terror: Error;\n}\n\nclass FileSettingsStorage implements SettingsStorage {\n\tprivate globalSettingsPath: string;\n\tprivate projectSettingsPath: string;\n\n\tconstructor(cwd: string = process.cwd(), agentDir: string = getAgentDir()) {\n\t\tthis.globalSettingsPath = join(agentDir, \"settings.json\");\n\t\tthis.projectSettingsPath = join(cwd, CONFIG_DIR_NAME, \"settings.json\");\n\t}\n\n\tprivate acquireLockSyncWithRetry(path: string): () => void {\n\t\tconst maxAttempts = 10;\n\t\tconst delayMs = 20;\n\t\tlet lastError: unknown;\n\n\t\tfor (let attempt = 1; attempt <= maxAttempts; attempt++) {\n\t\t\ttry {\n\t\t\t\treturn lockfile.lockSync(path, { realpath: false });\n\t\t\t} catch (error) {\n\t\t\t\tconst code =\n\t\t\t\t\ttypeof error === \"object\" && error !== null && \"code\" in error\n\t\t\t\t\t\t? String((error as { code?: unknown }).code)\n\t\t\t\t\t\t: undefined;\n\t\t\t\tif (code !== \"ELOCKED\" || attempt === maxAttempts) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tlastError = error;\n\t\t\t\tconst start = Date.now();\n\t\t\t\twhile (Date.now() - start < delayMs) {\n\t\t\t\t\t// Sleep synchronously to avoid changing callers to async.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow (lastError as Error) ?? new Error(\"Failed to acquire settings lock\");\n\t}\n\n\twithLock(scope: SettingsScope, fn: (current: string | undefined) => string | undefined): void {\n\t\tconst path = scope === \"global\" ? this.globalSettingsPath : this.projectSettingsPath;\n\t\tconst dir = dirname(path);\n\n\t\tlet release: (() => void) | undefined;\n\t\ttry {\n\t\t\t// Only create directory and lock if file exists or we need to write\n\t\t\tconst fileExists = existsSync(path);\n\t\t\tif (fileExists) {\n\t\t\t\trelease = this.acquireLockSyncWithRetry(path);\n\t\t\t}\n\t\t\tconst current = fileExists ? readFileSync(path, \"utf-8\") : undefined;\n\t\t\tconst next = fn(current);\n\t\t\tif (next !== undefined) {\n\t\t\t\t// Only create directory when we actually need to write\n\t\t\t\tif (!existsSync(dir)) {\n\t\t\t\t\tmkdirSync(dir, { recursive: true });\n\t\t\t\t}\n\t\t\t\tif (!release) {\n\t\t\t\t\trelease = this.acquireLockSyncWithRetry(path);\n\t\t\t\t}\n\t\t\t\twriteFileSync(path, next, \"utf-8\");\n\t\t\t}\n\t\t} finally {\n\t\t\tif (release) {\n\t\t\t\trelease();\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass InMemorySettingsStorage implements SettingsStorage {\n\tprivate global: string | undefined;\n\tprivate project: string | undefined;\n\n\twithLock(scope: SettingsScope, fn: (current: string | undefined) => string | undefined): void {\n\t\tconst current = scope === \"global\" ? this.global : this.project;\n\t\tconst next = fn(current);\n\t\tif (next !== undefined) {\n\t\t\tif (scope === \"global\") {\n\t\t\t\tthis.global = next;\n\t\t\t} else {\n\t\t\t\tthis.project = next;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class SettingsManager {\n\tprivate storage: SettingsStorage;\n\tprivate globalSettings: Settings;\n\tprivate projectSettings: Settings;\n\tprivate settings: Settings;\n\tprivate modifiedFields = new Set<keyof Settings>(); // Track global fields modified during session\n\tprivate modifiedNestedFields = new Map<keyof Settings, Set<string>>(); // Track global nested field modifications\n\tprivate modifiedProjectFields = new Set<keyof Settings>(); // Track project fields modified during session\n\tprivate modifiedProjectNestedFields = new Map<keyof Settings, Set<string>>(); // Track project nested field modifications\n\tprivate globalSettingsLoadError: Error | null = null; // Track if global settings file had parse errors\n\tprivate projectSettingsLoadError: Error | null = null; // Track if project settings file had parse errors\n\tprivate writeQueue: Promise<void> = Promise.resolve();\n\tprivate errors: SettingsError[];\n\n\tprivate constructor(\n\t\tstorage: SettingsStorage,\n\t\tinitialGlobal: Settings,\n\t\tinitialProject: Settings,\n\t\tglobalLoadError: Error | null = null,\n\t\tprojectLoadError: Error | null = null,\n\t\tinitialErrors: SettingsError[] = [],\n\t) {\n\t\tthis.storage = storage;\n\t\tthis.globalSettings = initialGlobal;\n\t\tthis.projectSettings = initialProject;\n\t\tthis.globalSettingsLoadError = globalLoadError;\n\t\tthis.projectSettingsLoadError = projectLoadError;\n\t\tthis.errors = [...initialErrors];\n\t\tthis.settings = deepMergeSettings(this.globalSettings, this.projectSettings);\n\t}\n\n\t/** Create a SettingsManager that loads from files */\n\tstatic create(cwd: string = process.cwd(), agentDir: string = getAgentDir()): SettingsManager {\n\t\tconst storage = new FileSettingsStorage(cwd, agentDir);\n\t\treturn SettingsManager.fromStorage(storage);\n\t}\n\n\t/** Create a SettingsManager from an arbitrary storage backend */\n\tstatic fromStorage(storage: SettingsStorage): SettingsManager {\n\t\tconst globalLoad = SettingsManager.tryLoadFromStorage(storage, \"global\");\n\t\tconst projectLoad = SettingsManager.tryLoadFromStorage(storage, \"project\");\n\t\tconst initialErrors: SettingsError[] = [];\n\t\tif (globalLoad.error) {\n\t\t\tinitialErrors.push({ scope: \"global\", error: globalLoad.error });\n\t\t}\n\t\tif (projectLoad.error) {\n\t\t\tinitialErrors.push({ scope: \"project\", error: projectLoad.error });\n\t\t}\n\n\t\treturn new SettingsManager(\n\t\t\tstorage,\n\t\t\tglobalLoad.settings,\n\t\t\tprojectLoad.settings,\n\t\t\tglobalLoad.error,\n\t\t\tprojectLoad.error,\n\t\t\tinitialErrors,\n\t\t);\n\t}\n\n\t/** Create an in-memory SettingsManager (no file I/O) */\n\tstatic inMemory(settings: Partial<Settings> = {}): SettingsManager {\n\t\tconst storage = new InMemorySettingsStorage();\n\t\treturn new SettingsManager(storage, settings, {});\n\t}\n\n\tprivate static loadFromStorage(storage: SettingsStorage, scope: SettingsScope): Settings {\n\t\tlet content: string | undefined;\n\t\tstorage.withLock(scope, (current) => {\n\t\t\tcontent = current;\n\t\t\treturn undefined;\n\t\t});\n\n\t\tif (!content) {\n\t\t\treturn {};\n\t\t}\n\t\tconst settings = JSON.parse(content);\n\t\treturn SettingsManager.migrateSettings(settings);\n\t}\n\n\tprivate static tryLoadFromStorage(\n\t\tstorage: SettingsStorage,\n\t\tscope: SettingsScope,\n\t): { settings: Settings; error: Error | null } {\n\t\ttry {\n\t\t\treturn { settings: SettingsManager.loadFromStorage(storage, scope), error: null };\n\t\t} catch (error) {\n\t\t\treturn { settings: {}, error: error as Error };\n\t\t}\n\t}\n\n\t/** Migrate old settings format to new format */\n\tprivate static migrateSettings(settings: Record<string, unknown>): Settings {\n\t\t// Migrate queueMode -> steeringMode\n\t\tif (\"queueMode\" in settings && !(\"steeringMode\" in settings)) {\n\t\t\tsettings.steeringMode = settings.queueMode;\n\t\t\tdelete settings.queueMode;\n\t\t}\n\n\t\t// Migrate legacy websockets boolean -> transport enum\n\t\tif (!(\"transport\" in settings) && typeof settings.websockets === \"boolean\") {\n\t\t\tsettings.transport = settings.websockets ? \"websocket\" : \"sse\";\n\t\t\tdelete settings.websockets;\n\t\t}\n\n\t\t// Migrate old skills object format to new array format\n\t\tif (\n\t\t\t\"skills\" in settings &&\n\t\t\ttypeof settings.skills === \"object\" &&\n\t\t\tsettings.skills !== null &&\n\t\t\t!Array.isArray(settings.skills)\n\t\t) {\n\t\t\tconst skillsSettings = settings.skills as {\n\t\t\t\tenableSkillCommands?: boolean;\n\t\t\t\tcustomDirectories?: unknown;\n\t\t\t};\n\t\t\tif (skillsSettings.enableSkillCommands !== undefined && settings.enableSkillCommands === undefined) {\n\t\t\t\tsettings.enableSkillCommands = skillsSettings.enableSkillCommands;\n\t\t\t}\n\t\t\tif (Array.isArray(skillsSettings.customDirectories) && skillsSettings.customDirectories.length > 0) {\n\t\t\t\tsettings.skills = skillsSettings.customDirectories;\n\t\t\t} else {\n\t\t\t\tdelete settings.skills;\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\t\"planModeReasoningModel\" in settings &&\n\t\t\tsettings.planModeReasoningModel !== undefined &&\n\t\t\t!isQualifiedProviderModelRef(settings.planModeReasoningModel)\n\t\t) {\n\t\t\tdelete settings.planModeReasoningModel;\n\t\t}\n\n\t\tif (\n\t\t\t\"planModeReviewModel\" in settings &&\n\t\t\tsettings.planModeReviewModel !== undefined &&\n\t\t\t!isQualifiedProviderModelRef(settings.planModeReviewModel)\n\t\t) {\n\t\t\tdelete settings.planModeReviewModel;\n\t\t}\n\n\t\tif (\n\t\t\t\"planModeCodingModel\" in settings &&\n\t\t\tsettings.planModeCodingModel !== undefined &&\n\t\t\t!isQualifiedProviderModelRef(settings.planModeCodingModel)\n\t\t) {\n\t\t\tdelete settings.planModeCodingModel;\n\t\t}\n\n\t\treturn settings as Settings;\n\t}\n\n\tgetGlobalSettings(): Settings {\n\t\treturn structuredClone(this.globalSettings);\n\t}\n\n\tgetProjectSettings(): Settings {\n\t\treturn structuredClone(this.projectSettings);\n\t}\n\n\tgetBashInterceptorEnabled(): boolean {\n\t\treturn this.settings.bashInterceptor?.enabled ?? true;\n\t}\n\n\tgetBashInterceptorRules(): BashInterceptorRule[] | undefined {\n\t\treturn this.settings.bashInterceptor?.rules;\n\t}\n\n\treload(): void {\n\t\tconst globalLoad = SettingsManager.tryLoadFromStorage(this.storage, \"global\");\n\t\tif (!globalLoad.error) {\n\t\t\tthis.globalSettings = globalLoad.settings;\n\t\t\tthis.globalSettingsLoadError = null;\n\t\t} else {\n\t\t\tthis.globalSettingsLoadError = globalLoad.error;\n\t\t\tthis.recordError(\"global\", globalLoad.error);\n\t\t}\n\n\t\tthis.modifiedFields.clear();\n\t\tthis.modifiedNestedFields.clear();\n\t\tthis.modifiedProjectFields.clear();\n\t\tthis.modifiedProjectNestedFields.clear();\n\n\t\tconst projectLoad = SettingsManager.tryLoadFromStorage(this.storage, \"project\");\n\t\tif (!projectLoad.error) {\n\t\t\tthis.projectSettings = projectLoad.settings;\n\t\t\tthis.projectSettingsLoadError = null;\n\t\t} else {\n\t\t\tthis.projectSettingsLoadError = projectLoad.error;\n\t\t\tthis.recordError(\"project\", projectLoad.error);\n\t\t}\n\n\t\tthis.settings = deepMergeSettings(this.globalSettings, this.projectSettings);\n\t}\n\n\t/** Apply additional overrides on top of current settings */\n\tapplyOverrides(overrides: Partial<Settings>): void {\n\t\tthis.settings = deepMergeSettings(this.settings, overrides);\n\t}\n\n\t/** Mark a global field as modified during this session */\n\tprivate markModified(field: keyof Settings, nestedKey?: string): void {\n\t\tthis.modifiedFields.add(field);\n\t\tif (nestedKey) {\n\t\t\tif (!this.modifiedNestedFields.has(field)) {\n\t\t\t\tthis.modifiedNestedFields.set(field, new Set());\n\t\t\t}\n\t\t\tthis.modifiedNestedFields.get(field)!.add(nestedKey);\n\t\t}\n\t}\n\n\t/** Mark a project field as modified during this session */\n\tprivate markProjectModified(field: keyof Settings, nestedKey?: string): void {\n\t\tthis.modifiedProjectFields.add(field);\n\t\tif (nestedKey) {\n\t\t\tif (!this.modifiedProjectNestedFields.has(field)) {\n\t\t\t\tthis.modifiedProjectNestedFields.set(field, new Set());\n\t\t\t}\n\t\t\tthis.modifiedProjectNestedFields.get(field)!.add(nestedKey);\n\t\t}\n\t}\n\n\tprivate recordError(scope: SettingsScope, error: unknown): void {\n\t\tconst normalizedError = error instanceof Error ? error : new Error(String(error));\n\t\tthis.errors.push({ scope, error: normalizedError });\n\t}\n\n\t/**\n\t * Check if project-level settings are active (loaded from a file).\n\t * Used to scope model persistence to the project when possible,\n\t * preventing model config bleed between concurrent instances (#650).\n\t */\n\tprivate hasProjectSettings(): boolean {\n\t\t// Project settings are active if we loaded them and they weren't empty/errored\n\t\treturn !this.projectSettingsLoadError && Object.keys(this.projectSettings).length > 0;\n\t}\n\n\tprivate clearModifiedScope(scope: SettingsScope): void {\n\t\tif (scope === \"global\") {\n\t\t\tthis.modifiedFields.clear();\n\t\t\tthis.modifiedNestedFields.clear();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.modifiedProjectFields.clear();\n\t\tthis.modifiedProjectNestedFields.clear();\n\t}\n\n\tprivate enqueueWrite(scope: SettingsScope, task: () => void): void {\n\t\tthis.writeQueue = this.writeQueue\n\t\t\t.then(() => {\n\t\t\t\ttask();\n\t\t\t\tthis.clearModifiedScope(scope);\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tthis.recordError(scope, error);\n\t\t\t});\n\t}\n\n\tprivate cloneModifiedNestedFields(source: Map<keyof Settings, Set<string>>): Map<keyof Settings, Set<string>> {\n\t\tconst snapshot = new Map<keyof Settings, Set<string>>();\n\t\tfor (const [key, value] of source.entries()) {\n\t\t\tsnapshot.set(key, new Set(value));\n\t\t}\n\t\treturn snapshot;\n\t}\n\n\tprivate persistScopedSettings(\n\t\tscope: SettingsScope,\n\t\tsnapshotSettings: Settings,\n\t\tmodifiedFields: Set<keyof Settings>,\n\t\tmodifiedNestedFields: Map<keyof Settings, Set<string>>,\n\t): void {\n\t\tthis.storage.withLock(scope, (current) => {\n\t\t\tconst currentFileSettings = current\n\t\t\t\t? SettingsManager.migrateSettings(JSON.parse(current) as Record<string, unknown>)\n\t\t\t\t: {};\n\t\t\tconst mergedSettings: Settings = { ...currentFileSettings };\n\t\t\tfor (const field of modifiedFields) {\n\t\t\t\tconst value = snapshotSettings[field];\n\t\t\t\tif (modifiedNestedFields.has(field) && typeof value === \"object\" && value !== null) {\n\t\t\t\t\tconst nestedModified = modifiedNestedFields.get(field)!;\n\t\t\t\t\tconst baseNested = (currentFileSettings[field] as Record<string, unknown>) ?? {};\n\t\t\t\t\tconst inMemoryNested = value as Record<string, unknown>;\n\t\t\t\t\tconst mergedNested = { ...baseNested };\n\t\t\t\t\tfor (const nestedKey of nestedModified) {\n\t\t\t\t\t\tmergedNested[nestedKey] = inMemoryNested[nestedKey];\n\t\t\t\t\t}\n\t\t\t\t\t(mergedSettings as Record<string, unknown>)[field] = mergedNested;\n\t\t\t\t} else {\n\t\t\t\t\t(mergedSettings as Record<string, unknown>)[field] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn JSON.stringify(mergedSettings, null, 2);\n\t\t});\n\t}\n\n\tprivate save(): void {\n\t\tthis.settings = deepMergeSettings(this.globalSettings, this.projectSettings);\n\n\t\tif (this.globalSettingsLoadError) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst snapshotGlobalSettings = structuredClone(this.globalSettings);\n\t\tconst modifiedFields = new Set(this.modifiedFields);\n\t\tconst modifiedNestedFields = this.cloneModifiedNestedFields(this.modifiedNestedFields);\n\n\t\tthis.enqueueWrite(\"global\", () => {\n\t\t\tthis.persistScopedSettings(\"global\", snapshotGlobalSettings, modifiedFields, modifiedNestedFields);\n\t\t});\n\t}\n\n\tprivate saveProjectSettings(settings: Settings): void {\n\t\tthis.projectSettings = structuredClone(settings);\n\t\tthis.settings = deepMergeSettings(this.globalSettings, this.projectSettings);\n\n\t\tif (this.projectSettingsLoadError) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst snapshotProjectSettings = structuredClone(this.projectSettings);\n\t\tconst modifiedFields = new Set(this.modifiedProjectFields);\n\t\tconst modifiedNestedFields = this.cloneModifiedNestedFields(this.modifiedProjectNestedFields);\n\t\tthis.enqueueWrite(\"project\", () => {\n\t\t\tthis.persistScopedSettings(\"project\", snapshotProjectSettings, modifiedFields, modifiedNestedFields);\n\t\t});\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tawait this.writeQueue;\n\t}\n\n\tdrainErrors(): SettingsError[] {\n\t\tconst drained = [...this.errors];\n\t\tthis.errors = [];\n\t\treturn drained;\n\t}\n\n\t// ── Generic setter helpers ──────────────────────────────────────────\n\n\t/** Set a top-level global setting field, mark modified, and save. */\n\tprivate setGlobalSetting<K extends keyof Settings>(key: K, value: Settings[K]): void {\n\t\tthis.globalSettings[key] = value;\n\t\tthis.markModified(key);\n\t\tthis.save();\n\t}\n\n\t/** Set a top-level setting, scoped to project when project settings are active. */\n\tprivate setScopedSetting<K extends keyof Settings>(key: K, value: Settings[K]): void {\n\t\tif (this.hasProjectSettings()) {\n\t\t\tthis.projectSettings[key] = value;\n\t\t\tthis.markProjectModified(key);\n\t\t\tthis.saveProjectSettings(this.projectSettings);\n\t\t} else {\n\t\t\tthis.setGlobalSetting(key, value);\n\t\t}\n\t}\n\n\t/** Set a nested field within a global settings object (e.g. compaction.enabled). */\n\tprivate setNestedGlobalSetting<K extends keyof Settings, NK extends string & keyof NonNullable<Settings[K]>>(\n\t\tkey: K,\n\t\tnestedKey: NK,\n\t\tvalue: NonNullable<Settings[K]>[NK],\n\t): void {\n\t\tif (!this.globalSettings[key]) {\n\t\t\t(this.globalSettings as Record<string, unknown>)[key] = {};\n\t\t}\n\t\t(this.globalSettings[key] as Record<string, unknown>)[nestedKey] = value;\n\t\tthis.markModified(key, nestedKey);\n\t\tthis.save();\n\t}\n\n\t/** Set a field on project settings (clone, set, mark modified, save). */\n\tprivate setProjectSetting<K extends keyof Settings>(key: K, value: Settings[K]): void {\n\t\tconst projectSettings = structuredClone(this.projectSettings);\n\t\tprojectSettings[key] = value;\n\t\tthis.markProjectModified(key);\n\t\tthis.saveProjectSettings(projectSettings);\n\t}\n\n\t// ── Public getters and setters ──────────────────────────────────────\n\n\tgetLastChangelogVersion(): string | undefined {\n\t\treturn this.settings.lastChangelogVersion;\n\t}\n\n\tsetLastChangelogVersion(version: string): void {\n\t\tthis.setGlobalSetting(\"lastChangelogVersion\", version);\n\t}\n\n\tgetDefaultProvider(): string | undefined {\n\t\treturn this.settings.defaultProvider;\n\t}\n\n\tgetDefaultModel(): string | undefined {\n\t\treturn this.settings.defaultModel;\n\t}\n\n\tgetBudgetSubagentModel(): string | undefined {\n\t\treturn this.settings.budgetSubagentModel;\n\t}\n\n\tgetPlanModeReasoningModel(): string | undefined {\n\t\treturn isQualifiedProviderModelRef(this.settings.planModeReasoningModel)\n\t\t\t? this.settings.planModeReasoningModel.trim()\n\t\t\t: undefined;\n\t}\n\n\tgetPlanModeReviewModel(): string | undefined {\n\t\treturn isQualifiedProviderModelRef(this.settings.planModeReviewModel)\n\t\t\t? this.settings.planModeReviewModel.trim()\n\t\t\t: undefined;\n\t}\n\n\tgetPlanModeCodingModel(): string | undefined {\n\t\treturn isQualifiedProviderModelRef(this.settings.planModeCodingModel)\n\t\t\t? this.settings.planModeCodingModel.trim()\n\t\t\t: undefined;\n\t}\n\n\tgetPermissionMode(): \"danger-full-access\" | \"accept-on-edit\" | \"auto\" | \"plan\" {\n\t\treturn this.settings.permissionMode ?? \"accept-on-edit\";\n\t}\n\n\tgetClassifierModel(): string | undefined {\n\t\treturn this.settings.classifierModel;\n\t}\n\n\tgetAdaptiveClassifierModel(): string | undefined {\n\t\treturn this.settings.adaptiveClassifierModel;\n\t}\n\n\tsetDefaultProvider(provider: string): void {\n\t\tthis.setScopedSetting(\"defaultProvider\", provider);\n\t}\n\n\tsetDefaultModel(modelId: string): void {\n\t\tthis.setScopedSetting(\"defaultModel\", modelId);\n\t}\n\n\tsetBudgetSubagentModel(modelRef: string | undefined): void {\n\t\tif (modelRef === undefined) {\n\t\t\tdelete this.globalSettings.budgetSubagentModel;\n\t\t\tthis.markModified(\"budgetSubagentModel\");\n\t\t\tthis.save();\n\t\t\treturn;\n\t\t}\n\t\tthis.setGlobalSetting(\"budgetSubagentModel\", modelRef);\n\t}\n\n\tsetPlanModeReasoningModel(modelRef: string | undefined): void {\n\t\tif (modelRef === undefined) {\n\t\t\tdelete this.globalSettings.planModeReasoningModel;\n\t\t\tthis.markModified(\"planModeReasoningModel\");\n\t\t\tthis.save();\n\t\t\treturn;\n\t\t}\n\t\tif (!isQualifiedProviderModelRef(modelRef)) {\n\t\t\tthrow new Error(`planModeReasoningModel must be in provider/id format. Received: ${modelRef}`);\n\t\t}\n\t\tthis.setGlobalSetting(\"planModeReasoningModel\", modelRef.trim());\n\t}\n\n\tsetPlanModeReviewModel(modelRef: string | undefined): void {\n\t\tif (modelRef === undefined) {\n\t\t\tdelete this.globalSettings.planModeReviewModel;\n\t\t\tthis.markModified(\"planModeReviewModel\");\n\t\t\tthis.save();\n\t\t\treturn;\n\t\t}\n\t\tif (!isQualifiedProviderModelRef(modelRef)) {\n\t\t\tthrow new Error(`planModeReviewModel must be in provider/id format. Received: ${modelRef}`);\n\t\t}\n\t\tthis.setGlobalSetting(\"planModeReviewModel\", modelRef.trim());\n\t}\n\n\tsetPlanModeCodingModel(modelRef: string | undefined): void {\n\t\tif (modelRef === undefined) {\n\t\t\tdelete this.globalSettings.planModeCodingModel;\n\t\t\tthis.markModified(\"planModeCodingModel\");\n\t\t\tthis.save();\n\t\t\treturn;\n\t\t}\n\t\tif (!isQualifiedProviderModelRef(modelRef)) {\n\t\t\tthrow new Error(`planModeCodingModel must be in provider/id format. Received: ${modelRef}`);\n\t\t}\n\t\tthis.setGlobalSetting(\"planModeCodingModel\", modelRef.trim());\n\t}\n\n\tgetAutoSuggestPlanMode(): boolean {\n\t\treturn this.settings.autoSuggestPlanMode ?? false;\n\t}\n\n\tsetAutoSuggestPlanMode(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"autoSuggestPlanMode\", enabled);\n\t}\n\n\tgetAutoSwitchPlanModel(): boolean {\n\t\treturn this.settings.autoSwitchPlanModel ?? false;\n\t}\n\n\tsetAutoSwitchPlanModel(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"autoSwitchPlanModel\", enabled);\n\t}\n\n\tsetPermissionMode(mode: \"danger-full-access\" | \"accept-on-edit\" | \"auto\" | \"plan\"): void {\n\t\tthis.setGlobalSetting(\"permissionMode\", mode);\n\t}\n\n\tsetClassifierModel(modelRef: string | undefined): void {\n\t\tif (modelRef === undefined) {\n\t\t\tdelete this.globalSettings.classifierModel;\n\t\t\tthis.markModified(\"classifierModel\");\n\t\t\tthis.save();\n\t\t\treturn;\n\t\t}\n\t\tthis.setGlobalSetting(\"classifierModel\", modelRef);\n\t}\n\n\tsetAdaptiveClassifierModel(modelRef: string | undefined): void {\n\t\tif (modelRef === undefined) {\n\t\t\tdelete this.globalSettings.adaptiveClassifierModel;\n\t\t\tthis.markModified(\"adaptiveClassifierModel\");\n\t\t\tthis.save();\n\t\t\treturn;\n\t\t}\n\t\tthis.setGlobalSetting(\"adaptiveClassifierModel\", modelRef);\n\t}\n\n\tsetDefaultModelAndProvider(provider: string, modelId: string): void {\n\t\tif (this.hasProjectSettings()) {\n\t\t\tthis.projectSettings.defaultProvider = provider;\n\t\t\tthis.projectSettings.defaultModel = modelId;\n\t\t\tthis.markProjectModified(\"defaultProvider\");\n\t\t\tthis.markProjectModified(\"defaultModel\");\n\t\t\tthis.saveProjectSettings(this.projectSettings);\n\t\t} else {\n\t\t\tthis.globalSettings.defaultProvider = provider;\n\t\t\tthis.globalSettings.defaultModel = modelId;\n\t\t\tthis.markModified(\"defaultProvider\");\n\t\t\tthis.markModified(\"defaultModel\");\n\t\t\tthis.save();\n\t\t}\n\t}\n\n\tgetSteeringMode(): \"all\" | \"one-at-a-time\" {\n\t\treturn this.settings.steeringMode || \"one-at-a-time\";\n\t}\n\n\tsetSteeringMode(mode: \"all\" | \"one-at-a-time\"): void {\n\t\tthis.setGlobalSetting(\"steeringMode\", mode);\n\t}\n\n\tgetFollowUpMode(): \"all\" | \"one-at-a-time\" {\n\t\treturn this.settings.followUpMode || \"one-at-a-time\";\n\t}\n\n\tsetFollowUpMode(mode: \"all\" | \"one-at-a-time\"): void {\n\t\tthis.setGlobalSetting(\"followUpMode\", mode);\n\t}\n\n\tgetTheme(): string | undefined {\n\t\treturn this.settings.theme;\n\t}\n\n\tsetTheme(theme: string): void {\n\t\tthis.setGlobalSetting(\"theme\", theme);\n\t}\n\n\tgetThemeAccent(): string | undefined {\n\t\treturn this.settings.themeAccent;\n\t}\n\n\tsetThemeAccent(accent: string | undefined): void {\n\t\tif (accent === undefined) {\n\t\t\tdelete this.globalSettings.themeAccent;\n\t\t\tthis.markModified(\"themeAccent\");\n\t\t\tthis.save();\n\t\t\treturn;\n\t\t}\n\t\tthis.setGlobalSetting(\"themeAccent\", accent);\n\t}\n\n\tgetDefaultThinkingLevel(): \"off\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"adaptive\" | undefined {\n\t\treturn this.settings.defaultThinkingLevel;\n\t}\n\n\tsetDefaultThinkingLevel(level: \"off\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"adaptive\"): void {\n\t\tthis.setGlobalSetting(\"defaultThinkingLevel\", level);\n\t}\n\n\tgetAnthropicAdaptiveByDefault(): boolean {\n\t\treturn this.settings.anthropicAdaptiveByDefault ?? false;\n\t}\n\n\tsetAnthropicAdaptiveByDefault(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"anthropicAdaptiveByDefault\", enabled);\n\t}\n\n\tgetClientAdaptiveByDefault(): boolean {\n\t\treturn this.settings.clientAdaptiveByDefault ?? true;\n\t}\n\n\tsetClientAdaptiveByDefault(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"clientAdaptiveByDefault\", enabled);\n\t}\n\n\tgetTransport(): TransportSetting {\n\t\treturn this.settings.transport ?? \"sse\";\n\t}\n\n\tsetTransport(transport: TransportSetting): void {\n\t\tthis.setGlobalSetting(\"transport\", transport);\n\t}\n\n\tgetCompactionEnabled(): boolean {\n\t\treturn this.settings.compaction?.enabled ?? true;\n\t}\n\n\tsetCompactionEnabled(enabled: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"compaction\", \"enabled\", enabled);\n\t}\n\n\tsetCompactionThresholdPercent(percent: number): void {\n\t\tthis.setNestedGlobalSetting(\"compaction\", \"thresholdPercent\", percent);\n\t}\n\n\tgetCompactionThresholdPercent(): number {\n\t\treturn this.settings.compaction?.thresholdPercent ?? 85;\n\t}\n\n\tgetCompactionReserveTokens(): number {\n\t\treturn this.settings.compaction?.reserveTokens ?? COMPACTION_RESERVE_TOKENS;\n\t}\n\n\tgetCompactionKeepRecentTokens(): number {\n\t\treturn this.settings.compaction?.keepRecentTokens ?? COMPACTION_KEEP_RECENT_TOKENS;\n\t}\n\n\tgetCompactionSettings(): { enabled: boolean; reserveTokens: number; keepRecentTokens: number; thresholdPercent: number } {\n\t\treturn {\n\t\t\tenabled: this.getCompactionEnabled(),\n\t\t\treserveTokens: this.getCompactionReserveTokens(),\n\t\t\tkeepRecentTokens: this.getCompactionKeepRecentTokens(),\n\t\t\tthresholdPercent: this.getCompactionThresholdPercent(),\n\t\t};\n\t}\n\n\tgetBranchSummarySettings(): { reserveTokens: number; skipPrompt: boolean } {\n\t\treturn {\n\t\t\treserveTokens: this.settings.branchSummary?.reserveTokens ?? COMPACTION_RESERVE_TOKENS,\n\t\t\tskipPrompt: this.settings.branchSummary?.skipPrompt ?? false,\n\t\t};\n\t}\n\n\tgetBranchSummarySkipPrompt(): boolean {\n\t\treturn this.settings.branchSummary?.skipPrompt ?? false;\n\t}\n\n\tgetRetryEnabled(): boolean {\n\t\treturn this.settings.retry?.enabled ?? true;\n\t}\n\n\tsetRetryEnabled(enabled: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"retry\", \"enabled\", enabled);\n\t}\n\n\tgetRetrySettings(): { enabled: boolean; maxRetries: number; baseDelayMs: number; maxDelayMs: number } {\n\t\treturn {\n\t\t\tenabled: this.getRetryEnabled(),\n\t\t\tmaxRetries: this.settings.retry?.maxRetries ?? 3,\n\t\t\tbaseDelayMs: this.settings.retry?.baseDelayMs ?? RETRY_BASE_DELAY_MS,\n\t\t\tmaxDelayMs: this.settings.retry?.maxDelayMs ?? RETRY_MAX_DELAY_MS,\n\t\t};\n\t}\n\n\tgetHideThinkingBlock(): boolean {\n\t\treturn this.settings.hideThinkingBlock ?? true;\n\t}\n\n\tsetHideThinkingBlock(hide: boolean): void {\n\t\tthis.setGlobalSetting(\"hideThinkingBlock\", hide);\n\t}\n\n\tgetShellPath(): string | undefined {\n\t\treturn this.settings.shellPath;\n\t}\n\n\tsetShellPath(path: string | undefined): void {\n\t\tthis.setGlobalSetting(\"shellPath\", path);\n\t}\n\n\tgetQuietStartup(): boolean {\n\t\treturn this.settings.quietStartup ?? false;\n\t}\n\n\tsetQuietStartup(quiet: boolean): void {\n\t\tthis.setGlobalSetting(\"quietStartup\", quiet);\n\t}\n\n\tgetShellCommandPrefix(): string | undefined {\n\t\treturn this.settings.shellCommandPrefix;\n\t}\n\n\tsetShellCommandPrefix(prefix: string | undefined): void {\n\t\tthis.setGlobalSetting(\"shellCommandPrefix\", prefix);\n\t}\n\n\tgetCollapseChangelog(): boolean {\n\t\treturn this.settings.collapseChangelog ?? false;\n\t}\n\n\tsetCollapseChangelog(collapse: boolean): void {\n\t\tthis.setGlobalSetting(\"collapseChangelog\", collapse);\n\t}\n\n\tgetToolOutputMode(): \"minimal\" | \"normal\" {\n\t\treturn this.settings.toolOutputMode === \"minimal\" ? \"minimal\" : \"normal\";\n\t}\n\n\tsetToolOutputMode(mode: \"minimal\" | \"normal\"): void {\n\t\tthis.setGlobalSetting(\"toolOutputMode\", mode);\n\t}\n\n\tgetPackages(): PackageSource[] {\n\t\treturn [...(this.settings.packages ?? [])];\n\t}\n\n\tsetPackages(packages: PackageSource[]): void {\n\t\tthis.setGlobalSetting(\"packages\", packages);\n\t}\n\n\tsetProjectPackages(packages: PackageSource[]): void {\n\t\tthis.setProjectSetting(\"packages\", packages);\n\t}\n\n\tgetExtensionPaths(): string[] {\n\t\treturn [...(this.settings.extensions ?? [])];\n\t}\n\n\tsetExtensionPaths(paths: string[]): void {\n\t\tthis.setGlobalSetting(\"extensions\", paths);\n\t}\n\n\tsetProjectExtensionPaths(paths: string[]): void {\n\t\tthis.setProjectSetting(\"extensions\", paths);\n\t}\n\n\tgetSkillPaths(): string[] {\n\t\treturn [...(this.settings.skills ?? [])];\n\t}\n\n\tsetSkillPaths(paths: string[]): void {\n\t\tthis.setGlobalSetting(\"skills\", paths);\n\t}\n\n\tsetProjectSkillPaths(paths: string[]): void {\n\t\tthis.setProjectSetting(\"skills\", paths);\n\t}\n\n\tgetPromptTemplatePaths(): string[] {\n\t\treturn [...(this.settings.prompts ?? [])];\n\t}\n\n\tsetPromptTemplatePaths(paths: string[]): void {\n\t\tthis.setGlobalSetting(\"prompts\", paths);\n\t}\n\n\tsetProjectPromptTemplatePaths(paths: string[]): void {\n\t\tthis.setProjectSetting(\"prompts\", paths);\n\t}\n\n\tgetThemePaths(): string[] {\n\t\treturn [...(this.settings.themes ?? [])];\n\t}\n\n\tsetThemePaths(paths: string[]): void {\n\t\tthis.setGlobalSetting(\"themes\", paths);\n\t}\n\n\tsetProjectThemePaths(paths: string[]): void {\n\t\tthis.setProjectSetting(\"themes\", paths);\n\t}\n\n\tgetEnableSkillCommands(): boolean {\n\t\treturn this.settings.enableSkillCommands ?? true;\n\t}\n\n\tsetEnableSkillCommands(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"enableSkillCommands\", enabled);\n\t}\n\n\tgetToolProfile(): \"balanced\" | \"standard\" | \"full\" {\n\t\tconst profile = this.settings.toolProfile;\n\t\tif (profile === \"balanced\" || profile === \"standard\" || profile === \"full\") return profile;\n\t\t// Migrate legacy minimal/toolSearch settings to balanced.\n\t\tif (this.settings.toolSearch !== undefined) return \"balanced\";\n\t\treturn \"standard\";\n\t}\n\n\tsetToolProfile(profile: \"balanced\" | \"standard\" | \"full\"): void {\n\t\tthis.setGlobalSetting(\"toolProfile\", profile);\n\t\t// Keep legacy field in sync with deprecated minimal mode removal.\n\t\tthis.setGlobalSetting(\"toolSearch\", false);\n\t}\n\n\tgetThinkingBudgets(): ThinkingBudgetsSettings | undefined {\n\t\treturn this.settings.thinkingBudgets;\n\t}\n\n\tgetShowImages(): boolean {\n\t\treturn this.settings.terminal?.showImages ?? true;\n\t}\n\n\tsetShowImages(show: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"terminal\", \"showImages\", show);\n\t}\n\n\tgetClearOnShrink(): boolean {\n\t\t// Settings takes precedence, then env var, then default false\n\t\tif (this.settings.terminal?.clearOnShrink !== undefined) {\n\t\t\treturn this.settings.terminal.clearOnShrink;\n\t\t}\n\t\treturn process.env.PI_CLEAR_ON_SHRINK === \"1\";\n\t}\n\n\tsetClearOnShrink(enabled: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"terminal\", \"clearOnShrink\", enabled);\n\t}\n\n\tgetImageAutoResize(): boolean {\n\t\treturn this.settings.images?.autoResize ?? true;\n\t}\n\n\tsetImageAutoResize(enabled: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"images\", \"autoResize\", enabled);\n\t}\n\n\tgetBlockImages(): boolean {\n\t\treturn this.settings.images?.blockImages ?? false;\n\t}\n\n\tsetBlockImages(blocked: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"images\", \"blockImages\", blocked);\n\t}\n\n\tgetEnabledModels(): string[] | undefined {\n\t\treturn this.settings.enabledModels;\n\t}\n\n\tsetEnabledModels(patterns: string[] | undefined): void {\n\t\tthis.setGlobalSetting(\"enabledModels\", patterns);\n\t}\n\n\tgetCodexRotate(): boolean {\n\t\treturn this.settings.codexRotate ?? false;\n\t}\n\n\tsetCodexRotate(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"codexRotate\", enabled);\n\t}\n\n\tgetCacheTimer(): boolean {\n\t\treturn this.settings.cacheTimer ?? true;\n\t}\n\n\tsetCacheTimer(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"cacheTimer\", enabled);\n\t}\n\n\tgetPinLastPrompt(): boolean {\n\t\treturn this.settings.pinLastPrompt ?? false;\n\t}\n\n\tsetPinLastPrompt(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"pinLastPrompt\", enabled);\n\t}\n\n\tgetDoubleEscapeAction(): \"fork\" | \"tree\" | \"none\" {\n\t\treturn this.settings.doubleEscapeAction ?? \"tree\";\n\t}\n\n\tsetDoubleEscapeAction(action: \"fork\" | \"tree\" | \"none\"): void {\n\t\tthis.setGlobalSetting(\"doubleEscapeAction\", action);\n\t}\n\n\tgetTreeFilterMode(): \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\" {\n\t\tconst mode = this.settings.treeFilterMode;\n\t\tconst valid = [\"default\", \"no-tools\", \"user-only\", \"labeled-only\", \"all\"];\n\t\treturn mode && valid.includes(mode) ? mode : \"default\";\n\t}\n\n\tsetTreeFilterMode(mode: \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\"): void {\n\t\tthis.setGlobalSetting(\"treeFilterMode\", mode);\n\t}\n\n\tgetShowHardwareCursor(): boolean {\n\t\treturn this.settings.showHardwareCursor ?? process.env.PI_HARDWARE_CURSOR === \"1\";\n\t}\n\n\tsetShowHardwareCursor(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"showHardwareCursor\", enabled);\n\t}\n\n\tgetEditorPaddingX(): number {\n\t\treturn this.settings.editorPaddingX ?? 0;\n\t}\n\n\tsetEditorPaddingX(padding: number): void {\n\t\tthis.setGlobalSetting(\"editorPaddingX\", Math.max(0, Math.min(3, Math.floor(padding))));\n\t}\n\n\tgetAutocompleteMaxVisible(): number {\n\t\treturn this.settings.autocompleteMaxVisible ?? 5;\n\t}\n\n\tsetAutocompleteMaxVisible(maxVisible: number): void {\n\t\tthis.setGlobalSetting(\"autocompleteMaxVisible\", Math.max(3, Math.min(20, Math.floor(maxVisible))));\n\t}\n\n\tgetRespectGitignoreInPicker(): boolean {\n\t\treturn this.settings.respectGitignoreInPicker ?? true;\n\t}\n\n\tsetRespectGitignoreInPicker(value: boolean): void {\n\t\tthis.setGlobalSetting(\"respectGitignoreInPicker\", value);\n\t}\n\n\tgetSearchExcludeDirs(): string[] {\n\t\treturn this.settings.searchExcludeDirs ?? [];\n\t}\n\n\tsetSearchExcludeDirs(dirs: string[]): void {\n\t\tthis.setGlobalSetting(\"searchExcludeDirs\", dirs.filter(Boolean));\n\t}\n\n\tgetCodeBlockIndent(): string {\n\t\treturn this.settings.markdown?.codeBlockIndent ?? \" \";\n\t}\n\n\tgetMemorySettings(): {\n\t\tenabled: boolean;\n\t\tmaxRolloutsPerStartup: number;\n\t\tmaxRolloutAgeDays: number;\n\t\tminRolloutIdleHours: number;\n\t\tstage1Concurrency: number;\n\t\tsummaryInjectionTokenLimit: number;\n\t} {\n\t\treturn {\n\t\t\tenabled: this.settings.memory?.enabled ?? false,\n\t\t\tmaxRolloutsPerStartup: this.settings.memory?.maxRolloutsPerStartup ?? 64,\n\t\t\tmaxRolloutAgeDays: this.settings.memory?.maxRolloutAgeDays ?? 30,\n\t\t\tminRolloutIdleHours: this.settings.memory?.minRolloutIdleHours ?? 12,\n\t\t\tstage1Concurrency: this.settings.memory?.stage1Concurrency ?? 8,\n\t\t\tsummaryInjectionTokenLimit: this.settings.memory?.summaryInjectionTokenLimit ?? 5000,\n\t\t};\n\t}\n\n\tgetAsyncEnabled(): boolean {\n\t\treturn this.settings.async?.enabled ?? false;\n\t}\n\n\tgetAsyncMaxJobs(): number {\n\t\treturn this.settings.async?.maxJobs ?? 100;\n\t}\n\n\tgetSandboxSettings(): SandboxSettings {\n\t\treturn {\n\t\t\tenabled: this.settings.sandbox?.enabled,\n\t\t\tautoAllowBashIfSandboxed: this.settings.sandbox?.autoAllowBashIfSandboxed,\n\t\t\twritableRoots: this.settings.sandbox?.writableRoots ? [...this.settings.sandbox.writableRoots] : undefined,\n\t\t\treadOnlySubpaths: this.settings.sandbox?.readOnlySubpaths ? [...this.settings.sandbox.readOnlySubpaths] : undefined,\n\t\t\tnetworkEnabled: this.settings.sandbox?.networkEnabled,\n\t\t\tnetworkMode: this.settings.sandbox?.networkMode,\n\t\t};\n\t}\n\n\tsetSandboxEnabled(enabled: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"sandbox\", \"enabled\", enabled);\n\t}\n\n\tsetSandboxNetworkEnabled(enabled: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"sandbox\", \"networkEnabled\", enabled);\n\t\tthis.setNestedGlobalSetting(\"sandbox\", \"networkMode\", enabled ? \"allow\" : \"deny\");\n\t}\n\n\tsetSandboxNetworkMode(mode: \"allow\" | \"ask\" | \"deny\"): void {\n\t\tthis.setNestedGlobalSetting(\"sandbox\", \"networkMode\", mode);\n\t\tthis.setNestedGlobalSetting(\"sandbox\", \"networkEnabled\", mode === \"allow\");\n\t}\n\n\tgetTaskIsolationMode(): \"none\" | \"worktree\" | \"fuse-overlay\" {\n\t\treturn this.settings.taskIsolation?.mode ?? \"none\";\n\t}\n\n\tgetTaskIsolationMerge(): \"patch\" | \"branch\" {\n\t\treturn this.settings.taskIsolation?.merge ?? \"patch\";\n\t}\n\n\tgetFallbackEnabled(): boolean {\n\t\treturn this.settings.fallback?.enabled ?? false;\n\t}\n\n\tsetFallbackEnabled(enabled: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"fallback\", \"enabled\", enabled);\n\t}\n\n\tgetFallbackChains(): Record<string, FallbackChainEntry[]> {\n\t\treturn this.settings.fallback?.chains ?? {};\n\t}\n\n\tgetFallbackChain(name: string): FallbackChainEntry[] | undefined {\n\t\treturn this.settings.fallback?.chains?.[name];\n\t}\n\n\tsetFallbackChain(name: string, entries: FallbackChainEntry[]): void {\n\t\tif (!this.globalSettings.fallback) {\n\t\t\tthis.globalSettings.fallback = {};\n\t\t}\n\t\tif (!this.globalSettings.fallback.chains) {\n\t\t\tthis.globalSettings.fallback.chains = {};\n\t\t}\n\t\t// Sort by priority\n\t\tthis.globalSettings.fallback.chains[name] = [...entries].sort((a, b) => a.priority - b.priority);\n\t\tthis.markModified(\"fallback\");\n\t\tthis.save();\n\t}\n\n\tremoveFallbackChain(name: string): boolean {\n\t\tif (!this.globalSettings.fallback?.chains?.[name]) {\n\t\t\treturn false;\n\t\t}\n\t\tdelete this.globalSettings.fallback.chains[name];\n\t\tif (Object.keys(this.globalSettings.fallback.chains).length === 0) {\n\t\t\tdelete this.globalSettings.fallback.chains;\n\t\t}\n\t\tthis.markModified(\"fallback\");\n\t\tthis.save();\n\t\treturn true;\n\t}\n\n\tgetFallbackSettings(): { enabled: boolean; chains: Record<string, FallbackChainEntry[]> } {\n\t\treturn {\n\t\t\tenabled: this.getFallbackEnabled(),\n\t\t\tchains: this.getFallbackChains(),\n\t\t};\n\t}\n\n\tgetModelDiscoverySettings(): ModelDiscoverySettings {\n\t\treturn this.settings.modelDiscovery ?? {};\n\t}\n\n\tsetModelDiscoveryEnabled(enabled: boolean): void {\n\t\tthis.setNestedGlobalSetting(\"modelDiscovery\", \"enabled\", enabled);\n\t}\n\n\tgetEditMode(): \"standard\" | \"hashline\" {\n\t\treturn this.settings.editMode ?? \"standard\";\n\t}\n\n\tsetEditMode(mode: \"standard\" | \"hashline\"): void {\n\t\tthis.setGlobalSetting(\"editMode\", mode);\n\t}\n\n\tgetTimestampFormat(): \"date-time-iso\" | \"date-time-us\" {\n\t\treturn this.settings.timestampFormat ?? \"date-time-iso\";\n\t}\n\n\tsetTimestampFormat(format: \"date-time-iso\" | \"date-time-us\"): void {\n\t\tthis.setGlobalSetting(\"timestampFormat\", format);\n\t}\n\n\tgetLspAutoInstall(): boolean {\n\t\treturn this.settings.lspAutoInstall ?? false;\n\t}\n\n\tsetLspAutoInstall(v: boolean): void {\n\t\tthis.setGlobalSetting(\"lspAutoInstall\", v);\n\t}\n\n\tgetLspInstalledServers(): string[] {\n\t\treturn [...(this.settings.lspInstalledServers ?? [])];\n\t}\n\n\tsetLspInstalledServers(v: string[]): void {\n\t\tthis.setGlobalSetting(\"lspInstalledServers\", v);\n\t}\n\n\tgetRtk(): boolean {\n\t\treturn this.settings.rtk ?? false;\n\t}\n\n\tsetRtk(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"rtk\", enabled);\n\t}\n\n\tgetEditorScheme(): \"auto\" | \"vscode\" | \"cursor\" | \"zed\" | \"jetbrains\" | \"sublime\" | \"file\" {\n\t\treturn this.settings.editorScheme ?? \"auto\";\n\t}\n\n\tsetEditorScheme(scheme: \"auto\" | \"vscode\" | \"cursor\" | \"zed\" | \"jetbrains\" | \"sublime\" | \"file\"): void {\n\t\tthis.setGlobalSetting(\"editorScheme\", scheme);\n\t}\n\n\tgetAutoDream(): boolean {\n\t\treturn this.settings.autoDream ?? false;\n\t}\n\n\tsetAutoDream(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"autoDream\", enabled);\n\t}\n\n\tgetAutoMemory(): boolean {\n\t\treturn this.settings.autoMemory ?? false;\n\t}\n\n\tsetAutoMemory(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"autoMemory\", enabled);\n\t}\n\n\tgetTelegramLiveRelayAutoConnect(): boolean {\n\t\treturn this.settings.telegramLiveRelayAutoConnect ?? false;\n\t}\n\n\tsetTelegramLiveRelayAutoConnect(enabled: boolean): void {\n\t\tthis.setGlobalSetting(\"telegramLiveRelayAutoConnect\", enabled);\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG3D;;GAEG;AACH,eAAO,MAAM,oBAAoB,QAA6C,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,4BAA4B,QAAkB,CAAC;AAkE5D,MAAM,WAAW,gBAAgB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,KAAK;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB,EAAE,OAAO,CAAC;IAChC,aAAa,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,WAAW,EAAE,kBAAkB,EAAE,CAAC;CAClC;AAID,wBAAgB,eAAe,IAAI,KAAK,EAAE,CAEzC;AA+CD,MAAM,WAAW,wBAAwB;IACxC,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,gBAAgB,CAGrF;AAsID;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG3D;;GAEG;AACH,eAAO,MAAM,oBAAoB,QAA6C,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,4BAA4B,QAAkB,CAAC;AAkE5D,MAAM,WAAW,gBAAgB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,KAAK;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB,EAAE,OAAO,CAAC;IAChC,aAAa,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,WAAW,EAAE,kBAAkB,EAAE,CAAC;CAClC;AAID,wBAAgB,eAAe,IAAI,KAAK,EAAE,CAEzC;AA+CD,MAAM,WAAW,wBAAwB;IACxC,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,gBAAgB,CAGrF;AAsID;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CA+B7D;AAWD,MAAM,WAAW,iBAAiB;IACjC,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qGAAqG;IACrG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,wDAAwD;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC1B;AAeD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CAqH5E"}
|
|
@@ -247,9 +247,12 @@ export function formatSkillsForPrompt(skills) {
|
|
|
247
247
|
"<available_skills>",
|
|
248
248
|
];
|
|
249
249
|
for (const skill of visibleSkills) {
|
|
250
|
+
const cappedDescription = skill.description.length > 200
|
|
251
|
+
? skill.description.slice(0, 197) + "..."
|
|
252
|
+
: skill.description;
|
|
250
253
|
lines.push(" <skill>");
|
|
251
254
|
lines.push(` <name>${escapeXml(skill.name)}</name>`);
|
|
252
|
-
lines.push(` <description>${escapeXml(
|
|
255
|
+
lines.push(` <description>${escapeXml(cappedDescription)}</description>`);
|
|
253
256
|
lines.push(` <location>${escapeXml(skill.filePath)}</location>`);
|
|
254
257
|
lines.push(" </skill>");
|
|
255
258
|
}
|