@nghyane/arcane 0.1.0
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/CHANGELOG.md +3 -0
- package/README.md +12 -0
- package/examples/README.md +21 -0
- package/examples/custom-tools/README.md +109 -0
- package/examples/custom-tools/hello/index.ts +20 -0
- package/examples/custom-tools/todo/index.ts +206 -0
- package/examples/extensions/README.md +143 -0
- package/examples/extensions/api-demo.ts +89 -0
- package/examples/extensions/chalk-logger.ts +25 -0
- package/examples/extensions/hello.ts +32 -0
- package/examples/extensions/pirate.ts +43 -0
- package/examples/extensions/plan-mode.ts +550 -0
- package/examples/extensions/reload-runtime.ts +37 -0
- package/examples/extensions/todo.ts +296 -0
- package/examples/extensions/tools.ts +144 -0
- package/examples/extensions/with-deps/index.ts +35 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +16 -0
- package/examples/hooks/README.md +56 -0
- package/examples/hooks/auto-commit-on-exit.ts +48 -0
- package/examples/hooks/confirm-destructive.ts +58 -0
- package/examples/hooks/custom-compaction.ts +116 -0
- package/examples/hooks/dirty-repo-guard.ts +51 -0
- package/examples/hooks/file-trigger.ts +40 -0
- package/examples/hooks/git-checkpoint.ts +52 -0
- package/examples/hooks/handoff.ts +150 -0
- package/examples/hooks/permission-gate.ts +33 -0
- package/examples/hooks/protected-paths.ts +29 -0
- package/examples/hooks/qna.ts +119 -0
- package/examples/hooks/status-line.ts +39 -0
- package/examples/sdk/01-minimal.ts +21 -0
- package/examples/sdk/02-custom-model.ts +49 -0
- package/examples/sdk/03-custom-prompt.ts +43 -0
- package/examples/sdk/04-skills.ts +43 -0
- package/examples/sdk/06-extensions.ts +80 -0
- package/examples/sdk/06-hooks.ts +61 -0
- package/examples/sdk/07-context-files.ts +35 -0
- package/examples/sdk/08-prompt-templates.ts +36 -0
- package/examples/sdk/08-slash-commands.ts +41 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +54 -0
- package/examples/sdk/11-sessions.ts +47 -0
- package/examples/sdk/README.md +150 -0
- package/package.json +464 -0
- package/scripts/format-prompts.ts +184 -0
- package/scripts/generate-docs-index.ts +40 -0
- package/scripts/generate-template.ts +32 -0
- package/src/bun-imports.d.ts +22 -0
- package/src/capability/context-file.ts +39 -0
- package/src/capability/extension-module.ts +33 -0
- package/src/capability/extension.ts +47 -0
- package/src/capability/fs.ts +89 -0
- package/src/capability/hook.ts +39 -0
- package/src/capability/index.ts +432 -0
- package/src/capability/instruction.ts +36 -0
- package/src/capability/mcp.ts +60 -0
- package/src/capability/prompt.ts +34 -0
- package/src/capability/rule.ts +223 -0
- package/src/capability/settings.ts +34 -0
- package/src/capability/skill.ts +48 -0
- package/src/capability/slash-command.ts +39 -0
- package/src/capability/ssh.ts +41 -0
- package/src/capability/system-prompt.ts +34 -0
- package/src/capability/tool.ts +37 -0
- package/src/capability/types.ts +156 -0
- package/src/cli/args.ts +259 -0
- package/src/cli/config-cli.ts +357 -0
- package/src/cli/file-processor.ts +124 -0
- package/src/cli/grep-cli.ts +152 -0
- package/src/cli/jupyter-cli.ts +106 -0
- package/src/cli/list-models.ts +103 -0
- package/src/cli/plugin-cli.ts +661 -0
- package/src/cli/session-picker.ts +42 -0
- package/src/cli/setup-cli.ts +376 -0
- package/src/cli/shell-cli.ts +174 -0
- package/src/cli/ssh-cli.ts +179 -0
- package/src/cli/stats-cli.ts +197 -0
- package/src/cli/update-cli.ts +286 -0
- package/src/cli/web-search-cli.ts +143 -0
- package/src/cli.ts +65 -0
- package/src/commands/commit.ts +36 -0
- package/src/commands/config.ts +51 -0
- package/src/commands/grep.ts +41 -0
- package/src/commands/jupyter.ts +32 -0
- package/src/commands/launch.ts +139 -0
- package/src/commands/plugin.ts +70 -0
- package/src/commands/setup.ts +42 -0
- package/src/commands/shell.ts +29 -0
- package/src/commands/ssh.ts +60 -0
- package/src/commands/stats.ts +29 -0
- package/src/commands/update.ts +21 -0
- package/src/commands/web-search.ts +42 -0
- package/src/commit/agentic/agent.ts +311 -0
- package/src/commit/agentic/fallback.ts +96 -0
- package/src/commit/agentic/index.ts +359 -0
- package/src/commit/agentic/prompts/analyze-file.md +22 -0
- package/src/commit/agentic/prompts/session-user.md +25 -0
- package/src/commit/agentic/prompts/split-confirm.md +1 -0
- package/src/commit/agentic/prompts/system.md +38 -0
- package/src/commit/agentic/state.ts +69 -0
- package/src/commit/agentic/tools/analyze-file.ts +118 -0
- package/src/commit/agentic/tools/git-file-diff.ts +194 -0
- package/src/commit/agentic/tools/git-hunk.ts +50 -0
- package/src/commit/agentic/tools/git-overview.ts +84 -0
- package/src/commit/agentic/tools/index.ts +56 -0
- package/src/commit/agentic/tools/propose-changelog.ts +128 -0
- package/src/commit/agentic/tools/propose-commit.ts +154 -0
- package/src/commit/agentic/tools/recent-commits.ts +81 -0
- package/src/commit/agentic/tools/split-commit.ts +280 -0
- package/src/commit/agentic/topo-sort.ts +44 -0
- package/src/commit/agentic/trivial.ts +51 -0
- package/src/commit/agentic/validation.ts +200 -0
- package/src/commit/analysis/conventional.ts +165 -0
- package/src/commit/analysis/index.ts +4 -0
- package/src/commit/analysis/scope.ts +242 -0
- package/src/commit/analysis/summary.ts +112 -0
- package/src/commit/analysis/validation.ts +66 -0
- package/src/commit/changelog/detect.ts +37 -0
- package/src/commit/changelog/generate.ts +110 -0
- package/src/commit/changelog/index.ts +234 -0
- package/src/commit/changelog/parse.ts +44 -0
- package/src/commit/cli.ts +93 -0
- package/src/commit/git/diff.ts +148 -0
- package/src/commit/git/errors.ts +9 -0
- package/src/commit/git/index.ts +211 -0
- package/src/commit/git/operations.ts +54 -0
- package/src/commit/index.ts +5 -0
- package/src/commit/map-reduce/index.ts +64 -0
- package/src/commit/map-reduce/map-phase.ts +178 -0
- package/src/commit/map-reduce/reduce-phase.ts +145 -0
- package/src/commit/map-reduce/utils.ts +9 -0
- package/src/commit/message.ts +11 -0
- package/src/commit/model-selection.ts +69 -0
- package/src/commit/pipeline.ts +243 -0
- package/src/commit/prompts/analysis-system.md +148 -0
- package/src/commit/prompts/analysis-user.md +38 -0
- package/src/commit/prompts/changelog-system.md +50 -0
- package/src/commit/prompts/changelog-user.md +18 -0
- package/src/commit/prompts/file-observer-system.md +24 -0
- package/src/commit/prompts/file-observer-user.md +8 -0
- package/src/commit/prompts/reduce-system.md +50 -0
- package/src/commit/prompts/reduce-user.md +17 -0
- package/src/commit/prompts/summary-retry.md +3 -0
- package/src/commit/prompts/summary-system.md +38 -0
- package/src/commit/prompts/summary-user.md +13 -0
- package/src/commit/prompts/types-description.md +2 -0
- package/src/commit/types.ts +109 -0
- package/src/commit/utils/exclusions.ts +42 -0
- package/src/config/file-lock.ts +121 -0
- package/src/config/keybindings.ts +280 -0
- package/src/config/model-registry.ts +1140 -0
- package/src/config/model-resolver.ts +812 -0
- package/src/config/prompt-templates.ts +526 -0
- package/src/config/resolve-config-value.ts +92 -0
- package/src/config/settings-schema.ts +1236 -0
- package/src/config/settings.ts +706 -0
- package/src/config.ts +414 -0
- package/src/cursor.ts +239 -0
- package/src/debug/index.ts +431 -0
- package/src/debug/log-formatting.ts +60 -0
- package/src/debug/log-viewer.ts +903 -0
- package/src/debug/profiler.ts +158 -0
- package/src/debug/report-bundle.ts +366 -0
- package/src/debug/system-info.ts +112 -0
- package/src/discovery/agents-md.ts +68 -0
- package/src/discovery/agents.ts +199 -0
- package/src/discovery/builtin.ts +815 -0
- package/src/discovery/claude-plugins.ts +205 -0
- package/src/discovery/claude.ts +506 -0
- package/src/discovery/cline.ts +83 -0
- package/src/discovery/codex.ts +532 -0
- package/src/discovery/cursor.ts +218 -0
- package/src/discovery/gemini.ts +395 -0
- package/src/discovery/github.ts +117 -0
- package/src/discovery/helpers.ts +698 -0
- package/src/discovery/index.ts +89 -0
- package/src/discovery/mcp-json.ts +156 -0
- package/src/discovery/opencode.ts +394 -0
- package/src/discovery/ssh.ts +160 -0
- package/src/discovery/vscode.ts +103 -0
- package/src/discovery/windsurf.ts +145 -0
- package/src/exa/company.ts +57 -0
- package/src/exa/index.ts +62 -0
- package/src/exa/linkedin.ts +57 -0
- package/src/exa/mcp-client.ts +289 -0
- package/src/exa/render.ts +244 -0
- package/src/exa/researcher.ts +89 -0
- package/src/exa/search.ts +330 -0
- package/src/exa/types.ts +166 -0
- package/src/exa/websets.ts +247 -0
- package/src/exec/bash-executor.ts +184 -0
- package/src/exec/exec.ts +53 -0
- package/src/export/custom-share.ts +65 -0
- package/src/export/html/index.ts +162 -0
- package/src/export/html/template.css +889 -0
- package/src/export/html/template.generated.ts +2 -0
- package/src/export/html/template.html +45 -0
- package/src/export/html/template.js +1329 -0
- package/src/export/html/template.macro.ts +24 -0
- package/src/export/html/vendor/highlight.min.js +1213 -0
- package/src/export/html/vendor/marked.min.js +6 -0
- package/src/export/ttsr.ts +434 -0
- package/src/extensibility/custom-commands/bundled/review/index.ts +433 -0
- package/src/extensibility/custom-commands/index.ts +15 -0
- package/src/extensibility/custom-commands/loader.ts +231 -0
- package/src/extensibility/custom-commands/types.ts +111 -0
- package/src/extensibility/custom-tools/index.ts +22 -0
- package/src/extensibility/custom-tools/loader.ts +235 -0
- package/src/extensibility/custom-tools/types.ts +226 -0
- package/src/extensibility/custom-tools/wrapper.ts +45 -0
- package/src/extensibility/extensions/index.ts +136 -0
- package/src/extensibility/extensions/loader.ts +520 -0
- package/src/extensibility/extensions/runner.ts +774 -0
- package/src/extensibility/extensions/types.ts +1293 -0
- package/src/extensibility/extensions/wrapper.ts +188 -0
- package/src/extensibility/hooks/index.ts +16 -0
- package/src/extensibility/hooks/loader.ts +273 -0
- package/src/extensibility/hooks/runner.ts +441 -0
- package/src/extensibility/hooks/tool-wrapper.ts +106 -0
- package/src/extensibility/hooks/types.ts +817 -0
- package/src/extensibility/plugins/doctor.ts +65 -0
- package/src/extensibility/plugins/git-url.ts +281 -0
- package/src/extensibility/plugins/index.ts +33 -0
- package/src/extensibility/plugins/installer.ts +192 -0
- package/src/extensibility/plugins/loader.ts +338 -0
- package/src/extensibility/plugins/manager.ts +716 -0
- package/src/extensibility/plugins/parser.ts +105 -0
- package/src/extensibility/plugins/types.ts +190 -0
- package/src/extensibility/skills.ts +385 -0
- package/src/extensibility/slash-commands.ts +287 -0
- package/src/extensibility/tool-proxy.ts +25 -0
- package/src/index.ts +275 -0
- package/src/internal-urls/agent-protocol.ts +136 -0
- package/src/internal-urls/artifact-protocol.ts +97 -0
- package/src/internal-urls/docs-index.generated.ts +54 -0
- package/src/internal-urls/docs-protocol.ts +84 -0
- package/src/internal-urls/index.ts +31 -0
- package/src/internal-urls/json-query.ts +126 -0
- package/src/internal-urls/memory-protocol.ts +133 -0
- package/src/internal-urls/router.ts +70 -0
- package/src/internal-urls/rule-protocol.ts +55 -0
- package/src/internal-urls/skill-protocol.ts +111 -0
- package/src/internal-urls/types.ts +52 -0
- package/src/ipy/executor.ts +556 -0
- package/src/ipy/gateway-coordinator.ts +426 -0
- package/src/ipy/kernel.ts +892 -0
- package/src/ipy/modules.ts +109 -0
- package/src/ipy/prelude.py +831 -0
- package/src/ipy/prelude.ts +3 -0
- package/src/ipy/runtime.ts +222 -0
- package/src/lsp/client.ts +867 -0
- package/src/lsp/clients/biome-client.ts +202 -0
- package/src/lsp/clients/index.ts +50 -0
- package/src/lsp/clients/lsp-linter-client.ts +93 -0
- package/src/lsp/clients/swiftlint-client.ts +120 -0
- package/src/lsp/config.ts +397 -0
- package/src/lsp/defaults.json +464 -0
- package/src/lsp/edits.ts +109 -0
- package/src/lsp/index.ts +1268 -0
- package/src/lsp/lspmux.ts +250 -0
- package/src/lsp/render.ts +689 -0
- package/src/lsp/types.ts +414 -0
- package/src/lsp/utils.ts +549 -0
- package/src/main.ts +773 -0
- package/src/mcp/client.ts +239 -0
- package/src/mcp/config-writer.ts +215 -0
- package/src/mcp/config.ts +363 -0
- package/src/mcp/index.ts +55 -0
- package/src/mcp/json-rpc.ts +84 -0
- package/src/mcp/loader.ts +124 -0
- package/src/mcp/manager.ts +490 -0
- package/src/mcp/oauth-discovery.ts +274 -0
- package/src/mcp/oauth-flow.ts +229 -0
- package/src/mcp/render.ts +123 -0
- package/src/mcp/tool-bridge.ts +372 -0
- package/src/mcp/tool-cache.ts +121 -0
- package/src/mcp/transports/http.ts +332 -0
- package/src/mcp/transports/index.ts +6 -0
- package/src/mcp/transports/stdio.ts +281 -0
- package/src/mcp/types.ts +248 -0
- package/src/memories/index.ts +1099 -0
- package/src/memories/storage.ts +563 -0
- package/src/modes/components/agent-dashboard.ts +1130 -0
- package/src/modes/components/assistant-message.ts +144 -0
- package/src/modes/components/bash-execution.ts +218 -0
- package/src/modes/components/bordered-loader.ts +41 -0
- package/src/modes/components/branch-summary-message.ts +45 -0
- package/src/modes/components/codemode-group.ts +369 -0
- package/src/modes/components/compaction-summary-message.ts +51 -0
- package/src/modes/components/countdown-timer.ts +46 -0
- package/src/modes/components/custom-editor.ts +181 -0
- package/src/modes/components/custom-message.ts +91 -0
- package/src/modes/components/diff.ts +186 -0
- package/src/modes/components/dynamic-border.ts +25 -0
- package/src/modes/components/extensions/extension-dashboard.ts +325 -0
- package/src/modes/components/extensions/extension-list.ts +484 -0
- package/src/modes/components/extensions/index.ts +9 -0
- package/src/modes/components/extensions/inspector-panel.ts +321 -0
- package/src/modes/components/extensions/state-manager.ts +586 -0
- package/src/modes/components/extensions/types.ts +191 -0
- package/src/modes/components/footer.ts +315 -0
- package/src/modes/components/history-search.ts +157 -0
- package/src/modes/components/hook-editor.ts +101 -0
- package/src/modes/components/hook-input.ts +72 -0
- package/src/modes/components/hook-message.ts +100 -0
- package/src/modes/components/hook-selector.ts +155 -0
- package/src/modes/components/index.ts +41 -0
- package/src/modes/components/keybinding-hints.ts +65 -0
- package/src/modes/components/login-dialog.ts +164 -0
- package/src/modes/components/mcp-add-wizard.ts +1295 -0
- package/src/modes/components/model-selector.ts +625 -0
- package/src/modes/components/oauth-selector.ts +210 -0
- package/src/modes/components/plugin-settings.ts +477 -0
- package/src/modes/components/python-execution.ts +196 -0
- package/src/modes/components/queue-mode-selector.ts +56 -0
- package/src/modes/components/read-tool-group.ts +119 -0
- package/src/modes/components/session-selector.ts +242 -0
- package/src/modes/components/settings-defs.ts +340 -0
- package/src/modes/components/settings-selector.ts +529 -0
- package/src/modes/components/show-images-selector.ts +45 -0
- package/src/modes/components/skill-message.ts +90 -0
- package/src/modes/components/status-line/index.ts +4 -0
- package/src/modes/components/status-line/presets.ts +94 -0
- package/src/modes/components/status-line/segments.ts +352 -0
- package/src/modes/components/status-line/separators.ts +55 -0
- package/src/modes/components/status-line/types.ts +75 -0
- package/src/modes/components/status-line-segment-editor.ts +354 -0
- package/src/modes/components/status-line.ts +421 -0
- package/src/modes/components/theme-selector.ts +63 -0
- package/src/modes/components/thinking-selector.ts +64 -0
- package/src/modes/components/todo-display.ts +115 -0
- package/src/modes/components/todo-reminder.ts +40 -0
- package/src/modes/components/tool-execution.ts +703 -0
- package/src/modes/components/tree-selector.ts +904 -0
- package/src/modes/components/ttsr-notification.ts +80 -0
- package/src/modes/components/user-message-selector.ts +146 -0
- package/src/modes/components/user-message.ts +22 -0
- package/src/modes/components/visual-truncate.ts +63 -0
- package/src/modes/components/welcome.ts +247 -0
- package/src/modes/controllers/command-controller.ts +1120 -0
- package/src/modes/controllers/event-controller.ts +479 -0
- package/src/modes/controllers/extension-ui-controller.ts +778 -0
- package/src/modes/controllers/input-controller.ts +671 -0
- package/src/modes/controllers/mcp-command-controller.ts +1315 -0
- package/src/modes/controllers/selector-controller.ts +712 -0
- package/src/modes/controllers/ssh-command-controller.ts +452 -0
- package/src/modes/index.ts +15 -0
- package/src/modes/interactive-mode.ts +1027 -0
- package/src/modes/print-mode.ts +191 -0
- package/src/modes/rpc/rpc-client.ts +583 -0
- package/src/modes/rpc/rpc-mode.ts +700 -0
- package/src/modes/rpc/rpc-types.ts +236 -0
- package/src/modes/theme/dark.json +95 -0
- package/src/modes/theme/defaults/alabaster.json +93 -0
- package/src/modes/theme/defaults/amethyst.json +96 -0
- package/src/modes/theme/defaults/anthracite.json +93 -0
- package/src/modes/theme/defaults/basalt.json +91 -0
- package/src/modes/theme/defaults/birch.json +95 -0
- package/src/modes/theme/defaults/dark-abyss.json +91 -0
- package/src/modes/theme/defaults/dark-arctic.json +104 -0
- package/src/modes/theme/defaults/dark-aurora.json +95 -0
- package/src/modes/theme/defaults/dark-catppuccin.json +107 -0
- package/src/modes/theme/defaults/dark-cavern.json +91 -0
- package/src/modes/theme/defaults/dark-copper.json +95 -0
- package/src/modes/theme/defaults/dark-cosmos.json +90 -0
- package/src/modes/theme/defaults/dark-cyberpunk.json +102 -0
- package/src/modes/theme/defaults/dark-dracula.json +98 -0
- package/src/modes/theme/defaults/dark-eclipse.json +91 -0
- package/src/modes/theme/defaults/dark-ember.json +95 -0
- package/src/modes/theme/defaults/dark-equinox.json +90 -0
- package/src/modes/theme/defaults/dark-forest.json +96 -0
- package/src/modes/theme/defaults/dark-github.json +105 -0
- package/src/modes/theme/defaults/dark-gruvbox.json +112 -0
- package/src/modes/theme/defaults/dark-lavender.json +95 -0
- package/src/modes/theme/defaults/dark-lunar.json +89 -0
- package/src/modes/theme/defaults/dark-midnight.json +95 -0
- package/src/modes/theme/defaults/dark-monochrome.json +94 -0
- package/src/modes/theme/defaults/dark-monokai.json +98 -0
- package/src/modes/theme/defaults/dark-nebula.json +90 -0
- package/src/modes/theme/defaults/dark-nord.json +97 -0
- package/src/modes/theme/defaults/dark-ocean.json +101 -0
- package/src/modes/theme/defaults/dark-one.json +100 -0
- package/src/modes/theme/defaults/dark-rainforest.json +91 -0
- package/src/modes/theme/defaults/dark-reef.json +91 -0
- package/src/modes/theme/defaults/dark-retro.json +92 -0
- package/src/modes/theme/defaults/dark-rose-pine.json +96 -0
- package/src/modes/theme/defaults/dark-sakura.json +95 -0
- package/src/modes/theme/defaults/dark-slate.json +95 -0
- package/src/modes/theme/defaults/dark-solarized.json +97 -0
- package/src/modes/theme/defaults/dark-solstice.json +90 -0
- package/src/modes/theme/defaults/dark-starfall.json +91 -0
- package/src/modes/theme/defaults/dark-sunset.json +99 -0
- package/src/modes/theme/defaults/dark-swamp.json +90 -0
- package/src/modes/theme/defaults/dark-synthwave.json +103 -0
- package/src/modes/theme/defaults/dark-taiga.json +91 -0
- package/src/modes/theme/defaults/dark-terminal.json +95 -0
- package/src/modes/theme/defaults/dark-tokyo-night.json +101 -0
- package/src/modes/theme/defaults/dark-tundra.json +91 -0
- package/src/modes/theme/defaults/dark-twilight.json +91 -0
- package/src/modes/theme/defaults/dark-volcanic.json +91 -0
- package/src/modes/theme/defaults/graphite.json +92 -0
- package/src/modes/theme/defaults/index.ts +195 -0
- package/src/modes/theme/defaults/light-arctic.json +107 -0
- package/src/modes/theme/defaults/light-aurora-day.json +91 -0
- package/src/modes/theme/defaults/light-canyon.json +91 -0
- package/src/modes/theme/defaults/light-catppuccin.json +106 -0
- package/src/modes/theme/defaults/light-cirrus.json +90 -0
- package/src/modes/theme/defaults/light-coral.json +95 -0
- package/src/modes/theme/defaults/light-cyberpunk.json +96 -0
- package/src/modes/theme/defaults/light-dawn.json +90 -0
- package/src/modes/theme/defaults/light-dunes.json +91 -0
- package/src/modes/theme/defaults/light-eucalyptus.json +95 -0
- package/src/modes/theme/defaults/light-forest.json +100 -0
- package/src/modes/theme/defaults/light-frost.json +95 -0
- package/src/modes/theme/defaults/light-github.json +115 -0
- package/src/modes/theme/defaults/light-glacier.json +91 -0
- package/src/modes/theme/defaults/light-gruvbox.json +108 -0
- package/src/modes/theme/defaults/light-haze.json +90 -0
- package/src/modes/theme/defaults/light-honeycomb.json +95 -0
- package/src/modes/theme/defaults/light-lagoon.json +91 -0
- package/src/modes/theme/defaults/light-lavender.json +95 -0
- package/src/modes/theme/defaults/light-meadow.json +91 -0
- package/src/modes/theme/defaults/light-mint.json +95 -0
- package/src/modes/theme/defaults/light-monochrome.json +101 -0
- package/src/modes/theme/defaults/light-ocean.json +99 -0
- package/src/modes/theme/defaults/light-one.json +99 -0
- package/src/modes/theme/defaults/light-opal.json +91 -0
- package/src/modes/theme/defaults/light-orchard.json +91 -0
- package/src/modes/theme/defaults/light-paper.json +95 -0
- package/src/modes/theme/defaults/light-prism.json +90 -0
- package/src/modes/theme/defaults/light-retro.json +98 -0
- package/src/modes/theme/defaults/light-sand.json +95 -0
- package/src/modes/theme/defaults/light-savanna.json +91 -0
- package/src/modes/theme/defaults/light-solarized.json +102 -0
- package/src/modes/theme/defaults/light-soleil.json +90 -0
- package/src/modes/theme/defaults/light-sunset.json +99 -0
- package/src/modes/theme/defaults/light-synthwave.json +98 -0
- package/src/modes/theme/defaults/light-tokyo-night.json +111 -0
- package/src/modes/theme/defaults/light-wetland.json +91 -0
- package/src/modes/theme/defaults/light-zenith.json +89 -0
- package/src/modes/theme/defaults/limestone.json +94 -0
- package/src/modes/theme/defaults/mahogany.json +97 -0
- package/src/modes/theme/defaults/marble.json +93 -0
- package/src/modes/theme/defaults/obsidian.json +91 -0
- package/src/modes/theme/defaults/onyx.json +91 -0
- package/src/modes/theme/defaults/pearl.json +93 -0
- package/src/modes/theme/defaults/porcelain.json +91 -0
- package/src/modes/theme/defaults/quartz.json +96 -0
- package/src/modes/theme/defaults/sandstone.json +95 -0
- package/src/modes/theme/defaults/titanium.json +90 -0
- package/src/modes/theme/light.json +93 -0
- package/src/modes/theme/mermaid-cache.ts +111 -0
- package/src/modes/theme/theme-schema.json +429 -0
- package/src/modes/theme/theme.ts +2333 -0
- package/src/modes/types.ts +216 -0
- package/src/modes/utils/ui-helpers.ts +529 -0
- package/src/patch/applicator.ts +1482 -0
- package/src/patch/diff.ts +425 -0
- package/src/patch/fuzzy.ts +784 -0
- package/src/patch/hashline.ts +972 -0
- package/src/patch/index.ts +964 -0
- package/src/patch/normalize.ts +397 -0
- package/src/patch/normative.ts +72 -0
- package/src/patch/parser.ts +532 -0
- package/src/patch/shared.ts +400 -0
- package/src/patch/types.ts +292 -0
- package/src/priority.json +35 -0
- package/src/prompts/agents/explore.md +48 -0
- package/src/prompts/agents/frontmatter.md +9 -0
- package/src/prompts/agents/init.md +36 -0
- package/src/prompts/agents/librarian.md +53 -0
- package/src/prompts/agents/oracle.md +51 -0
- package/src/prompts/agents/reviewer.md +70 -0
- package/src/prompts/agents/task.md +14 -0
- package/src/prompts/compaction/branch-summary-context.md +5 -0
- package/src/prompts/compaction/branch-summary-preamble.md +2 -0
- package/src/prompts/compaction/branch-summary.md +30 -0
- package/src/prompts/compaction/compaction-short-summary.md +9 -0
- package/src/prompts/compaction/compaction-summary-context.md +5 -0
- package/src/prompts/compaction/compaction-summary.md +38 -0
- package/src/prompts/compaction/compaction-turn-prefix.md +17 -0
- package/src/prompts/compaction/compaction-update-summary.md +45 -0
- package/src/prompts/memories/consolidation.md +30 -0
- package/src/prompts/memories/read_path.md +11 -0
- package/src/prompts/memories/stage_one_input.md +6 -0
- package/src/prompts/memories/stage_one_system.md +21 -0
- package/src/prompts/review-request.md +64 -0
- package/src/prompts/system/agent-creation-architect.md +65 -0
- package/src/prompts/system/agent-creation-user.md +6 -0
- package/src/prompts/system/custom-system-prompt.md +68 -0
- package/src/prompts/system/file-operations.md +10 -0
- package/src/prompts/system/subagent-submit-reminder.md +11 -0
- package/src/prompts/system/subagent-system-prompt.md +31 -0
- package/src/prompts/system/subagent-user-prompt.md +8 -0
- package/src/prompts/system/summarization-system.md +3 -0
- package/src/prompts/system/system-prompt.md +300 -0
- package/src/prompts/system/title-system.md +2 -0
- package/src/prompts/system/ttsr-interrupt.md +7 -0
- package/src/prompts/system/web-search.md +28 -0
- package/src/prompts/tools/ask.md +44 -0
- package/src/prompts/tools/bash.md +24 -0
- package/src/prompts/tools/browser.md +33 -0
- package/src/prompts/tools/calculator.md +12 -0
- package/src/prompts/tools/explore.md +29 -0
- package/src/prompts/tools/fetch.md +16 -0
- package/src/prompts/tools/find.md +18 -0
- package/src/prompts/tools/gemini-image.md +23 -0
- package/src/prompts/tools/grep.md +28 -0
- package/src/prompts/tools/hashline.md +232 -0
- package/src/prompts/tools/librarian.md +24 -0
- package/src/prompts/tools/lsp.md +28 -0
- package/src/prompts/tools/oracle.md +26 -0
- package/src/prompts/tools/patch.md +74 -0
- package/src/prompts/tools/python.md +66 -0
- package/src/prompts/tools/read.md +36 -0
- package/src/prompts/tools/replace.md +38 -0
- package/src/prompts/tools/reviewer.md +41 -0
- package/src/prompts/tools/ssh.md +51 -0
- package/src/prompts/tools/task-summary.md +28 -0
- package/src/prompts/tools/task.md +275 -0
- package/src/prompts/tools/todo-write.md +65 -0
- package/src/prompts/tools/undo-edit.md +7 -0
- package/src/prompts/tools/web-search.md +19 -0
- package/src/prompts/tools/write.md +18 -0
- package/src/sdk.ts +1287 -0
- package/src/secrets/index.ts +116 -0
- package/src/secrets/obfuscator.ts +269 -0
- package/src/secrets/regex.ts +21 -0
- package/src/session/agent-session.ts +4669 -0
- package/src/session/agent-storage.ts +621 -0
- package/src/session/artifacts.ts +132 -0
- package/src/session/auth-storage.ts +1433 -0
- package/src/session/blob-store.ts +103 -0
- package/src/session/compaction/branch-summarization.ts +315 -0
- package/src/session/compaction/compaction.ts +864 -0
- package/src/session/compaction/index.ts +7 -0
- package/src/session/compaction/pruning.ts +91 -0
- package/src/session/compaction/utils.ts +171 -0
- package/src/session/history-storage.ts +170 -0
- package/src/session/messages.ts +317 -0
- package/src/session/session-manager.ts +2276 -0
- package/src/session/session-storage.ts +342 -0
- package/src/session/streaming-output.ts +565 -0
- package/src/slash-commands/builtin-registry.ts +439 -0
- package/src/ssh/config-writer.ts +183 -0
- package/src/ssh/connection-manager.ts +444 -0
- package/src/ssh/ssh-executor.ts +127 -0
- package/src/ssh/sshfs-mount.ts +135 -0
- package/src/stt/downloader.ts +71 -0
- package/src/stt/index.ts +3 -0
- package/src/stt/recorder.ts +351 -0
- package/src/stt/setup.ts +52 -0
- package/src/stt/stt-controller.ts +160 -0
- package/src/stt/transcribe.py +70 -0
- package/src/stt/transcriber.ts +91 -0
- package/src/system-prompt.ts +685 -0
- package/src/task/agents.ts +155 -0
- package/src/task/batch.ts +102 -0
- package/src/task/commands.ts +134 -0
- package/src/task/discovery.ts +126 -0
- package/src/task/executor.ts +908 -0
- package/src/task/index.ts +223 -0
- package/src/task/output-manager.ts +107 -0
- package/src/task/parallel.ts +84 -0
- package/src/task/render.ts +326 -0
- package/src/task/subprocess-tool-registry.ts +88 -0
- package/src/task/template.ts +32 -0
- package/src/task/types.ts +144 -0
- package/src/tools/ask.ts +523 -0
- package/src/tools/bash-interactive.ts +419 -0
- package/src/tools/bash-interceptor.ts +105 -0
- package/src/tools/bash-normalize.ts +107 -0
- package/src/tools/bash-skill-urls.ts +177 -0
- package/src/tools/bash.ts +347 -0
- package/src/tools/browser.ts +1374 -0
- package/src/tools/calculator.ts +537 -0
- package/src/tools/context.ts +39 -0
- package/src/tools/explore.ts +23 -0
- package/src/tools/fetch.ts +1091 -0
- package/src/tools/find.ts +540 -0
- package/src/tools/fs-cache-invalidation.ts +28 -0
- package/src/tools/gemini-image.ts +907 -0
- package/src/tools/grep.ts +489 -0
- package/src/tools/index.ts +337 -0
- package/src/tools/json-tree.ts +231 -0
- package/src/tools/jtd-to-json-schema.ts +247 -0
- package/src/tools/jtd-to-typescript.ts +198 -0
- package/src/tools/librarian.ts +33 -0
- package/src/tools/list-limit.ts +40 -0
- package/src/tools/notebook.ts +287 -0
- package/src/tools/oracle.ts +40 -0
- package/src/tools/output-meta.ts +459 -0
- package/src/tools/output-utils.ts +63 -0
- package/src/tools/path-utils.ts +116 -0
- package/src/tools/puppeteer/00_stealth_tampering.txt +63 -0
- package/src/tools/puppeteer/01_stealth_activity.txt +20 -0
- package/src/tools/puppeteer/02_stealth_hairline.txt +11 -0
- package/src/tools/puppeteer/03_stealth_botd.txt +384 -0
- package/src/tools/puppeteer/04_stealth_iframe.txt +81 -0
- package/src/tools/puppeteer/05_stealth_webgl.txt +75 -0
- package/src/tools/puppeteer/06_stealth_screen.txt +72 -0
- package/src/tools/puppeteer/07_stealth_fonts.txt +97 -0
- package/src/tools/puppeteer/08_stealth_audio.txt +51 -0
- package/src/tools/puppeteer/09_stealth_locale.txt +46 -0
- package/src/tools/puppeteer/10_stealth_plugins.txt +206 -0
- package/src/tools/puppeteer/11_stealth_hardware.txt +8 -0
- package/src/tools/puppeteer/12_stealth_codecs.txt +40 -0
- package/src/tools/puppeteer/13_stealth_worker.txt +74 -0
- package/src/tools/python.ts +1118 -0
- package/src/tools/read.ts +1193 -0
- package/src/tools/render-utils.ts +680 -0
- package/src/tools/renderers.ts +60 -0
- package/src/tools/reviewer-tool.ts +41 -0
- package/src/tools/ssh.ts +326 -0
- package/src/tools/subagent-tool.ts +169 -0
- package/src/tools/submit-result.ts +152 -0
- package/src/tools/todo-write.ts +255 -0
- package/src/tools/tool-errors.ts +92 -0
- package/src/tools/tool-result.ts +86 -0
- package/src/tools/undo-edit.ts +145 -0
- package/src/tools/undo-history.ts +22 -0
- package/src/tools/write.ts +274 -0
- package/src/tui/code-cell.ts +108 -0
- package/src/tui/file-list.ts +47 -0
- package/src/tui/index.ts +11 -0
- package/src/tui/output-block.ts +144 -0
- package/src/tui/status-line.ts +39 -0
- package/src/tui/tree-list.ts +53 -0
- package/src/tui/types.ts +16 -0
- package/src/tui/utils.ts +116 -0
- package/src/utils/changelog.ts +98 -0
- package/src/utils/event-bus.ts +33 -0
- package/src/utils/external-editor.ts +59 -0
- package/src/utils/file-display-mode.ts +36 -0
- package/src/utils/file-mentions.ts +384 -0
- package/src/utils/frontmatter.ts +101 -0
- package/src/utils/fuzzy.ts +108 -0
- package/src/utils/ignore-files.ts +119 -0
- package/src/utils/image-convert.ts +27 -0
- package/src/utils/image-resize.ts +236 -0
- package/src/utils/mime.ts +30 -0
- package/src/utils/open.ts +20 -0
- package/src/utils/shell-snapshot.ts +199 -0
- package/src/utils/timings.ts +26 -0
- package/src/utils/title-generator.ts +167 -0
- package/src/utils/tools-manager.ts +362 -0
- package/src/web/scrapers/artifacthub.ts +215 -0
- package/src/web/scrapers/arxiv.ts +88 -0
- package/src/web/scrapers/aur.ts +175 -0
- package/src/web/scrapers/biorxiv.ts +141 -0
- package/src/web/scrapers/bluesky.ts +284 -0
- package/src/web/scrapers/brew.ts +177 -0
- package/src/web/scrapers/cheatsh.ts +78 -0
- package/src/web/scrapers/chocolatey.ts +158 -0
- package/src/web/scrapers/choosealicense.ts +110 -0
- package/src/web/scrapers/cisa-kev.ts +100 -0
- package/src/web/scrapers/clojars.ts +180 -0
- package/src/web/scrapers/coingecko.ts +184 -0
- package/src/web/scrapers/crates-io.ts +128 -0
- package/src/web/scrapers/crossref.ts +149 -0
- package/src/web/scrapers/devto.ts +177 -0
- package/src/web/scrapers/discogs.ts +307 -0
- package/src/web/scrapers/discourse.ts +221 -0
- package/src/web/scrapers/dockerhub.ts +160 -0
- package/src/web/scrapers/fdroid.ts +158 -0
- package/src/web/scrapers/firefox-addons.ts +214 -0
- package/src/web/scrapers/flathub.ts +239 -0
- package/src/web/scrapers/github-gist.ts +68 -0
- package/src/web/scrapers/github.ts +490 -0
- package/src/web/scrapers/gitlab.ts +456 -0
- package/src/web/scrapers/go-pkg.ts +275 -0
- package/src/web/scrapers/hackage.ts +94 -0
- package/src/web/scrapers/hackernews.ts +208 -0
- package/src/web/scrapers/hex.ts +121 -0
- package/src/web/scrapers/huggingface.ts +385 -0
- package/src/web/scrapers/iacr.ts +86 -0
- package/src/web/scrapers/index.ts +249 -0
- package/src/web/scrapers/jetbrains-marketplace.ts +169 -0
- package/src/web/scrapers/lemmy.ts +220 -0
- package/src/web/scrapers/lobsters.ts +186 -0
- package/src/web/scrapers/mastodon.ts +310 -0
- package/src/web/scrapers/maven.ts +152 -0
- package/src/web/scrapers/mdn.ts +172 -0
- package/src/web/scrapers/metacpan.ts +253 -0
- package/src/web/scrapers/musicbrainz.ts +272 -0
- package/src/web/scrapers/npm.ts +114 -0
- package/src/web/scrapers/nuget.ts +205 -0
- package/src/web/scrapers/nvd.ts +243 -0
- package/src/web/scrapers/ollama.ts +265 -0
- package/src/web/scrapers/open-vsx.ts +119 -0
- package/src/web/scrapers/opencorporates.ts +275 -0
- package/src/web/scrapers/openlibrary.ts +319 -0
- package/src/web/scrapers/orcid.ts +298 -0
- package/src/web/scrapers/osv.ts +192 -0
- package/src/web/scrapers/packagist.ts +174 -0
- package/src/web/scrapers/pub-dev.ts +185 -0
- package/src/web/scrapers/pubmed.ts +177 -0
- package/src/web/scrapers/pypi.ts +129 -0
- package/src/web/scrapers/rawg.ts +124 -0
- package/src/web/scrapers/readthedocs.ts +125 -0
- package/src/web/scrapers/reddit.ts +104 -0
- package/src/web/scrapers/repology.ts +262 -0
- package/src/web/scrapers/rfc.ts +209 -0
- package/src/web/scrapers/rubygems.ts +117 -0
- package/src/web/scrapers/searchcode.ts +217 -0
- package/src/web/scrapers/sec-edgar.ts +274 -0
- package/src/web/scrapers/semantic-scholar.ts +190 -0
- package/src/web/scrapers/snapcraft.ts +200 -0
- package/src/web/scrapers/sourcegraph.ts +373 -0
- package/src/web/scrapers/spdx.ts +121 -0
- package/src/web/scrapers/spotify.ts +217 -0
- package/src/web/scrapers/stackoverflow.ts +124 -0
- package/src/web/scrapers/terraform.ts +304 -0
- package/src/web/scrapers/tldr.ts +51 -0
- package/src/web/scrapers/twitter.ts +97 -0
- package/src/web/scrapers/types.ts +200 -0
- package/src/web/scrapers/utils.ts +142 -0
- package/src/web/scrapers/vimeo.ts +152 -0
- package/src/web/scrapers/vscode-marketplace.ts +195 -0
- package/src/web/scrapers/w3c.ts +163 -0
- package/src/web/scrapers/wikidata.ts +357 -0
- package/src/web/scrapers/wikipedia.ts +95 -0
- package/src/web/scrapers/youtube.ts +312 -0
- package/src/web/search/auth.ts +178 -0
- package/src/web/search/index.ts +598 -0
- package/src/web/search/provider.ts +77 -0
- package/src/web/search/providers/anthropic.ts +284 -0
- package/src/web/search/providers/base.ts +22 -0
- package/src/web/search/providers/brave.ts +165 -0
- package/src/web/search/providers/codex.ts +377 -0
- package/src/web/search/providers/exa.ts +158 -0
- package/src/web/search/providers/gemini.ts +437 -0
- package/src/web/search/providers/jina.ts +99 -0
- package/src/web/search/providers/kimi.ts +196 -0
- package/src/web/search/providers/perplexity.ts +546 -0
- package/src/web/search/providers/synthetic.ts +136 -0
- package/src/web/search/providers/zai.ts +352 -0
- package/src/web/search/render.ts +299 -0
- package/src/web/search/types.ts +437 -0
|
@@ -0,0 +1,1236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified settings schema - single source of truth for all settings.
|
|
3
|
+
*
|
|
4
|
+
* Each setting is defined once here with:
|
|
5
|
+
* - Type and default value
|
|
6
|
+
* - Optional UI metadata (label, description, tab)
|
|
7
|
+
*
|
|
8
|
+
* The Settings singleton provides type-safe path-based access:
|
|
9
|
+
* settings.get("compaction.enabled") // => boolean
|
|
10
|
+
* settings.set("theme.dark", "titanium") // sync, saves in background
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
14
|
+
// Schema Definition Types
|
|
15
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
16
|
+
|
|
17
|
+
export type SettingTab =
|
|
18
|
+
| "display"
|
|
19
|
+
| "agent"
|
|
20
|
+
| "input"
|
|
21
|
+
| "tools"
|
|
22
|
+
| "config"
|
|
23
|
+
| "services"
|
|
24
|
+
| "bash"
|
|
25
|
+
| "lsp"
|
|
26
|
+
| "ttsr"
|
|
27
|
+
| "status";
|
|
28
|
+
|
|
29
|
+
/** Tab display metadata - icon is resolved via theme.symbol() */
|
|
30
|
+
export type TabMetadata = { label: string; icon: `tab.${string}` };
|
|
31
|
+
|
|
32
|
+
/** Ordered list of tabs for UI rendering (status excluded - custom menu) */
|
|
33
|
+
export const SETTING_TABS: SettingTab[] = [
|
|
34
|
+
"display",
|
|
35
|
+
"agent",
|
|
36
|
+
"input",
|
|
37
|
+
"tools",
|
|
38
|
+
"config",
|
|
39
|
+
"services",
|
|
40
|
+
"bash",
|
|
41
|
+
"lsp",
|
|
42
|
+
"ttsr",
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
/** Tab display metadata - icon is a symbol key from theme.ts (tab.*) */
|
|
46
|
+
export const TAB_METADATA: Record<SettingTab, { label: string; icon: `tab.${string}` }> = {
|
|
47
|
+
display: { label: "Display", icon: "tab.display" },
|
|
48
|
+
agent: { label: "Agent", icon: "tab.agent" },
|
|
49
|
+
input: { label: "Input", icon: "tab.input" },
|
|
50
|
+
tools: { label: "Tools", icon: "tab.tools" },
|
|
51
|
+
config: { label: "Config", icon: "tab.config" },
|
|
52
|
+
services: { label: "Services", icon: "tab.services" },
|
|
53
|
+
bash: { label: "Bash", icon: "tab.bash" },
|
|
54
|
+
lsp: { label: "LSP", icon: "tab.lsp" },
|
|
55
|
+
ttsr: { label: "TTSR", icon: "tab.ttsr" },
|
|
56
|
+
status: { label: "Status", icon: "tab.status" },
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/** Status line segment identifiers */
|
|
60
|
+
export type StatusLineSegmentId =
|
|
61
|
+
| "arcane"
|
|
62
|
+
| "model"
|
|
63
|
+
| "path"
|
|
64
|
+
| "git"
|
|
65
|
+
| "subagents"
|
|
66
|
+
| "token_in"
|
|
67
|
+
| "token_out"
|
|
68
|
+
| "token_total"
|
|
69
|
+
| "cost"
|
|
70
|
+
| "context_pct"
|
|
71
|
+
| "context_total"
|
|
72
|
+
| "time_spent"
|
|
73
|
+
| "time"
|
|
74
|
+
| "session"
|
|
75
|
+
| "hostname"
|
|
76
|
+
| "cache_read"
|
|
77
|
+
| "cache_write";
|
|
78
|
+
|
|
79
|
+
interface UiMetadata {
|
|
80
|
+
tab: SettingTab;
|
|
81
|
+
label: string;
|
|
82
|
+
description: string;
|
|
83
|
+
/** For enum/submenu - display as inline toggle vs dropdown */
|
|
84
|
+
submenu?: boolean;
|
|
85
|
+
/** Condition function name - setting only shown when true */
|
|
86
|
+
condition?: string;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
interface BooleanDef {
|
|
90
|
+
type: "boolean";
|
|
91
|
+
default: boolean;
|
|
92
|
+
ui?: UiMetadata;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
interface StringDef {
|
|
96
|
+
type: "string";
|
|
97
|
+
default: string | undefined;
|
|
98
|
+
ui?: UiMetadata;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
interface NumberDef {
|
|
102
|
+
type: "number";
|
|
103
|
+
default: number;
|
|
104
|
+
ui?: UiMetadata;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
interface EnumDef<T extends readonly string[]> {
|
|
108
|
+
type: "enum";
|
|
109
|
+
values: T;
|
|
110
|
+
default: T[number];
|
|
111
|
+
ui?: UiMetadata;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
interface ArrayDef<T> {
|
|
115
|
+
type: "array";
|
|
116
|
+
default: T[];
|
|
117
|
+
ui?: UiMetadata;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
interface RecordDef<T> {
|
|
121
|
+
type: "record";
|
|
122
|
+
default: Record<string, T>;
|
|
123
|
+
ui?: UiMetadata;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
type SettingDef =
|
|
127
|
+
| BooleanDef
|
|
128
|
+
| StringDef
|
|
129
|
+
| NumberDef
|
|
130
|
+
| EnumDef<readonly string[]>
|
|
131
|
+
| ArrayDef<unknown>
|
|
132
|
+
| RecordDef<unknown>;
|
|
133
|
+
|
|
134
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
135
|
+
// Schema Definition
|
|
136
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
137
|
+
|
|
138
|
+
export const SETTINGS_SCHEMA = {
|
|
139
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
140
|
+
// Top-level settings
|
|
141
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
142
|
+
lastChangelogVersion: { type: "string", default: undefined },
|
|
143
|
+
"theme.dark": {
|
|
144
|
+
type: "string",
|
|
145
|
+
default: "dark-copper",
|
|
146
|
+
ui: {
|
|
147
|
+
tab: "display",
|
|
148
|
+
label: "Dark theme",
|
|
149
|
+
description: "Theme used when terminal has dark background",
|
|
150
|
+
submenu: true,
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
"theme.light": {
|
|
154
|
+
type: "string",
|
|
155
|
+
default: "light",
|
|
156
|
+
ui: {
|
|
157
|
+
tab: "display",
|
|
158
|
+
label: "Light theme",
|
|
159
|
+
description: "Theme used when terminal has light background",
|
|
160
|
+
submenu: true,
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
symbolPreset: {
|
|
164
|
+
type: "enum",
|
|
165
|
+
values: ["unicode", "nerd", "ascii"] as const,
|
|
166
|
+
default: "unicode",
|
|
167
|
+
ui: { tab: "display", label: "Symbol preset", description: "Icon/symbol style", submenu: true },
|
|
168
|
+
},
|
|
169
|
+
colorBlindMode: {
|
|
170
|
+
type: "boolean",
|
|
171
|
+
default: false,
|
|
172
|
+
ui: {
|
|
173
|
+
tab: "display",
|
|
174
|
+
label: "Color blind mode",
|
|
175
|
+
description: "Use blue instead of green for diff additions",
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
defaultThinkingLevel: {
|
|
179
|
+
type: "enum",
|
|
180
|
+
values: ["off", "minimal", "low", "medium", "high", "xhigh"] as const,
|
|
181
|
+
default: "high",
|
|
182
|
+
ui: {
|
|
183
|
+
tab: "agent",
|
|
184
|
+
label: "Thinking level",
|
|
185
|
+
description: "Reasoning depth for thinking-capable models",
|
|
186
|
+
submenu: true,
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
temperature: {
|
|
190
|
+
type: "number",
|
|
191
|
+
default: -1,
|
|
192
|
+
ui: {
|
|
193
|
+
tab: "agent",
|
|
194
|
+
label: "Temperature",
|
|
195
|
+
description: "Sampling temperature (0 = deterministic, 1 = creative, -1 = provider default)",
|
|
196
|
+
submenu: true,
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
hideThinkingBlock: {
|
|
200
|
+
type: "boolean",
|
|
201
|
+
default: false,
|
|
202
|
+
ui: { tab: "agent", label: "Hide thinking", description: "Hide thinking blocks in assistant responses" },
|
|
203
|
+
},
|
|
204
|
+
steeringMode: {
|
|
205
|
+
type: "enum",
|
|
206
|
+
values: ["all", "one-at-a-time"] as const,
|
|
207
|
+
default: "one-at-a-time",
|
|
208
|
+
ui: {
|
|
209
|
+
tab: "agent",
|
|
210
|
+
label: "Steering mode",
|
|
211
|
+
description: "How to process queued messages while agent is working",
|
|
212
|
+
},
|
|
213
|
+
},
|
|
214
|
+
followUpMode: {
|
|
215
|
+
type: "enum",
|
|
216
|
+
values: ["all", "one-at-a-time"] as const,
|
|
217
|
+
default: "one-at-a-time",
|
|
218
|
+
ui: {
|
|
219
|
+
tab: "agent",
|
|
220
|
+
label: "Follow-up mode",
|
|
221
|
+
description: "How to drain follow-up messages after a turn completes",
|
|
222
|
+
},
|
|
223
|
+
},
|
|
224
|
+
interruptMode: {
|
|
225
|
+
type: "enum",
|
|
226
|
+
values: ["immediate", "wait"] as const,
|
|
227
|
+
default: "immediate",
|
|
228
|
+
ui: { tab: "agent", label: "Interrupt mode", description: "When steering messages interrupt tool execution" },
|
|
229
|
+
},
|
|
230
|
+
doubleEscapeAction: {
|
|
231
|
+
type: "enum",
|
|
232
|
+
values: ["branch", "tree", "none"] as const,
|
|
233
|
+
default: "tree",
|
|
234
|
+
ui: {
|
|
235
|
+
tab: "input",
|
|
236
|
+
label: "Double-escape action",
|
|
237
|
+
description: "Action when pressing Escape twice with empty editor",
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
shellPath: { type: "string", default: undefined },
|
|
241
|
+
collapseChangelog: {
|
|
242
|
+
type: "boolean",
|
|
243
|
+
default: false,
|
|
244
|
+
ui: { tab: "input", label: "Collapse changelog", description: "Show condensed changelog after updates" },
|
|
245
|
+
},
|
|
246
|
+
autocompleteMaxVisible: {
|
|
247
|
+
type: "number",
|
|
248
|
+
default: 5,
|
|
249
|
+
ui: {
|
|
250
|
+
tab: "input",
|
|
251
|
+
label: "Autocomplete max items",
|
|
252
|
+
description: "Max visible items in autocomplete dropdown (3-20)",
|
|
253
|
+
submenu: true,
|
|
254
|
+
},
|
|
255
|
+
},
|
|
256
|
+
normativeRewrite: {
|
|
257
|
+
type: "boolean",
|
|
258
|
+
default: false,
|
|
259
|
+
ui: {
|
|
260
|
+
tab: "agent",
|
|
261
|
+
label: "Normative rewrite",
|
|
262
|
+
description: "Rewrite tool call arguments to normalized format in session history",
|
|
263
|
+
},
|
|
264
|
+
},
|
|
265
|
+
repeatToolDescriptions: {
|
|
266
|
+
type: "boolean",
|
|
267
|
+
default: false,
|
|
268
|
+
ui: {
|
|
269
|
+
tab: "agent",
|
|
270
|
+
label: "Repeat tool descriptions",
|
|
271
|
+
description: "Render full tool descriptions in the system prompt instead of a tool name list",
|
|
272
|
+
},
|
|
273
|
+
},
|
|
274
|
+
readLineNumbers: {
|
|
275
|
+
type: "boolean",
|
|
276
|
+
default: false,
|
|
277
|
+
ui: {
|
|
278
|
+
tab: "config",
|
|
279
|
+
label: "Read line numbers",
|
|
280
|
+
description: "Prepend line numbers to read tool output by default",
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
readHashLines: {
|
|
284
|
+
type: "boolean",
|
|
285
|
+
default: true,
|
|
286
|
+
ui: {
|
|
287
|
+
tab: "config",
|
|
288
|
+
label: "Read hash lines",
|
|
289
|
+
description: "Include line hashes in read output for hashline edit mode (LINE#ID:content)",
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
showHardwareCursor: {
|
|
293
|
+
type: "boolean",
|
|
294
|
+
default: true, // will be computed based on platform if undefined
|
|
295
|
+
ui: { tab: "display", label: "Hardware cursor", description: "Show terminal cursor for IME support" },
|
|
296
|
+
},
|
|
297
|
+
clearOnShrink: {
|
|
298
|
+
type: "boolean",
|
|
299
|
+
default: false,
|
|
300
|
+
ui: {
|
|
301
|
+
tab: "display",
|
|
302
|
+
label: "Clear on shrink",
|
|
303
|
+
description: "Clear empty rows when content shrinks (may cause flicker)",
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
extensions: { type: "array", default: [] as string[] },
|
|
307
|
+
enabledModels: { type: "array", default: [] as string[] },
|
|
308
|
+
disabledProviders: { type: "array", default: [] as string[] },
|
|
309
|
+
disabledExtensions: { type: "array", default: [] as string[] },
|
|
310
|
+
modelRoles: { type: "record", default: {} as Record<string, string> },
|
|
311
|
+
"contextPromotion.enabled": {
|
|
312
|
+
type: "boolean",
|
|
313
|
+
default: true,
|
|
314
|
+
ui: {
|
|
315
|
+
tab: "agent",
|
|
316
|
+
label: "Auto-promote context",
|
|
317
|
+
description: "Promote to a larger-context model on context overflow instead of compacting",
|
|
318
|
+
},
|
|
319
|
+
},
|
|
320
|
+
|
|
321
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
322
|
+
// Secrets settings
|
|
323
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
324
|
+
"secrets.enabled": {
|
|
325
|
+
type: "boolean",
|
|
326
|
+
default: false,
|
|
327
|
+
ui: { tab: "config", label: "Hide secrets", description: "Obfuscate secrets before sending to AI providers" },
|
|
328
|
+
},
|
|
329
|
+
|
|
330
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
331
|
+
// Compaction settings
|
|
332
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
333
|
+
"compaction.enabled": {
|
|
334
|
+
type: "boolean",
|
|
335
|
+
default: true,
|
|
336
|
+
ui: {
|
|
337
|
+
tab: "agent",
|
|
338
|
+
label: "Auto-compact",
|
|
339
|
+
description: "Automatically compact context when it gets too large",
|
|
340
|
+
},
|
|
341
|
+
},
|
|
342
|
+
"compaction.reserveTokens": { type: "number", default: 16384 },
|
|
343
|
+
"compaction.keepRecentTokens": { type: "number", default: 20000 },
|
|
344
|
+
"compaction.autoContinue": { type: "boolean", default: true },
|
|
345
|
+
"compaction.remoteEndpoint": { type: "string", default: undefined },
|
|
346
|
+
|
|
347
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
348
|
+
// Branch summary settings
|
|
349
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
350
|
+
"branchSummary.enabled": {
|
|
351
|
+
type: "boolean",
|
|
352
|
+
default: false,
|
|
353
|
+
ui: { tab: "agent", label: "Branch summaries", description: "Prompt to summarize when leaving a branch" },
|
|
354
|
+
},
|
|
355
|
+
"branchSummary.reserveTokens": { type: "number", default: 16384 },
|
|
356
|
+
|
|
357
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
358
|
+
// Memories settings
|
|
359
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
360
|
+
"memories.enabled": {
|
|
361
|
+
type: "boolean",
|
|
362
|
+
default: false,
|
|
363
|
+
ui: {
|
|
364
|
+
tab: "agent",
|
|
365
|
+
label: "Memories",
|
|
366
|
+
description: "Enable autonomous memory extraction and consolidation",
|
|
367
|
+
},
|
|
368
|
+
},
|
|
369
|
+
"memories.maxRolloutsPerStartup": { type: "number", default: 64 },
|
|
370
|
+
"memories.maxRolloutAgeDays": { type: "number", default: 30 },
|
|
371
|
+
"memories.minRolloutIdleHours": { type: "number", default: 12 },
|
|
372
|
+
"memories.threadScanLimit": { type: "number", default: 300 },
|
|
373
|
+
"memories.maxRawMemoriesForGlobal": { type: "number", default: 200 },
|
|
374
|
+
"memories.stage1Concurrency": { type: "number", default: 8 },
|
|
375
|
+
"memories.stage1LeaseSeconds": { type: "number", default: 120 },
|
|
376
|
+
"memories.stage1RetryDelaySeconds": { type: "number", default: 120 },
|
|
377
|
+
"memories.phase2LeaseSeconds": { type: "number", default: 180 },
|
|
378
|
+
"memories.phase2RetryDelaySeconds": { type: "number", default: 180 },
|
|
379
|
+
"memories.phase2HeartbeatSeconds": { type: "number", default: 30 },
|
|
380
|
+
"memories.rolloutPayloadPercent": { type: "number", default: 0.7 },
|
|
381
|
+
"memories.fallbackTokenLimit": { type: "number", default: 16000 },
|
|
382
|
+
"memories.summaryInjectionTokenLimit": { type: "number", default: 5000 },
|
|
383
|
+
|
|
384
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
385
|
+
// Retry settings
|
|
386
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
387
|
+
"retry.enabled": { type: "boolean", default: true },
|
|
388
|
+
"retry.maxRetries": {
|
|
389
|
+
type: "number",
|
|
390
|
+
default: 3,
|
|
391
|
+
ui: {
|
|
392
|
+
tab: "agent",
|
|
393
|
+
label: "Retry max attempts",
|
|
394
|
+
description: "Maximum retry attempts on API errors",
|
|
395
|
+
submenu: true,
|
|
396
|
+
},
|
|
397
|
+
},
|
|
398
|
+
"retry.baseDelayMs": { type: "number", default: 2000 },
|
|
399
|
+
|
|
400
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
401
|
+
// Todo completion settings
|
|
402
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
403
|
+
"todo.reminders": {
|
|
404
|
+
type: "boolean",
|
|
405
|
+
default: false,
|
|
406
|
+
ui: { tab: "agent", label: "Todo reminders", description: "Remind agent to complete todos before stopping" },
|
|
407
|
+
},
|
|
408
|
+
"todo.reminders.max": {
|
|
409
|
+
type: "number",
|
|
410
|
+
default: 3,
|
|
411
|
+
ui: {
|
|
412
|
+
tab: "agent",
|
|
413
|
+
label: "Todo max reminders",
|
|
414
|
+
description: "Maximum reminders to complete todos before giving up",
|
|
415
|
+
submenu: true,
|
|
416
|
+
},
|
|
417
|
+
},
|
|
418
|
+
|
|
419
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
420
|
+
// Optional tools
|
|
421
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
422
|
+
"todo.enabled": {
|
|
423
|
+
type: "boolean",
|
|
424
|
+
default: true,
|
|
425
|
+
ui: { tab: "tools", label: "Enable Todos", description: "Enable the todo_write tool for task tracking" },
|
|
426
|
+
},
|
|
427
|
+
"find.enabled": {
|
|
428
|
+
type: "boolean",
|
|
429
|
+
default: true,
|
|
430
|
+
ui: { tab: "tools", label: "Enable Find", description: "Enable the find tool for file searching" },
|
|
431
|
+
},
|
|
432
|
+
"grep.enabled": {
|
|
433
|
+
type: "boolean",
|
|
434
|
+
default: true,
|
|
435
|
+
ui: { tab: "tools", label: "Enable Grep", description: "Enable the grep tool for content searching" },
|
|
436
|
+
},
|
|
437
|
+
"grep.contextBefore": {
|
|
438
|
+
type: "number",
|
|
439
|
+
default: 0,
|
|
440
|
+
ui: {
|
|
441
|
+
tab: "tools",
|
|
442
|
+
label: "Grep context before",
|
|
443
|
+
description: "Lines of context before each grep match",
|
|
444
|
+
submenu: true,
|
|
445
|
+
},
|
|
446
|
+
},
|
|
447
|
+
"grep.contextAfter": {
|
|
448
|
+
type: "number",
|
|
449
|
+
default: 0,
|
|
450
|
+
ui: {
|
|
451
|
+
tab: "tools",
|
|
452
|
+
label: "Grep context after",
|
|
453
|
+
description: "Lines of context after each grep match",
|
|
454
|
+
submenu: true,
|
|
455
|
+
},
|
|
456
|
+
},
|
|
457
|
+
"notebook.enabled": {
|
|
458
|
+
type: "boolean",
|
|
459
|
+
default: true,
|
|
460
|
+
ui: { tab: "tools", label: "Enable Notebook", description: "Enable the notebook tool for notebook editing" },
|
|
461
|
+
},
|
|
462
|
+
"oracle.enabled": {
|
|
463
|
+
type: "boolean",
|
|
464
|
+
default: true,
|
|
465
|
+
ui: { tab: "tools", label: "Enable Oracle", description: "Enable the Oracle cross-model reasoning advisor tool" },
|
|
466
|
+
},
|
|
467
|
+
"fetch.enabled": {
|
|
468
|
+
type: "boolean",
|
|
469
|
+
default: true,
|
|
470
|
+
ui: { tab: "tools", label: "Enable Fetch", description: "Enable the fetch tool for URL fetching" },
|
|
471
|
+
},
|
|
472
|
+
"librarian.enabled": {
|
|
473
|
+
type: "boolean",
|
|
474
|
+
default: true,
|
|
475
|
+
ui: {
|
|
476
|
+
tab: "tools",
|
|
477
|
+
label: "Enable Librarian",
|
|
478
|
+
description: "Enable the Librarian tool for repository exploration via GitHub",
|
|
479
|
+
},
|
|
480
|
+
},
|
|
481
|
+
"web_search.enabled": {
|
|
482
|
+
type: "boolean",
|
|
483
|
+
default: true,
|
|
484
|
+
ui: { tab: "tools", label: "Enable Web Search", description: "Enable the web_search tool for web searching" },
|
|
485
|
+
},
|
|
486
|
+
"lsp.enabled": {
|
|
487
|
+
type: "boolean",
|
|
488
|
+
default: true,
|
|
489
|
+
ui: { tab: "tools", label: "Enable LSP", description: "Enable the lsp tool for language server protocol" },
|
|
490
|
+
},
|
|
491
|
+
"calc.enabled": {
|
|
492
|
+
type: "boolean",
|
|
493
|
+
default: false,
|
|
494
|
+
ui: {
|
|
495
|
+
tab: "tools",
|
|
496
|
+
label: "Enable Calculator",
|
|
497
|
+
description: "Enable the calculator tool for basic calculations",
|
|
498
|
+
},
|
|
499
|
+
},
|
|
500
|
+
"browser.enabled": {
|
|
501
|
+
type: "boolean",
|
|
502
|
+
default: true,
|
|
503
|
+
ui: {
|
|
504
|
+
tab: "tools",
|
|
505
|
+
label: "Enable Browser",
|
|
506
|
+
description: "Enable the browser tool (Ulixee Hero)",
|
|
507
|
+
},
|
|
508
|
+
},
|
|
509
|
+
"browser.headless": {
|
|
510
|
+
type: "boolean",
|
|
511
|
+
default: true,
|
|
512
|
+
ui: {
|
|
513
|
+
tab: "tools",
|
|
514
|
+
label: "Browser headless",
|
|
515
|
+
description: "Launch browser in headless mode (disable to show browser UI)",
|
|
516
|
+
},
|
|
517
|
+
},
|
|
518
|
+
"tools.intentTracing": {
|
|
519
|
+
type: "boolean",
|
|
520
|
+
default: true,
|
|
521
|
+
ui: {
|
|
522
|
+
tab: "tools",
|
|
523
|
+
label: "Intent tracing",
|
|
524
|
+
description: "Ask the agent to describe the intent of each tool call before executing it",
|
|
525
|
+
},
|
|
526
|
+
},
|
|
527
|
+
|
|
528
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
529
|
+
// Task tool settings
|
|
530
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
531
|
+
"task.isolation.enabled": {
|
|
532
|
+
type: "boolean",
|
|
533
|
+
default: false,
|
|
534
|
+
ui: {
|
|
535
|
+
tab: "tools",
|
|
536
|
+
label: "Task isolation",
|
|
537
|
+
description: "Run subagents in isolated git worktrees",
|
|
538
|
+
submenu: true,
|
|
539
|
+
},
|
|
540
|
+
},
|
|
541
|
+
"task.maxConcurrency": {
|
|
542
|
+
type: "number",
|
|
543
|
+
default: 32,
|
|
544
|
+
ui: {
|
|
545
|
+
tab: "tools",
|
|
546
|
+
label: "Task max concurrency",
|
|
547
|
+
description: "Concurrent limit for subagents",
|
|
548
|
+
submenu: true,
|
|
549
|
+
},
|
|
550
|
+
},
|
|
551
|
+
"task.maxRecursionDepth": {
|
|
552
|
+
type: "number",
|
|
553
|
+
default: 2,
|
|
554
|
+
ui: {
|
|
555
|
+
tab: "tools",
|
|
556
|
+
label: "Task max recursion depth",
|
|
557
|
+
description: "How many levels deep subagents can spawn their own subagents",
|
|
558
|
+
submenu: true,
|
|
559
|
+
},
|
|
560
|
+
},
|
|
561
|
+
"task.disabledAgents": {
|
|
562
|
+
type: "array",
|
|
563
|
+
default: [] as string[],
|
|
564
|
+
},
|
|
565
|
+
"task.agentModelOverrides": {
|
|
566
|
+
type: "record",
|
|
567
|
+
default: {} as Record<string, string>,
|
|
568
|
+
},
|
|
569
|
+
|
|
570
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
571
|
+
// Startup settings
|
|
572
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
573
|
+
"startup.quiet": {
|
|
574
|
+
type: "boolean",
|
|
575
|
+
default: false,
|
|
576
|
+
ui: { tab: "input", label: "Startup quiet", description: "Skip welcome screen and startup status messages" },
|
|
577
|
+
},
|
|
578
|
+
|
|
579
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
580
|
+
// Notification settings
|
|
581
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
582
|
+
"completion.notify": {
|
|
583
|
+
type: "enum",
|
|
584
|
+
values: ["on", "off"] as const,
|
|
585
|
+
default: "on",
|
|
586
|
+
ui: { tab: "input", label: "Completion notification", description: "Notify when the agent completes" },
|
|
587
|
+
},
|
|
588
|
+
|
|
589
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
590
|
+
// Ask settings
|
|
591
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
592
|
+
"ask.timeout": {
|
|
593
|
+
type: "number",
|
|
594
|
+
default: 30,
|
|
595
|
+
ui: {
|
|
596
|
+
tab: "input",
|
|
597
|
+
label: "Ask tool timeout",
|
|
598
|
+
description: "Auto-select recommended option after timeout (0 to disable)",
|
|
599
|
+
submenu: true,
|
|
600
|
+
},
|
|
601
|
+
},
|
|
602
|
+
"ask.notify": {
|
|
603
|
+
type: "enum",
|
|
604
|
+
values: ["on", "off"] as const,
|
|
605
|
+
default: "on",
|
|
606
|
+
ui: { tab: "input", label: "Ask notification", description: "Notify when ask tool is waiting for input" },
|
|
607
|
+
},
|
|
608
|
+
|
|
609
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
610
|
+
// Terminal settings
|
|
611
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
612
|
+
"terminal.showImages": {
|
|
613
|
+
type: "boolean",
|
|
614
|
+
default: true,
|
|
615
|
+
ui: {
|
|
616
|
+
tab: "display",
|
|
617
|
+
label: "Show images",
|
|
618
|
+
description: "Render images inline in terminal",
|
|
619
|
+
condition: "hasImageProtocol",
|
|
620
|
+
},
|
|
621
|
+
},
|
|
622
|
+
|
|
623
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
624
|
+
// Image settings
|
|
625
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
626
|
+
"images.autoResize": {
|
|
627
|
+
type: "boolean",
|
|
628
|
+
default: true,
|
|
629
|
+
ui: {
|
|
630
|
+
tab: "display",
|
|
631
|
+
label: "Auto-resize images",
|
|
632
|
+
description: "Resize large images to 2000x2000 max for better model compatibility",
|
|
633
|
+
},
|
|
634
|
+
},
|
|
635
|
+
"images.blockImages": {
|
|
636
|
+
type: "boolean",
|
|
637
|
+
default: false,
|
|
638
|
+
ui: { tab: "display", label: "Block images", description: "Prevent images from being sent to LLM providers" },
|
|
639
|
+
},
|
|
640
|
+
|
|
641
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
642
|
+
// Skills settings
|
|
643
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
644
|
+
"skills.enabled": { type: "boolean", default: true },
|
|
645
|
+
"skills.enableSkillCommands": {
|
|
646
|
+
type: "boolean",
|
|
647
|
+
default: true,
|
|
648
|
+
ui: { tab: "tools", label: "Skill commands", description: "Register skills as /skill:name commands" },
|
|
649
|
+
},
|
|
650
|
+
"skills.enableCodexUser": { type: "boolean", default: true },
|
|
651
|
+
"skills.enableClaudeUser": { type: "boolean", default: true },
|
|
652
|
+
"skills.enableClaudeProject": { type: "boolean", default: true },
|
|
653
|
+
"skills.enablePiUser": { type: "boolean", default: true },
|
|
654
|
+
"skills.enablePiProject": { type: "boolean", default: true },
|
|
655
|
+
"skills.customDirectories": { type: "array", default: [] as string[] },
|
|
656
|
+
"skills.ignoredSkills": { type: "array", default: [] as string[] },
|
|
657
|
+
"skills.includeSkills": { type: "array", default: [] as string[] },
|
|
658
|
+
|
|
659
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
660
|
+
// Commands settings
|
|
661
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
662
|
+
"commands.enableClaudeUser": {
|
|
663
|
+
type: "boolean",
|
|
664
|
+
default: true,
|
|
665
|
+
ui: { tab: "tools", label: "Claude user commands", description: "Load commands from ~/.claude/commands/" },
|
|
666
|
+
},
|
|
667
|
+
"commands.enableClaudeProject": {
|
|
668
|
+
type: "boolean",
|
|
669
|
+
default: true,
|
|
670
|
+
ui: { tab: "tools", label: "Claude project commands", description: "Load commands from .claude/commands/" },
|
|
671
|
+
},
|
|
672
|
+
|
|
673
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
674
|
+
// Provider settings
|
|
675
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
676
|
+
"providers.webSearch": {
|
|
677
|
+
type: "enum",
|
|
678
|
+
values: ["auto", "exa", "brave", "jina", "kimi", "zai", "perplexity", "anthropic"] as const,
|
|
679
|
+
default: "auto",
|
|
680
|
+
ui: { tab: "services", label: "Web search provider", description: "Provider for web search tool", submenu: true },
|
|
681
|
+
},
|
|
682
|
+
"providers.image": {
|
|
683
|
+
type: "enum",
|
|
684
|
+
values: ["auto", "gemini", "openrouter"] as const,
|
|
685
|
+
default: "auto",
|
|
686
|
+
ui: {
|
|
687
|
+
tab: "services",
|
|
688
|
+
label: "Image provider",
|
|
689
|
+
description: "Provider for image generation tool",
|
|
690
|
+
submenu: true,
|
|
691
|
+
},
|
|
692
|
+
},
|
|
693
|
+
"providers.kimiApiFormat": {
|
|
694
|
+
type: "enum",
|
|
695
|
+
values: ["openai", "anthropic"] as const,
|
|
696
|
+
default: "anthropic",
|
|
697
|
+
ui: {
|
|
698
|
+
tab: "services",
|
|
699
|
+
label: "Kimi API format",
|
|
700
|
+
description: "API format for Kimi Code provider",
|
|
701
|
+
submenu: true,
|
|
702
|
+
},
|
|
703
|
+
},
|
|
704
|
+
"providers.openaiWebsockets": {
|
|
705
|
+
type: "enum",
|
|
706
|
+
values: ["auto", "off", "on"] as const,
|
|
707
|
+
default: "auto",
|
|
708
|
+
ui: {
|
|
709
|
+
tab: "services",
|
|
710
|
+
label: "OpenAI websockets",
|
|
711
|
+
description: "Websocket policy for OpenAI Codex models (auto uses model defaults, on forces, off disables)",
|
|
712
|
+
submenu: true,
|
|
713
|
+
},
|
|
714
|
+
},
|
|
715
|
+
|
|
716
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
717
|
+
// Exa settings
|
|
718
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
719
|
+
"exa.enabled": {
|
|
720
|
+
type: "boolean",
|
|
721
|
+
default: true,
|
|
722
|
+
ui: { tab: "services", label: "Exa enabled", description: "Master toggle for all Exa search tools" },
|
|
723
|
+
},
|
|
724
|
+
"exa.enableSearch": {
|
|
725
|
+
type: "boolean",
|
|
726
|
+
default: true,
|
|
727
|
+
ui: { tab: "services", label: "Exa search", description: "Basic search, deep search, code search, crawl" },
|
|
728
|
+
},
|
|
729
|
+
"exa.enableLinkedin": {
|
|
730
|
+
type: "boolean",
|
|
731
|
+
default: false,
|
|
732
|
+
ui: { tab: "services", label: "Exa LinkedIn", description: "Search LinkedIn for people and companies" },
|
|
733
|
+
},
|
|
734
|
+
"exa.enableCompany": {
|
|
735
|
+
type: "boolean",
|
|
736
|
+
default: false,
|
|
737
|
+
ui: { tab: "services", label: "Exa company", description: "Comprehensive company research tool" },
|
|
738
|
+
},
|
|
739
|
+
"exa.enableResearcher": {
|
|
740
|
+
type: "boolean",
|
|
741
|
+
default: false,
|
|
742
|
+
ui: { tab: "services", label: "Exa researcher", description: "AI-powered deep research tasks" },
|
|
743
|
+
},
|
|
744
|
+
"exa.enableWebsets": {
|
|
745
|
+
type: "boolean",
|
|
746
|
+
default: false,
|
|
747
|
+
ui: { tab: "services", label: "Exa websets", description: "Webset management and enrichment tools" },
|
|
748
|
+
},
|
|
749
|
+
|
|
750
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
751
|
+
// Code Mode settings
|
|
752
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
753
|
+
"codemode.enabled": {
|
|
754
|
+
type: "boolean",
|
|
755
|
+
default: true,
|
|
756
|
+
ui: {
|
|
757
|
+
tab: "agent",
|
|
758
|
+
label: "Code Mode",
|
|
759
|
+
description: "Replace tool-calling with code generation (LLM writes JS to orchestrate tools)",
|
|
760
|
+
},
|
|
761
|
+
},
|
|
762
|
+
|
|
763
|
+
// Bash interceptor settings
|
|
764
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
765
|
+
"bash.virtualTerminal": {
|
|
766
|
+
type: "enum",
|
|
767
|
+
values: ["on", "off"] as const,
|
|
768
|
+
default: "off",
|
|
769
|
+
ui: {
|
|
770
|
+
tab: "bash",
|
|
771
|
+
label: "Virtual terminal",
|
|
772
|
+
description: "Use PTY-backed interactive execution for bash",
|
|
773
|
+
submenu: true,
|
|
774
|
+
},
|
|
775
|
+
},
|
|
776
|
+
"bashInterceptor.enabled": {
|
|
777
|
+
type: "boolean",
|
|
778
|
+
default: false,
|
|
779
|
+
ui: { tab: "bash", label: "Interceptor", description: "Block shell commands that have dedicated tools" },
|
|
780
|
+
},
|
|
781
|
+
"bashInterceptor.simpleLs": {
|
|
782
|
+
type: "boolean",
|
|
783
|
+
default: true,
|
|
784
|
+
ui: {
|
|
785
|
+
tab: "bash",
|
|
786
|
+
label: "Intercept ls",
|
|
787
|
+
description: "Intercept bare ls commands (when interceptor is enabled)",
|
|
788
|
+
},
|
|
789
|
+
},
|
|
790
|
+
// bashInterceptor.patterns is complex - handle separately
|
|
791
|
+
|
|
792
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
793
|
+
// MCP settings
|
|
794
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
795
|
+
"mcp.enableProjectConfig": {
|
|
796
|
+
type: "boolean",
|
|
797
|
+
default: true,
|
|
798
|
+
ui: { tab: "tools", label: "MCP project config", description: "Load .mcp.json/mcp.json from project root" },
|
|
799
|
+
},
|
|
800
|
+
|
|
801
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
802
|
+
// LSP settings
|
|
803
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
804
|
+
"lsp.formatOnWrite": {
|
|
805
|
+
type: "boolean",
|
|
806
|
+
default: false,
|
|
807
|
+
ui: {
|
|
808
|
+
tab: "lsp",
|
|
809
|
+
label: "Format on write",
|
|
810
|
+
description: "Automatically format code files using LSP after writing",
|
|
811
|
+
},
|
|
812
|
+
},
|
|
813
|
+
"lsp.diagnosticsOnWrite": {
|
|
814
|
+
type: "boolean",
|
|
815
|
+
default: true,
|
|
816
|
+
ui: { tab: "lsp", label: "Diagnostics on write", description: "Return LSP diagnostics after writing code files" },
|
|
817
|
+
},
|
|
818
|
+
"lsp.diagnosticsOnEdit": {
|
|
819
|
+
type: "boolean",
|
|
820
|
+
default: false,
|
|
821
|
+
ui: { tab: "lsp", label: "Diagnostics on edit", description: "Return LSP diagnostics after editing code files" },
|
|
822
|
+
},
|
|
823
|
+
|
|
824
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
825
|
+
// Python settings
|
|
826
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
827
|
+
"python.toolMode": {
|
|
828
|
+
type: "enum",
|
|
829
|
+
values: ["ipy-only", "bash-only", "both"] as const,
|
|
830
|
+
default: "both",
|
|
831
|
+
ui: { tab: "config", label: "Python tool mode", description: "How Python code is executed" },
|
|
832
|
+
},
|
|
833
|
+
"python.kernelMode": {
|
|
834
|
+
type: "enum",
|
|
835
|
+
values: ["session", "per-call"] as const,
|
|
836
|
+
default: "session",
|
|
837
|
+
ui: {
|
|
838
|
+
tab: "config",
|
|
839
|
+
label: "Python kernel mode",
|
|
840
|
+
description: "Whether to keep IPython kernel alive across calls",
|
|
841
|
+
},
|
|
842
|
+
},
|
|
843
|
+
"python.sharedGateway": {
|
|
844
|
+
type: "boolean",
|
|
845
|
+
default: true,
|
|
846
|
+
ui: {
|
|
847
|
+
tab: "config",
|
|
848
|
+
label: "Python shared gateway",
|
|
849
|
+
description: "Share IPython kernel gateway across pi instances",
|
|
850
|
+
},
|
|
851
|
+
},
|
|
852
|
+
|
|
853
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
854
|
+
// STT settings
|
|
855
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
856
|
+
"stt.enabled": {
|
|
857
|
+
type: "boolean",
|
|
858
|
+
default: false,
|
|
859
|
+
ui: { tab: "input", label: "Speech-to-text", description: "Enable speech-to-text input via microphone" },
|
|
860
|
+
},
|
|
861
|
+
"stt.language": {
|
|
862
|
+
type: "string",
|
|
863
|
+
default: "en",
|
|
864
|
+
ui: {
|
|
865
|
+
tab: "input",
|
|
866
|
+
label: "STT language",
|
|
867
|
+
description: "Language code for transcription (e.g., en, es, fr)",
|
|
868
|
+
submenu: true,
|
|
869
|
+
},
|
|
870
|
+
},
|
|
871
|
+
"stt.modelName": {
|
|
872
|
+
type: "enum",
|
|
873
|
+
values: ["tiny", "tiny.en", "base", "base.en", "small", "small.en", "medium", "medium.en", "large"] as const,
|
|
874
|
+
default: "base.en",
|
|
875
|
+
ui: {
|
|
876
|
+
tab: "input",
|
|
877
|
+
label: "STT model",
|
|
878
|
+
description: "Whisper model size (larger = more accurate but slower)",
|
|
879
|
+
submenu: true,
|
|
880
|
+
},
|
|
881
|
+
},
|
|
882
|
+
|
|
883
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
884
|
+
// Edit settings
|
|
885
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
886
|
+
"edit.fuzzyMatch": {
|
|
887
|
+
type: "boolean",
|
|
888
|
+
default: true,
|
|
889
|
+
ui: {
|
|
890
|
+
tab: "config",
|
|
891
|
+
label: "Edit fuzzy match",
|
|
892
|
+
description: "Accept high-confidence fuzzy matches for whitespace differences",
|
|
893
|
+
},
|
|
894
|
+
},
|
|
895
|
+
"edit.fuzzyThreshold": {
|
|
896
|
+
type: "number",
|
|
897
|
+
default: 0.95,
|
|
898
|
+
ui: {
|
|
899
|
+
tab: "config",
|
|
900
|
+
label: "Edit fuzzy threshold",
|
|
901
|
+
description: "Similarity threshold for fuzzy matches",
|
|
902
|
+
submenu: true,
|
|
903
|
+
},
|
|
904
|
+
},
|
|
905
|
+
"edit.mode": {
|
|
906
|
+
type: "enum",
|
|
907
|
+
values: ["replace", "patch", "hashline"] as const,
|
|
908
|
+
default: "hashline",
|
|
909
|
+
ui: {
|
|
910
|
+
tab: "config",
|
|
911
|
+
label: "Edit mode",
|
|
912
|
+
description: "Select the edit tool variant (replace, patch, or hashline)",
|
|
913
|
+
},
|
|
914
|
+
},
|
|
915
|
+
"edit.streamingAbort": {
|
|
916
|
+
type: "boolean",
|
|
917
|
+
default: false,
|
|
918
|
+
ui: {
|
|
919
|
+
tab: "config",
|
|
920
|
+
label: "Edit streaming abort",
|
|
921
|
+
description: "Abort streaming edit tool calls when patch preview fails",
|
|
922
|
+
},
|
|
923
|
+
},
|
|
924
|
+
// edit.modelVariants is complex - handle separately
|
|
925
|
+
|
|
926
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
927
|
+
// TTSR settings
|
|
928
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
929
|
+
"ttsr.enabled": {
|
|
930
|
+
type: "boolean",
|
|
931
|
+
default: true,
|
|
932
|
+
ui: {
|
|
933
|
+
tab: "ttsr",
|
|
934
|
+
label: "TTSR enabled",
|
|
935
|
+
description: "Time Traveling Stream Rules: interrupt agent when output matches patterns",
|
|
936
|
+
},
|
|
937
|
+
},
|
|
938
|
+
"ttsr.contextMode": {
|
|
939
|
+
type: "enum",
|
|
940
|
+
values: ["discard", "keep"] as const,
|
|
941
|
+
default: "discard",
|
|
942
|
+
ui: { tab: "ttsr", label: "TTSR context mode", description: "What to do with partial output when TTSR triggers" },
|
|
943
|
+
},
|
|
944
|
+
"ttsr.interruptMode": {
|
|
945
|
+
type: "enum",
|
|
946
|
+
values: ["never", "prose-only", "tool-only", "always"] as const,
|
|
947
|
+
default: "always",
|
|
948
|
+
ui: {
|
|
949
|
+
tab: "ttsr",
|
|
950
|
+
label: "TTSR interrupt mode",
|
|
951
|
+
description: "When to interrupt mid-stream vs inject warning after completion",
|
|
952
|
+
submenu: true,
|
|
953
|
+
},
|
|
954
|
+
},
|
|
955
|
+
"ttsr.repeatMode": {
|
|
956
|
+
type: "enum",
|
|
957
|
+
values: ["once", "after-gap"] as const,
|
|
958
|
+
default: "once",
|
|
959
|
+
ui: {
|
|
960
|
+
tab: "ttsr",
|
|
961
|
+
label: "TTSR repeat mode",
|
|
962
|
+
description: "How rules can repeat: once per session or after a message gap",
|
|
963
|
+
},
|
|
964
|
+
},
|
|
965
|
+
"ttsr.repeatGap": {
|
|
966
|
+
type: "number",
|
|
967
|
+
default: 10,
|
|
968
|
+
ui: {
|
|
969
|
+
tab: "ttsr",
|
|
970
|
+
label: "TTSR repeat gap",
|
|
971
|
+
description: "Messages before a rule can trigger again",
|
|
972
|
+
submenu: true,
|
|
973
|
+
},
|
|
974
|
+
},
|
|
975
|
+
|
|
976
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
977
|
+
// Commit settings (no UI - advanced)
|
|
978
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
979
|
+
"commit.mapReduceEnabled": { type: "boolean", default: true },
|
|
980
|
+
"commit.mapReduceMinFiles": { type: "number", default: 4 },
|
|
981
|
+
"commit.mapReduceMaxFileTokens": { type: "number", default: 50000 },
|
|
982
|
+
"commit.mapReduceTimeoutMs": { type: "number", default: 120000 },
|
|
983
|
+
"commit.mapReduceMaxConcurrency": { type: "number", default: 5 },
|
|
984
|
+
"commit.changelogMaxDiffChars": { type: "number", default: 120000 },
|
|
985
|
+
|
|
986
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
987
|
+
// Thinking budgets (no UI - advanced)
|
|
988
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
989
|
+
"thinkingBudgets.minimal": { type: "number", default: 1024 },
|
|
990
|
+
"thinkingBudgets.low": { type: "number", default: 2048 },
|
|
991
|
+
"thinkingBudgets.medium": { type: "number", default: 8192 },
|
|
992
|
+
"thinkingBudgets.high": { type: "number", default: 16384 },
|
|
993
|
+
|
|
994
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
995
|
+
// Status line settings
|
|
996
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
997
|
+
"statusLine.preset": {
|
|
998
|
+
type: "enum",
|
|
999
|
+
values: ["default", "minimal", "compact", "full", "nerd", "ascii", "custom"] as const,
|
|
1000
|
+
default: "default",
|
|
1001
|
+
ui: { tab: "status", label: "Preset", description: "Pre-built status line configurations", submenu: true },
|
|
1002
|
+
},
|
|
1003
|
+
"statusLine.separator": {
|
|
1004
|
+
type: "enum",
|
|
1005
|
+
values: ["powerline", "powerline-thin", "slash", "pipe", "block", "none", "ascii"] as const,
|
|
1006
|
+
default: "powerline-thin",
|
|
1007
|
+
ui: {
|
|
1008
|
+
tab: "status",
|
|
1009
|
+
label: "Separator style",
|
|
1010
|
+
description: "Style of separators between segments",
|
|
1011
|
+
submenu: true,
|
|
1012
|
+
},
|
|
1013
|
+
},
|
|
1014
|
+
"statusLine.showHookStatus": {
|
|
1015
|
+
type: "boolean",
|
|
1016
|
+
default: true,
|
|
1017
|
+
ui: {
|
|
1018
|
+
tab: "status",
|
|
1019
|
+
label: "Show extension status",
|
|
1020
|
+
description: "Display hook status messages below status line",
|
|
1021
|
+
},
|
|
1022
|
+
},
|
|
1023
|
+
"statusLine.leftSegments": { type: "array", default: [] as StatusLineSegmentId[] },
|
|
1024
|
+
"statusLine.rightSegments": { type: "array", default: [] as StatusLineSegmentId[] },
|
|
1025
|
+
"statusLine.segmentOptions": { type: "record", default: {} as Record<string, unknown> },
|
|
1026
|
+
} as const;
|
|
1027
|
+
|
|
1028
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
1029
|
+
// Type Inference
|
|
1030
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
1031
|
+
|
|
1032
|
+
type Schema = typeof SETTINGS_SCHEMA;
|
|
1033
|
+
|
|
1034
|
+
/** All valid setting paths */
|
|
1035
|
+
export type SettingPath = keyof Schema;
|
|
1036
|
+
|
|
1037
|
+
/** Infer the value type for a setting path */
|
|
1038
|
+
export type SettingValue<P extends SettingPath> = Schema[P] extends { type: "boolean" }
|
|
1039
|
+
? boolean
|
|
1040
|
+
: Schema[P] extends { type: "string" }
|
|
1041
|
+
? string | undefined
|
|
1042
|
+
: Schema[P] extends { type: "number" }
|
|
1043
|
+
? number
|
|
1044
|
+
: Schema[P] extends { type: "enum"; values: infer V }
|
|
1045
|
+
? V extends readonly string[]
|
|
1046
|
+
? V[number]
|
|
1047
|
+
: never
|
|
1048
|
+
: Schema[P] extends { type: "array"; default: infer D }
|
|
1049
|
+
? D
|
|
1050
|
+
: Schema[P] extends { type: "record"; default: infer D }
|
|
1051
|
+
? D
|
|
1052
|
+
: never;
|
|
1053
|
+
|
|
1054
|
+
/** Get the default value for a setting path */
|
|
1055
|
+
export function getDefault<P extends SettingPath>(path: P): SettingValue<P> {
|
|
1056
|
+
return SETTINGS_SCHEMA[path].default as SettingValue<P>;
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
/** Check if a path has UI metadata (should appear in settings panel) */
|
|
1060
|
+
export function hasUi(path: SettingPath): boolean {
|
|
1061
|
+
return "ui" in SETTINGS_SCHEMA[path];
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
/** Get UI metadata for a path (undefined if no UI) */
|
|
1065
|
+
export function getUi(path: SettingPath): UiMetadata | undefined {
|
|
1066
|
+
const def = SETTINGS_SCHEMA[path];
|
|
1067
|
+
return "ui" in def ? (def.ui as UiMetadata) : undefined;
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
/** Get all paths for a specific tab */
|
|
1071
|
+
export function getPathsForTab(tab: SettingTab): SettingPath[] {
|
|
1072
|
+
return (Object.keys(SETTINGS_SCHEMA) as SettingPath[]).filter(path => {
|
|
1073
|
+
const ui = getUi(path);
|
|
1074
|
+
return ui?.tab === tab;
|
|
1075
|
+
});
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
/** Get the type of a setting */
|
|
1079
|
+
export function getType(path: SettingPath): SettingDef["type"] {
|
|
1080
|
+
return SETTINGS_SCHEMA[path].type;
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
/** Get enum values for an enum setting */
|
|
1084
|
+
export function getEnumValues(path: SettingPath): readonly string[] | undefined {
|
|
1085
|
+
const def = SETTINGS_SCHEMA[path];
|
|
1086
|
+
return "values" in def ? (def.values as readonly string[]) : undefined;
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
1090
|
+
// Derived Types from Schema
|
|
1091
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
1092
|
+
|
|
1093
|
+
/** Status line preset - derived from schema */
|
|
1094
|
+
export type StatusLinePreset = SettingValue<"statusLine.preset">;
|
|
1095
|
+
|
|
1096
|
+
/** Status line separator style - derived from schema */
|
|
1097
|
+
export type StatusLineSeparatorStyle = SettingValue<"statusLine.separator">;
|
|
1098
|
+
|
|
1099
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
1100
|
+
// Typed Group Definitions
|
|
1101
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
1102
|
+
|
|
1103
|
+
export interface CompactionSettings {
|
|
1104
|
+
enabled: boolean;
|
|
1105
|
+
reserveTokens: number;
|
|
1106
|
+
keepRecentTokens: number;
|
|
1107
|
+
autoContinue: boolean;
|
|
1108
|
+
remoteEndpoint: string | undefined;
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
export interface ContextPromotionSettings {
|
|
1112
|
+
enabled: boolean;
|
|
1113
|
+
}
|
|
1114
|
+
export interface RetrySettings {
|
|
1115
|
+
enabled: boolean;
|
|
1116
|
+
maxRetries: number;
|
|
1117
|
+
baseDelayMs: number;
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
export interface MemoriesSettings {
|
|
1121
|
+
enabled: boolean;
|
|
1122
|
+
maxRolloutsPerStartup: number;
|
|
1123
|
+
maxRolloutAgeDays: number;
|
|
1124
|
+
minRolloutIdleHours: number;
|
|
1125
|
+
threadScanLimit: number;
|
|
1126
|
+
maxRawMemoriesForGlobal: number;
|
|
1127
|
+
stage1Concurrency: number;
|
|
1128
|
+
stage1LeaseSeconds: number;
|
|
1129
|
+
stage1RetryDelaySeconds: number;
|
|
1130
|
+
phase2LeaseSeconds: number;
|
|
1131
|
+
phase2RetryDelaySeconds: number;
|
|
1132
|
+
phase2HeartbeatSeconds: number;
|
|
1133
|
+
rolloutPayloadPercent: number;
|
|
1134
|
+
fallbackTokenLimit: number;
|
|
1135
|
+
summaryInjectionTokenLimit: number;
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
export interface TodoCompletionSettings {
|
|
1139
|
+
enabled: boolean;
|
|
1140
|
+
maxReminders: number;
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
export interface BranchSummarySettings {
|
|
1144
|
+
enabled: boolean;
|
|
1145
|
+
reserveTokens: number;
|
|
1146
|
+
}
|
|
1147
|
+
|
|
1148
|
+
export interface SkillsSettings {
|
|
1149
|
+
enabled?: boolean;
|
|
1150
|
+
enableSkillCommands?: boolean;
|
|
1151
|
+
enableCodexUser?: boolean;
|
|
1152
|
+
enableClaudeUser?: boolean;
|
|
1153
|
+
enableClaudeProject?: boolean;
|
|
1154
|
+
enablePiUser?: boolean;
|
|
1155
|
+
enablePiProject?: boolean;
|
|
1156
|
+
customDirectories?: string[];
|
|
1157
|
+
ignoredSkills?: string[];
|
|
1158
|
+
includeSkills?: string[];
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
export interface CommitSettings {
|
|
1162
|
+
mapReduceEnabled: boolean;
|
|
1163
|
+
mapReduceMinFiles: number;
|
|
1164
|
+
mapReduceMaxFileTokens: number;
|
|
1165
|
+
mapReduceTimeoutMs: number;
|
|
1166
|
+
mapReduceMaxConcurrency: number;
|
|
1167
|
+
changelogMaxDiffChars: number;
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1170
|
+
export interface TtsrSettings {
|
|
1171
|
+
enabled: boolean;
|
|
1172
|
+
contextMode: "discard" | "keep";
|
|
1173
|
+
interruptMode: "never" | "prose-only" | "tool-only" | "always";
|
|
1174
|
+
repeatMode: "once" | "after-gap";
|
|
1175
|
+
repeatGap: number;
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1178
|
+
export interface ExaSettings {
|
|
1179
|
+
enabled: boolean;
|
|
1180
|
+
enableSearch: boolean;
|
|
1181
|
+
enableLinkedin: boolean;
|
|
1182
|
+
enableCompany: boolean;
|
|
1183
|
+
enableResearcher: boolean;
|
|
1184
|
+
enableWebsets: boolean;
|
|
1185
|
+
}
|
|
1186
|
+
|
|
1187
|
+
export interface StatusLineSettings {
|
|
1188
|
+
preset: StatusLinePreset;
|
|
1189
|
+
separator: StatusLineSeparatorStyle;
|
|
1190
|
+
showHookStatus: boolean;
|
|
1191
|
+
leftSegments: StatusLineSegmentId[];
|
|
1192
|
+
rightSegments: StatusLineSegmentId[];
|
|
1193
|
+
segmentOptions: Record<string, unknown>;
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
export interface ThinkingBudgetsSettings {
|
|
1197
|
+
minimal: number;
|
|
1198
|
+
low: number;
|
|
1199
|
+
medium: number;
|
|
1200
|
+
high: number;
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
export interface SttSettings {
|
|
1204
|
+
enabled: boolean;
|
|
1205
|
+
language: string | undefined;
|
|
1206
|
+
modelName: string;
|
|
1207
|
+
whisperPath: string | undefined;
|
|
1208
|
+
modelPath: string | undefined;
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
export interface BashInterceptorRule {
|
|
1212
|
+
pattern: string;
|
|
1213
|
+
flags?: string;
|
|
1214
|
+
tool: string;
|
|
1215
|
+
message: string;
|
|
1216
|
+
allowSubcommands?: string[];
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
/** Map group prefix -> typed settings interface */
|
|
1220
|
+
export interface GroupTypeMap {
|
|
1221
|
+
compaction: CompactionSettings;
|
|
1222
|
+
contextPromotion: ContextPromotionSettings;
|
|
1223
|
+
retry: RetrySettings;
|
|
1224
|
+
memories: MemoriesSettings;
|
|
1225
|
+
branchSummary: BranchSummarySettings;
|
|
1226
|
+
skills: SkillsSettings;
|
|
1227
|
+
commit: CommitSettings;
|
|
1228
|
+
ttsr: TtsrSettings;
|
|
1229
|
+
exa: ExaSettings;
|
|
1230
|
+
statusLine: StatusLineSettings;
|
|
1231
|
+
thinkingBudgets: ThinkingBudgetsSettings;
|
|
1232
|
+
stt: SttSettings;
|
|
1233
|
+
modelRoles: Record<string, string>;
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
export type GroupPrefix = keyof GroupTypeMap;
|