oma-coding-agent 1.1.4
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 +12164 -0
- package/README.md +35 -0
- package/dist/cli.js +18266 -0
- package/examples/README.md +21 -0
- package/examples/custom-tools/README.md +104 -0
- package/examples/custom-tools/hello/index.ts +20 -0
- package/examples/extensions/README.md +142 -0
- package/examples/extensions/api-demo.ts +79 -0
- package/examples/extensions/chalk-logger.ts +25 -0
- package/examples/extensions/hello.ts +31 -0
- package/examples/extensions/pirate.ts +43 -0
- package/examples/extensions/plan-mode.ts +549 -0
- package/examples/extensions/reload-runtime.ts +38 -0
- package/examples/extensions/thinking-note.ts +13 -0
- package/examples/extensions/tools.ts +145 -0
- package/examples/extensions/with-deps/index.ts +36 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +17 -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 +115 -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 +149 -0
- package/examples/hooks/permission-gate.ts +33 -0
- package/examples/hooks/protected-paths.ts +29 -0
- package/examples/hooks/qna.ts +118 -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 +46 -0
- package/examples/sdk/04-skills.ts +43 -0
- package/examples/sdk/06-extensions.ts +82 -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 +41 -0
- package/examples/sdk/08-slash-commands.ts +46 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +54 -0
- package/examples/sdk/11-sessions.ts +47 -0
- package/examples/sdk/12-redis-sessions.ts +54 -0
- package/examples/sdk/13-sql-sessions.ts +61 -0
- package/examples/sdk/README.md +172 -0
- package/package.json +573 -0
- package/scripts/bench-guard.ts +71 -0
- package/scripts/build-binary.ts +108 -0
- package/scripts/bundle-dist.ts +110 -0
- package/scripts/embed-mupdf-wasm.ts +67 -0
- package/scripts/format-prompts.ts +68 -0
- package/scripts/generate-docs-index.ts +56 -0
- package/scripts/generate-share-viewer.ts +34 -0
- package/scripts/measure-prompt-tokens.ts +63 -0
- package/scripts/omp +42 -0
- package/scripts/omp.ts +19 -0
- package/src/advisor/__tests__/advisor.test.ts +915 -0
- package/src/advisor/advise-tool.ts +165 -0
- package/src/advisor/index.ts +4 -0
- package/src/advisor/runtime.ts +270 -0
- package/src/advisor/transcript-recorder.ts +136 -0
- package/src/advisor/watchdog.ts +83 -0
- package/src/async/index.ts +1 -0
- package/src/async/job-manager.ts +674 -0
- package/src/auto-thinking/classifier.ts +190 -0
- package/src/autolearn/controller.ts +139 -0
- package/src/autolearn/managed-skills.ts +255 -0
- package/src/autoresearch/command-resume.md +14 -0
- package/src/autoresearch/dashboard.ts +436 -0
- package/src/autoresearch/git.ts +319 -0
- package/src/autoresearch/helpers.ts +218 -0
- package/src/autoresearch/index.ts +536 -0
- package/src/autoresearch/prompt-setup.md +43 -0
- package/src/autoresearch/prompt.md +103 -0
- package/src/autoresearch/resume-message.md +10 -0
- package/src/autoresearch/state.ts +273 -0
- package/src/autoresearch/storage.ts +700 -0
- package/src/autoresearch/tools/init-experiment.ts +269 -0
- package/src/autoresearch/tools/log-experiment.ts +521 -0
- package/src/autoresearch/tools/run-experiment.ts +407 -0
- package/src/autoresearch/tools/update-notes.ts +109 -0
- package/src/autoresearch/types.ts +168 -0
- package/src/capability/context-file.ts +44 -0
- package/src/capability/extension-module.ts +34 -0
- package/src/capability/extension.ts +47 -0
- package/src/capability/fs.ts +117 -0
- package/src/capability/hook.ts +40 -0
- package/src/capability/index.ts +436 -0
- package/src/capability/instruction.ts +37 -0
- package/src/capability/mcp.ts +76 -0
- package/src/capability/prompt.ts +35 -0
- package/src/capability/rule-buckets.ts +66 -0
- package/src/capability/rule.ts +261 -0
- package/src/capability/settings.ts +34 -0
- package/src/capability/skill.ts +63 -0
- package/src/capability/slash-command.ts +40 -0
- package/src/capability/ssh.ts +41 -0
- package/src/capability/system-prompt.ts +34 -0
- package/src/capability/tool.ts +38 -0
- package/src/capability/types.ts +168 -0
- package/src/cli/agents-cli.ts +138 -0
- package/src/cli/args.ts +361 -0
- package/src/cli/auth-broker-cli.ts +893 -0
- package/src/cli/auth-gateway-cli.ts +608 -0
- package/src/cli/bench-cli.ts +552 -0
- package/src/cli/classify-install-target.ts +76 -0
- package/src/cli/claude-trace-cli.ts +795 -0
- package/src/cli/commands/init-xdg.ts +27 -0
- package/src/cli/completion-gen.ts +550 -0
- package/src/cli/config-cli.ts +418 -0
- package/src/cli/dry-balance-cli.ts +858 -0
- package/src/cli/extension-flags.ts +48 -0
- package/src/cli/file-processor.ts +133 -0
- package/src/cli/flag-tables.ts +280 -0
- package/src/cli/gallery-cli.ts +231 -0
- package/src/cli/gallery-fixtures/agentic.ts +407 -0
- package/src/cli/gallery-fixtures/codeintel.ts +187 -0
- package/src/cli/gallery-fixtures/edit.ts +194 -0
- package/src/cli/gallery-fixtures/fs.ts +220 -0
- package/src/cli/gallery-fixtures/index.ts +40 -0
- package/src/cli/gallery-fixtures/interaction.ts +49 -0
- package/src/cli/gallery-fixtures/memory.ts +81 -0
- package/src/cli/gallery-fixtures/misc.ts +250 -0
- package/src/cli/gallery-fixtures/search.ts +213 -0
- package/src/cli/gallery-fixtures/shell.ts +167 -0
- package/src/cli/gallery-fixtures/types.ts +57 -0
- package/src/cli/gallery-fixtures/web.ts +158 -0
- package/src/cli/gallery-screenshot.ts +279 -0
- package/src/cli/grep-cli.ts +160 -0
- package/src/cli/grievances-cli.ts +256 -0
- package/src/cli/initial-message.ts +58 -0
- package/src/cli/models-cli.ts +427 -0
- package/src/cli/plugin-cli.ts +996 -0
- package/src/cli/profile-alias.ts +338 -0
- package/src/cli/profile-bootstrap.ts +243 -0
- package/src/cli/read-cli.ts +57 -0
- package/src/cli/session-picker.ts +80 -0
- package/src/cli/setup-cli.ts +332 -0
- package/src/cli/setup-model-picker.ts +43 -0
- package/src/cli/shell-cli.ts +176 -0
- package/src/cli/ssh-cli.ts +179 -0
- package/src/cli/startup-cwd.ts +58 -0
- package/src/cli/stats-cli.ts +229 -0
- package/src/cli/tiny-models-cli.ts +127 -0
- package/src/cli/ttsr-cli.ts +995 -0
- package/src/cli/update-cli.ts +671 -0
- package/src/cli/usage-cli.ts +774 -0
- package/src/cli/web-search-cli.ts +132 -0
- package/src/cli/worktree-cli.ts +291 -0
- package/src/cli-commands.ts +85 -0
- package/src/cli.ts +326 -0
- package/src/collab/crypto.ts +63 -0
- package/src/collab/guest.ts +450 -0
- package/src/collab/host.ts +577 -0
- package/src/collab/protocol.ts +274 -0
- package/src/collab/relay-client.ts +216 -0
- package/src/commands/acp.ts +24 -0
- package/src/commands/agents.ts +57 -0
- package/src/commands/auth-broker.ts +99 -0
- package/src/commands/auth-gateway.ts +69 -0
- package/src/commands/bench.ts +42 -0
- package/src/commands/commit.ts +46 -0
- package/src/commands/complete.ts +66 -0
- package/src/commands/completions.ts +60 -0
- package/src/commands/config.ts +51 -0
- package/src/commands/dry-balance.ts +43 -0
- package/src/commands/gallery.ts +52 -0
- package/src/commands/grep.ts +48 -0
- package/src/commands/grievances.ts +51 -0
- package/src/commands/install.ts +107 -0
- package/src/commands/join.ts +39 -0
- package/src/commands/launch.ts +182 -0
- package/src/commands/models.ts +61 -0
- package/src/commands/plugin.ts +78 -0
- package/src/commands/read.ts +38 -0
- package/src/commands/say.ts +102 -0
- package/src/commands/setup.ts +67 -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/tiny-models.ts +36 -0
- package/src/commands/token.ts +108 -0
- package/src/commands/ttsr.ts +125 -0
- package/src/commands/update.ts +21 -0
- package/src/commands/usage.ts +43 -0
- package/src/commands/web-search.ts +42 -0
- package/src/commands/worktree.ts +56 -0
- package/src/commit/agentic/agent.ts +318 -0
- package/src/commit/agentic/fallback.ts +96 -0
- package/src/commit/agentic/index.ts +355 -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 +60 -0
- package/src/commit/agentic/tools/analyze-file.ts +149 -0
- package/src/commit/agentic/tools/git-file-diff.ts +191 -0
- package/src/commit/agentic/tools/git-hunk.ts +52 -0
- package/src/commit/agentic/tools/git-overview.ts +81 -0
- package/src/commit/agentic/tools/index.ts +54 -0
- package/src/commit/agentic/tools/propose-changelog.ts +147 -0
- package/src/commit/agentic/tools/propose-commit.ts +109 -0
- package/src/commit/agentic/tools/recent-commits.ts +81 -0
- package/src/commit/agentic/tools/schemas.ts +11 -0
- package/src/commit/agentic/tools/split-commit.ts +241 -0
- package/src/commit/agentic/topo-sort.ts +44 -0
- package/src/commit/agentic/trivial.ts +51 -0
- package/src/commit/agentic/validation.ts +183 -0
- package/src/commit/analysis/conventional.ts +64 -0
- package/src/commit/analysis/index.ts +4 -0
- package/src/commit/analysis/scope.ts +242 -0
- package/src/commit/analysis/summary.ts +107 -0
- package/src/commit/analysis/validation.ts +66 -0
- package/src/commit/changelog/detect.ts +40 -0
- package/src/commit/changelog/generate.ts +101 -0
- package/src/commit/changelog/index.ts +234 -0
- package/src/commit/changelog/parse.ts +44 -0
- package/src/commit/cli.ts +85 -0
- package/src/commit/git/diff.ts +148 -0
- package/src/commit/index.ts +5 -0
- package/src/commit/map-reduce/index.ts +69 -0
- package/src/commit/map-reduce/map-phase.ts +193 -0
- package/src/commit/map-reduce/reduce-phase.ts +49 -0
- package/src/commit/map-reduce/utils.ts +9 -0
- package/src/commit/message.ts +11 -0
- package/src/commit/model-selection.ts +89 -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/shared-llm.ts +70 -0
- package/src/commit/types.ts +118 -0
- package/src/commit/utils/exclusions.ts +42 -0
- package/src/commit/utils.ts +58 -0
- package/src/config/api-key-resolver.ts +67 -0
- package/src/config/append-only-context-mode.ts +76 -0
- package/src/config/config-file.ts +315 -0
- package/src/config/file-lock.ts +164 -0
- package/src/config/keybindings.ts +634 -0
- package/src/config/mcp-schema.json +238 -0
- package/src/config/model-discovery.ts +589 -0
- package/src/config/model-registry.ts +2260 -0
- package/src/config/model-resolver.ts +1819 -0
- package/src/config/model-roles.ts +99 -0
- package/src/config/models-config-schema.ts +266 -0
- package/src/config/models-config.ts +131 -0
- package/src/config/prompt-templates.ts +185 -0
- package/src/config/resolve-config-value.ts +94 -0
- package/src/config/settings-schema.ts +4740 -0
- package/src/config/settings.ts +1243 -0
- package/src/config.ts +242 -0
- package/src/cursor.ts +340 -0
- package/src/dap/client.ts +760 -0
- package/src/dap/config.ts +189 -0
- package/src/dap/defaults.json +212 -0
- package/src/dap/index.ts +4 -0
- package/src/dap/session.ts +1441 -0
- package/src/dap/types.ts +610 -0
- package/src/debug/index.ts +559 -0
- package/src/debug/log-formatting.ts +58 -0
- package/src/debug/log-viewer.ts +908 -0
- package/src/debug/profiler.ts +162 -0
- package/src/debug/protocol-probe.ts +267 -0
- package/src/debug/raw-sse-buffer.ts +294 -0
- package/src/debug/raw-sse.ts +292 -0
- package/src/debug/remote-debugger.ts +151 -0
- package/src/debug/report-bundle.ts +375 -0
- package/src/debug/system-info.ts +111 -0
- package/src/debug/terminal-info.ts +124 -0
- package/src/discovery/agents-md.ts +67 -0
- package/src/discovery/agents.ts +230 -0
- package/src/discovery/at-imports.ts +273 -0
- package/src/discovery/builtin-defaults.ts +39 -0
- package/src/discovery/builtin-rules/index.ts +63 -0
- package/src/discovery/builtin-rules/low-end/no-hallucinated-apis.md +14 -0
- package/src/discovery/builtin-rules/low-end/no-hallucinated-paths.md +14 -0
- package/src/discovery/builtin-rules/low-end/no-premature-completion.md +14 -0
- package/src/discovery/builtin-rules/rs-box-leak.md +48 -0
- package/src/discovery/builtin-rules/rs-future-prelude.md +23 -0
- package/src/discovery/builtin-rules/rs-lazylock.md +51 -0
- package/src/discovery/builtin-rules/rs-match-ergonomics.md +67 -0
- package/src/discovery/builtin-rules/rs-parking-lot.md +44 -0
- package/src/discovery/builtin-rules/rs-result-type.md +19 -0
- package/src/discovery/builtin-rules/ts-bare-catch.md +38 -0
- package/src/discovery/builtin-rules/ts-import-type.md +42 -0
- package/src/discovery/builtin-rules/ts-no-any.md +65 -0
- package/src/discovery/builtin-rules/ts-no-deprecated-leftovers.md +44 -0
- package/src/discovery/builtin-rules/ts-no-dynamic-import.md +39 -0
- package/src/discovery/builtin-rules/ts-no-inline-cast-access.md +55 -0
- package/src/discovery/builtin-rules/ts-no-return-type.md +44 -0
- package/src/discovery/builtin-rules/ts-no-test-timers.md +55 -0
- package/src/discovery/builtin-rules/ts-no-tiny-functions.md +51 -0
- package/src/discovery/builtin-rules/ts-promise-with-resolvers.md +65 -0
- package/src/discovery/builtin-rules/ts-redundant-clear-guard.md +75 -0
- package/src/discovery/builtin-rules/ts-set-map.md +28 -0
- package/src/discovery/builtin.ts +934 -0
- package/src/discovery/claude-plugins.ts +386 -0
- package/src/discovery/claude.ts +584 -0
- package/src/discovery/cline.ts +83 -0
- package/src/discovery/codex.ts +522 -0
- package/src/discovery/cursor.ts +220 -0
- package/src/discovery/gemini.ts +383 -0
- package/src/discovery/github.ts +337 -0
- package/src/discovery/helpers.ts +1092 -0
- package/src/discovery/index.ts +81 -0
- package/src/discovery/mcp-json.ts +172 -0
- package/src/discovery/omp-extension-roots.ts +190 -0
- package/src/discovery/omp-plugins.ts +383 -0
- package/src/discovery/opencode.ts +398 -0
- package/src/discovery/plugin-dir-roots.ts +28 -0
- package/src/discovery/ssh.ts +153 -0
- package/src/discovery/substitute-plugin-root.ts +29 -0
- package/src/discovery/vscode.ts +105 -0
- package/src/discovery/windsurf.ts +147 -0
- package/src/edit/apply-patch/index.ts +87 -0
- package/src/edit/apply-patch/parser.ts +174 -0
- package/src/edit/diff.ts +999 -0
- package/src/edit/file-snapshot-store.ts +143 -0
- package/src/edit/hashline/block-resolver.ts +33 -0
- package/src/edit/hashline/diff.ts +290 -0
- package/src/edit/hashline/execute.ts +237 -0
- package/src/edit/hashline/filesystem.ts +130 -0
- package/src/edit/hashline/index.ts +5 -0
- package/src/edit/hashline/noop-loop-guard.ts +99 -0
- package/src/edit/hashline/params.ts +19 -0
- package/src/edit/index.ts +620 -0
- package/src/edit/modes/apply-patch.lark +19 -0
- package/src/edit/modes/apply-patch.ts +53 -0
- package/src/edit/modes/patch.ts +1888 -0
- package/src/edit/modes/replace.ts +1133 -0
- package/src/edit/normalize.ts +345 -0
- package/src/edit/notebook.ts +242 -0
- package/src/edit/read-file.ts +25 -0
- package/src/edit/renderer.ts +823 -0
- package/src/edit/streaming.ts +517 -0
- package/src/eval/__tests__/agent-bridge.test.ts +769 -0
- package/src/eval/__tests__/bridge-timeout.test.ts +64 -0
- package/src/eval/__tests__/budget-bridge.test.ts +69 -0
- package/src/eval/__tests__/completion-bridge.test.ts +412 -0
- package/src/eval/__tests__/helpers-local-roots.test.ts +58 -0
- package/src/eval/__tests__/idle-timeout.test.ts +80 -0
- package/src/eval/__tests__/js-context-manager.test.ts +291 -0
- package/src/eval/__tests__/kernel-spawn.test.ts +103 -0
- package/src/eval/__tests__/prelude-agent.test.ts +73 -0
- package/src/eval/agent-bridge.ts +319 -0
- package/src/eval/backend.ts +71 -0
- package/src/eval/bridge-timeout.ts +44 -0
- package/src/eval/budget-bridge.ts +48 -0
- package/src/eval/completion-bridge.ts +211 -0
- package/src/eval/concurrency-bridge.ts +34 -0
- package/src/eval/idle-timeout.ts +91 -0
- package/src/eval/index.ts +4 -0
- package/src/eval/js/context-manager.ts +621 -0
- package/src/eval/js/executor.ts +173 -0
- package/src/eval/js/index.ts +51 -0
- package/src/eval/js/shared/helpers.ts +283 -0
- package/src/eval/js/shared/indirect-eval.ts +30 -0
- package/src/eval/js/shared/local-module-loader.ts +342 -0
- package/src/eval/js/shared/prelude.ts +2 -0
- package/src/eval/js/shared/prelude.txt +307 -0
- package/src/eval/js/shared/rewrite-imports.ts +532 -0
- package/src/eval/js/shared/runtime.ts +580 -0
- package/src/eval/js/shared/types.ts +18 -0
- package/src/eval/js/tool-bridge.ts +163 -0
- package/src/eval/js/worker-core.ts +151 -0
- package/src/eval/js/worker-entry.ts +37 -0
- package/src/eval/js/worker-protocol.ts +47 -0
- package/src/eval/py/__tests__/prelude.test.ts +19 -0
- package/src/eval/py/display.ts +71 -0
- package/src/eval/py/executor.ts +742 -0
- package/src/eval/py/index.ts +68 -0
- package/src/eval/py/kernel.ts +748 -0
- package/src/eval/py/prelude.py +683 -0
- package/src/eval/py/prelude.ts +3 -0
- package/src/eval/py/runner.py +1177 -0
- package/src/eval/py/runtime.ts +276 -0
- package/src/eval/py/spawn-options.ts +126 -0
- package/src/eval/py/tool-bridge.ts +182 -0
- package/src/eval/session-id.ts +8 -0
- package/src/eval/types.ts +48 -0
- package/src/exa/index.ts +2 -0
- package/src/exa/mcp-client.ts +370 -0
- package/src/exa/types.ts +69 -0
- package/src/exec/bash-executor.ts +434 -0
- package/src/exec/exec.ts +53 -0
- package/src/exec/non-interactive-env.ts +119 -0
- package/src/export/custom-share.ts +65 -0
- package/src/export/html/index.ts +266 -0
- package/src/export/html/share-loader.js +102 -0
- package/src/export/html/template.css +1337 -0
- package/src/export/html/template.html +49 -0
- package/src/export/html/template.js +1626 -0
- package/src/export/html/tool-views.generated.js +37 -0
- package/src/export/html/vendor/highlight.min.js +1213 -0
- package/src/export/html/vendor/marked.min.js +6 -0
- package/src/export/share.ts +268 -0
- package/src/export/ttsr.ts +583 -0
- package/src/extensibility/custom-commands/bundled/ci-green/index.ts +54 -0
- package/src/extensibility/custom-commands/bundled/review/index.ts +698 -0
- package/src/extensibility/custom-commands/index.ts +2 -0
- package/src/extensibility/custom-commands/loader.ts +242 -0
- package/src/extensibility/custom-commands/types.ts +119 -0
- package/src/extensibility/custom-tools/index.ts +7 -0
- package/src/extensibility/custom-tools/loader.ts +268 -0
- package/src/extensibility/custom-tools/types.ts +277 -0
- package/src/extensibility/custom-tools/wrapper.ts +47 -0
- package/src/extensibility/extensions/compact-handler.ts +40 -0
- package/src/extensibility/extensions/get-commands-handler.ts +78 -0
- package/src/extensibility/extensions/index.ts +16 -0
- package/src/extensibility/extensions/loader.ts +587 -0
- package/src/extensibility/extensions/model-api.ts +41 -0
- package/src/extensibility/extensions/runner.ts +989 -0
- package/src/extensibility/extensions/types.ts +1394 -0
- package/src/extensibility/extensions/wrapper.ts +259 -0
- package/src/extensibility/hooks/index.ts +6 -0
- package/src/extensibility/hooks/loader.ts +262 -0
- package/src/extensibility/hooks/runner.ts +425 -0
- package/src/extensibility/hooks/tool-wrapper.ts +107 -0
- package/src/extensibility/hooks/types.ts +613 -0
- package/src/extensibility/legacy-pi-ai-shim.ts +61 -0
- package/src/extensibility/legacy-pi-coding-agent-shim.ts +128 -0
- package/src/extensibility/plugins/doctor.ts +65 -0
- package/src/extensibility/plugins/git-url.ts +367 -0
- package/src/extensibility/plugins/index.ts +9 -0
- package/src/extensibility/plugins/installer.ts +192 -0
- package/src/extensibility/plugins/legacy-pi-compat.ts +712 -0
- package/src/extensibility/plugins/loader.ts +458 -0
- package/src/extensibility/plugins/manager.ts +1026 -0
- package/src/extensibility/plugins/marketplace/cache.ts +136 -0
- package/src/extensibility/plugins/marketplace/fetcher.ts +315 -0
- package/src/extensibility/plugins/marketplace/index.ts +6 -0
- package/src/extensibility/plugins/marketplace/manager.ts +770 -0
- package/src/extensibility/plugins/marketplace/registry.ts +196 -0
- package/src/extensibility/plugins/marketplace/source-resolver.ts +147 -0
- package/src/extensibility/plugins/marketplace/types.ts +191 -0
- package/src/extensibility/plugins/marketplace-auto-update.ts +49 -0
- package/src/extensibility/plugins/parser.ts +105 -0
- package/src/extensibility/plugins/runtime-config.ts +9 -0
- package/src/extensibility/plugins/types.ts +194 -0
- package/src/extensibility/shared-events.ts +367 -0
- package/src/extensibility/skills.ts +408 -0
- package/src/extensibility/slash-commands.ts +131 -0
- package/src/extensibility/tool-proxy.ts +28 -0
- package/src/extensibility/typebox.ts +945 -0
- package/src/extensibility/utils.ts +44 -0
- package/src/goals/guided-setup.ts +142 -0
- package/src/goals/index.ts +3 -0
- package/src/goals/runtime.ts +521 -0
- package/src/goals/state.ts +37 -0
- package/src/goals/tools/goal-tool.ts +251 -0
- package/src/hindsight/backend.ts +354 -0
- package/src/hindsight/bank.ts +156 -0
- package/src/hindsight/client.ts +623 -0
- package/src/hindsight/config.ts +175 -0
- package/src/hindsight/content.ts +210 -0
- package/src/hindsight/index.ts +8 -0
- package/src/hindsight/mental-models.ts +429 -0
- package/src/hindsight/seeds.json +32 -0
- package/src/hindsight/state.ts +492 -0
- package/src/hindsight/transcript.ts +71 -0
- package/src/index.ts +66 -0
- package/src/internal-urls/agent-protocol.ts +146 -0
- package/src/internal-urls/artifact-protocol.ts +107 -0
- package/src/internal-urls/docs-index.generated.txt +2 -0
- package/src/internal-urls/docs-index.ts +102 -0
- package/src/internal-urls/history-protocol.ts +118 -0
- package/src/internal-urls/index.ts +25 -0
- package/src/internal-urls/issue-pr-protocol.ts +594 -0
- package/src/internal-urls/json-query.ts +126 -0
- package/src/internal-urls/local-protocol.ts +309 -0
- package/src/internal-urls/mcp-protocol.ts +151 -0
- package/src/internal-urls/memory-protocol.ts +169 -0
- package/src/internal-urls/omp-protocol.ts +94 -0
- package/src/internal-urls/parse.ts +72 -0
- package/src/internal-urls/registry-helpers.ts +25 -0
- package/src/internal-urls/router.ts +105 -0
- package/src/internal-urls/rule-protocol.ts +45 -0
- package/src/internal-urls/skill-protocol.ts +96 -0
- package/src/internal-urls/types.ts +152 -0
- package/src/internal-urls/vault-protocol.ts +936 -0
- package/src/irc/bus.ts +311 -0
- package/src/lib/xai-http.ts +124 -0
- package/src/lsp/client.ts +1217 -0
- package/src/lsp/clients/biome-client.ts +264 -0
- package/src/lsp/clients/index.ts +50 -0
- package/src/lsp/clients/lsp-linter-client.ts +85 -0
- package/src/lsp/clients/swiftlint-client.ts +120 -0
- package/src/lsp/config.ts +502 -0
- package/src/lsp/defaults.json +499 -0
- package/src/lsp/diagnostics-ledger.ts +51 -0
- package/src/lsp/edits.ts +267 -0
- package/src/lsp/format-options.ts +119 -0
- package/src/lsp/index.ts +2480 -0
- package/src/lsp/lspmux.ts +233 -0
- package/src/lsp/render.ts +668 -0
- package/src/lsp/startup-events.ts +13 -0
- package/src/lsp/types.ts +444 -0
- package/src/lsp/utils.ts +718 -0
- package/src/main.ts +1421 -0
- package/src/markit/NOTICE +32 -0
- package/src/markit/converters/docx.ts +56 -0
- package/src/markit/converters/epub.ts +136 -0
- package/src/markit/converters/mammoth.d.ts +24 -0
- package/src/markit/converters/pdf/columns.ts +103 -0
- package/src/markit/converters/pdf/extract.ts +574 -0
- package/src/markit/converters/pdf/grid.ts +780 -0
- package/src/markit/converters/pdf/headers.ts +106 -0
- package/src/markit/converters/pdf/index.ts +146 -0
- package/src/markit/converters/pdf/render.ts +501 -0
- package/src/markit/converters/pdf/types.ts +84 -0
- package/src/markit/converters/pptx.ts +325 -0
- package/src/markit/converters/xlsx.ts +173 -0
- package/src/markit/index.ts +2 -0
- package/src/markit/registry.ts +59 -0
- package/src/markit/types.ts +35 -0
- package/src/mcp/client.ts +509 -0
- package/src/mcp/config-writer.ts +229 -0
- package/src/mcp/config.ts +365 -0
- package/src/mcp/index.ts +29 -0
- package/src/mcp/json-rpc.ts +122 -0
- package/src/mcp/loader.ts +124 -0
- package/src/mcp/manager.ts +1326 -0
- package/src/mcp/oauth-credentials.ts +104 -0
- package/src/mcp/oauth-discovery.ts +467 -0
- package/src/mcp/oauth-flow.ts +555 -0
- package/src/mcp/render.ts +155 -0
- package/src/mcp/smithery-auth.ts +104 -0
- package/src/mcp/smithery-connect.ts +145 -0
- package/src/mcp/smithery-registry.ts +477 -0
- package/src/mcp/startup-events.ts +21 -0
- package/src/mcp/timeout.ts +59 -0
- package/src/mcp/tool-bridge.ts +429 -0
- package/src/mcp/tool-cache.ts +117 -0
- package/src/mcp/transports/http.ts +519 -0
- package/src/mcp/transports/index.ts +6 -0
- package/src/mcp/transports/stdio.ts +606 -0
- package/src/mcp/types.ts +427 -0
- package/src/memories/index.ts +1281 -0
- package/src/memories/storage.ts +578 -0
- package/src/memory-backend/index.ts +18 -0
- package/src/memory-backend/local-backend.ts +45 -0
- package/src/memory-backend/off-backend.ts +25 -0
- package/src/memory-backend/resolve.ts +25 -0
- package/src/memory-backend/runtime.ts +66 -0
- package/src/memory-backend/types.ts +166 -0
- package/src/mnemopi/backend.ts +612 -0
- package/src/mnemopi/config.ts +265 -0
- package/src/mnemopi/embed-client.ts +401 -0
- package/src/mnemopi/embed-protocol.ts +35 -0
- package/src/mnemopi/embed-worker.ts +113 -0
- package/src/mnemopi/index.ts +3 -0
- package/src/mnemopi/state.ts +657 -0
- package/src/modes/acp/acp-agent.ts +2362 -0
- package/src/modes/acp/acp-client-bridge.ts +154 -0
- package/src/modes/acp/acp-event-mapper.ts +933 -0
- package/src/modes/acp/acp-mode.ts +23 -0
- package/src/modes/acp/index.ts +2 -0
- package/src/modes/acp/terminal-auth.ts +37 -0
- package/src/modes/components/__tests__/skill-message.test.ts +92 -0
- package/src/modes/components/advisor-message.ts +99 -0
- package/src/modes/components/agent-dashboard.ts +1206 -0
- package/src/modes/components/agent-hub.ts +566 -0
- package/src/modes/components/agent-transcript-viewer.ts +461 -0
- package/src/modes/components/assistant-message.ts +612 -0
- package/src/modes/components/background-tan-message.ts +36 -0
- package/src/modes/components/bash-execution.ts +220 -0
- package/src/modes/components/bordered-loader.ts +41 -0
- package/src/modes/components/btw-panel.ts +112 -0
- package/src/modes/components/cache-invalidation-marker.ts +110 -0
- package/src/modes/components/chat-block.ts +111 -0
- package/src/modes/components/chat-transcript-builder.ts +476 -0
- package/src/modes/components/collab-prompt-message.ts +32 -0
- package/src/modes/components/compaction-summary-message.ts +215 -0
- package/src/modes/components/copy-selector.ts +206 -0
- package/src/modes/components/countdown-timer.ts +75 -0
- package/src/modes/components/custom-editor.test.ts +142 -0
- package/src/modes/components/custom-editor.ts +620 -0
- package/src/modes/components/custom-message.ts +67 -0
- package/src/modes/components/diff.ts +254 -0
- package/src/modes/components/dynamic-border.ts +34 -0
- package/src/modes/components/error-banner.ts +33 -0
- package/src/modes/components/eval-execution.ts +158 -0
- package/src/modes/components/execution-shared.ts +101 -0
- package/src/modes/components/extensions/extension-dashboard.ts +399 -0
- package/src/modes/components/extensions/extension-list.ts +502 -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 +627 -0
- package/src/modes/components/extensions/types.ts +186 -0
- package/src/modes/components/footer.ts +275 -0
- package/src/modes/components/history-search.ts +280 -0
- package/src/modes/components/hook-editor.ts +167 -0
- package/src/modes/components/hook-input.ts +87 -0
- package/src/modes/components/hook-message.ts +67 -0
- package/src/modes/components/hook-selector.ts +659 -0
- package/src/modes/components/index.ts +38 -0
- package/src/modes/components/keybinding-hints.ts +65 -0
- package/src/modes/components/late-diagnostics-message.ts +60 -0
- package/src/modes/components/login-dialog.ts +164 -0
- package/src/modes/components/logout-account-selector.ts +130 -0
- package/src/modes/components/mcp-add-wizard.ts +1360 -0
- package/src/modes/components/message-frame.ts +92 -0
- package/src/modes/components/model-selector.ts +1315 -0
- package/src/modes/components/oauth-selector.ts +457 -0
- package/src/modes/components/omfg-panel.ts +141 -0
- package/src/modes/components/overlay-box.ts +109 -0
- package/src/modes/components/plan-review-overlay.ts +847 -0
- package/src/modes/components/plan-toc.ts +138 -0
- package/src/modes/components/plugin-selector.ts +95 -0
- package/src/modes/components/plugin-settings.ts +739 -0
- package/src/modes/components/queue-mode-selector.ts +56 -0
- package/src/modes/components/read-tool-group.ts +676 -0
- package/src/modes/components/reset-usage-selector.ts +161 -0
- package/src/modes/components/segment-track.ts +89 -0
- package/src/modes/components/session-selector.ts +631 -0
- package/src/modes/components/settings-defs.ts +225 -0
- package/src/modes/components/settings-selector.ts +1095 -0
- package/src/modes/components/show-images-selector.ts +45 -0
- package/src/modes/components/skill-message.ts +110 -0
- package/src/modes/components/snapcompact-shape-preview-doc.md +18 -0
- package/src/modes/components/snapcompact-shape-preview.ts +192 -0
- package/src/modes/components/status-line/component.ts +1001 -0
- package/src/modes/components/status-line/context-thresholds.ts +78 -0
- package/src/modes/components/status-line/git-utils.ts +42 -0
- package/src/modes/components/status-line/index.ts +5 -0
- package/src/modes/components/status-line/presets.ts +106 -0
- package/src/modes/components/status-line/segments.ts +616 -0
- package/src/modes/components/status-line/separators.ts +55 -0
- package/src/modes/components/status-line/token-rate.ts +66 -0
- package/src/modes/components/status-line/types.ts +124 -0
- package/src/modes/components/theme-selector.ts +63 -0
- package/src/modes/components/thinking-selector.ts +52 -0
- package/src/modes/components/tiny-title-download-progress.ts +90 -0
- package/src/modes/components/tips.txt +24 -0
- package/src/modes/components/todo-reminder.ts +39 -0
- package/src/modes/components/tool-execution.ts +1165 -0
- package/src/modes/components/transcript-container.ts +806 -0
- package/src/modes/components/tree-selector.ts +994 -0
- package/src/modes/components/ttsr-notification.ts +123 -0
- package/src/modes/components/usage-row.ts +18 -0
- package/src/modes/components/user-message-selector.ts +227 -0
- package/src/modes/components/user-message.ts +68 -0
- package/src/modes/components/visual-truncate.ts +63 -0
- package/src/modes/components/welcome.ts +581 -0
- package/src/modes/controllers/btw-controller.ts +173 -0
- package/src/modes/controllers/command-controller-shared.ts +109 -0
- package/src/modes/controllers/command-controller.ts +1653 -0
- package/src/modes/controllers/event-controller.ts +1153 -0
- package/src/modes/controllers/extension-ui-controller.ts +893 -0
- package/src/modes/controllers/input-controller.ts +1627 -0
- package/src/modes/controllers/mcp-command-controller.ts +2162 -0
- package/src/modes/controllers/omfg-controller.ts +283 -0
- package/src/modes/controllers/omfg-rule.ts +647 -0
- package/src/modes/controllers/selector-controller.ts +1285 -0
- package/src/modes/controllers/session-focus-controller.ts +112 -0
- package/src/modes/controllers/ssh-command-controller.ts +384 -0
- package/src/modes/controllers/streaming-reveal.ts +295 -0
- package/src/modes/controllers/tan-command-controller.ts +190 -0
- package/src/modes/controllers/todo-command-controller.ts +485 -0
- package/src/modes/controllers/tool-args-reveal.ts +174 -0
- package/src/modes/data/emojis.json +1 -0
- package/src/modes/emoji-autocomplete.ts +285 -0
- package/src/modes/gradient-highlight.ts +99 -0
- package/src/modes/image-references.ts +137 -0
- package/src/modes/index.ts +17 -0
- package/src/modes/interactive-mode.ts +3940 -0
- package/src/modes/internal-url-autocomplete.ts +143 -0
- package/src/modes/loop-limit.ts +192 -0
- package/src/modes/magic-keywords.ts +42 -0
- package/src/modes/markdown-prose.ts +247 -0
- package/src/modes/oauth-manual-input.ts +69 -0
- package/src/modes/orchestrate.ts +42 -0
- package/src/modes/print-mode.ts +130 -0
- package/src/modes/prompt-action-autocomplete.ts +260 -0
- package/src/modes/rpc/host-tools.ts +186 -0
- package/src/modes/rpc/host-uris.ts +235 -0
- package/src/modes/rpc/rpc-client.ts +995 -0
- package/src/modes/rpc/rpc-mode.ts +1156 -0
- package/src/modes/rpc/rpc-subagents.ts +265 -0
- package/src/modes/rpc/rpc-types.ts +487 -0
- package/src/modes/runtime-init.ts +142 -0
- package/src/modes/session-observer-registry.ts +215 -0
- package/src/modes/setup-version.ts +11 -0
- package/src/modes/setup-wizard/index.ts +101 -0
- package/src/modes/setup-wizard/lazy.ts +16 -0
- package/src/modes/setup-wizard/scenes/glyph.ts +114 -0
- package/src/modes/setup-wizard/scenes/outro.ts +35 -0
- package/src/modes/setup-wizard/scenes/providers.ts +103 -0
- package/src/modes/setup-wizard/scenes/sign-in.ts +286 -0
- package/src/modes/setup-wizard/scenes/splash.ts +201 -0
- package/src/modes/setup-wizard/scenes/theme.ts +326 -0
- package/src/modes/setup-wizard/scenes/types.ts +57 -0
- package/src/modes/setup-wizard/scenes/web-search.ts +145 -0
- package/src/modes/setup-wizard/startup-splash.ts +107 -0
- package/src/modes/setup-wizard/wizard-overlay.ts +334 -0
- package/src/modes/shared.ts +49 -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-poimandres.json +142 -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 +199 -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-poimandres.json +142 -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 +92 -0
- package/src/modes/theme/shimmer.ts +235 -0
- package/src/modes/theme/theme-schema.json +459 -0
- package/src/modes/theme/theme.ts +2915 -0
- package/src/modes/turn-budget.ts +31 -0
- package/src/modes/types.ts +406 -0
- package/src/modes/ultrathink.ts +41 -0
- package/src/modes/utils/context-usage.ts +432 -0
- package/src/modes/utils/copy-targets.ts +360 -0
- package/src/modes/utils/hotkeys-markdown.ts +62 -0
- package/src/modes/utils/keybinding-matchers.ts +51 -0
- package/src/modes/utils/tools-markdown.ts +27 -0
- package/src/modes/utils/ui-helpers.ts +886 -0
- package/src/modes/workflow.ts +42 -0
- package/src/plan-mode/approved-plan.ts +186 -0
- package/src/plan-mode/plan-handoff.ts +37 -0
- package/src/plan-mode/plan-protection.ts +31 -0
- package/src/plan-mode/state.ts +6 -0
- package/src/priority.json +45 -0
- package/src/prompts/advisor/advise-tool.md +3 -0
- package/src/prompts/advisor/system.md +113 -0
- package/src/prompts/agents/designer.md +74 -0
- package/src/prompts/agents/explore.md +58 -0
- package/src/prompts/agents/frontmatter.md +11 -0
- package/src/prompts/agents/init.md +33 -0
- package/src/prompts/agents/librarian.md +119 -0
- package/src/prompts/agents/oracle.md +54 -0
- package/src/prompts/agents/plan.md +48 -0
- package/src/prompts/agents/reviewer.md +139 -0
- package/src/prompts/agents/task.md +17 -0
- package/src/prompts/bench.md +12 -0
- package/src/prompts/ci-green-request.md +36 -0
- package/src/prompts/dry-balance-bench.md +8 -0
- package/src/prompts/goals/goal-budget-limit.md +16 -0
- package/src/prompts/goals/goal-continuation.md +28 -0
- package/src/prompts/goals/goal-mode-active.md +23 -0
- package/src/prompts/goals/guided-goal-interview.md +8 -0
- package/src/prompts/goals/guided-goal-system.md +12 -0
- package/src/prompts/low-end/system.md +47 -0
- package/src/prompts/memories/consolidation.md +30 -0
- package/src/prompts/memories/consolidation_system.md +4 -0
- package/src/prompts/memories/read-path.md +17 -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-custom-request.md +22 -0
- package/src/prompts/review-headless-request.md +16 -0
- package/src/prompts/review-request.md +69 -0
- package/src/prompts/steering/user-interjection.md +9 -0
- package/src/prompts/system/agent-creation-architect.md +50 -0
- package/src/prompts/system/agent-creation-user.md +6 -0
- package/src/prompts/system/auto-continue.md +1 -0
- package/src/prompts/system/auto-thinking-difficulty-local.md +14 -0
- package/src/prompts/system/auto-thinking-difficulty.md +12 -0
- package/src/prompts/system/autolearn-guidance-learn.md +1 -0
- package/src/prompts/system/autolearn-guidance.md +7 -0
- package/src/prompts/system/autolearn-nudge.md +3 -0
- package/src/prompts/system/background-tan-dispatch.md +8 -0
- package/src/prompts/system/btw-user.md +8 -0
- package/src/prompts/system/commit-message-system.md +14 -0
- package/src/prompts/system/custom-system-prompt.md +64 -0
- package/src/prompts/system/eager-task.md +7 -0
- package/src/prompts/system/eager-todo.md +18 -0
- package/src/prompts/system/empty-stop-retry.md +4 -0
- package/src/prompts/system/irc-autoreply.md +6 -0
- package/src/prompts/system/irc-incoming.md +7 -0
- package/src/prompts/system/manual-continue.md +7 -0
- package/src/prompts/system/memory-consolidation-system.md +8 -0
- package/src/prompts/system/memory-extraction-system.md +26 -0
- package/src/prompts/system/omfg-user.md +50 -0
- package/src/prompts/system/orchestrate-notice.md +40 -0
- package/src/prompts/system/personalities/default.md +18 -0
- package/src/prompts/system/personalities/friendly.md +17 -0
- package/src/prompts/system/personalities/pragmatic.md +15 -0
- package/src/prompts/system/plan-mode-active.md +109 -0
- package/src/prompts/system/plan-mode-approved.md +25 -0
- package/src/prompts/system/plan-mode-compact-instructions.md +16 -0
- package/src/prompts/system/plan-mode-reference.md +11 -0
- package/src/prompts/system/plan-mode-subagent.md +33 -0
- package/src/prompts/system/plan-mode-tool-decision-reminder.md +9 -0
- package/src/prompts/system/project-prompt.md +52 -0
- package/src/prompts/system/snapcompact-context-frames-note.md +1 -0
- package/src/prompts/system/snapcompact-context-stub.md +1 -0
- package/src/prompts/system/snapcompact-system-frames-note.md +1 -0
- package/src/prompts/system/snapcompact-system-stub.md +1 -0
- package/src/prompts/system/snapcompact-toolresult-note.md +1 -0
- package/src/prompts/system/subagent-system-prompt.md +71 -0
- package/src/prompts/system/subagent-user-prompt.md +3 -0
- package/src/prompts/system/subagent-yield-reminder.md +12 -0
- package/src/prompts/system/system-prompt.md +251 -0
- package/src/prompts/system/tiny-title-system.md +8 -0
- package/src/prompts/system/title-marker-instruction.md +1 -0
- package/src/prompts/system/title-system-marker.md +16 -0
- package/src/prompts/system/title-system.md +16 -0
- package/src/prompts/system/ttsr-interrupt.md +7 -0
- package/src/prompts/system/ttsr-tool-reminder.md +5 -0
- package/src/prompts/system/ultrathink-notice.md +3 -0
- package/src/prompts/system/unexpected-stop-classifier.md +17 -0
- package/src/prompts/system/unexpected-stop-retry.md +4 -0
- package/src/prompts/system/web-search.md +25 -0
- package/src/prompts/system/workflow-notice.md +70 -0
- package/src/prompts/tools/apply-patch.md +65 -0
- package/src/prompts/tools/ask.md +22 -0
- package/src/prompts/tools/ast-edit.md +22 -0
- package/src/prompts/tools/ast-grep.md +25 -0
- package/src/prompts/tools/async-result.md +8 -0
- package/src/prompts/tools/bash.md +45 -0
- package/src/prompts/tools/browser.md +42 -0
- package/src/prompts/tools/checkpoint.md +15 -0
- package/src/prompts/tools/debug.md +17 -0
- package/src/prompts/tools/eval.md +70 -0
- package/src/prompts/tools/find.md +19 -0
- package/src/prompts/tools/github.md +17 -0
- package/src/prompts/tools/goal.md +11 -0
- package/src/prompts/tools/image-attachment-describe-system.md +8 -0
- package/src/prompts/tools/image-attachment-describe.md +10 -0
- package/src/prompts/tools/image-gen.md +7 -0
- package/src/prompts/tools/inspect-image-system.md +20 -0
- package/src/prompts/tools/inspect-image.md +22 -0
- package/src/prompts/tools/irc.md +33 -0
- package/src/prompts/tools/job.md +17 -0
- package/src/prompts/tools/learn.md +7 -0
- package/src/prompts/tools/lsp-late-diagnostic.md +8 -0
- package/src/prompts/tools/lsp.md +39 -0
- package/src/prompts/tools/manage-skill.md +9 -0
- package/src/prompts/tools/memory-edit.md +8 -0
- package/src/prompts/tools/patch.md +57 -0
- package/src/prompts/tools/read.md +76 -0
- package/src/prompts/tools/recall.md +5 -0
- package/src/prompts/tools/reflect.md +5 -0
- package/src/prompts/tools/replace.md +29 -0
- package/src/prompts/tools/resolve.md +4 -0
- package/src/prompts/tools/retain.md +6 -0
- package/src/prompts/tools/rewind.md +13 -0
- package/src/prompts/tools/search-tool-bm25.md +32 -0
- package/src/prompts/tools/search.md +22 -0
- package/src/prompts/tools/ssh.md +22 -0
- package/src/prompts/tools/task-summary.md +17 -0
- package/src/prompts/tools/task.md +91 -0
- package/src/prompts/tools/todo.md +39 -0
- package/src/prompts/tools/web-search.md +6 -0
- package/src/prompts/tools/write.md +14 -0
- package/src/registry/agent-lifecycle.ts +270 -0
- package/src/registry/agent-registry.ts +190 -0
- package/src/sdk.ts +2919 -0
- package/src/secrets/index.ts +123 -0
- package/src/secrets/obfuscator.ts +298 -0
- package/src/secrets/regex.ts +21 -0
- package/src/session/agent-session.ts +12539 -0
- package/src/session/agent-storage.ts +478 -0
- package/src/session/artifacts.ts +153 -0
- package/src/session/auth-broker-config.ts +92 -0
- package/src/session/auth-storage.ts +24 -0
- package/src/session/blob-store.ts +255 -0
- package/src/session/client-bridge.ts +85 -0
- package/src/session/codex-auto-reset.ts +202 -0
- package/src/session/compact-modes.ts +105 -0
- package/src/session/history-storage.ts +361 -0
- package/src/session/indexed-session-storage.ts +427 -0
- package/src/session/messages.ts +546 -0
- package/src/session/redis-session-storage.ts +170 -0
- package/src/session/session-context.ts +399 -0
- package/src/session/session-dump-format.ts +216 -0
- package/src/session/session-entries.ts +198 -0
- package/src/session/session-history-format.ts +308 -0
- package/src/session/session-listing.ts +588 -0
- package/src/session/session-loader.ts +93 -0
- package/src/session/session-manager.ts +1748 -0
- package/src/session/session-migrations.ts +78 -0
- package/src/session/session-paths.ts +193 -0
- package/src/session/session-persistence.ts +147 -0
- package/src/session/session-storage.ts +590 -0
- package/src/session/shake-types.ts +43 -0
- package/src/session/snapcompact-inline.ts +542 -0
- package/src/session/snapcompact-savings-journal.ts +113 -0
- package/src/session/sql-session-storage.ts +314 -0
- package/src/session/streaming-output.ts +1330 -0
- package/src/session/tool-choice-queue.ts +290 -0
- package/src/session/unexpected-stop-classifier.ts +129 -0
- package/src/session/yield-queue.ts +183 -0
- package/src/slash-commands/acp-builtins.ts +70 -0
- package/src/slash-commands/available-commands.ts +105 -0
- package/src/slash-commands/builtin-registry.ts +2332 -0
- package/src/slash-commands/helpers/active-oauth-account.ts +44 -0
- package/src/slash-commands/helpers/collab-qrcode.ts +28 -0
- package/src/slash-commands/helpers/context-report.ts +66 -0
- package/src/slash-commands/helpers/format.ts +46 -0
- package/src/slash-commands/helpers/logout.ts +88 -0
- package/src/slash-commands/helpers/marketplace-manager.ts +25 -0
- package/src/slash-commands/helpers/mcp.ts +532 -0
- package/src/slash-commands/helpers/parse.ts +85 -0
- package/src/slash-commands/helpers/reset-usage.ts +66 -0
- package/src/slash-commands/helpers/ssh.ts +195 -0
- package/src/slash-commands/helpers/stats-dashboard.ts +85 -0
- package/src/slash-commands/helpers/todo.ts +279 -0
- package/src/slash-commands/helpers/usage-report.ts +128 -0
- package/src/slash-commands/marketplace-install-parser.ts +99 -0
- package/src/slash-commands/types.ts +135 -0
- package/src/ssh/config-writer.ts +183 -0
- package/src/ssh/connection-manager.ts +510 -0
- package/src/ssh/ssh-executor.ts +189 -0
- package/src/ssh/sshfs-mount.ts +140 -0
- package/src/ssh/utils.ts +8 -0
- package/src/startup-splash.ts +19 -0
- package/src/stt/asr-client.ts +521 -0
- package/src/stt/asr-protocol.ts +65 -0
- package/src/stt/asr-worker.ts +790 -0
- package/src/stt/downloader.ts +138 -0
- package/src/stt/endpointer.ts +259 -0
- package/src/stt/index.ts +7 -0
- package/src/stt/models.ts +150 -0
- package/src/stt/recorder.ts +538 -0
- package/src/stt/stt-controller.ts +380 -0
- package/src/stt/transcriber.ts +60 -0
- package/src/stt/wav.ts +173 -0
- package/src/system-prompt.ts +709 -0
- package/src/task/agents.ts +166 -0
- package/src/task/commands.ts +132 -0
- package/src/task/discovery.ts +122 -0
- package/src/task/executor.ts +2356 -0
- package/src/task/index.ts +1580 -0
- package/src/task/name-generator.ts +1577 -0
- package/src/task/omp-command.ts +26 -0
- package/src/task/output-manager.ts +93 -0
- package/src/task/parallel.ts +116 -0
- package/src/task/persisted-revive.ts +128 -0
- package/src/task/render.ts +1558 -0
- package/src/task/repair-args.ts +129 -0
- package/src/task/subprocess-tool-registry.ts +88 -0
- package/src/task/types.ts +401 -0
- package/src/task/worktree.ts +514 -0
- package/src/telemetry-export.ts +144 -0
- package/src/thinking.ts +187 -0
- package/src/tiny/device.ts +111 -0
- package/src/tiny/dtype.ts +101 -0
- package/src/tiny/models.ts +252 -0
- package/src/tiny/text.ts +169 -0
- package/src/tiny/title-client.ts +538 -0
- package/src/tiny/title-protocol.ts +56 -0
- package/src/tiny/worker.ts +491 -0
- package/src/tool-discovery/mode.ts +24 -0
- package/src/tool-discovery/tool-index.ts +271 -0
- package/src/tools/__tests__/json-tree.test.ts +35 -0
- package/src/tools/approval.ts +189 -0
- package/src/tools/ask.ts +977 -0
- package/src/tools/ast-edit.ts +700 -0
- package/src/tools/ast-grep.ts +483 -0
- package/src/tools/auto-generated-guard.ts +322 -0
- package/src/tools/bash-command-fixup.ts +37 -0
- package/src/tools/bash-interactive.ts +408 -0
- package/src/tools/bash-interceptor.ts +67 -0
- package/src/tools/bash-pty-selection.ts +14 -0
- package/src/tools/bash-skill-urls.ts +248 -0
- package/src/tools/bash.ts +1405 -0
- package/src/tools/browser/attach.ts +194 -0
- package/src/tools/browser/cmux/cmux-tab.ts +1264 -0
- package/src/tools/browser/cmux/rpc.ts +156 -0
- package/src/tools/browser/cmux/socket-client.ts +309 -0
- package/src/tools/browser/launch.ts +673 -0
- package/src/tools/browser/readable.ts +112 -0
- package/src/tools/browser/registry.ts +241 -0
- package/src/tools/browser/render.ts +221 -0
- package/src/tools/browser/tab-protocol.ts +107 -0
- package/src/tools/browser/tab-supervisor.ts +799 -0
- package/src/tools/browser/tab-worker-entry.ts +29 -0
- package/src/tools/browser/tab-worker.ts +1226 -0
- package/src/tools/browser.ts +403 -0
- package/src/tools/builtin-names.ts +34 -0
- package/src/tools/checkpoint.ts +136 -0
- package/src/tools/conflict-detect.ts +718 -0
- package/src/tools/context.ts +39 -0
- package/src/tools/debug.ts +1087 -0
- package/src/tools/eval-backends.ts +27 -0
- package/src/tools/eval-render.ts +762 -0
- package/src/tools/eval.ts +600 -0
- package/src/tools/fetch.ts +1902 -0
- package/src/tools/file-recorder.ts +35 -0
- package/src/tools/find.ts +629 -0
- package/src/tools/fs-cache-invalidation.ts +28 -0
- package/src/tools/gh-cache-invalidation.ts +255 -0
- package/src/tools/gh-format.ts +12 -0
- package/src/tools/gh-renderer.ts +481 -0
- package/src/tools/gh.ts +3752 -0
- package/src/tools/github-cache.ts +663 -0
- package/src/tools/grouped-file-output.ts +210 -0
- package/src/tools/image-gen.ts +1586 -0
- package/src/tools/index.ts +649 -0
- package/src/tools/inspect-image-renderer.ts +132 -0
- package/src/tools/inspect-image.ts +260 -0
- package/src/tools/irc.ts +788 -0
- package/src/tools/job.ts +612 -0
- package/src/tools/json-tree.ts +260 -0
- package/src/tools/jtd-to-json-schema.ts +219 -0
- package/src/tools/jtd-to-typescript.ts +136 -0
- package/src/tools/jtd-utils.ts +102 -0
- package/src/tools/learn.ts +141 -0
- package/src/tools/list-limit.ts +40 -0
- package/src/tools/manage-skill.ts +100 -0
- package/src/tools/match-line-format.ts +20 -0
- package/src/tools/memory-edit.ts +59 -0
- package/src/tools/memory-recall.ts +102 -0
- package/src/tools/memory-reflect.ts +88 -0
- package/src/tools/memory-render.ts +202 -0
- package/src/tools/memory-retain.ts +89 -0
- package/src/tools/output-meta.ts +768 -0
- package/src/tools/output-schema-validator.ts +132 -0
- package/src/tools/path-utils.ts +1116 -0
- package/src/tools/plan-mode-guard.ts +142 -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 +208 -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/read.ts +3124 -0
- package/src/tools/render-utils.ts +895 -0
- package/src/tools/renderers.ts +86 -0
- package/src/tools/report-tool-issue.ts +530 -0
- package/src/tools/resolve.ts +302 -0
- package/src/tools/review.ts +251 -0
- package/src/tools/search-tool-bm25.ts +351 -0
- package/src/tools/search.ts +1583 -0
- package/src/tools/sqlite-reader.ts +828 -0
- package/src/tools/ssh.ts +369 -0
- package/src/tools/todo.ts +938 -0
- package/src/tools/tool-errors.ts +62 -0
- package/src/tools/tool-result.ts +102 -0
- package/src/tools/tool-timeouts.ts +30 -0
- package/src/tools/tts.ts +265 -0
- package/src/tools/write.ts +1182 -0
- package/src/tools/yield.ts +269 -0
- package/src/tts/downloader.ts +64 -0
- package/src/tts/index.ts +8 -0
- package/src/tts/models.ts +137 -0
- package/src/tts/player.ts +137 -0
- package/src/tts/runtime.ts +21 -0
- package/src/tts/streaming-player.ts +266 -0
- package/src/tts/tts-client.ts +642 -0
- package/src/tts/tts-protocol.ts +60 -0
- package/src/tts/tts-worker.ts +505 -0
- package/src/tts/vocalizer.ts +162 -0
- package/src/tts/wav.ts +58 -0
- package/src/tui/code-cell.ts +257 -0
- package/src/tui/file-list.ts +55 -0
- package/src/tui/hyperlink.ts +178 -0
- package/src/tui/index.ts +13 -0
- package/src/tui/output-block.ts +240 -0
- package/src/tui/status-line.ts +54 -0
- package/src/tui/tree-list.ts +133 -0
- package/src/tui/types.ts +15 -0
- package/src/tui/utils.ts +103 -0
- package/src/tui/width-aware-text.ts +58 -0
- package/src/utils/block-context.ts +312 -0
- package/src/utils/changelog.ts +132 -0
- package/src/utils/clipboard.ts +262 -0
- package/src/utils/command-args.ts +76 -0
- package/src/utils/commit-message-generator.ts +147 -0
- package/src/utils/edit-mode.ts +41 -0
- package/src/utils/enhanced-paste.ts +230 -0
- package/src/utils/event-bus.ts +33 -0
- package/src/utils/external-editor.ts +78 -0
- package/src/utils/file-display-mode.ts +45 -0
- package/src/utils/file-mentions.ts +284 -0
- package/src/utils/git.ts +1838 -0
- package/src/utils/image-loading.ts +231 -0
- package/src/utils/image-resize.ts +309 -0
- package/src/utils/image-vision-fallback.ts +197 -0
- package/src/utils/ipc.ts +38 -0
- package/src/utils/jj.ts +248 -0
- package/src/utils/lang-from-path.ts +244 -0
- package/src/utils/markit.ts +143 -0
- package/src/utils/mupdf-wasm-embed.ts +12 -0
- package/src/utils/open.ts +55 -0
- package/src/utils/qrcode.ts +535 -0
- package/src/utils/session-color.ts +142 -0
- package/src/utils/shell-snapshot.ts +187 -0
- package/src/utils/sixel.ts +69 -0
- package/src/utils/thinking-display.ts +11 -0
- package/src/utils/title-generator.ts +416 -0
- package/src/utils/tool-choice.ts +49 -0
- package/src/utils/tools-manager.ts +372 -0
- package/src/utils/turndown.ts +83 -0
- package/src/utils/zip.ts +1091 -0
- package/src/web/kagi.ts +304 -0
- package/src/web/parallel.ts +353 -0
- package/src/web/scrapers/artifacthub.ts +207 -0
- package/src/web/scrapers/arxiv.ts +83 -0
- package/src/web/scrapers/aur.ts +162 -0
- package/src/web/scrapers/biorxiv.ts +133 -0
- package/src/web/scrapers/bluesky.ts +262 -0
- package/src/web/scrapers/brew.ts +172 -0
- package/src/web/scrapers/cheatsh.ts +68 -0
- package/src/web/scrapers/chocolatey.ts +196 -0
- package/src/web/scrapers/choosealicense.ts +95 -0
- package/src/web/scrapers/cisa-kev.ts +87 -0
- package/src/web/scrapers/clojars.ts +154 -0
- package/src/web/scrapers/coingecko.ts +177 -0
- package/src/web/scrapers/crates-io.ts +97 -0
- package/src/web/scrapers/crossref.ts +136 -0
- package/src/web/scrapers/devto.ts +147 -0
- package/src/web/scrapers/discogs.ts +306 -0
- package/src/web/scrapers/discourse.ts +197 -0
- package/src/web/scrapers/dockerhub.ts +138 -0
- package/src/web/scrapers/docs-rs.ts +652 -0
- package/src/web/scrapers/fdroid.ts +134 -0
- package/src/web/scrapers/firefox-addons.ts +191 -0
- package/src/web/scrapers/flathub.ts +223 -0
- package/src/web/scrapers/github-gist.ts +58 -0
- package/src/web/scrapers/github.ts +800 -0
- package/src/web/scrapers/gitlab.ts +401 -0
- package/src/web/scrapers/go-pkg.ts +266 -0
- package/src/web/scrapers/hackage.ts +140 -0
- package/src/web/scrapers/hackernews.ts +189 -0
- package/src/web/scrapers/hex.ts +105 -0
- package/src/web/scrapers/huggingface.ts +321 -0
- package/src/web/scrapers/iacr.ts +89 -0
- package/src/web/scrapers/index.ts +252 -0
- package/src/web/scrapers/jetbrains-marketplace.ts +159 -0
- package/src/web/scrapers/lemmy.ts +203 -0
- package/src/web/scrapers/lobsters.ts +175 -0
- package/src/web/scrapers/mastodon.ts +292 -0
- package/src/web/scrapers/maven.ts +138 -0
- package/src/web/scrapers/mdn.ts +173 -0
- package/src/web/scrapers/metacpan.ts +222 -0
- package/src/web/scrapers/musicbrainz.ts +250 -0
- package/src/web/scrapers/npm.ts +98 -0
- package/src/web/scrapers/nuget.ts +183 -0
- package/src/web/scrapers/nvd.ts +222 -0
- package/src/web/scrapers/ollama.ts +239 -0
- package/src/web/scrapers/open-vsx.ts +106 -0
- package/src/web/scrapers/opencorporates.ts +292 -0
- package/src/web/scrapers/openlibrary.ts +336 -0
- package/src/web/scrapers/orcid.ts +286 -0
- package/src/web/scrapers/osv.ts +176 -0
- package/src/web/scrapers/packagist.ts +160 -0
- package/src/web/scrapers/pub-dev.ts +143 -0
- package/src/web/scrapers/pubmed.ts +211 -0
- package/src/web/scrapers/pypi.ts +112 -0
- package/src/web/scrapers/rawg.ts +110 -0
- package/src/web/scrapers/readthedocs.ts +120 -0
- package/src/web/scrapers/reddit.ts +95 -0
- package/src/web/scrapers/repology.ts +251 -0
- package/src/web/scrapers/rfc.ts +201 -0
- package/src/web/scrapers/rubygems.ts +103 -0
- package/src/web/scrapers/searchcode.ts +189 -0
- package/src/web/scrapers/sec-edgar.ts +261 -0
- package/src/web/scrapers/semantic-scholar.ts +171 -0
- package/src/web/scrapers/snapcraft.ts +187 -0
- package/src/web/scrapers/sourcegraph.ts +336 -0
- package/src/web/scrapers/spdx.ts +108 -0
- package/src/web/scrapers/spotify.ts +198 -0
- package/src/web/scrapers/stackoverflow.ts +120 -0
- package/src/web/scrapers/terraform.ts +277 -0
- package/src/web/scrapers/tldr.ts +47 -0
- package/src/web/scrapers/twitter.ts +94 -0
- package/src/web/scrapers/types.ts +354 -0
- package/src/web/scrapers/utils.ts +109 -0
- package/src/web/scrapers/vimeo.ts +133 -0
- package/src/web/scrapers/vscode-marketplace.ts +187 -0
- package/src/web/scrapers/w3c.ts +156 -0
- package/src/web/scrapers/wikidata.ts +344 -0
- package/src/web/scrapers/wikipedia.ts +84 -0
- package/src/web/scrapers/youtube.ts +325 -0
- package/src/web/search/index.ts +317 -0
- package/src/web/search/provider.ts +169 -0
- package/src/web/search/providers/anthropic.ts +343 -0
- package/src/web/search/providers/base.ts +90 -0
- package/src/web/search/providers/brave.ts +152 -0
- package/src/web/search/providers/codex.ts +593 -0
- package/src/web/search/providers/exa.ts +400 -0
- package/src/web/search/providers/gemini.ts +518 -0
- package/src/web/search/providers/jina.ts +111 -0
- package/src/web/search/providers/kagi.ts +86 -0
- package/src/web/search/providers/kimi.ts +196 -0
- package/src/web/search/providers/parallel.ts +225 -0
- package/src/web/search/providers/perplexity-auth.ts +133 -0
- package/src/web/search/providers/perplexity.ts +866 -0
- package/src/web/search/providers/searxng.ts +325 -0
- package/src/web/search/providers/synthetic.ts +114 -0
- package/src/web/search/providers/tavily.ts +176 -0
- package/src/web/search/providers/utils.ts +128 -0
- package/src/web/search/providers/zai.ts +333 -0
- package/src/web/search/render.ts +262 -0
- package/src/web/search/types.ts +462 -0
- package/src/web/search/utils.ts +17 -0
- package/src/workspace-tree.ts +326 -0
|
@@ -0,0 +1,4740 @@
|
|
|
1
|
+
import { THINKING_EFFORTS } from "@oh-my-pi/pi-ai";
|
|
2
|
+
import { DEFAULT_SHARE_URL } from "@oh-my-pi/pi-wire";
|
|
3
|
+
import { SHAPE_VARIANT_NAMES } from "@oh-my-pi/snapcompact";
|
|
4
|
+
import { DEFAULT_RELAY_URL } from "../collab/protocol";
|
|
5
|
+
import { DEFAULT_STT_MODEL_KEY, STT_MODEL_OPTIONS, STT_MODEL_VALUES } from "../stt/models";
|
|
6
|
+
import { AUTO_THINKING, getConfiguredThinkingLevelMetadata, getThinkingLevelMetadata } from "../thinking";
|
|
7
|
+
import {
|
|
8
|
+
TINY_MODEL_DEVICE_DEFAULT,
|
|
9
|
+
TINY_MODEL_DEVICE_SETTING_OPTIONS,
|
|
10
|
+
TINY_MODEL_DEVICE_SETTING_VALUES,
|
|
11
|
+
} from "../tiny/device";
|
|
12
|
+
import {
|
|
13
|
+
TINY_MODEL_DTYPE_DEFAULT,
|
|
14
|
+
TINY_MODEL_DTYPE_SETTING_OPTIONS,
|
|
15
|
+
TINY_MODEL_DTYPE_SETTING_VALUES,
|
|
16
|
+
} from "../tiny/dtype";
|
|
17
|
+
import {
|
|
18
|
+
AUTO_THINKING_MODEL_OPTIONS,
|
|
19
|
+
AUTO_THINKING_MODEL_VALUES,
|
|
20
|
+
ONLINE_AUTO_THINKING_MODEL_KEY,
|
|
21
|
+
ONLINE_MEMORY_MODEL_KEY,
|
|
22
|
+
ONLINE_TINY_TITLE_MODEL_KEY,
|
|
23
|
+
TINY_MEMORY_MODEL_OPTIONS,
|
|
24
|
+
TINY_MEMORY_MODEL_VALUES,
|
|
25
|
+
TINY_TITLE_MODEL_OPTIONS,
|
|
26
|
+
TINY_TITLE_MODEL_VALUES,
|
|
27
|
+
} from "../tiny/models";
|
|
28
|
+
import {
|
|
29
|
+
DEFAULT_TTS_LOCAL_MODEL_KEY,
|
|
30
|
+
DEFAULT_TTS_VOICE,
|
|
31
|
+
TTS_LOCAL_MODEL_OPTIONS,
|
|
32
|
+
TTS_LOCAL_MODEL_VALUES,
|
|
33
|
+
TTS_LOCAL_VOICE_OPTIONS,
|
|
34
|
+
TTS_LOCAL_VOICE_VALUES,
|
|
35
|
+
} from "../tts/models";
|
|
36
|
+
import { EDIT_MODES } from "../utils/edit-mode";
|
|
37
|
+
import { SEARCH_PROVIDER_OPTIONS, SEARCH_PROVIDER_PREFERENCES, type SearchProviderId } from "../web/search/types";
|
|
38
|
+
|
|
39
|
+
/** Unified settings schema - single source of truth for all settings.
|
|
40
|
+
*
|
|
41
|
+
* Each setting is defined once here with:
|
|
42
|
+
* - Type and default value
|
|
43
|
+
* - Optional UI metadata (label, description, tab, group)
|
|
44
|
+
*
|
|
45
|
+
* UI metadata places the setting in the settings panel: `tab` picks the
|
|
46
|
+
* panel tab, `group` the titled section within it (registered in
|
|
47
|
+
* TAB_GROUPS). Sections render in TAB_GROUPS order; settings within a
|
|
48
|
+
* section keep declaration order.
|
|
49
|
+
*
|
|
50
|
+
* The Settings singleton provides type-safe path-based access:
|
|
51
|
+
* settings.get("compaction.enabled") // => boolean
|
|
52
|
+
* settings.set("theme.dark", "titanium") // sync, saves in background
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
56
|
+
// Schema Definition Types
|
|
57
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
58
|
+
|
|
59
|
+
export type SettingTab =
|
|
60
|
+
| "appearance"
|
|
61
|
+
| "model"
|
|
62
|
+
| "interaction"
|
|
63
|
+
| "context"
|
|
64
|
+
| "memory"
|
|
65
|
+
| "files"
|
|
66
|
+
| "shell"
|
|
67
|
+
| "tools"
|
|
68
|
+
| "tasks"
|
|
69
|
+
| "providers";
|
|
70
|
+
|
|
71
|
+
/** Tab display metadata - icon is resolved via theme.symbol() */
|
|
72
|
+
export type TabMetadata = { label: string; icon: `tab.${string}` };
|
|
73
|
+
|
|
74
|
+
/** Ordered list of tabs for UI rendering */
|
|
75
|
+
export const SETTING_TABS: SettingTab[] = [
|
|
76
|
+
"appearance",
|
|
77
|
+
"model",
|
|
78
|
+
"interaction",
|
|
79
|
+
"context",
|
|
80
|
+
"memory",
|
|
81
|
+
"files",
|
|
82
|
+
"shell",
|
|
83
|
+
"tools",
|
|
84
|
+
"tasks",
|
|
85
|
+
"providers",
|
|
86
|
+
];
|
|
87
|
+
|
|
88
|
+
/** Tab display metadata - icon is a symbol key from theme.ts (tab.*) */
|
|
89
|
+
export const TAB_METADATA: Record<SettingTab, { label: string; icon: `tab.${string}` }> = {
|
|
90
|
+
appearance: { label: "Appearance", icon: "tab.appearance" },
|
|
91
|
+
model: { label: "Model", icon: "tab.model" },
|
|
92
|
+
interaction: { label: "Interaction", icon: "tab.interaction" },
|
|
93
|
+
context: { label: "Context", icon: "tab.context" },
|
|
94
|
+
memory: { label: "Memory", icon: "tab.memory" },
|
|
95
|
+
files: { label: "Files", icon: "tab.files" },
|
|
96
|
+
shell: { label: "Shell", icon: "tab.shell" },
|
|
97
|
+
tools: { label: "Tools", icon: "tab.tools" },
|
|
98
|
+
tasks: { label: "Tasks", icon: "tab.tasks" },
|
|
99
|
+
providers: { label: "Providers", icon: "tab.providers" },
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Ordered section groups per tab. Settings declare their section via `ui.group`;
|
|
104
|
+
* the settings UI renders groups in this order with a heading row between them.
|
|
105
|
+
* Ungrouped settings render first, before any section heading.
|
|
106
|
+
*/
|
|
107
|
+
export const TAB_GROUPS: Record<SettingTab, readonly string[]> = {
|
|
108
|
+
appearance: ["Theme", "Status Line", "Display", "Images"],
|
|
109
|
+
model: ["Thinking", "Sampling", "Prompt", "Retry & Fallback", "Advisor", "Vision"],
|
|
110
|
+
interaction: [
|
|
111
|
+
"Input",
|
|
112
|
+
"Approvals",
|
|
113
|
+
"Notifications",
|
|
114
|
+
"Speech",
|
|
115
|
+
"Collab",
|
|
116
|
+
"Magic Keywords",
|
|
117
|
+
"Startup & Updates",
|
|
118
|
+
"Power (macOS)",
|
|
119
|
+
"Agent",
|
|
120
|
+
"Git",
|
|
121
|
+
],
|
|
122
|
+
context: ["General", "Compaction", "Rules (TTSR)", "Experimental"],
|
|
123
|
+
memory: ["General", "Auto-Learn", "Mnemopi", "Hindsight"],
|
|
124
|
+
files: ["Editing", "Reading", "Read Summaries", "LSP"],
|
|
125
|
+
shell: ["Bash", "Eval & Python"],
|
|
126
|
+
tools: [
|
|
127
|
+
"Available Tools",
|
|
128
|
+
"Todos",
|
|
129
|
+
"Search & Browser",
|
|
130
|
+
"GitHub",
|
|
131
|
+
"Output Limits",
|
|
132
|
+
"Execution",
|
|
133
|
+
"Discovery & MCP",
|
|
134
|
+
"Developer",
|
|
135
|
+
],
|
|
136
|
+
tasks: ["Modes", "Subagents", "Isolation", "Commands & Skills"],
|
|
137
|
+
providers: ["Services", "Tiny Model", "Protocol", "Privacy"],
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
/** Status line segment identifiers */
|
|
141
|
+
export type StatusLineSegmentId =
|
|
142
|
+
| "pi"
|
|
143
|
+
| "model"
|
|
144
|
+
| "mode"
|
|
145
|
+
| "path"
|
|
146
|
+
| "git"
|
|
147
|
+
| "pr"
|
|
148
|
+
| "subagents"
|
|
149
|
+
| "token_in"
|
|
150
|
+
| "token_out"
|
|
151
|
+
| "token_total"
|
|
152
|
+
| "token_rate"
|
|
153
|
+
| "cost"
|
|
154
|
+
| "context_pct"
|
|
155
|
+
| "context_total"
|
|
156
|
+
| "time_spent"
|
|
157
|
+
| "time"
|
|
158
|
+
| "session"
|
|
159
|
+
| "hostname"
|
|
160
|
+
| "cache_read"
|
|
161
|
+
| "cache_write"
|
|
162
|
+
| "cache_hit"
|
|
163
|
+
| "session_name"
|
|
164
|
+
| "usage"
|
|
165
|
+
| "collab";
|
|
166
|
+
|
|
167
|
+
/** Submenu choice metadata. */
|
|
168
|
+
export type SubmenuOption<V extends string = string> = {
|
|
169
|
+
value: V;
|
|
170
|
+
label: string;
|
|
171
|
+
description?: string;
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
interface UiBase {
|
|
175
|
+
tab: SettingTab;
|
|
176
|
+
/** Section within the tab; must be listed in TAB_GROUPS[tab]. Ungrouped settings render at the top. */
|
|
177
|
+
group?: string;
|
|
178
|
+
label: string;
|
|
179
|
+
description: string;
|
|
180
|
+
/** Condition function name - setting only shown when true */
|
|
181
|
+
condition?: string;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
interface UiBoolean extends UiBase {}
|
|
185
|
+
|
|
186
|
+
interface UiEnum<T extends readonly string[]> extends UiBase {
|
|
187
|
+
/** Submenu options. When omitted, the enum renders as an inline toggle derived from `values`. */
|
|
188
|
+
options?: ReadonlyArray<SubmenuOption<T[number]>>;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
interface UiNumber extends UiBase {
|
|
192
|
+
/** Submenu options. Without options, a numeric setting has no UI representation (intentional hide). */
|
|
193
|
+
options?: ReadonlyArray<SubmenuOption>;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
interface UiString extends UiBase {
|
|
197
|
+
/**
|
|
198
|
+
* Submenu options.
|
|
199
|
+
* - Array → submenu with these choices.
|
|
200
|
+
* - "runtime" → submenu populated by the runtime layer (theme registry, etc.).
|
|
201
|
+
* - Omitted → renders as a free text input.
|
|
202
|
+
*/
|
|
203
|
+
options?: ReadonlyArray<SubmenuOption> | "runtime";
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/** Wide ui shape exposed to consumers that walk the schema generically. */
|
|
207
|
+
export type AnyUiMetadata = UiBase & {
|
|
208
|
+
options?: ReadonlyArray<SubmenuOption> | "runtime";
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
interface BooleanDef {
|
|
212
|
+
type: "boolean";
|
|
213
|
+
default: boolean | undefined;
|
|
214
|
+
ui?: UiBoolean;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
interface StringDef {
|
|
218
|
+
type: "string";
|
|
219
|
+
default: string | undefined;
|
|
220
|
+
ui?: UiString;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
interface NumberDef {
|
|
224
|
+
type: "number";
|
|
225
|
+
default: number;
|
|
226
|
+
ui?: UiNumber;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
interface EnumDef<T extends readonly string[]> {
|
|
230
|
+
type: "enum";
|
|
231
|
+
values: T;
|
|
232
|
+
default: T[number];
|
|
233
|
+
ui?: UiEnum<T>;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
interface ArrayDef<T> {
|
|
237
|
+
type: "array";
|
|
238
|
+
default: T[];
|
|
239
|
+
ui?: UiBase;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
interface RecordDef<T> {
|
|
243
|
+
type: "record";
|
|
244
|
+
default: Record<string, T>;
|
|
245
|
+
ui?: UiBase;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
type SettingDef =
|
|
249
|
+
| BooleanDef
|
|
250
|
+
| StringDef
|
|
251
|
+
| NumberDef
|
|
252
|
+
| EnumDef<readonly string[]>
|
|
253
|
+
| ArrayDef<unknown>
|
|
254
|
+
| RecordDef<unknown>;
|
|
255
|
+
|
|
256
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
257
|
+
// Schema Definition
|
|
258
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
259
|
+
|
|
260
|
+
export interface ModelTagDef {
|
|
261
|
+
name: string;
|
|
262
|
+
color?: string;
|
|
263
|
+
/** If true, the role is functional but not shown in the model selector UI. */
|
|
264
|
+
hidden?: boolean;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
export interface ModelTagsSettings {
|
|
268
|
+
[key: string]: ModelTagDef;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Typed defaults for array/record settings — named constants avoid `as` casts
|
|
272
|
+
// under `as const` while still letting SettingValue infer the correct element type.
|
|
273
|
+
const EMPTY_STRING_ARRAY: string[] = [];
|
|
274
|
+
const EMPTY_STRING_RECORD: Record<string, string> = {};
|
|
275
|
+
const DEFAULT_CYCLE_ORDER: string[] = ["smol", "default", "slow"];
|
|
276
|
+
const EMPTY_MODEL_TAGS_RECORD: ModelTagsSettings = {};
|
|
277
|
+
const HINDSIGHT_RECALL_TYPES_DEFAULT: string[] = ["world", "experience"];
|
|
278
|
+
export const DEFAULT_BASH_INTERCEPTOR_RULES: BashInterceptorRule[] = [
|
|
279
|
+
{
|
|
280
|
+
pattern: "^\\s*(cat|head|tail|less|more)\\s+",
|
|
281
|
+
tool: "read",
|
|
282
|
+
message: "Use the `read` tool instead of cat/head/tail. It provides better context and handles binary files.",
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
pattern: "^\\s*(grep|rg|ripgrep|ag|ack)\\s+",
|
|
286
|
+
tool: "search",
|
|
287
|
+
message: "Use the `search` tool instead of grep/rg. It respects .gitignore and provides structured output.",
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
pattern: "^\\s*(find|fd|locate)\\s+.*(-name|-iname|-type|--type|-glob)",
|
|
291
|
+
tool: "find",
|
|
292
|
+
message: "Use the `find` tool instead of find/fd. It respects .gitignore and is faster for glob patterns.",
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
pattern: "^\\s*sed\\s+(-i|--in-place)",
|
|
296
|
+
tool: "edit",
|
|
297
|
+
message: "Use the `edit` tool instead of sed -i. It provides diff preview and fuzzy matching.",
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
pattern: "^\\s*perl\\s+.*-[pn]?i",
|
|
301
|
+
tool: "edit",
|
|
302
|
+
message: "Use the `edit` tool instead of perl -i. It provides diff preview and fuzzy matching.",
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
pattern: "^\\s*awk\\s+.*-i\\s+inplace",
|
|
306
|
+
tool: "edit",
|
|
307
|
+
message: "Use the `edit` tool instead of awk -i inplace. It provides diff preview and fuzzy matching.",
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
// `>` must sit outside quoted regions (so `echo "a -> b"` passes) and be
|
|
311
|
+
// followed by a plausible filename — including `$VAR` targets; `>|`
|
|
312
|
+
// (clobber) counts as a redirect; `>&2`/`2>&1` style fd duplication is
|
|
313
|
+
// not matched.
|
|
314
|
+
pattern: "^\\s*(echo|printf|cat\\s*<<)\\s+(?:[^\"'>]|\"[^\"]*\"|'[^']*')*(?<!\\|)>{1,2}\\|?\\s*[$\\w./~\"'-]",
|
|
315
|
+
tool: "write",
|
|
316
|
+
message: "Use the `write` tool instead of echo/cat redirection. It handles encoding and provides confirmation.",
|
|
317
|
+
},
|
|
318
|
+
];
|
|
319
|
+
|
|
320
|
+
export const SETTINGS_SCHEMA = {
|
|
321
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
322
|
+
// General settings (no UI)
|
|
323
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
324
|
+
setupVersion: { type: "number", default: 0 },
|
|
325
|
+
|
|
326
|
+
// Auth broker — credentials proxied through a remote `omp auth-broker serve`
|
|
327
|
+
// host. Hidden from the UI; populate via env vars or hand-edited config.yml.
|
|
328
|
+
// Env (`OMP_AUTH_BROKER_URL` / `OMP_AUTH_BROKER_TOKEN`) takes precedence so
|
|
329
|
+
// per-machine overrides remain trivial.
|
|
330
|
+
"auth.broker.url": { type: "string", default: undefined },
|
|
331
|
+
"auth.broker.token": { type: "string", default: undefined },
|
|
332
|
+
|
|
333
|
+
autoResume: {
|
|
334
|
+
type: "boolean",
|
|
335
|
+
default: false,
|
|
336
|
+
ui: {
|
|
337
|
+
tab: "interaction",
|
|
338
|
+
group: "Startup & Updates",
|
|
339
|
+
label: "Auto Resume",
|
|
340
|
+
description: "Automatically resume the most recent session in the current directory",
|
|
341
|
+
},
|
|
342
|
+
},
|
|
343
|
+
|
|
344
|
+
// macOS power assertions (caffeinate flags). No-op on other platforms.
|
|
345
|
+
"power.sleepPrevention": {
|
|
346
|
+
type: "enum",
|
|
347
|
+
values: ["off", "idle", "display", "system"] as const,
|
|
348
|
+
default: "idle",
|
|
349
|
+
ui: {
|
|
350
|
+
tab: "interaction",
|
|
351
|
+
group: "Power (macOS)",
|
|
352
|
+
label: "Sleep Prevention",
|
|
353
|
+
description:
|
|
354
|
+
"Prevent macOS sleep during active sessions. Each level is cumulative — it adds the flags of all lower levels.",
|
|
355
|
+
options: [
|
|
356
|
+
{
|
|
357
|
+
value: "off",
|
|
358
|
+
label: "Off",
|
|
359
|
+
description: "Do not prevent any sleep",
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
value: "idle",
|
|
363
|
+
label: "Prevent Idle Sleep",
|
|
364
|
+
description: "Keep the system awake while a session is open (caffeinate -i)",
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
value: "display",
|
|
368
|
+
label: "Prevent Display Sleep",
|
|
369
|
+
description: "Also keep the display from idle-sleeping (caffeinate -i -d)",
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
value: "system",
|
|
373
|
+
label: "Prevent System Sleep",
|
|
374
|
+
description: "Also block all system sleep on AC and declare the user active (caffeinate -i -d -s -u)",
|
|
375
|
+
},
|
|
376
|
+
],
|
|
377
|
+
},
|
|
378
|
+
},
|
|
379
|
+
"advisor.enabled": {
|
|
380
|
+
type: "boolean",
|
|
381
|
+
default: false,
|
|
382
|
+
ui: {
|
|
383
|
+
tab: "model",
|
|
384
|
+
group: "Advisor",
|
|
385
|
+
label: "Enable Advisor",
|
|
386
|
+
description:
|
|
387
|
+
"Pair a second model (assigned to the 'advisor' role) that passively reviews each turn and injects notes.",
|
|
388
|
+
},
|
|
389
|
+
},
|
|
390
|
+
"advisor.subagents": {
|
|
391
|
+
type: "boolean",
|
|
392
|
+
default: false,
|
|
393
|
+
ui: {
|
|
394
|
+
tab: "model",
|
|
395
|
+
group: "Advisor",
|
|
396
|
+
label: "Advisor for Subagents",
|
|
397
|
+
description: "Also enable the advisor on spawned task/eval subagents.",
|
|
398
|
+
condition: "advisorEnabled",
|
|
399
|
+
},
|
|
400
|
+
},
|
|
401
|
+
"advisor.syncBacklog": {
|
|
402
|
+
type: "enum",
|
|
403
|
+
values: ["off", "1", "3", "5"] as const,
|
|
404
|
+
default: "off",
|
|
405
|
+
ui: {
|
|
406
|
+
tab: "model",
|
|
407
|
+
group: "Advisor",
|
|
408
|
+
label: "Advisor Sync Backlog",
|
|
409
|
+
description:
|
|
410
|
+
"Pause the main agent for up to 30 seconds if the advisor falls behind by this many turns. Off disables catch-up delays.",
|
|
411
|
+
condition: "advisorEnabled",
|
|
412
|
+
},
|
|
413
|
+
},
|
|
414
|
+
"advisor.immuneTurns": {
|
|
415
|
+
type: "number",
|
|
416
|
+
default: 1,
|
|
417
|
+
ui: {
|
|
418
|
+
tab: "model",
|
|
419
|
+
group: "Advisor",
|
|
420
|
+
label: "Advisor Immune Turns",
|
|
421
|
+
description:
|
|
422
|
+
"After an advisor concern or blocker interrupts, route further concerns/blockers non-interruptingly for this many primary turns.",
|
|
423
|
+
options: [
|
|
424
|
+
{ value: "0", label: "0 turns", description: "Allow every concern/blocker to interrupt." },
|
|
425
|
+
{ value: "1", label: "1 turn", description: "Default." },
|
|
426
|
+
{ value: "2", label: "2 turns" },
|
|
427
|
+
{ value: "3", label: "3 turns" },
|
|
428
|
+
{ value: "4", label: "4 turns" },
|
|
429
|
+
{ value: "5", label: "5 turns" },
|
|
430
|
+
],
|
|
431
|
+
condition: "advisorEnabled",
|
|
432
|
+
},
|
|
433
|
+
},
|
|
434
|
+
shellPath: { type: "string", default: undefined },
|
|
435
|
+
"git.enabled": {
|
|
436
|
+
type: "boolean",
|
|
437
|
+
default: true,
|
|
438
|
+
ui: {
|
|
439
|
+
tab: "interaction",
|
|
440
|
+
group: "Git",
|
|
441
|
+
label: "Enable Git Integration",
|
|
442
|
+
description: "Show git branch, status, and PR information in the TUI and watch repository metadata.",
|
|
443
|
+
},
|
|
444
|
+
},
|
|
445
|
+
|
|
446
|
+
extensions: { type: "array", default: EMPTY_STRING_ARRAY },
|
|
447
|
+
|
|
448
|
+
enabledModels: { type: "array", default: EMPTY_STRING_ARRAY },
|
|
449
|
+
|
|
450
|
+
disabledProviders: { type: "array", default: EMPTY_STRING_ARRAY },
|
|
451
|
+
|
|
452
|
+
disabledExtensions: { type: "array", default: EMPTY_STRING_ARRAY },
|
|
453
|
+
|
|
454
|
+
modelRoles: { type: "record", default: EMPTY_STRING_RECORD },
|
|
455
|
+
|
|
456
|
+
modelTags: { type: "record", default: EMPTY_MODEL_TAGS_RECORD },
|
|
457
|
+
|
|
458
|
+
modelProviderOrder: { type: "array", default: EMPTY_STRING_ARRAY },
|
|
459
|
+
|
|
460
|
+
cycleOrder: { type: "array", default: DEFAULT_CYCLE_ORDER },
|
|
461
|
+
|
|
462
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
463
|
+
// Appearance
|
|
464
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
465
|
+
|
|
466
|
+
// Theme
|
|
467
|
+
"theme.dark": {
|
|
468
|
+
type: "string",
|
|
469
|
+
default: "titanium",
|
|
470
|
+
ui: {
|
|
471
|
+
tab: "appearance",
|
|
472
|
+
group: "Theme",
|
|
473
|
+
label: "Dark Theme",
|
|
474
|
+
description: "Theme used when the terminal has a dark background",
|
|
475
|
+
options: "runtime",
|
|
476
|
+
},
|
|
477
|
+
},
|
|
478
|
+
|
|
479
|
+
"theme.light": {
|
|
480
|
+
type: "string",
|
|
481
|
+
default: "light",
|
|
482
|
+
ui: {
|
|
483
|
+
tab: "appearance",
|
|
484
|
+
group: "Theme",
|
|
485
|
+
label: "Light Theme",
|
|
486
|
+
description: "Theme used when the terminal has a light background",
|
|
487
|
+
options: "runtime",
|
|
488
|
+
},
|
|
489
|
+
},
|
|
490
|
+
|
|
491
|
+
symbolPreset: {
|
|
492
|
+
type: "enum",
|
|
493
|
+
values: ["unicode", "nerd", "ascii"] as const,
|
|
494
|
+
default: "unicode",
|
|
495
|
+
ui: {
|
|
496
|
+
tab: "appearance",
|
|
497
|
+
group: "Theme",
|
|
498
|
+
label: "Symbol Preset",
|
|
499
|
+
description: "Glyph set for icons and symbols (Unicode, Nerd Font, or ASCII)",
|
|
500
|
+
options: [
|
|
501
|
+
{ value: "unicode", label: "Unicode", description: "Standard symbols (default)" },
|
|
502
|
+
{ value: "nerd", label: "Nerd Font", description: "Requires Nerd Font" },
|
|
503
|
+
{ value: "ascii", label: "ASCII", description: "Maximum compatibility" },
|
|
504
|
+
],
|
|
505
|
+
},
|
|
506
|
+
},
|
|
507
|
+
|
|
508
|
+
colorBlindMode: {
|
|
509
|
+
type: "boolean",
|
|
510
|
+
default: false,
|
|
511
|
+
ui: {
|
|
512
|
+
tab: "appearance",
|
|
513
|
+
group: "Theme",
|
|
514
|
+
label: "Color-Blind Mode",
|
|
515
|
+
description: "Use blue instead of green for diff additions",
|
|
516
|
+
},
|
|
517
|
+
},
|
|
518
|
+
|
|
519
|
+
// Status line
|
|
520
|
+
"statusLine.preset": {
|
|
521
|
+
type: "enum",
|
|
522
|
+
values: ["default", "minimal", "compact", "full", "nerd", "ascii", "custom"] as const,
|
|
523
|
+
default: "default",
|
|
524
|
+
ui: {
|
|
525
|
+
tab: "appearance",
|
|
526
|
+
group: "Status Line",
|
|
527
|
+
label: "Status Line Preset",
|
|
528
|
+
description: "Pre-built status line configurations",
|
|
529
|
+
options: [
|
|
530
|
+
{ value: "default", label: "Default", description: "Model, path, git, context, tokens, cost" },
|
|
531
|
+
{ value: "minimal", label: "Minimal", description: "Path and git only" },
|
|
532
|
+
{ value: "compact", label: "Compact", description: "Model, git, cost, context" },
|
|
533
|
+
{ value: "full", label: "Full", description: "All segments including time" },
|
|
534
|
+
{ value: "nerd", label: "Nerd", description: "Maximum info with Nerd Font icons" },
|
|
535
|
+
{ value: "ascii", label: "ASCII", description: "No special characters" },
|
|
536
|
+
{ value: "custom", label: "Custom", description: "User-defined segments" },
|
|
537
|
+
],
|
|
538
|
+
},
|
|
539
|
+
},
|
|
540
|
+
|
|
541
|
+
"statusLine.separator": {
|
|
542
|
+
type: "enum",
|
|
543
|
+
values: ["powerline", "powerline-thin", "slash", "pipe", "block", "none", "ascii"] as const,
|
|
544
|
+
default: "powerline-thin",
|
|
545
|
+
ui: {
|
|
546
|
+
tab: "appearance",
|
|
547
|
+
group: "Status Line",
|
|
548
|
+
label: "Status Line Separator",
|
|
549
|
+
description: "Style of separators between segments",
|
|
550
|
+
options: [
|
|
551
|
+
{ value: "powerline", label: "Powerline", description: "Solid arrows (Nerd Font)" },
|
|
552
|
+
{ value: "powerline-thin", label: "Thin chevron", description: "Thin arrows (Nerd Font)" },
|
|
553
|
+
{ value: "slash", label: "Slash", description: "Forward slashes" },
|
|
554
|
+
{ value: "pipe", label: "Pipe", description: "Vertical pipes" },
|
|
555
|
+
{ value: "block", label: "Block", description: "Solid blocks" },
|
|
556
|
+
{ value: "none", label: "None", description: "Space only" },
|
|
557
|
+
{ value: "ascii", label: "ASCII", description: "Greater-than signs" },
|
|
558
|
+
],
|
|
559
|
+
},
|
|
560
|
+
},
|
|
561
|
+
|
|
562
|
+
"statusLine.sessionAccent": {
|
|
563
|
+
type: "boolean",
|
|
564
|
+
default: true,
|
|
565
|
+
ui: {
|
|
566
|
+
tab: "appearance",
|
|
567
|
+
group: "Status Line",
|
|
568
|
+
label: "Session Accent",
|
|
569
|
+
description: "Use the session name color for the editor border and status line gap",
|
|
570
|
+
},
|
|
571
|
+
},
|
|
572
|
+
|
|
573
|
+
"statusLine.transparent": {
|
|
574
|
+
type: "boolean",
|
|
575
|
+
default: false,
|
|
576
|
+
ui: {
|
|
577
|
+
tab: "appearance",
|
|
578
|
+
group: "Status Line",
|
|
579
|
+
label: "Transparent Status Line",
|
|
580
|
+
description:
|
|
581
|
+
"Use the terminal's default background for the status line instead of the theme's `statusLineBg`. Powerline end caps are dropped because they need a contrasting fill to bridge into the surrounding terminal.",
|
|
582
|
+
},
|
|
583
|
+
},
|
|
584
|
+
"tools.artifactSpillThreshold": {
|
|
585
|
+
type: "number",
|
|
586
|
+
default: 50,
|
|
587
|
+
ui: {
|
|
588
|
+
tab: "tools",
|
|
589
|
+
group: "Output Limits",
|
|
590
|
+
label: "Artifact Spill Threshold (KB)",
|
|
591
|
+
description: "Tool output above this size is saved as an artifact; tail is kept inline",
|
|
592
|
+
options: [
|
|
593
|
+
{ value: "1", label: "1 KB", description: "~250 tokens" },
|
|
594
|
+
{ value: "2.5", label: "2.5 KB", description: "~625 tokens" },
|
|
595
|
+
{ value: "5", label: "5 KB", description: "~1.25K tokens" },
|
|
596
|
+
{ value: "10", label: "10 KB", description: "~2.5K tokens" },
|
|
597
|
+
{ value: "20", label: "20 KB", description: "~5K tokens" },
|
|
598
|
+
{ value: "30", label: "30 KB", description: "~7.5K tokens" },
|
|
599
|
+
{ value: "50", label: "50 KB", description: "Default; ~12.5K tokens" },
|
|
600
|
+
{ value: "75", label: "75 KB", description: "~19K tokens" },
|
|
601
|
+
{ value: "100", label: "100 KB", description: "~25K tokens" },
|
|
602
|
+
{ value: "200", label: "200 KB", description: "~50K tokens" },
|
|
603
|
+
{ value: "500", label: "500 KB", description: "~125K tokens" },
|
|
604
|
+
{ value: "1000", label: "1 MB", description: "~250K tokens" },
|
|
605
|
+
],
|
|
606
|
+
},
|
|
607
|
+
},
|
|
608
|
+
"tools.artifactTailBytes": {
|
|
609
|
+
type: "number",
|
|
610
|
+
default: 20,
|
|
611
|
+
ui: {
|
|
612
|
+
tab: "tools",
|
|
613
|
+
group: "Output Limits",
|
|
614
|
+
label: "Artifact Tail Size (KB)",
|
|
615
|
+
description: "Amount of tail content kept inline when output spills to artifact",
|
|
616
|
+
options: [
|
|
617
|
+
{ value: "1", label: "1 KB", description: "~250 tokens" },
|
|
618
|
+
{ value: "2.5", label: "2.5 KB", description: "~625 tokens" },
|
|
619
|
+
{ value: "5", label: "5 KB", description: "~1.25K tokens" },
|
|
620
|
+
{ value: "10", label: "10 KB", description: "~2.5K tokens" },
|
|
621
|
+
{ value: "20", label: "20 KB", description: "Default; ~5K tokens" },
|
|
622
|
+
{ value: "50", label: "50 KB", description: "~12.5K tokens" },
|
|
623
|
+
{ value: "100", label: "100 KB", description: "~25K tokens" },
|
|
624
|
+
{ value: "200", label: "200 KB", description: "~50K tokens" },
|
|
625
|
+
],
|
|
626
|
+
},
|
|
627
|
+
},
|
|
628
|
+
"tools.artifactHeadBytes": {
|
|
629
|
+
type: "number",
|
|
630
|
+
default: 20,
|
|
631
|
+
ui: {
|
|
632
|
+
tab: "tools",
|
|
633
|
+
group: "Output Limits",
|
|
634
|
+
label: "Artifact Head Size (KB)",
|
|
635
|
+
description:
|
|
636
|
+
"Amount of head content kept inline alongside the tail when output spills to artifact (middle elision). 0 disables — keep tail only.",
|
|
637
|
+
options: [
|
|
638
|
+
{ value: "0", label: "0 KB", description: "Disabled; tail-only truncation" },
|
|
639
|
+
{ value: "1", label: "1 KB", description: "~250 tokens" },
|
|
640
|
+
{ value: "2.5", label: "2.5 KB", description: "~625 tokens" },
|
|
641
|
+
{ value: "5", label: "5 KB", description: "~1.25K tokens" },
|
|
642
|
+
{ value: "10", label: "10 KB", description: "~2.5K tokens" },
|
|
643
|
+
{ value: "20", label: "20 KB", description: "Default; ~5K tokens" },
|
|
644
|
+
{ value: "50", label: "50 KB", description: "~12.5K tokens" },
|
|
645
|
+
{ value: "100", label: "100 KB", description: "~25K tokens" },
|
|
646
|
+
{ value: "200", label: "200 KB", description: "~50K tokens" },
|
|
647
|
+
],
|
|
648
|
+
},
|
|
649
|
+
},
|
|
650
|
+
"tools.outputMaxColumns": {
|
|
651
|
+
type: "number",
|
|
652
|
+
default: 768,
|
|
653
|
+
ui: {
|
|
654
|
+
tab: "tools",
|
|
655
|
+
group: "Output Limits",
|
|
656
|
+
label: "Output Column Cap",
|
|
657
|
+
description:
|
|
658
|
+
"Per-line byte cap for streaming tool outputs (bash, ssh, python, js eval) and `read`. Lines wider than this are ellipsis-truncated; remaining bytes up to the next newline are dropped. 0 disables.",
|
|
659
|
+
options: [
|
|
660
|
+
{ value: "0", label: "Off", description: "No per-line cap" },
|
|
661
|
+
{ value: "256", label: "256", description: "Tight" },
|
|
662
|
+
{ value: "512", label: "512" },
|
|
663
|
+
{ value: "768", label: "768", description: "Default" },
|
|
664
|
+
{ value: "1024", label: "1024" },
|
|
665
|
+
{ value: "2048", label: "2048" },
|
|
666
|
+
{ value: "4096", label: "4096", description: "Loose" },
|
|
667
|
+
],
|
|
668
|
+
},
|
|
669
|
+
},
|
|
670
|
+
"tools.artifactTailLines": {
|
|
671
|
+
type: "number",
|
|
672
|
+
default: 500,
|
|
673
|
+
ui: {
|
|
674
|
+
tab: "tools",
|
|
675
|
+
group: "Output Limits",
|
|
676
|
+
label: "Artifact Tail Lines",
|
|
677
|
+
description: "Maximum lines of tail content kept inline when output spills to artifact",
|
|
678
|
+
options: [
|
|
679
|
+
{ value: "50", label: "50 lines", description: "~250 tokens" },
|
|
680
|
+
{ value: "100", label: "100 lines", description: "~500 tokens" },
|
|
681
|
+
{ value: "250", label: "250 lines", description: "~1.25K tokens" },
|
|
682
|
+
{ value: "500", label: "500 lines", description: "Default; ~2.5K tokens" },
|
|
683
|
+
{ value: "1000", label: "1000 lines", description: "~5K tokens" },
|
|
684
|
+
{ value: "2000", label: "2000 lines", description: "~10K tokens" },
|
|
685
|
+
{ value: "5000", label: "5000 lines", description: "~25K tokens" },
|
|
686
|
+
],
|
|
687
|
+
},
|
|
688
|
+
},
|
|
689
|
+
|
|
690
|
+
"statusLine.showHookStatus": {
|
|
691
|
+
type: "boolean",
|
|
692
|
+
default: true,
|
|
693
|
+
ui: {
|
|
694
|
+
tab: "appearance",
|
|
695
|
+
group: "Status Line",
|
|
696
|
+
label: "Show Hook Status",
|
|
697
|
+
description: "Display hook status messages below the status line",
|
|
698
|
+
},
|
|
699
|
+
},
|
|
700
|
+
|
|
701
|
+
"statusLine.leftSegments": { type: "array", default: [] as StatusLineSegmentId[] },
|
|
702
|
+
|
|
703
|
+
"statusLine.rightSegments": { type: "array", default: [] as StatusLineSegmentId[] },
|
|
704
|
+
|
|
705
|
+
"statusLine.segmentOptions": { type: "record", default: {} as Record<string, unknown> },
|
|
706
|
+
|
|
707
|
+
// Images and terminal
|
|
708
|
+
"terminal.showImages": {
|
|
709
|
+
type: "boolean",
|
|
710
|
+
default: true,
|
|
711
|
+
ui: {
|
|
712
|
+
tab: "appearance",
|
|
713
|
+
group: "Images",
|
|
714
|
+
label: "Show Inline Images",
|
|
715
|
+
description: "Render images inline in the terminal",
|
|
716
|
+
condition: "hasImageProtocol",
|
|
717
|
+
},
|
|
718
|
+
},
|
|
719
|
+
|
|
720
|
+
"images.autoResize": {
|
|
721
|
+
type: "boolean",
|
|
722
|
+
default: true,
|
|
723
|
+
ui: {
|
|
724
|
+
tab: "appearance",
|
|
725
|
+
group: "Images",
|
|
726
|
+
label: "Auto-Resize Images",
|
|
727
|
+
description: "Resize large images to 2000x2000 max for better model compatibility",
|
|
728
|
+
},
|
|
729
|
+
},
|
|
730
|
+
|
|
731
|
+
"images.blockImages": {
|
|
732
|
+
type: "boolean",
|
|
733
|
+
default: false,
|
|
734
|
+
ui: {
|
|
735
|
+
tab: "appearance",
|
|
736
|
+
group: "Images",
|
|
737
|
+
label: "Block Images",
|
|
738
|
+
description: "Prevent images from being sent to LLM providers",
|
|
739
|
+
},
|
|
740
|
+
},
|
|
741
|
+
|
|
742
|
+
"images.describeForTextModels": {
|
|
743
|
+
type: "boolean",
|
|
744
|
+
default: true,
|
|
745
|
+
ui: {
|
|
746
|
+
tab: "model",
|
|
747
|
+
group: "Vision",
|
|
748
|
+
label: "Describe Images for Text Models",
|
|
749
|
+
description:
|
|
750
|
+
"When an image is attached to a model without vision support, save it under local:// and inject a description from a vision-capable model instead of dropping it",
|
|
751
|
+
},
|
|
752
|
+
},
|
|
753
|
+
|
|
754
|
+
"tui.maxInlineImageColumns": {
|
|
755
|
+
type: "number",
|
|
756
|
+
default: 100,
|
|
757
|
+
description:
|
|
758
|
+
"Maximum width in terminal columns for inline images (default 100). Set to 0 for unlimited (bounded only by terminal width).",
|
|
759
|
+
},
|
|
760
|
+
|
|
761
|
+
"tui.maxInlineImageRows": {
|
|
762
|
+
type: "number",
|
|
763
|
+
default: 20,
|
|
764
|
+
description:
|
|
765
|
+
"Maximum height in terminal rows for inline images (default 20). Set to 0 to use only the viewport-based limit (60% of terminal height).",
|
|
766
|
+
},
|
|
767
|
+
|
|
768
|
+
"tui.maxInlineImages": {
|
|
769
|
+
type: "number",
|
|
770
|
+
default: 8,
|
|
771
|
+
description:
|
|
772
|
+
"Maximum number of inline images kept as live terminal graphics (default 8). Older images fall back to a text placeholder via a full redraw once the limit is exceeded. Set to 0 to keep every image (no limit).",
|
|
773
|
+
},
|
|
774
|
+
|
|
775
|
+
"tui.textSizing": {
|
|
776
|
+
type: "boolean",
|
|
777
|
+
default: false,
|
|
778
|
+
ui: {
|
|
779
|
+
tab: "appearance",
|
|
780
|
+
group: "Display",
|
|
781
|
+
label: "Large Headings (Kitty)",
|
|
782
|
+
description:
|
|
783
|
+
"Render Markdown H1 headings at 2x scale using Kitty's OSC 66 text-sizing protocol. Only takes effect on Kitty terminals; ignored everywhere else. Off by default.",
|
|
784
|
+
},
|
|
785
|
+
},
|
|
786
|
+
|
|
787
|
+
"tui.hyperlinks": {
|
|
788
|
+
type: "enum",
|
|
789
|
+
values: ["off", "auto", "always"] as const,
|
|
790
|
+
default: "auto",
|
|
791
|
+
ui: {
|
|
792
|
+
tab: "appearance",
|
|
793
|
+
group: "Display",
|
|
794
|
+
label: "Terminal Hyperlinks",
|
|
795
|
+
description:
|
|
796
|
+
"Wrap paths and URLs in OSC 8 hyperlinks for terminal-native click-to-open (auto: detect support; off: never; always: unconditional)",
|
|
797
|
+
},
|
|
798
|
+
},
|
|
799
|
+
"tui.tight": {
|
|
800
|
+
type: "boolean",
|
|
801
|
+
default: false,
|
|
802
|
+
ui: {
|
|
803
|
+
tab: "appearance",
|
|
804
|
+
group: "Display",
|
|
805
|
+
label: "Tight Layout",
|
|
806
|
+
description: "Remove the 1-character horizontal padding from the left and right of the terminal output",
|
|
807
|
+
},
|
|
808
|
+
},
|
|
809
|
+
|
|
810
|
+
"display.shimmer": {
|
|
811
|
+
type: "enum",
|
|
812
|
+
values: ["classic", "kitt", "disabled"] as const,
|
|
813
|
+
default: "classic",
|
|
814
|
+
ui: {
|
|
815
|
+
tab: "appearance",
|
|
816
|
+
group: "Display",
|
|
817
|
+
label: "Shimmer",
|
|
818
|
+
description: "Animation style for working/loading messages",
|
|
819
|
+
options: [
|
|
820
|
+
{ value: "classic", label: "Classic", description: "Soft cosine wave sweeping across the text" },
|
|
821
|
+
{ value: "kitt", label: "KITT Scanner", description: "Knight Rider 1982 red light bouncing left-right" },
|
|
822
|
+
{ value: "disabled", label: "Disabled", description: "No animation; static muted text" },
|
|
823
|
+
],
|
|
824
|
+
},
|
|
825
|
+
},
|
|
826
|
+
|
|
827
|
+
"display.smoothStreaming": {
|
|
828
|
+
type: "boolean",
|
|
829
|
+
default: true,
|
|
830
|
+
ui: {
|
|
831
|
+
tab: "appearance",
|
|
832
|
+
group: "Display",
|
|
833
|
+
label: "Smooth Streaming",
|
|
834
|
+
description: "Reveal assistant text and streamed tool input smoothly while chunks arrive",
|
|
835
|
+
},
|
|
836
|
+
},
|
|
837
|
+
|
|
838
|
+
"display.showTokenUsage": {
|
|
839
|
+
type: "boolean",
|
|
840
|
+
default: false,
|
|
841
|
+
ui: {
|
|
842
|
+
tab: "appearance",
|
|
843
|
+
group: "Display",
|
|
844
|
+
label: "Show Token Usage",
|
|
845
|
+
description: "Show per-turn token usage on assistant messages",
|
|
846
|
+
},
|
|
847
|
+
},
|
|
848
|
+
|
|
849
|
+
"display.cacheMissMarker": {
|
|
850
|
+
type: "boolean",
|
|
851
|
+
default: false,
|
|
852
|
+
ui: {
|
|
853
|
+
tab: "appearance",
|
|
854
|
+
group: "Display",
|
|
855
|
+
label: "Cache Miss Marker",
|
|
856
|
+
description: "Show a divider above an assistant turn whose request lost (missed) the prompt cache",
|
|
857
|
+
},
|
|
858
|
+
},
|
|
859
|
+
|
|
860
|
+
showHardwareCursor: {
|
|
861
|
+
type: "boolean",
|
|
862
|
+
default: true, // will be computed based on platform if undefined
|
|
863
|
+
ui: {
|
|
864
|
+
tab: "appearance",
|
|
865
|
+
group: "Display",
|
|
866
|
+
label: "Show Hardware Cursor",
|
|
867
|
+
description: "Show terminal cursor for IME support",
|
|
868
|
+
},
|
|
869
|
+
},
|
|
870
|
+
|
|
871
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
872
|
+
// Model
|
|
873
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
874
|
+
|
|
875
|
+
// Reasoning and prompts
|
|
876
|
+
defaultThinkingLevel: {
|
|
877
|
+
type: "enum",
|
|
878
|
+
values: [...THINKING_EFFORTS, AUTO_THINKING, "max"],
|
|
879
|
+
default: "high",
|
|
880
|
+
ui: {
|
|
881
|
+
tab: "model",
|
|
882
|
+
group: "Thinking",
|
|
883
|
+
label: "Thinking Level",
|
|
884
|
+
description: "Reasoning depth for thinking-capable models",
|
|
885
|
+
options: [
|
|
886
|
+
getConfiguredThinkingLevelMetadata(AUTO_THINKING),
|
|
887
|
+
...THINKING_EFFORTS.map(getThinkingLevelMetadata),
|
|
888
|
+
],
|
|
889
|
+
},
|
|
890
|
+
},
|
|
891
|
+
|
|
892
|
+
hideThinkingBlock: {
|
|
893
|
+
type: "boolean",
|
|
894
|
+
default: false,
|
|
895
|
+
ui: {
|
|
896
|
+
tab: "model",
|
|
897
|
+
group: "Thinking",
|
|
898
|
+
label: "Hide Thinking Blocks",
|
|
899
|
+
description: "Hide thinking blocks in assistant responses",
|
|
900
|
+
},
|
|
901
|
+
},
|
|
902
|
+
|
|
903
|
+
"model.loopGuard.enabled": {
|
|
904
|
+
type: "boolean",
|
|
905
|
+
default: true,
|
|
906
|
+
ui: {
|
|
907
|
+
tab: "model",
|
|
908
|
+
group: "Thinking",
|
|
909
|
+
label: "Loop Guard",
|
|
910
|
+
description: "Enable automatic stream loop detection for Gemini and DeepSeek models",
|
|
911
|
+
},
|
|
912
|
+
},
|
|
913
|
+
|
|
914
|
+
"model.loopGuard.checkAssistantContent": {
|
|
915
|
+
type: "boolean",
|
|
916
|
+
default: true,
|
|
917
|
+
ui: {
|
|
918
|
+
tab: "model",
|
|
919
|
+
group: "Thinking",
|
|
920
|
+
label: "Loop Guard Scan Prose",
|
|
921
|
+
description: "Apply loop guard to assistant prose messages in addition to thinking logs",
|
|
922
|
+
},
|
|
923
|
+
},
|
|
924
|
+
|
|
925
|
+
inlineToolDescriptors: {
|
|
926
|
+
type: "boolean",
|
|
927
|
+
default: false,
|
|
928
|
+
ui: {
|
|
929
|
+
tab: "model",
|
|
930
|
+
group: "Prompt",
|
|
931
|
+
label: "Inline Tool Descriptors",
|
|
932
|
+
description:
|
|
933
|
+
"Render full tool descriptors in the system prompt and strip top-level/nested descriptions from provider tool schemas so descriptor text is sent once",
|
|
934
|
+
},
|
|
935
|
+
},
|
|
936
|
+
|
|
937
|
+
includeModelInPrompt: {
|
|
938
|
+
type: "boolean",
|
|
939
|
+
default: true,
|
|
940
|
+
ui: {
|
|
941
|
+
tab: "model",
|
|
942
|
+
group: "Prompt",
|
|
943
|
+
label: "Include Model in Prompt",
|
|
944
|
+
description: "Surface the active model identifier in the system prompt so the agent knows which model it is",
|
|
945
|
+
},
|
|
946
|
+
},
|
|
947
|
+
|
|
948
|
+
personality: {
|
|
949
|
+
type: "enum",
|
|
950
|
+
values: ["default", "friendly", "pragmatic", "none"] as const,
|
|
951
|
+
default: "default",
|
|
952
|
+
ui: {
|
|
953
|
+
tab: "model",
|
|
954
|
+
group: "Prompt",
|
|
955
|
+
label: "Personality",
|
|
956
|
+
description: "Communication style rendered into the system prompt's personality block",
|
|
957
|
+
options: [
|
|
958
|
+
{
|
|
959
|
+
value: "default",
|
|
960
|
+
label: "Default",
|
|
961
|
+
description: "Terse, evidence-first engineer; dense, action-oriented replies",
|
|
962
|
+
},
|
|
963
|
+
{
|
|
964
|
+
value: "friendly",
|
|
965
|
+
label: "Friendly",
|
|
966
|
+
description: "Warm, encouraging collaborator focused on momentum and morale",
|
|
967
|
+
},
|
|
968
|
+
{
|
|
969
|
+
value: "pragmatic",
|
|
970
|
+
label: "Pragmatic",
|
|
971
|
+
description: "Direct, efficient engineer focused on clarity and rigor",
|
|
972
|
+
},
|
|
973
|
+
{ value: "none", label: "None", description: "Omit the personality block entirely" },
|
|
974
|
+
],
|
|
975
|
+
},
|
|
976
|
+
},
|
|
977
|
+
|
|
978
|
+
// Sampling
|
|
979
|
+
temperature: {
|
|
980
|
+
type: "number",
|
|
981
|
+
default: -1,
|
|
982
|
+
ui: {
|
|
983
|
+
tab: "model",
|
|
984
|
+
group: "Sampling",
|
|
985
|
+
label: "Temperature",
|
|
986
|
+
description: "Sampling temperature (0 = deterministic, 1 = creative, -1 = provider default)",
|
|
987
|
+
options: [
|
|
988
|
+
{ value: "-1", label: "Default", description: "Use provider default" },
|
|
989
|
+
{ value: "0", label: "0", description: "Deterministic" },
|
|
990
|
+
{ value: "0.2", label: "0.2", description: "Focused" },
|
|
991
|
+
{ value: "0.5", label: "0.5", description: "Balanced" },
|
|
992
|
+
{ value: "0.7", label: "0.7", description: "Creative" },
|
|
993
|
+
{ value: "1", label: "1", description: "Maximum variety" },
|
|
994
|
+
],
|
|
995
|
+
},
|
|
996
|
+
},
|
|
997
|
+
|
|
998
|
+
topP: {
|
|
999
|
+
type: "number",
|
|
1000
|
+
default: -1,
|
|
1001
|
+
ui: {
|
|
1002
|
+
tab: "model",
|
|
1003
|
+
group: "Sampling",
|
|
1004
|
+
label: "Top P",
|
|
1005
|
+
description: "Nucleus sampling cutoff (0-1, -1 = provider default)",
|
|
1006
|
+
options: [
|
|
1007
|
+
{ value: "-1", label: "Default", description: "Use provider default" },
|
|
1008
|
+
{ value: "0.1", label: "0.1", description: "Very focused" },
|
|
1009
|
+
{ value: "0.3", label: "0.3", description: "Focused" },
|
|
1010
|
+
{ value: "0.5", label: "0.5", description: "Balanced" },
|
|
1011
|
+
{ value: "0.9", label: "0.9", description: "Broad" },
|
|
1012
|
+
{ value: "1", label: "1", description: "No nucleus filtering" },
|
|
1013
|
+
],
|
|
1014
|
+
},
|
|
1015
|
+
},
|
|
1016
|
+
|
|
1017
|
+
topK: {
|
|
1018
|
+
type: "number",
|
|
1019
|
+
default: -1,
|
|
1020
|
+
ui: {
|
|
1021
|
+
tab: "model",
|
|
1022
|
+
group: "Sampling",
|
|
1023
|
+
label: "Top K",
|
|
1024
|
+
description: "Sample from top-K tokens (-1 = provider default)",
|
|
1025
|
+
options: [
|
|
1026
|
+
{ value: "-1", label: "Default", description: "Use provider default" },
|
|
1027
|
+
{ value: "1", label: "1", description: "Greedy top token" },
|
|
1028
|
+
{ value: "20", label: "20", description: "Focused" },
|
|
1029
|
+
{ value: "40", label: "40", description: "Balanced" },
|
|
1030
|
+
{ value: "100", label: "100", description: "Broad" },
|
|
1031
|
+
],
|
|
1032
|
+
},
|
|
1033
|
+
},
|
|
1034
|
+
|
|
1035
|
+
minP: {
|
|
1036
|
+
type: "number",
|
|
1037
|
+
default: -1,
|
|
1038
|
+
ui: {
|
|
1039
|
+
tab: "model",
|
|
1040
|
+
group: "Sampling",
|
|
1041
|
+
label: "Min P",
|
|
1042
|
+
description: "Minimum probability threshold (0-1, -1 = provider default)",
|
|
1043
|
+
options: [
|
|
1044
|
+
{ value: "-1", label: "Default", description: "Use provider default" },
|
|
1045
|
+
{ value: "0.01", label: "0.01", description: "Very permissive" },
|
|
1046
|
+
{ value: "0.05", label: "0.05", description: "Balanced" },
|
|
1047
|
+
{ value: "0.1", label: "0.1", description: "Strict" },
|
|
1048
|
+
],
|
|
1049
|
+
},
|
|
1050
|
+
},
|
|
1051
|
+
|
|
1052
|
+
presencePenalty: {
|
|
1053
|
+
type: "number",
|
|
1054
|
+
default: -1,
|
|
1055
|
+
ui: {
|
|
1056
|
+
tab: "model",
|
|
1057
|
+
group: "Sampling",
|
|
1058
|
+
label: "Presence Penalty",
|
|
1059
|
+
description: "Penalty for introducing already-present tokens (-1 = provider default)",
|
|
1060
|
+
options: [
|
|
1061
|
+
{ value: "-1", label: "Default", description: "Use provider default" },
|
|
1062
|
+
{ value: "0", label: "0", description: "No penalty" },
|
|
1063
|
+
{ value: "0.5", label: "0.5", description: "Mild novelty" },
|
|
1064
|
+
{ value: "1", label: "1", description: "Encourage novelty" },
|
|
1065
|
+
{ value: "2", label: "2", description: "Strong novelty" },
|
|
1066
|
+
],
|
|
1067
|
+
},
|
|
1068
|
+
},
|
|
1069
|
+
|
|
1070
|
+
repetitionPenalty: {
|
|
1071
|
+
type: "number",
|
|
1072
|
+
default: -1,
|
|
1073
|
+
ui: {
|
|
1074
|
+
tab: "model",
|
|
1075
|
+
group: "Sampling",
|
|
1076
|
+
label: "Repetition Penalty",
|
|
1077
|
+
description: "Penalty for repeated tokens (-1 = provider default)",
|
|
1078
|
+
options: [
|
|
1079
|
+
{ value: "-1", label: "Default", description: "Use provider default" },
|
|
1080
|
+
{ value: "0.8", label: "0.8", description: "Allow repetition" },
|
|
1081
|
+
{ value: "1", label: "1", description: "No penalty" },
|
|
1082
|
+
{ value: "1.1", label: "1.1", description: "Mild penalty" },
|
|
1083
|
+
{ value: "1.2", label: "1.2", description: "Balanced" },
|
|
1084
|
+
{ value: "1.5", label: "1.5", description: "Strong penalty" },
|
|
1085
|
+
],
|
|
1086
|
+
},
|
|
1087
|
+
},
|
|
1088
|
+
|
|
1089
|
+
serviceTier: {
|
|
1090
|
+
type: "enum",
|
|
1091
|
+
values: ["none", "auto", "default", "flex", "scale", "priority", "openai-only", "claude-only"] as const,
|
|
1092
|
+
default: "none",
|
|
1093
|
+
ui: {
|
|
1094
|
+
tab: "model",
|
|
1095
|
+
group: "Sampling",
|
|
1096
|
+
label: "Service Tier",
|
|
1097
|
+
description:
|
|
1098
|
+
'Processing priority hint (none = omit). OpenAI accepts the tier values directly; Anthropic realizes `priority` as `speed: "fast"` on supported Opus models. Scoped values target one family.',
|
|
1099
|
+
options: [
|
|
1100
|
+
{ value: "none", label: "None", description: "Omit service_tier parameter" },
|
|
1101
|
+
{ value: "auto", label: "Auto", description: "Use provider default tier selection (OpenAI)" },
|
|
1102
|
+
{ value: "default", label: "Default", description: "Standard priority processing (OpenAI)" },
|
|
1103
|
+
{ value: "flex", label: "Flex", description: "Flexible capacity tier when available (OpenAI)" },
|
|
1104
|
+
{ value: "scale", label: "Scale", description: "Scale Tier credits when available (OpenAI)" },
|
|
1105
|
+
{
|
|
1106
|
+
value: "priority",
|
|
1107
|
+
label: "Priority",
|
|
1108
|
+
description: "Priority on every supported provider (OpenAI `service_tier`, Anthropic fast mode)",
|
|
1109
|
+
},
|
|
1110
|
+
{
|
|
1111
|
+
value: "openai-only",
|
|
1112
|
+
label: "Priority (OpenAI only)",
|
|
1113
|
+
description: "Priority on OpenAI/OpenAI-Codex requests; ignored elsewhere",
|
|
1114
|
+
},
|
|
1115
|
+
{
|
|
1116
|
+
value: "claude-only",
|
|
1117
|
+
label: "Priority (Claude only)",
|
|
1118
|
+
description: "Anthropic fast mode on direct Claude requests; ignored elsewhere (incl. Bedrock/Vertex)",
|
|
1119
|
+
},
|
|
1120
|
+
],
|
|
1121
|
+
},
|
|
1122
|
+
},
|
|
1123
|
+
|
|
1124
|
+
fastModeScope: {
|
|
1125
|
+
type: "enum",
|
|
1126
|
+
values: ["both", "openai", "claude"] as const,
|
|
1127
|
+
default: "both",
|
|
1128
|
+
ui: {
|
|
1129
|
+
tab: "model",
|
|
1130
|
+
group: "Sampling",
|
|
1131
|
+
label: "Fast Mode Scope",
|
|
1132
|
+
description:
|
|
1133
|
+
'Which providers `/fast on` (and the fast-mode toggle) target. "both" = priority on every supported provider; "openai"/"claude" scope it to one family (mirrors serviceTier openai-only/claude-only).',
|
|
1134
|
+
options: [
|
|
1135
|
+
{ value: "both", label: "Both", description: "Priority on every supported provider" },
|
|
1136
|
+
{
|
|
1137
|
+
value: "openai",
|
|
1138
|
+
label: "OpenAI only",
|
|
1139
|
+
description: "Priority on OpenAI/OpenAI-Codex requests; ignored elsewhere",
|
|
1140
|
+
},
|
|
1141
|
+
{
|
|
1142
|
+
value: "claude",
|
|
1143
|
+
label: "Claude only",
|
|
1144
|
+
description: "Anthropic fast mode on direct Claude requests; ignored elsewhere",
|
|
1145
|
+
},
|
|
1146
|
+
],
|
|
1147
|
+
},
|
|
1148
|
+
},
|
|
1149
|
+
|
|
1150
|
+
// Retries
|
|
1151
|
+
"retry.enabled": { type: "boolean", default: true },
|
|
1152
|
+
|
|
1153
|
+
"retry.maxRetries": {
|
|
1154
|
+
type: "number",
|
|
1155
|
+
default: 10,
|
|
1156
|
+
ui: {
|
|
1157
|
+
tab: "model",
|
|
1158
|
+
group: "Retry & Fallback",
|
|
1159
|
+
label: "Retry Attempts",
|
|
1160
|
+
description: "Maximum retry attempts on API errors",
|
|
1161
|
+
options: [
|
|
1162
|
+
{ value: "1", label: "1 retry" },
|
|
1163
|
+
{ value: "2", label: "2 retries" },
|
|
1164
|
+
{ value: "3", label: "3 retries" },
|
|
1165
|
+
{ value: "5", label: "5 retries" },
|
|
1166
|
+
{ value: "10", label: "10 retries" },
|
|
1167
|
+
],
|
|
1168
|
+
},
|
|
1169
|
+
},
|
|
1170
|
+
|
|
1171
|
+
"retry.baseDelayMs": { type: "number", default: 500 },
|
|
1172
|
+
"retry.maxDelayMs": {
|
|
1173
|
+
type: "number",
|
|
1174
|
+
default: 5 * 60 * 1000,
|
|
1175
|
+
ui: {
|
|
1176
|
+
tab: "model",
|
|
1177
|
+
group: "Retry & Fallback",
|
|
1178
|
+
label: "Max Retry Delay",
|
|
1179
|
+
description:
|
|
1180
|
+
"Maximum wait between retries, in ms. When the provider asks us to wait longer than this and no credential or model fallback succeeds, the request fails fast instead of sleeping (e.g. 3-hour Anthropic rate-limit windows).",
|
|
1181
|
+
},
|
|
1182
|
+
},
|
|
1183
|
+
"retry.modelFallback": {
|
|
1184
|
+
type: "boolean",
|
|
1185
|
+
default: true,
|
|
1186
|
+
ui: {
|
|
1187
|
+
tab: "model",
|
|
1188
|
+
group: "Retry & Fallback",
|
|
1189
|
+
label: "Retry Model Fallback",
|
|
1190
|
+
description: "Allow retry recovery to switch to configured fallback models",
|
|
1191
|
+
},
|
|
1192
|
+
},
|
|
1193
|
+
"retry.fallbackChains": { type: "record", default: {} as Record<string, string[]> },
|
|
1194
|
+
"retry.fallbackRevertPolicy": {
|
|
1195
|
+
type: "enum",
|
|
1196
|
+
values: ["cooldown-expiry", "never"] as const,
|
|
1197
|
+
default: "cooldown-expiry",
|
|
1198
|
+
ui: {
|
|
1199
|
+
tab: "model",
|
|
1200
|
+
group: "Retry & Fallback",
|
|
1201
|
+
label: "Fallback Revert Policy",
|
|
1202
|
+
description: "When to return to the primary model after a fallback",
|
|
1203
|
+
options: [
|
|
1204
|
+
{
|
|
1205
|
+
value: "cooldown-expiry",
|
|
1206
|
+
label: "Cooldown expiry",
|
|
1207
|
+
description: "Return to the primary model after its suppression window ends",
|
|
1208
|
+
},
|
|
1209
|
+
{ value: "never", label: "Never", description: "Stay on the fallback model until manually changed" },
|
|
1210
|
+
],
|
|
1211
|
+
},
|
|
1212
|
+
},
|
|
1213
|
+
|
|
1214
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
1215
|
+
// Interaction
|
|
1216
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
1217
|
+
|
|
1218
|
+
// Conversation flow
|
|
1219
|
+
steeringMode: {
|
|
1220
|
+
type: "enum",
|
|
1221
|
+
values: ["all", "one-at-a-time"] as const,
|
|
1222
|
+
default: "one-at-a-time",
|
|
1223
|
+
ui: {
|
|
1224
|
+
tab: "interaction",
|
|
1225
|
+
group: "Input",
|
|
1226
|
+
label: "Steering Mode",
|
|
1227
|
+
description: "How to process queued messages while agent is working",
|
|
1228
|
+
},
|
|
1229
|
+
},
|
|
1230
|
+
|
|
1231
|
+
followUpMode: {
|
|
1232
|
+
type: "enum",
|
|
1233
|
+
values: ["all", "one-at-a-time"] as const,
|
|
1234
|
+
default: "one-at-a-time",
|
|
1235
|
+
ui: {
|
|
1236
|
+
tab: "interaction",
|
|
1237
|
+
group: "Input",
|
|
1238
|
+
label: "Follow-Up Mode",
|
|
1239
|
+
description: "How to drain follow-up messages after a turn completes",
|
|
1240
|
+
},
|
|
1241
|
+
},
|
|
1242
|
+
|
|
1243
|
+
interruptMode: {
|
|
1244
|
+
type: "enum",
|
|
1245
|
+
values: ["immediate", "wait"] as const,
|
|
1246
|
+
default: "immediate",
|
|
1247
|
+
ui: {
|
|
1248
|
+
tab: "interaction",
|
|
1249
|
+
group: "Input",
|
|
1250
|
+
label: "Interrupt Mode",
|
|
1251
|
+
description: "When steering messages interrupt tool execution",
|
|
1252
|
+
},
|
|
1253
|
+
},
|
|
1254
|
+
|
|
1255
|
+
"loop.mode": {
|
|
1256
|
+
type: "enum",
|
|
1257
|
+
values: ["prompt", "compact", "reset"] as const,
|
|
1258
|
+
default: "prompt",
|
|
1259
|
+
ui: {
|
|
1260
|
+
tab: "interaction",
|
|
1261
|
+
group: "Input",
|
|
1262
|
+
label: "Loop Mode",
|
|
1263
|
+
description: "What happens between /loop iterations before re-submitting the prompt",
|
|
1264
|
+
options: [
|
|
1265
|
+
{
|
|
1266
|
+
value: "prompt",
|
|
1267
|
+
label: "Prompt",
|
|
1268
|
+
description: "Re-submit the prompt as a follow-up message (current behavior)",
|
|
1269
|
+
},
|
|
1270
|
+
{
|
|
1271
|
+
value: "compact",
|
|
1272
|
+
label: "Compact",
|
|
1273
|
+
description: "Compact the session context, then re-submit the prompt",
|
|
1274
|
+
},
|
|
1275
|
+
{ value: "reset", label: "Reset", description: "Start a new session, then re-submit the prompt" },
|
|
1276
|
+
],
|
|
1277
|
+
},
|
|
1278
|
+
},
|
|
1279
|
+
|
|
1280
|
+
// Input and startup
|
|
1281
|
+
doubleEscapeAction: {
|
|
1282
|
+
type: "enum",
|
|
1283
|
+
values: ["branch", "tree", "none"] as const,
|
|
1284
|
+
default: "tree",
|
|
1285
|
+
ui: {
|
|
1286
|
+
tab: "interaction",
|
|
1287
|
+
group: "Input",
|
|
1288
|
+
label: "Double-Escape Action",
|
|
1289
|
+
description: "Action when pressing Escape twice with empty editor",
|
|
1290
|
+
},
|
|
1291
|
+
},
|
|
1292
|
+
|
|
1293
|
+
treeFilterMode: {
|
|
1294
|
+
type: "enum",
|
|
1295
|
+
values: ["default", "no-tools", "user-only", "labeled-only", "all"] as const,
|
|
1296
|
+
default: "default",
|
|
1297
|
+
ui: {
|
|
1298
|
+
tab: "interaction",
|
|
1299
|
+
group: "Input",
|
|
1300
|
+
label: "Session Tree Filter",
|
|
1301
|
+
description: "Default filter mode when opening the session tree",
|
|
1302
|
+
},
|
|
1303
|
+
},
|
|
1304
|
+
|
|
1305
|
+
autocompleteMaxVisible: {
|
|
1306
|
+
type: "number",
|
|
1307
|
+
default: 5,
|
|
1308
|
+
ui: {
|
|
1309
|
+
tab: "interaction",
|
|
1310
|
+
group: "Input",
|
|
1311
|
+
label: "Autocomplete Items",
|
|
1312
|
+
description: "Max visible items in autocomplete dropdown (3-20)",
|
|
1313
|
+
options: [
|
|
1314
|
+
{ value: "3", label: "3 items" },
|
|
1315
|
+
{ value: "5", label: "5 items" },
|
|
1316
|
+
{ value: "7", label: "7 items" },
|
|
1317
|
+
{ value: "10", label: "10 items" },
|
|
1318
|
+
{ value: "15", label: "15 items" },
|
|
1319
|
+
{ value: "20", label: "20 items" },
|
|
1320
|
+
],
|
|
1321
|
+
},
|
|
1322
|
+
},
|
|
1323
|
+
|
|
1324
|
+
emojiAutocomplete: {
|
|
1325
|
+
type: "boolean",
|
|
1326
|
+
default: true,
|
|
1327
|
+
ui: {
|
|
1328
|
+
tab: "interaction",
|
|
1329
|
+
group: "Input",
|
|
1330
|
+
label: "Emoji Autocomplete",
|
|
1331
|
+
description: "Suggest emojis from `:name:` shortcodes and expand text emoticons like `:D` or `:-)`",
|
|
1332
|
+
},
|
|
1333
|
+
},
|
|
1334
|
+
|
|
1335
|
+
"paste.largeMenuThreshold": {
|
|
1336
|
+
type: "number",
|
|
1337
|
+
default: 100,
|
|
1338
|
+
ui: {
|
|
1339
|
+
tab: "interaction",
|
|
1340
|
+
group: "Input",
|
|
1341
|
+
label: "Large Paste Menu",
|
|
1342
|
+
description:
|
|
1343
|
+
"When a paste reaches this many lines, offer a menu to wrap it in a code block, wrap it in XML tags, or save it to a file. 0 disables the menu (large pastes still collapse to a [Paste] marker).",
|
|
1344
|
+
options: [
|
|
1345
|
+
{ value: "0", label: "Off" },
|
|
1346
|
+
{ value: "100", label: "100 lines" },
|
|
1347
|
+
{ value: "250", label: "250 lines" },
|
|
1348
|
+
{ value: "500", label: "500 lines" },
|
|
1349
|
+
{ value: "1000", label: "1000 lines" },
|
|
1350
|
+
],
|
|
1351
|
+
},
|
|
1352
|
+
},
|
|
1353
|
+
|
|
1354
|
+
"startup.quiet": {
|
|
1355
|
+
type: "boolean",
|
|
1356
|
+
default: false,
|
|
1357
|
+
ui: {
|
|
1358
|
+
tab: "interaction",
|
|
1359
|
+
group: "Startup & Updates",
|
|
1360
|
+
label: "Quiet Startup",
|
|
1361
|
+
description: "Skip welcome screen and startup status messages",
|
|
1362
|
+
},
|
|
1363
|
+
},
|
|
1364
|
+
|
|
1365
|
+
"startup.showSplash": {
|
|
1366
|
+
type: "boolean",
|
|
1367
|
+
default: false,
|
|
1368
|
+
ui: {
|
|
1369
|
+
tab: "interaction",
|
|
1370
|
+
group: "Startup & Updates",
|
|
1371
|
+
label: "Show Startup Splash",
|
|
1372
|
+
description:
|
|
1373
|
+
"Show the full animated setup splash on normal interactive startup without rerunning setup. Quiet Startup still suppresses it.",
|
|
1374
|
+
},
|
|
1375
|
+
},
|
|
1376
|
+
|
|
1377
|
+
"startup.setupWizard": {
|
|
1378
|
+
type: "boolean",
|
|
1379
|
+
default: true,
|
|
1380
|
+
ui: {
|
|
1381
|
+
tab: "interaction",
|
|
1382
|
+
group: "Startup & Updates",
|
|
1383
|
+
label: "Setup Wizard",
|
|
1384
|
+
description: "Show newly added onboarding steps once per setup version",
|
|
1385
|
+
},
|
|
1386
|
+
},
|
|
1387
|
+
|
|
1388
|
+
"startup.checkUpdate": {
|
|
1389
|
+
type: "boolean",
|
|
1390
|
+
default: true,
|
|
1391
|
+
ui: {
|
|
1392
|
+
tab: "interaction",
|
|
1393
|
+
group: "Startup & Updates",
|
|
1394
|
+
label: "Check for Updates",
|
|
1395
|
+
description: "Check for omp updates on startup",
|
|
1396
|
+
},
|
|
1397
|
+
},
|
|
1398
|
+
|
|
1399
|
+
"marketplace.autoUpdate": {
|
|
1400
|
+
type: "enum",
|
|
1401
|
+
values: ["off", "notify", "auto"] as const,
|
|
1402
|
+
default: "notify",
|
|
1403
|
+
ui: {
|
|
1404
|
+
tab: "interaction",
|
|
1405
|
+
group: "Startup & Updates",
|
|
1406
|
+
label: "Marketplace Auto-Update",
|
|
1407
|
+
description: "Check for plugin updates on startup",
|
|
1408
|
+
options: [
|
|
1409
|
+
{ value: "off", label: "Off", description: "Don't check for plugin updates" },
|
|
1410
|
+
{ value: "notify", label: "Notify", description: "Check on startup and notify when updates are available" },
|
|
1411
|
+
{ value: "auto", label: "Auto", description: "Check on startup and auto-install updates" },
|
|
1412
|
+
],
|
|
1413
|
+
},
|
|
1414
|
+
},
|
|
1415
|
+
|
|
1416
|
+
collapseChangelog: {
|
|
1417
|
+
type: "boolean",
|
|
1418
|
+
default: false,
|
|
1419
|
+
ui: {
|
|
1420
|
+
tab: "interaction",
|
|
1421
|
+
group: "Startup & Updates",
|
|
1422
|
+
label: "Collapse Changelog",
|
|
1423
|
+
description: "Show condensed changelog after updates",
|
|
1424
|
+
},
|
|
1425
|
+
},
|
|
1426
|
+
|
|
1427
|
+
"magicKeywords.enabled": {
|
|
1428
|
+
type: "boolean",
|
|
1429
|
+
default: true,
|
|
1430
|
+
ui: {
|
|
1431
|
+
tab: "interaction",
|
|
1432
|
+
group: "Magic Keywords",
|
|
1433
|
+
label: "Magic Keywords",
|
|
1434
|
+
description: "Enable hidden notices for standalone ultrathink, orchestrate, and workflowz keywords",
|
|
1435
|
+
},
|
|
1436
|
+
},
|
|
1437
|
+
|
|
1438
|
+
"magicKeywords.ultrathink": {
|
|
1439
|
+
type: "boolean",
|
|
1440
|
+
default: true,
|
|
1441
|
+
ui: {
|
|
1442
|
+
tab: "interaction",
|
|
1443
|
+
group: "Magic Keywords",
|
|
1444
|
+
label: "Ultrathink Keyword",
|
|
1445
|
+
description: "Let standalone ultrathink request maximum automatic thinking and append its hidden notice",
|
|
1446
|
+
},
|
|
1447
|
+
},
|
|
1448
|
+
|
|
1449
|
+
"magicKeywords.orchestrate": {
|
|
1450
|
+
type: "boolean",
|
|
1451
|
+
default: true,
|
|
1452
|
+
ui: {
|
|
1453
|
+
tab: "interaction",
|
|
1454
|
+
group: "Magic Keywords",
|
|
1455
|
+
label: "Orchestrate Keyword",
|
|
1456
|
+
description: "Let standalone orchestrate append its hidden multi-agent orchestration notice",
|
|
1457
|
+
},
|
|
1458
|
+
},
|
|
1459
|
+
|
|
1460
|
+
"magicKeywords.workflow": {
|
|
1461
|
+
type: "boolean",
|
|
1462
|
+
default: true,
|
|
1463
|
+
ui: {
|
|
1464
|
+
tab: "interaction",
|
|
1465
|
+
group: "Magic Keywords",
|
|
1466
|
+
label: "Workflow Keyword",
|
|
1467
|
+
description: "Let standalone workflowz append its hidden eval workflow notice",
|
|
1468
|
+
},
|
|
1469
|
+
},
|
|
1470
|
+
|
|
1471
|
+
// Notifications
|
|
1472
|
+
"completion.notify": {
|
|
1473
|
+
type: "enum",
|
|
1474
|
+
values: ["on", "off"] as const,
|
|
1475
|
+
default: "on",
|
|
1476
|
+
ui: {
|
|
1477
|
+
tab: "interaction",
|
|
1478
|
+
group: "Notifications",
|
|
1479
|
+
label: "Completion Notification",
|
|
1480
|
+
description: "Notify when the agent finishes a turn",
|
|
1481
|
+
},
|
|
1482
|
+
},
|
|
1483
|
+
|
|
1484
|
+
"ask.timeout": {
|
|
1485
|
+
type: "number",
|
|
1486
|
+
default: 0,
|
|
1487
|
+
ui: {
|
|
1488
|
+
tab: "interaction",
|
|
1489
|
+
group: "Notifications",
|
|
1490
|
+
label: "Ask Timeout",
|
|
1491
|
+
description: "Auto-select the recommended ask option after this many seconds (0 disables)",
|
|
1492
|
+
options: [
|
|
1493
|
+
{ value: "0", label: "Disabled" },
|
|
1494
|
+
{ value: "15", label: "15 seconds" },
|
|
1495
|
+
{ value: "30", label: "30 seconds" },
|
|
1496
|
+
{ value: "60", label: "60 seconds" },
|
|
1497
|
+
{ value: "120", label: "120 seconds" },
|
|
1498
|
+
],
|
|
1499
|
+
},
|
|
1500
|
+
},
|
|
1501
|
+
|
|
1502
|
+
"ask.notify": {
|
|
1503
|
+
type: "enum",
|
|
1504
|
+
values: ["on", "off"] as const,
|
|
1505
|
+
default: "on",
|
|
1506
|
+
ui: {
|
|
1507
|
+
tab: "interaction",
|
|
1508
|
+
group: "Notifications",
|
|
1509
|
+
label: "Ask Notification",
|
|
1510
|
+
description: "Notify when the ask tool is waiting for input",
|
|
1511
|
+
},
|
|
1512
|
+
},
|
|
1513
|
+
|
|
1514
|
+
// Collab
|
|
1515
|
+
"collab.relayUrl": {
|
|
1516
|
+
type: "string",
|
|
1517
|
+
default: DEFAULT_RELAY_URL,
|
|
1518
|
+
ui: {
|
|
1519
|
+
tab: "interaction",
|
|
1520
|
+
group: "Collab",
|
|
1521
|
+
label: "Relay URL",
|
|
1522
|
+
description: "Relay used by /collab (wss://host[:port])",
|
|
1523
|
+
},
|
|
1524
|
+
},
|
|
1525
|
+
|
|
1526
|
+
"collab.webUrl": {
|
|
1527
|
+
type: "string",
|
|
1528
|
+
default: "",
|
|
1529
|
+
ui: {
|
|
1530
|
+
tab: "interaction",
|
|
1531
|
+
group: "Collab",
|
|
1532
|
+
label: "Web UI URL",
|
|
1533
|
+
description:
|
|
1534
|
+
"Browser UI used by /collab links; empty derives from collab.relayUrl; explicit http:// is localhost-only",
|
|
1535
|
+
},
|
|
1536
|
+
},
|
|
1537
|
+
|
|
1538
|
+
"collab.displayName": {
|
|
1539
|
+
type: "string",
|
|
1540
|
+
default: "",
|
|
1541
|
+
ui: {
|
|
1542
|
+
tab: "interaction",
|
|
1543
|
+
group: "Collab",
|
|
1544
|
+
label: "Display Name",
|
|
1545
|
+
description: "Name shown to other collab participants (default: OS username)",
|
|
1546
|
+
},
|
|
1547
|
+
},
|
|
1548
|
+
|
|
1549
|
+
"share.serverUrl": {
|
|
1550
|
+
type: "string",
|
|
1551
|
+
default: DEFAULT_SHARE_URL,
|
|
1552
|
+
ui: {
|
|
1553
|
+
tab: "interaction",
|
|
1554
|
+
group: "Collab",
|
|
1555
|
+
label: "Share Server",
|
|
1556
|
+
description:
|
|
1557
|
+
"Share viewer/upload base used by /share (encrypted blob upload + viewer; links are <base>/<id>#<key>)",
|
|
1558
|
+
},
|
|
1559
|
+
},
|
|
1560
|
+
|
|
1561
|
+
"share.redactSecrets": {
|
|
1562
|
+
type: "boolean",
|
|
1563
|
+
default: true,
|
|
1564
|
+
ui: {
|
|
1565
|
+
tab: "interaction",
|
|
1566
|
+
group: "Collab",
|
|
1567
|
+
label: "Share Secret Redaction",
|
|
1568
|
+
description: "Run the secret obfuscator over /share snapshots before upload (uses the secrets.* config)",
|
|
1569
|
+
},
|
|
1570
|
+
},
|
|
1571
|
+
|
|
1572
|
+
// Speech-to-text
|
|
1573
|
+
"stt.enabled": {
|
|
1574
|
+
type: "boolean",
|
|
1575
|
+
default: false,
|
|
1576
|
+
ui: {
|
|
1577
|
+
tab: "interaction",
|
|
1578
|
+
group: "Speech",
|
|
1579
|
+
label: "Speech-to-Text",
|
|
1580
|
+
description: "Enable speech-to-text input via microphone",
|
|
1581
|
+
},
|
|
1582
|
+
},
|
|
1583
|
+
|
|
1584
|
+
"stt.language": {
|
|
1585
|
+
type: "string",
|
|
1586
|
+
default: "en",
|
|
1587
|
+
},
|
|
1588
|
+
|
|
1589
|
+
"stt.modelName": {
|
|
1590
|
+
type: "enum",
|
|
1591
|
+
values: STT_MODEL_VALUES,
|
|
1592
|
+
default: DEFAULT_STT_MODEL_KEY,
|
|
1593
|
+
ui: {
|
|
1594
|
+
tab: "interaction",
|
|
1595
|
+
group: "Speech",
|
|
1596
|
+
label: "Speech Model",
|
|
1597
|
+
description:
|
|
1598
|
+
"Local on-device speech model. Parakeet TDT v3 (sherpa-onnx) is the SoTA default; Whisper base/small/large-v3-turbo tiers (transformers.js) trade size for multilingual coverage. Downloaded on first use.",
|
|
1599
|
+
options: STT_MODEL_OPTIONS,
|
|
1600
|
+
},
|
|
1601
|
+
},
|
|
1602
|
+
|
|
1603
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
1604
|
+
// Context
|
|
1605
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
1606
|
+
|
|
1607
|
+
// Context promotion
|
|
1608
|
+
"contextPromotion.enabled": {
|
|
1609
|
+
type: "boolean",
|
|
1610
|
+
default: false,
|
|
1611
|
+
ui: {
|
|
1612
|
+
tab: "context",
|
|
1613
|
+
group: "General",
|
|
1614
|
+
label: "Auto-Promote Context",
|
|
1615
|
+
description: "Promote to a larger-context model on context overflow instead of compacting",
|
|
1616
|
+
},
|
|
1617
|
+
},
|
|
1618
|
+
|
|
1619
|
+
// Compaction
|
|
1620
|
+
"compaction.enabled": {
|
|
1621
|
+
type: "boolean",
|
|
1622
|
+
default: true,
|
|
1623
|
+
ui: {
|
|
1624
|
+
tab: "context",
|
|
1625
|
+
group: "Compaction",
|
|
1626
|
+
label: "Auto-Compact",
|
|
1627
|
+
description: "Automatically compact context when it gets too large",
|
|
1628
|
+
},
|
|
1629
|
+
},
|
|
1630
|
+
|
|
1631
|
+
"compaction.strategy": {
|
|
1632
|
+
type: "enum",
|
|
1633
|
+
values: ["context-full", "handoff", "shake", "snapcompact", "off"] as const,
|
|
1634
|
+
default: "context-full",
|
|
1635
|
+
ui: {
|
|
1636
|
+
tab: "context",
|
|
1637
|
+
group: "Compaction",
|
|
1638
|
+
label: "Compaction Strategy",
|
|
1639
|
+
description:
|
|
1640
|
+
"Choose in-place context-full maintenance, auto-handoff, surgical shake (drop heavy content), snapcompact (archive history as dense images), or disable auto maintenance (off)",
|
|
1641
|
+
options: [
|
|
1642
|
+
{
|
|
1643
|
+
value: "context-full",
|
|
1644
|
+
label: "Context-full",
|
|
1645
|
+
description: "Summarize in-place and keep the current session",
|
|
1646
|
+
},
|
|
1647
|
+
{ value: "handoff", label: "Handoff", description: "Generate handoff and continue in a new session" },
|
|
1648
|
+
{
|
|
1649
|
+
value: "shake",
|
|
1650
|
+
label: "Shake",
|
|
1651
|
+
description: "Drop heavy content (tool results + large blocks) in place; recover via artifact",
|
|
1652
|
+
},
|
|
1653
|
+
{
|
|
1654
|
+
value: "snapcompact",
|
|
1655
|
+
label: "Snapcompact",
|
|
1656
|
+
description: "Archive history onto dense bitmap images the model reads back; no LLM call",
|
|
1657
|
+
},
|
|
1658
|
+
{
|
|
1659
|
+
value: "off",
|
|
1660
|
+
label: "Off",
|
|
1661
|
+
description: "Disable automatic context maintenance (same behavior as Auto-compact off)",
|
|
1662
|
+
},
|
|
1663
|
+
],
|
|
1664
|
+
},
|
|
1665
|
+
},
|
|
1666
|
+
|
|
1667
|
+
"compaction.thresholdPercent": {
|
|
1668
|
+
type: "number",
|
|
1669
|
+
default: -1,
|
|
1670
|
+
ui: {
|
|
1671
|
+
tab: "context",
|
|
1672
|
+
group: "Compaction",
|
|
1673
|
+
label: "Compaction Threshold",
|
|
1674
|
+
description: "Percent threshold for context maintenance; set to Default to use legacy reserve-based behavior",
|
|
1675
|
+
options: [
|
|
1676
|
+
{ value: "default", label: "Default", description: "Legacy reserve-based threshold" },
|
|
1677
|
+
{ value: "10", label: "10%", description: "Extremely early maintenance" },
|
|
1678
|
+
{ value: "20", label: "20%", description: "Very early maintenance" },
|
|
1679
|
+
{ value: "30", label: "30%", description: "Early maintenance" },
|
|
1680
|
+
{ value: "40", label: "40%", description: "Moderately early maintenance" },
|
|
1681
|
+
{ value: "50", label: "50%", description: "Halfway point" },
|
|
1682
|
+
{ value: "60", label: "60%", description: "Moderate context usage" },
|
|
1683
|
+
{ value: "70", label: "70%", description: "Balanced" },
|
|
1684
|
+
{ value: "75", label: "75%", description: "Slightly aggressive" },
|
|
1685
|
+
{ value: "80", label: "80%", description: "Typical threshold" },
|
|
1686
|
+
{ value: "85", label: "85%", description: "Aggressive context usage" },
|
|
1687
|
+
{ value: "90", label: "90%", description: "Very aggressive" },
|
|
1688
|
+
{ value: "95", label: "95%", description: "Near context limit" },
|
|
1689
|
+
],
|
|
1690
|
+
},
|
|
1691
|
+
},
|
|
1692
|
+
"compaction.thresholdTokens": {
|
|
1693
|
+
type: "number",
|
|
1694
|
+
default: -1,
|
|
1695
|
+
ui: {
|
|
1696
|
+
tab: "context",
|
|
1697
|
+
group: "Compaction",
|
|
1698
|
+
label: "Compaction Token Limit",
|
|
1699
|
+
description: "Fixed token limit for context maintenance; overrides percentage if set",
|
|
1700
|
+
options: [
|
|
1701
|
+
{ value: "default", label: "Default", description: "Use percentage-based threshold" },
|
|
1702
|
+
{ value: "25000", label: "25K tokens", description: "Quarter of a 200K window" },
|
|
1703
|
+
{ value: "50000", label: "50K tokens", description: "Half of a 200K window" },
|
|
1704
|
+
{ value: "100000", label: "100K tokens", description: "Half of a 200K window" },
|
|
1705
|
+
{ value: "150000", label: "150K tokens", description: "Three-quarters of a 200K window" },
|
|
1706
|
+
{ value: "200000", label: "200K tokens", description: "Full standard context window" },
|
|
1707
|
+
{ value: "300000", label: "300K tokens", description: "Large context window" },
|
|
1708
|
+
{ value: "500000", label: "500K tokens", description: "Very large context window" },
|
|
1709
|
+
],
|
|
1710
|
+
},
|
|
1711
|
+
},
|
|
1712
|
+
|
|
1713
|
+
"compaction.handoffSaveToDisk": {
|
|
1714
|
+
type: "boolean",
|
|
1715
|
+
default: false,
|
|
1716
|
+
ui: {
|
|
1717
|
+
tab: "context",
|
|
1718
|
+
group: "Compaction",
|
|
1719
|
+
label: "Save Handoff Docs",
|
|
1720
|
+
description: "Save generated handoff documents to markdown files for the auto-handoff flow",
|
|
1721
|
+
},
|
|
1722
|
+
},
|
|
1723
|
+
|
|
1724
|
+
"compaction.remoteEnabled": {
|
|
1725
|
+
type: "boolean",
|
|
1726
|
+
default: true,
|
|
1727
|
+
ui: {
|
|
1728
|
+
tab: "context",
|
|
1729
|
+
group: "Compaction",
|
|
1730
|
+
label: "Remote Compaction",
|
|
1731
|
+
description: "Use remote compaction endpoints when available instead of local summarization",
|
|
1732
|
+
},
|
|
1733
|
+
},
|
|
1734
|
+
|
|
1735
|
+
"compaction.reserveTokens": { type: "number", default: 16384 },
|
|
1736
|
+
|
|
1737
|
+
"compaction.keepRecentTokens": { type: "number", default: 20000 },
|
|
1738
|
+
|
|
1739
|
+
"compaction.autoContinue": { type: "boolean", default: true },
|
|
1740
|
+
|
|
1741
|
+
"compaction.remoteEndpoint": { type: "string", default: undefined },
|
|
1742
|
+
|
|
1743
|
+
// Idle compaction
|
|
1744
|
+
"compaction.idleEnabled": {
|
|
1745
|
+
type: "boolean",
|
|
1746
|
+
default: false,
|
|
1747
|
+
ui: {
|
|
1748
|
+
tab: "context",
|
|
1749
|
+
group: "Compaction",
|
|
1750
|
+
label: "Idle Compaction",
|
|
1751
|
+
description: "Compact context while idle when token count exceeds threshold",
|
|
1752
|
+
},
|
|
1753
|
+
},
|
|
1754
|
+
|
|
1755
|
+
"compaction.idleThresholdTokens": {
|
|
1756
|
+
type: "number",
|
|
1757
|
+
default: 200000,
|
|
1758
|
+
ui: {
|
|
1759
|
+
tab: "context",
|
|
1760
|
+
group: "Compaction",
|
|
1761
|
+
label: "Idle Compaction Threshold",
|
|
1762
|
+
description: "Token count above which idle compaction triggers",
|
|
1763
|
+
options: [
|
|
1764
|
+
{ value: "100000", label: "100K tokens" },
|
|
1765
|
+
{ value: "200000", label: "200K tokens" },
|
|
1766
|
+
{ value: "300000", label: "300K tokens" },
|
|
1767
|
+
{ value: "400000", label: "400K tokens" },
|
|
1768
|
+
{ value: "500000", label: "500K tokens" },
|
|
1769
|
+
{ value: "600000", label: "600K tokens" },
|
|
1770
|
+
{ value: "700000", label: "700K tokens" },
|
|
1771
|
+
{ value: "800000", label: "800K tokens" },
|
|
1772
|
+
{ value: "900000", label: "900K tokens" },
|
|
1773
|
+
],
|
|
1774
|
+
},
|
|
1775
|
+
},
|
|
1776
|
+
|
|
1777
|
+
"compaction.idleTimeoutSeconds": {
|
|
1778
|
+
type: "number",
|
|
1779
|
+
default: 300,
|
|
1780
|
+
ui: {
|
|
1781
|
+
tab: "context",
|
|
1782
|
+
group: "Compaction",
|
|
1783
|
+
label: "Idle Compaction Delay",
|
|
1784
|
+
description: "Seconds to wait while idle before compacting",
|
|
1785
|
+
options: [
|
|
1786
|
+
{ value: "60", label: "1 minute" },
|
|
1787
|
+
{ value: "120", label: "2 minutes" },
|
|
1788
|
+
{ value: "300", label: "5 minutes" },
|
|
1789
|
+
{ value: "600", label: "10 minutes" },
|
|
1790
|
+
{ value: "1800", label: "30 minutes" },
|
|
1791
|
+
{ value: "3600", label: "1 hour" },
|
|
1792
|
+
],
|
|
1793
|
+
},
|
|
1794
|
+
},
|
|
1795
|
+
|
|
1796
|
+
"compaction.supersedeReads": {
|
|
1797
|
+
type: "boolean",
|
|
1798
|
+
default: true,
|
|
1799
|
+
ui: {
|
|
1800
|
+
tab: "context",
|
|
1801
|
+
group: "Compaction",
|
|
1802
|
+
label: "Supersede Stale Reads",
|
|
1803
|
+
description: "Prune older read results when the same file is read again (cache-aware, runs every turn)",
|
|
1804
|
+
},
|
|
1805
|
+
},
|
|
1806
|
+
|
|
1807
|
+
"compaction.dropUseless": {
|
|
1808
|
+
type: "boolean",
|
|
1809
|
+
default: true,
|
|
1810
|
+
ui: {
|
|
1811
|
+
tab: "context",
|
|
1812
|
+
group: "Compaction",
|
|
1813
|
+
label: "Elide Uneventful Results",
|
|
1814
|
+
description:
|
|
1815
|
+
"Prune tool results flagged contextually useless (no matches, timed-out waits) once consumed (cache-aware)",
|
|
1816
|
+
},
|
|
1817
|
+
},
|
|
1818
|
+
|
|
1819
|
+
// Experimental: snapcompact inline imaging (transient, per-request; never persisted)
|
|
1820
|
+
"snapcompact.systemPrompt": {
|
|
1821
|
+
type: "enum",
|
|
1822
|
+
values: ["none", "agents-md", "all"] as const,
|
|
1823
|
+
default: "none",
|
|
1824
|
+
ui: {
|
|
1825
|
+
tab: "context",
|
|
1826
|
+
group: "Experimental",
|
|
1827
|
+
label: "Snapcompact System Prompt",
|
|
1828
|
+
description:
|
|
1829
|
+
"Experimental: render selected system prompt text as dense PNG image(s) and attach to the first user message (vision models only). Saves tokens; loses prompt caching for imaged text.",
|
|
1830
|
+
options: [
|
|
1831
|
+
{ value: "none", label: "None", description: "Keep the system prompt as text." },
|
|
1832
|
+
{
|
|
1833
|
+
value: "agents-md",
|
|
1834
|
+
label: "AGENTS.md",
|
|
1835
|
+
description: "Only move loaded context-file instructions to images, when that saves tokens.",
|
|
1836
|
+
},
|
|
1837
|
+
{
|
|
1838
|
+
value: "all",
|
|
1839
|
+
label: "All",
|
|
1840
|
+
description: "Move the full system prompt to images, when that saves tokens.",
|
|
1841
|
+
},
|
|
1842
|
+
],
|
|
1843
|
+
},
|
|
1844
|
+
},
|
|
1845
|
+
|
|
1846
|
+
"snapcompact.toolResults": {
|
|
1847
|
+
type: "boolean",
|
|
1848
|
+
default: false,
|
|
1849
|
+
ui: {
|
|
1850
|
+
tab: "context",
|
|
1851
|
+
group: "Experimental",
|
|
1852
|
+
label: "Snapcompact Tool Results",
|
|
1853
|
+
description:
|
|
1854
|
+
"Experimental: render large historical tool results as dense PNG image(s) instead of text (vision models only). Saves tokens on accumulated read/search output.",
|
|
1855
|
+
},
|
|
1856
|
+
},
|
|
1857
|
+
|
|
1858
|
+
"tools.format": {
|
|
1859
|
+
type: "enum",
|
|
1860
|
+
values: [
|
|
1861
|
+
"auto",
|
|
1862
|
+
"native",
|
|
1863
|
+
"glm",
|
|
1864
|
+
"hermes",
|
|
1865
|
+
"kimi",
|
|
1866
|
+
"xml",
|
|
1867
|
+
"anthropic",
|
|
1868
|
+
"deepseek",
|
|
1869
|
+
"harmony",
|
|
1870
|
+
"pi",
|
|
1871
|
+
"qwen3",
|
|
1872
|
+
"gemini",
|
|
1873
|
+
"gemma",
|
|
1874
|
+
"minimax",
|
|
1875
|
+
] as const,
|
|
1876
|
+
default: "auto",
|
|
1877
|
+
ui: {
|
|
1878
|
+
tab: "context",
|
|
1879
|
+
group: "Experimental",
|
|
1880
|
+
label: "Tool Calling Mode",
|
|
1881
|
+
description:
|
|
1882
|
+
"Controls how tools are exposed to the model. Auto uses provider-native tool calls unless the selected model is marked as not supporting them, then falls back to the GLM owned dialect. Native forces provider-native tools; the other values force the named owned dialect. Applies on session start.",
|
|
1883
|
+
options: [
|
|
1884
|
+
{
|
|
1885
|
+
value: "auto",
|
|
1886
|
+
label: "Auto",
|
|
1887
|
+
description: "Use native tool calls unless the model is known not to support them.",
|
|
1888
|
+
},
|
|
1889
|
+
{ value: "native", label: "Native", description: "Use provider-native tool calls." },
|
|
1890
|
+
{ value: "glm", label: "GLM", description: "Use GLM-style in-band tool calls." },
|
|
1891
|
+
{ value: "hermes", label: "Hermes", description: "Use Hermes-style in-band tool calls." },
|
|
1892
|
+
{ value: "kimi", label: "Kimi", description: "Use Kimi-style in-band tool calls." },
|
|
1893
|
+
{ value: "xml", label: "XML", description: "Use generic XML in-band tool calls." },
|
|
1894
|
+
{ value: "anthropic", label: "Anthropic", description: "Use Anthropic-style in-band tool calls." },
|
|
1895
|
+
{ value: "deepseek", label: "DeepSeek", description: "Use DeepSeek-style in-band tool calls." },
|
|
1896
|
+
{ value: "harmony", label: "Harmony", description: "Use Harmony-style in-band tool calls." },
|
|
1897
|
+
{ value: "pi", label: "Pi", description: "Use the Pi owned dialect (compact sigil-delimited tool calls)." },
|
|
1898
|
+
{ value: "qwen3", label: "Qwen3", description: "Use the Qwen3 owned dialect." },
|
|
1899
|
+
{ value: "gemini", label: "Gemini", description: "Use the Gemini owned dialect." },
|
|
1900
|
+
{ value: "gemma", label: "Gemma", description: "Use the Gemma owned dialect." },
|
|
1901
|
+
{ value: "minimax", label: "MiniMax", description: "Use the MiniMax owned dialect." },
|
|
1902
|
+
],
|
|
1903
|
+
},
|
|
1904
|
+
},
|
|
1905
|
+
|
|
1906
|
+
"snapcompact.shape": {
|
|
1907
|
+
type: "enum",
|
|
1908
|
+
values: ["auto", ...SHAPE_VARIANT_NAMES] as const,
|
|
1909
|
+
default: "auto",
|
|
1910
|
+
ui: {
|
|
1911
|
+
tab: "context",
|
|
1912
|
+
group: "Experimental",
|
|
1913
|
+
label: "Snapcompact Shape",
|
|
1914
|
+
description:
|
|
1915
|
+
"Frame shape snapcompact prints text with (compaction archive and inline imaging). Auto picks a shape tuned for the current model.",
|
|
1916
|
+
options: [
|
|
1917
|
+
{
|
|
1918
|
+
value: "auto",
|
|
1919
|
+
label: "Auto",
|
|
1920
|
+
description: "Picks a shape tuned for the current model, falling back to its provider family.",
|
|
1921
|
+
},
|
|
1922
|
+
{
|
|
1923
|
+
value: "8x8r-bw",
|
|
1924
|
+
label: "8x8 repeated, black",
|
|
1925
|
+
description:
|
|
1926
|
+
"unscii square cell, black ink, every line printed twice with the copy on a pale highlight band.",
|
|
1927
|
+
},
|
|
1928
|
+
{
|
|
1929
|
+
value: "8x8r-sent",
|
|
1930
|
+
label: "8x8 repeated, sentence hues",
|
|
1931
|
+
description: "Repeated grid with ink cycling six hues at sentence boundaries.",
|
|
1932
|
+
},
|
|
1933
|
+
{
|
|
1934
|
+
value: "8x8u-bw",
|
|
1935
|
+
label: "8x8, black",
|
|
1936
|
+
description: "Plain unscii square cell, single-printed lines, black ink.",
|
|
1937
|
+
},
|
|
1938
|
+
{
|
|
1939
|
+
value: "8x8u-sent",
|
|
1940
|
+
label: "8x8, sentence hues",
|
|
1941
|
+
description: "Plain unscii square cell with sentence-hue ink.",
|
|
1942
|
+
},
|
|
1943
|
+
{
|
|
1944
|
+
value: "6x6u-bw",
|
|
1945
|
+
label: "6x6 dense, black",
|
|
1946
|
+
description: "unscii squeezed to 6x6 — densest readable cell, fewest frames — in black ink.",
|
|
1947
|
+
},
|
|
1948
|
+
{
|
|
1949
|
+
value: "6x6u-sent",
|
|
1950
|
+
label: "6x6 dense, sentence hues",
|
|
1951
|
+
description: "Densest cell with sentence-hue ink.",
|
|
1952
|
+
},
|
|
1953
|
+
{
|
|
1954
|
+
value: "5x8-bw",
|
|
1955
|
+
label: "5x8 legacy, black",
|
|
1956
|
+
description: "Original X.org 5x8 glyphs on the 2576px frame, black ink.",
|
|
1957
|
+
},
|
|
1958
|
+
{
|
|
1959
|
+
value: "5x8-sent",
|
|
1960
|
+
label: "5x8 legacy, sentence hues",
|
|
1961
|
+
description: "The original snapcompact shape (pre-shape-table sessions rendered this).",
|
|
1962
|
+
},
|
|
1963
|
+
{
|
|
1964
|
+
value: "6x12-dim",
|
|
1965
|
+
label: "6x12, dimmed stopwords",
|
|
1966
|
+
description: "X.org 6x12 glyphs, black ink, function words dimmed gray.",
|
|
1967
|
+
},
|
|
1968
|
+
{
|
|
1969
|
+
value: "8x13-bw",
|
|
1970
|
+
label: "8x13, black",
|
|
1971
|
+
description: "X.org 8x13 glyphs, black ink.",
|
|
1972
|
+
},
|
|
1973
|
+
{
|
|
1974
|
+
value: "8on16-bw",
|
|
1975
|
+
label: "8x13 on 16px pitch, black",
|
|
1976
|
+
description: "8x13 glyphs on an 8x16 cell (extra leading), black ink.",
|
|
1977
|
+
},
|
|
1978
|
+
{
|
|
1979
|
+
value: "8on22-bw",
|
|
1980
|
+
label: "8x13 on 22px pitch (leading), black",
|
|
1981
|
+
description:
|
|
1982
|
+
"8x13 glyphs on an 8x22 cell — extra line spacing so rows don't crowd. Default for OpenAI/Google.",
|
|
1983
|
+
},
|
|
1984
|
+
{
|
|
1985
|
+
value: "11on16-bw",
|
|
1986
|
+
label: "8x13 on 11px advance (tracking), black",
|
|
1987
|
+
description:
|
|
1988
|
+
"8x13 glyphs on an 11x16 cell — extra letter spacing so characters don't merge. Default for Anthropic.",
|
|
1989
|
+
},
|
|
1990
|
+
{
|
|
1991
|
+
value: "doc-8on16-bw",
|
|
1992
|
+
label: "Doc 8on16, black",
|
|
1993
|
+
description: "Two word-wrapped newspaper columns of 8x13 glyphs on a 16px pitch, black ink.",
|
|
1994
|
+
},
|
|
1995
|
+
{
|
|
1996
|
+
value: "doc-8on16-sent",
|
|
1997
|
+
label: "Doc 8on16, sentence hues",
|
|
1998
|
+
description: "Two-column doc layout with sentence-hue ink.",
|
|
1999
|
+
},
|
|
2000
|
+
{
|
|
2001
|
+
value: "doc-8on16-sent-dim",
|
|
2002
|
+
label: "Doc 8on16, sentence hues + dimmed stopwords",
|
|
2003
|
+
description: "Two-column doc layout, sentence-hue ink, function words dimmed gray.",
|
|
2004
|
+
},
|
|
2005
|
+
],
|
|
2006
|
+
},
|
|
2007
|
+
},
|
|
2008
|
+
|
|
2009
|
+
// Branch summaries
|
|
2010
|
+
"branchSummary.enabled": {
|
|
2011
|
+
type: "boolean",
|
|
2012
|
+
default: false,
|
|
2013
|
+
ui: {
|
|
2014
|
+
tab: "context",
|
|
2015
|
+
group: "General",
|
|
2016
|
+
label: "Branch Summaries",
|
|
2017
|
+
description: "Prompt to summarize when leaving a branch",
|
|
2018
|
+
},
|
|
2019
|
+
},
|
|
2020
|
+
|
|
2021
|
+
"branchSummary.reserveTokens": { type: "number", default: 16384 },
|
|
2022
|
+
|
|
2023
|
+
// Memories
|
|
2024
|
+
// Legacy local-memory enable flag kept only for back-compat migration.
|
|
2025
|
+
// Hidden from UI — users should use `memory.backend` instead.
|
|
2026
|
+
"memories.enabled": {
|
|
2027
|
+
type: "boolean",
|
|
2028
|
+
default: false,
|
|
2029
|
+
},
|
|
2030
|
+
|
|
2031
|
+
"memories.maxRolloutsPerStartup": { type: "number", default: 64 },
|
|
2032
|
+
|
|
2033
|
+
"memories.maxRolloutAgeDays": { type: "number", default: 30 },
|
|
2034
|
+
|
|
2035
|
+
"memories.minRolloutIdleHours": { type: "number", default: 12 },
|
|
2036
|
+
|
|
2037
|
+
"memories.threadScanLimit": { type: "number", default: 300 },
|
|
2038
|
+
|
|
2039
|
+
"memories.maxRawMemoriesForGlobal": { type: "number", default: 200 },
|
|
2040
|
+
|
|
2041
|
+
"memories.stage1Concurrency": { type: "number", default: 8 },
|
|
2042
|
+
|
|
2043
|
+
"memories.stage1LeaseSeconds": { type: "number", default: 120 },
|
|
2044
|
+
|
|
2045
|
+
"memories.stage1RetryDelaySeconds": { type: "number", default: 120 },
|
|
2046
|
+
|
|
2047
|
+
"memories.phase2LeaseSeconds": { type: "number", default: 180 },
|
|
2048
|
+
|
|
2049
|
+
"memories.phase2RetryDelaySeconds": { type: "number", default: 180 },
|
|
2050
|
+
|
|
2051
|
+
"memories.phase2HeartbeatSeconds": { type: "number", default: 30 },
|
|
2052
|
+
|
|
2053
|
+
"memories.rolloutPayloadPercent": { type: "number", default: 0.7 },
|
|
2054
|
+
|
|
2055
|
+
"memories.phase1InputTokenLimit": { type: "number", default: 4000 },
|
|
2056
|
+
|
|
2057
|
+
"memories.fallbackTokenLimit": { type: "number", default: 16000 },
|
|
2058
|
+
|
|
2059
|
+
"memories.summaryInjectionTokenLimit": { type: "number", default: 5000 },
|
|
2060
|
+
|
|
2061
|
+
// Memory backend selector — picks between local memories pipeline,
|
|
2062
|
+
// Mnemopi local SQLite, Hindsight remote memory, or off. Legacy
|
|
2063
|
+
// `memories.enabled` keeps gating the local backend; see config/settings.ts
|
|
2064
|
+
// migration for details.
|
|
2065
|
+
"memory.backend": {
|
|
2066
|
+
type: "enum",
|
|
2067
|
+
values: ["off", "local", "hindsight", "mnemopi"] as const,
|
|
2068
|
+
default: "off",
|
|
2069
|
+
ui: {
|
|
2070
|
+
tab: "memory",
|
|
2071
|
+
group: "General",
|
|
2072
|
+
label: "Memory Backend",
|
|
2073
|
+
description: "Off, local summary pipeline, Mnemopi SQLite, or Hindsight remote memory",
|
|
2074
|
+
options: [
|
|
2075
|
+
{ value: "off", label: "Off", description: "No memory subsystem runs" },
|
|
2076
|
+
{ value: "local", label: "Local", description: "Local rollout summarisation pipeline (memory_summary.md)" },
|
|
2077
|
+
{ value: "hindsight", label: "Hindsight", description: "Vectorize Hindsight remote memory service" },
|
|
2078
|
+
{
|
|
2079
|
+
value: "mnemopi",
|
|
2080
|
+
label: "Mnemopi",
|
|
2081
|
+
description: "Local SQLite recall/retain backend with optional embeddings",
|
|
2082
|
+
},
|
|
2083
|
+
],
|
|
2084
|
+
},
|
|
2085
|
+
},
|
|
2086
|
+
|
|
2087
|
+
// Auto-Learn (experimental): post-stop nudge to capture lessons to memory
|
|
2088
|
+
// and mint/enhance isolated managed skills under ~/.omp/agent/managed-skills.
|
|
2089
|
+
// Master flag is default-off → zero footprint; sub-flags gate behaviour.
|
|
2090
|
+
"autolearn.enabled": {
|
|
2091
|
+
type: "boolean",
|
|
2092
|
+
default: false,
|
|
2093
|
+
ui: {
|
|
2094
|
+
tab: "memory",
|
|
2095
|
+
group: "Auto-Learn",
|
|
2096
|
+
label: "Auto-Learn (experimental)",
|
|
2097
|
+
description:
|
|
2098
|
+
"After the agent stops, nudge it to capture lessons to memory and create/enhance isolated managed skills",
|
|
2099
|
+
},
|
|
2100
|
+
},
|
|
2101
|
+
"autolearn.autoContinue": {
|
|
2102
|
+
type: "boolean",
|
|
2103
|
+
default: false,
|
|
2104
|
+
ui: {
|
|
2105
|
+
tab: "memory",
|
|
2106
|
+
group: "Auto-Learn",
|
|
2107
|
+
label: "Auto-run capture at stop",
|
|
2108
|
+
description:
|
|
2109
|
+
"When on, auto-run one capture turn at stop (uses extra tokens). Off = passive reminder on your next turn.",
|
|
2110
|
+
condition: "autolearnActive",
|
|
2111
|
+
},
|
|
2112
|
+
},
|
|
2113
|
+
// Config-file-only knob (numbers without `options` are hidden from the UI).
|
|
2114
|
+
"autolearn.minToolCalls": { type: "number", default: 5 },
|
|
2115
|
+
|
|
2116
|
+
// Mnemopi local SQLite memory backend.
|
|
2117
|
+
"mnemopi.dbPath": {
|
|
2118
|
+
type: "string",
|
|
2119
|
+
default: undefined,
|
|
2120
|
+
ui: {
|
|
2121
|
+
tab: "memory",
|
|
2122
|
+
group: "Mnemopi",
|
|
2123
|
+
label: "Mnemopi DB Path",
|
|
2124
|
+
description: "Optional SQLite DB path. Defaults to the agent memories directory.",
|
|
2125
|
+
condition: "mnemopiActive",
|
|
2126
|
+
},
|
|
2127
|
+
},
|
|
2128
|
+
"mnemopi.bank": {
|
|
2129
|
+
type: "string",
|
|
2130
|
+
default: undefined,
|
|
2131
|
+
ui: {
|
|
2132
|
+
tab: "memory",
|
|
2133
|
+
group: "Mnemopi",
|
|
2134
|
+
label: "Mnemopi Bank",
|
|
2135
|
+
description: "Optional shared bank base name. Per-project modes derive project-local banks from it.",
|
|
2136
|
+
condition: "mnemopiActive",
|
|
2137
|
+
},
|
|
2138
|
+
},
|
|
2139
|
+
"mnemopi.scoping": {
|
|
2140
|
+
type: "enum",
|
|
2141
|
+
values: ["global", "per-project", "per-project-tagged"] as const,
|
|
2142
|
+
default: "per-project",
|
|
2143
|
+
ui: {
|
|
2144
|
+
tab: "memory",
|
|
2145
|
+
group: "Mnemopi",
|
|
2146
|
+
label: "Mnemopi Scoping",
|
|
2147
|
+
description:
|
|
2148
|
+
"global = one shared bank; per-project = isolated bank per cwd; per-project-tagged = project-local writes plus global recall visibility",
|
|
2149
|
+
options: [
|
|
2150
|
+
{
|
|
2151
|
+
value: "global",
|
|
2152
|
+
label: "Global",
|
|
2153
|
+
description: "One shared Mnemopi bank for every project",
|
|
2154
|
+
},
|
|
2155
|
+
{
|
|
2156
|
+
value: "per-project",
|
|
2157
|
+
label: "Per project",
|
|
2158
|
+
description: "Project-local Mnemopi bank per cwd basename",
|
|
2159
|
+
},
|
|
2160
|
+
{
|
|
2161
|
+
value: "per-project-tagged",
|
|
2162
|
+
label: "Per project (tagged)",
|
|
2163
|
+
description: "Write to a project-local bank but merge project + shared recall results",
|
|
2164
|
+
},
|
|
2165
|
+
],
|
|
2166
|
+
condition: "mnemopiActive",
|
|
2167
|
+
},
|
|
2168
|
+
},
|
|
2169
|
+
"mnemopi.embeddingVariant": {
|
|
2170
|
+
type: "enum",
|
|
2171
|
+
values: ["en", "multilingual"] as const,
|
|
2172
|
+
default: "en",
|
|
2173
|
+
ui: {
|
|
2174
|
+
tab: "memory",
|
|
2175
|
+
group: "Mnemopi",
|
|
2176
|
+
label: "Embedding variant",
|
|
2177
|
+
description:
|
|
2178
|
+
"Local embedding model family. en = stronger English model; multilingual = cross-language model. Changing this rebuilds existing memory embeddings on next start.",
|
|
2179
|
+
options: [
|
|
2180
|
+
{
|
|
2181
|
+
value: "en",
|
|
2182
|
+
label: "English (bge-base-en-v1.5)",
|
|
2183
|
+
description: "BAAI/bge-base-en-v1.5 (768d), English-only",
|
|
2184
|
+
},
|
|
2185
|
+
{
|
|
2186
|
+
value: "multilingual",
|
|
2187
|
+
label: "Multilingual (multilingual-e5-large)",
|
|
2188
|
+
description: "intfloat/multilingual-e5-large (1024d), cross-language recall",
|
|
2189
|
+
},
|
|
2190
|
+
],
|
|
2191
|
+
condition: "mnemopiActive",
|
|
2192
|
+
},
|
|
2193
|
+
},
|
|
2194
|
+
"mnemopi.autoRecall": {
|
|
2195
|
+
type: "boolean",
|
|
2196
|
+
default: true,
|
|
2197
|
+
ui: {
|
|
2198
|
+
tab: "memory",
|
|
2199
|
+
group: "Mnemopi",
|
|
2200
|
+
label: "Mnemopi Auto Recall",
|
|
2201
|
+
description: "Recall local memories into the first turn of each session",
|
|
2202
|
+
condition: "mnemopiActive",
|
|
2203
|
+
},
|
|
2204
|
+
},
|
|
2205
|
+
"mnemopi.autoRetain": {
|
|
2206
|
+
type: "boolean",
|
|
2207
|
+
default: true,
|
|
2208
|
+
ui: {
|
|
2209
|
+
tab: "memory",
|
|
2210
|
+
group: "Mnemopi",
|
|
2211
|
+
label: "Mnemopi Auto Retain",
|
|
2212
|
+
description: "Retain completed conversation turns into local Mnemopi memory",
|
|
2213
|
+
condition: "mnemopiActive",
|
|
2214
|
+
},
|
|
2215
|
+
},
|
|
2216
|
+
"mnemopi.polyphonicRecall": {
|
|
2217
|
+
type: "boolean",
|
|
2218
|
+
default: false,
|
|
2219
|
+
ui: {
|
|
2220
|
+
tab: "memory",
|
|
2221
|
+
group: "Mnemopi",
|
|
2222
|
+
label: "Mnemopi Polyphonic Recall",
|
|
2223
|
+
description: "Enable 4-voice recall (vector, graph, fact, temporal) fused with reciprocal rank fusion",
|
|
2224
|
+
condition: "mnemopiActive",
|
|
2225
|
+
},
|
|
2226
|
+
},
|
|
2227
|
+
"mnemopi.enhancedRecall": {
|
|
2228
|
+
type: "boolean",
|
|
2229
|
+
default: false,
|
|
2230
|
+
ui: {
|
|
2231
|
+
tab: "memory",
|
|
2232
|
+
group: "Mnemopi",
|
|
2233
|
+
label: "Mnemopi Enhanced Recall",
|
|
2234
|
+
description: "Enable the tiered query result cache for repeated and similar recall queries",
|
|
2235
|
+
condition: "mnemopiActive",
|
|
2236
|
+
},
|
|
2237
|
+
},
|
|
2238
|
+
"mnemopi.noEmbeddings": {
|
|
2239
|
+
type: "boolean",
|
|
2240
|
+
default: false,
|
|
2241
|
+
ui: {
|
|
2242
|
+
tab: "memory",
|
|
2243
|
+
group: "Mnemopi",
|
|
2244
|
+
label: "Mnemopi Disable Embeddings",
|
|
2245
|
+
description: "Force deterministic FTS-only recall instead of vector embeddings",
|
|
2246
|
+
condition: "mnemopiActive",
|
|
2247
|
+
},
|
|
2248
|
+
},
|
|
2249
|
+
"mnemopi.embeddingModel": {
|
|
2250
|
+
type: "string",
|
|
2251
|
+
default: undefined,
|
|
2252
|
+
ui: {
|
|
2253
|
+
tab: "memory",
|
|
2254
|
+
group: "Mnemopi",
|
|
2255
|
+
label: "Mnemopi Embedding Model",
|
|
2256
|
+
description:
|
|
2257
|
+
"Advanced: explicit embedding model id that overrides the variant. Leave empty to use mnemopi.embeddingVariant.",
|
|
2258
|
+
condition: "mnemopiActive",
|
|
2259
|
+
},
|
|
2260
|
+
},
|
|
2261
|
+
"mnemopi.embeddingApiUrl": {
|
|
2262
|
+
type: "string",
|
|
2263
|
+
default: undefined,
|
|
2264
|
+
ui: {
|
|
2265
|
+
tab: "memory",
|
|
2266
|
+
group: "Mnemopi",
|
|
2267
|
+
label: "Mnemopi Embedding API URL",
|
|
2268
|
+
description: "Optional OpenAI-compatible embedding endpoint passed to Mnemopi",
|
|
2269
|
+
condition: "mnemopiActive",
|
|
2270
|
+
},
|
|
2271
|
+
},
|
|
2272
|
+
"mnemopi.embeddingApiKey": {
|
|
2273
|
+
type: "string",
|
|
2274
|
+
default: undefined,
|
|
2275
|
+
ui: {
|
|
2276
|
+
tab: "memory",
|
|
2277
|
+
group: "Mnemopi",
|
|
2278
|
+
label: "Mnemopi Embedding API Key",
|
|
2279
|
+
description: "Optional embedding API key passed to Mnemopi",
|
|
2280
|
+
condition: "mnemopiActive",
|
|
2281
|
+
},
|
|
2282
|
+
},
|
|
2283
|
+
"mnemopi.llmMode": {
|
|
2284
|
+
type: "enum",
|
|
2285
|
+
values: ["none", "smol", "remote"] as const,
|
|
2286
|
+
default: "smol",
|
|
2287
|
+
ui: {
|
|
2288
|
+
tab: "memory",
|
|
2289
|
+
group: "Mnemopi",
|
|
2290
|
+
label: "Mnemopi LLM Mode",
|
|
2291
|
+
description: "Use no LLM, the configured smol model, or a remote OpenAI-compatible endpoint",
|
|
2292
|
+
condition: "mnemopiActive",
|
|
2293
|
+
options: [
|
|
2294
|
+
{ value: "none", label: "None", description: "Disable Mnemopi LLM-backed extraction" },
|
|
2295
|
+
{ value: "smol", label: "Smol", description: "Use the configured pi-ai smol model" },
|
|
2296
|
+
{ value: "remote", label: "Remote", description: "Use the Mnemopi remote LLM settings below" },
|
|
2297
|
+
],
|
|
2298
|
+
},
|
|
2299
|
+
},
|
|
2300
|
+
"mnemopi.llmBaseUrl": {
|
|
2301
|
+
type: "string",
|
|
2302
|
+
default: undefined,
|
|
2303
|
+
ui: {
|
|
2304
|
+
tab: "memory",
|
|
2305
|
+
group: "Mnemopi",
|
|
2306
|
+
label: "Mnemopi LLM Base URL",
|
|
2307
|
+
description: "Optional OpenAI-compatible LLM endpoint for Mnemopi remote mode",
|
|
2308
|
+
condition: "mnemopiActive",
|
|
2309
|
+
},
|
|
2310
|
+
},
|
|
2311
|
+
"mnemopi.llmApiKey": {
|
|
2312
|
+
type: "string",
|
|
2313
|
+
default: undefined,
|
|
2314
|
+
ui: {
|
|
2315
|
+
tab: "memory",
|
|
2316
|
+
group: "Mnemopi",
|
|
2317
|
+
label: "Mnemopi LLM API Key",
|
|
2318
|
+
description: "Optional LLM API key for Mnemopi remote mode",
|
|
2319
|
+
condition: "mnemopiActive",
|
|
2320
|
+
},
|
|
2321
|
+
},
|
|
2322
|
+
"mnemopi.llmModel": {
|
|
2323
|
+
type: "string",
|
|
2324
|
+
default: undefined,
|
|
2325
|
+
ui: {
|
|
2326
|
+
tab: "memory",
|
|
2327
|
+
group: "Mnemopi",
|
|
2328
|
+
label: "Mnemopi LLM Model",
|
|
2329
|
+
description: "Optional LLM model name for Mnemopi remote mode",
|
|
2330
|
+
condition: "mnemopiActive",
|
|
2331
|
+
},
|
|
2332
|
+
},
|
|
2333
|
+
"mnemopi.retainEveryNTurns": { type: "number", default: 4 },
|
|
2334
|
+
"mnemopi.recallLimit": { type: "number", default: 8 },
|
|
2335
|
+
"mnemopi.recallContextTurns": { type: "number", default: 3 },
|
|
2336
|
+
"mnemopi.recallMaxQueryChars": { type: "number", default: 4000 },
|
|
2337
|
+
"mnemopi.injectionTokenLimit": { type: "number", default: 5000 },
|
|
2338
|
+
"mnemopi.debug": { type: "boolean", default: false },
|
|
2339
|
+
|
|
2340
|
+
// Hindsight (https://hindsight.vectorize.io)
|
|
2341
|
+
"hindsight.apiUrl": {
|
|
2342
|
+
type: "string",
|
|
2343
|
+
default: "http://localhost:8888",
|
|
2344
|
+
ui: {
|
|
2345
|
+
tab: "memory",
|
|
2346
|
+
group: "Hindsight",
|
|
2347
|
+
label: "Hindsight API URL",
|
|
2348
|
+
description: "Hindsight server URL (Cloud or self-hosted)",
|
|
2349
|
+
condition: "hindsightActive",
|
|
2350
|
+
},
|
|
2351
|
+
},
|
|
2352
|
+
|
|
2353
|
+
"hindsight.apiToken": { type: "string", default: undefined },
|
|
2354
|
+
|
|
2355
|
+
"hindsight.bankId": {
|
|
2356
|
+
type: "string",
|
|
2357
|
+
default: undefined,
|
|
2358
|
+
ui: {
|
|
2359
|
+
tab: "memory",
|
|
2360
|
+
group: "Hindsight",
|
|
2361
|
+
label: "Hindsight Bank ID",
|
|
2362
|
+
description: "Memory bank identifier (default: project name)",
|
|
2363
|
+
condition: "hindsightActive",
|
|
2364
|
+
},
|
|
2365
|
+
},
|
|
2366
|
+
|
|
2367
|
+
"hindsight.bankIdPrefix": { type: "string", default: undefined },
|
|
2368
|
+
"hindsight.scoping": {
|
|
2369
|
+
type: "enum",
|
|
2370
|
+
values: ["global", "per-project", "per-project-tagged"] as const,
|
|
2371
|
+
default: "per-project-tagged",
|
|
2372
|
+
ui: {
|
|
2373
|
+
tab: "memory",
|
|
2374
|
+
group: "Hindsight",
|
|
2375
|
+
label: "Hindsight Scoping",
|
|
2376
|
+
description:
|
|
2377
|
+
"global = one shared bank; per-project = isolated bank per cwd; per-project-tagged = shared bank with project tags so global + project memories merge on recall",
|
|
2378
|
+
options: [
|
|
2379
|
+
{
|
|
2380
|
+
value: "global",
|
|
2381
|
+
label: "Global",
|
|
2382
|
+
description: "One shared bank — every project sees the same memories",
|
|
2383
|
+
},
|
|
2384
|
+
{
|
|
2385
|
+
value: "per-project",
|
|
2386
|
+
label: "Per project",
|
|
2387
|
+
description: "Isolated bank per cwd basename — projects cannot see each other's memories",
|
|
2388
|
+
},
|
|
2389
|
+
{
|
|
2390
|
+
value: "per-project-tagged",
|
|
2391
|
+
label: "Per project (tagged)",
|
|
2392
|
+
description:
|
|
2393
|
+
"Shared bank, retains tagged with project:<cwd>. Recall surfaces project + untagged global memories together",
|
|
2394
|
+
},
|
|
2395
|
+
],
|
|
2396
|
+
condition: "hindsightActive",
|
|
2397
|
+
},
|
|
2398
|
+
},
|
|
2399
|
+
"hindsight.bankMission": { type: "string", default: undefined },
|
|
2400
|
+
"hindsight.retainMission": { type: "string", default: undefined },
|
|
2401
|
+
|
|
2402
|
+
"hindsight.autoRecall": {
|
|
2403
|
+
type: "boolean",
|
|
2404
|
+
default: true,
|
|
2405
|
+
ui: {
|
|
2406
|
+
tab: "memory",
|
|
2407
|
+
group: "Hindsight",
|
|
2408
|
+
label: "Hindsight Auto Recall",
|
|
2409
|
+
description: "Recall memories on the first turn of each session",
|
|
2410
|
+
condition: "hindsightActive",
|
|
2411
|
+
},
|
|
2412
|
+
},
|
|
2413
|
+
"hindsight.autoRetain": {
|
|
2414
|
+
type: "boolean",
|
|
2415
|
+
default: true,
|
|
2416
|
+
ui: {
|
|
2417
|
+
tab: "memory",
|
|
2418
|
+
group: "Hindsight",
|
|
2419
|
+
label: "Hindsight Auto Retain",
|
|
2420
|
+
description: "Retain transcript every N turns and at session boundaries",
|
|
2421
|
+
condition: "hindsightActive",
|
|
2422
|
+
},
|
|
2423
|
+
},
|
|
2424
|
+
|
|
2425
|
+
"hindsight.retainMode": {
|
|
2426
|
+
type: "enum",
|
|
2427
|
+
values: ["full-session", "last-turn"] as const,
|
|
2428
|
+
default: "full-session",
|
|
2429
|
+
ui: {
|
|
2430
|
+
tab: "memory",
|
|
2431
|
+
group: "Hindsight",
|
|
2432
|
+
label: "Hindsight Retain Mode",
|
|
2433
|
+
description: "full-session = upsert one document per session, last-turn = chunked",
|
|
2434
|
+
options: [
|
|
2435
|
+
{
|
|
2436
|
+
value: "full-session",
|
|
2437
|
+
label: "Full session",
|
|
2438
|
+
description: "Upsert one document per session (recommended)",
|
|
2439
|
+
},
|
|
2440
|
+
{ value: "last-turn", label: "Last turn", description: "Chunked retention sliced by turn boundaries" },
|
|
2441
|
+
],
|
|
2442
|
+
condition: "hindsightActive",
|
|
2443
|
+
},
|
|
2444
|
+
},
|
|
2445
|
+
"hindsight.retainEveryNTurns": { type: "number", default: 3 },
|
|
2446
|
+
"hindsight.retainOverlapTurns": { type: "number", default: 2 },
|
|
2447
|
+
"hindsight.retainContext": { type: "string", default: "omp" },
|
|
2448
|
+
|
|
2449
|
+
"hindsight.recallBudget": {
|
|
2450
|
+
type: "enum",
|
|
2451
|
+
values: ["low", "mid", "high"] as const,
|
|
2452
|
+
default: "mid",
|
|
2453
|
+
},
|
|
2454
|
+
"hindsight.recallMaxTokens": { type: "number", default: 1024 },
|
|
2455
|
+
"hindsight.recallContextTurns": { type: "number", default: 1 },
|
|
2456
|
+
"hindsight.recallMaxQueryChars": { type: "number", default: 800 },
|
|
2457
|
+
"hindsight.recallTypes": { type: "array", default: HINDSIGHT_RECALL_TYPES_DEFAULT },
|
|
2458
|
+
|
|
2459
|
+
"hindsight.debug": { type: "boolean", default: false },
|
|
2460
|
+
|
|
2461
|
+
"hindsight.mentalModelsEnabled": {
|
|
2462
|
+
type: "boolean",
|
|
2463
|
+
default: true,
|
|
2464
|
+
ui: {
|
|
2465
|
+
tab: "memory",
|
|
2466
|
+
group: "Hindsight",
|
|
2467
|
+
label: "Hindsight Mental Models",
|
|
2468
|
+
description:
|
|
2469
|
+
"Read curated reflect summaries (mental models) into developer instructions at boot. Loads existing models on the bank — does not write. Pair with hindsight.mentalModelAutoSeed to also auto-create the built-in seed set.",
|
|
2470
|
+
condition: "hindsightActive",
|
|
2471
|
+
},
|
|
2472
|
+
},
|
|
2473
|
+
"hindsight.mentalModelAutoSeed": {
|
|
2474
|
+
type: "boolean",
|
|
2475
|
+
default: true,
|
|
2476
|
+
ui: {
|
|
2477
|
+
tab: "memory",
|
|
2478
|
+
group: "Hindsight",
|
|
2479
|
+
label: "Hindsight Mental Model Auto-Seed",
|
|
2480
|
+
description:
|
|
2481
|
+
"At session start, create any built-in mental models (project-conventions, project-decisions, user-preferences) that do not yet exist on the bank.",
|
|
2482
|
+
condition: "hindsightActive",
|
|
2483
|
+
},
|
|
2484
|
+
},
|
|
2485
|
+
"hindsight.mentalModelRefreshIntervalMs": { type: "number", default: 5 * 60 * 1000 },
|
|
2486
|
+
"hindsight.mentalModelMaxRenderChars": { type: "number", default: 16_000 },
|
|
2487
|
+
|
|
2488
|
+
// TTSR
|
|
2489
|
+
"ttsr.enabled": {
|
|
2490
|
+
type: "boolean",
|
|
2491
|
+
default: true,
|
|
2492
|
+
ui: {
|
|
2493
|
+
tab: "context",
|
|
2494
|
+
group: "Rules (TTSR)",
|
|
2495
|
+
label: "TTSR",
|
|
2496
|
+
description: "Interrupt the agent mid-stream when output matches rule patterns (Time-Traveling Stream Rules)",
|
|
2497
|
+
},
|
|
2498
|
+
},
|
|
2499
|
+
|
|
2500
|
+
"ttsr.contextMode": {
|
|
2501
|
+
type: "enum",
|
|
2502
|
+
values: ["discard", "keep"] as const,
|
|
2503
|
+
default: "discard",
|
|
2504
|
+
ui: {
|
|
2505
|
+
tab: "context",
|
|
2506
|
+
group: "Rules (TTSR)",
|
|
2507
|
+
label: "TTSR Context Mode",
|
|
2508
|
+
description: "What to do with partial output when TTSR triggers",
|
|
2509
|
+
},
|
|
2510
|
+
},
|
|
2511
|
+
|
|
2512
|
+
"ttsr.interruptMode": {
|
|
2513
|
+
type: "enum",
|
|
2514
|
+
values: ["never", "prose-only", "tool-only", "always"] as const,
|
|
2515
|
+
default: "always",
|
|
2516
|
+
ui: {
|
|
2517
|
+
tab: "context",
|
|
2518
|
+
group: "Rules (TTSR)",
|
|
2519
|
+
label: "TTSR Interrupt Mode",
|
|
2520
|
+
description: "When to interrupt mid-stream vs inject warning after completion",
|
|
2521
|
+
options: [
|
|
2522
|
+
{ value: "always", label: "always", description: "Interrupt on prose and tool streams" },
|
|
2523
|
+
{ value: "prose-only", label: "prose-only", description: "Interrupt only on reply/thinking matches" },
|
|
2524
|
+
{ value: "tool-only", label: "tool-only", description: "Interrupt only on tool-call argument matches" },
|
|
2525
|
+
{ value: "never", label: "never", description: "Never interrupt; inject warning after completion" },
|
|
2526
|
+
],
|
|
2527
|
+
},
|
|
2528
|
+
},
|
|
2529
|
+
|
|
2530
|
+
"ttsr.repeatMode": {
|
|
2531
|
+
type: "enum",
|
|
2532
|
+
values: ["once", "after-gap"] as const,
|
|
2533
|
+
default: "once",
|
|
2534
|
+
ui: {
|
|
2535
|
+
tab: "context",
|
|
2536
|
+
group: "Rules (TTSR)",
|
|
2537
|
+
label: "TTSR Repeat Mode",
|
|
2538
|
+
description: "How rules can repeat: once per session or after a message gap",
|
|
2539
|
+
},
|
|
2540
|
+
},
|
|
2541
|
+
|
|
2542
|
+
"ttsr.repeatGap": {
|
|
2543
|
+
type: "number",
|
|
2544
|
+
default: 10,
|
|
2545
|
+
ui: {
|
|
2546
|
+
tab: "context",
|
|
2547
|
+
group: "Rules (TTSR)",
|
|
2548
|
+
label: "TTSR Repeat Gap",
|
|
2549
|
+
description: "Messages before a rule can trigger again",
|
|
2550
|
+
options: [
|
|
2551
|
+
{ value: "5", label: "5 messages" },
|
|
2552
|
+
{ value: "10", label: "10 messages" },
|
|
2553
|
+
{ value: "15", label: "15 messages" },
|
|
2554
|
+
{ value: "20", label: "20 messages" },
|
|
2555
|
+
{ value: "30", label: "30 messages" },
|
|
2556
|
+
],
|
|
2557
|
+
},
|
|
2558
|
+
},
|
|
2559
|
+
|
|
2560
|
+
"ttsr.builtinRules": {
|
|
2561
|
+
type: "boolean",
|
|
2562
|
+
default: true,
|
|
2563
|
+
ui: {
|
|
2564
|
+
tab: "context",
|
|
2565
|
+
group: "Rules (TTSR)",
|
|
2566
|
+
label: "Built-in Rules",
|
|
2567
|
+
description: "Load the default rules shipped with the agent (override individually with ttsr.disabledRules)",
|
|
2568
|
+
},
|
|
2569
|
+
},
|
|
2570
|
+
|
|
2571
|
+
"ttsr.disabledRules": {
|
|
2572
|
+
type: "array",
|
|
2573
|
+
default: [] as string[],
|
|
2574
|
+
ui: {
|
|
2575
|
+
tab: "context",
|
|
2576
|
+
group: "Rules (TTSR)",
|
|
2577
|
+
label: "Disabled Rules",
|
|
2578
|
+
description: "Rule names to ignore entirely (applies to bundled defaults and your own rules)",
|
|
2579
|
+
},
|
|
2580
|
+
},
|
|
2581
|
+
|
|
2582
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
2583
|
+
// Editing
|
|
2584
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
2585
|
+
|
|
2586
|
+
// Edit tool
|
|
2587
|
+
"edit.mode": {
|
|
2588
|
+
type: "enum",
|
|
2589
|
+
values: EDIT_MODES,
|
|
2590
|
+
default: "hashline",
|
|
2591
|
+
ui: {
|
|
2592
|
+
tab: "files",
|
|
2593
|
+
group: "Editing",
|
|
2594
|
+
label: "Edit Mode",
|
|
2595
|
+
description: "Select the edit tool variant (replace, patch, hashline, or apply_patch)",
|
|
2596
|
+
},
|
|
2597
|
+
},
|
|
2598
|
+
|
|
2599
|
+
"edit.fuzzyMatch": {
|
|
2600
|
+
type: "boolean",
|
|
2601
|
+
default: true,
|
|
2602
|
+
ui: {
|
|
2603
|
+
tab: "files",
|
|
2604
|
+
group: "Editing",
|
|
2605
|
+
label: "Fuzzy Match",
|
|
2606
|
+
description: "Accept high-confidence fuzzy matches for whitespace differences",
|
|
2607
|
+
},
|
|
2608
|
+
},
|
|
2609
|
+
|
|
2610
|
+
"edit.fuzzyThreshold": {
|
|
2611
|
+
type: "number",
|
|
2612
|
+
default: 0.95,
|
|
2613
|
+
ui: {
|
|
2614
|
+
tab: "files",
|
|
2615
|
+
group: "Editing",
|
|
2616
|
+
label: "Fuzzy Match Threshold",
|
|
2617
|
+
description: "Similarity threshold (0-1) for accepting fuzzy matches",
|
|
2618
|
+
options: [
|
|
2619
|
+
{ value: "0.85", label: "0.85", description: "Lenient" },
|
|
2620
|
+
{ value: "0.90", label: "0.90", description: "Moderate" },
|
|
2621
|
+
{ value: "0.95", label: "0.95", description: "Default" },
|
|
2622
|
+
{ value: "0.98", label: "0.98", description: "Strict" },
|
|
2623
|
+
],
|
|
2624
|
+
},
|
|
2625
|
+
},
|
|
2626
|
+
|
|
2627
|
+
"edit.streamingAbort": {
|
|
2628
|
+
type: "boolean",
|
|
2629
|
+
default: false,
|
|
2630
|
+
ui: {
|
|
2631
|
+
tab: "files",
|
|
2632
|
+
group: "Editing",
|
|
2633
|
+
label: "Abort on Failed Preview",
|
|
2634
|
+
description: "Abort streaming edit tool calls when patch preview fails",
|
|
2635
|
+
},
|
|
2636
|
+
},
|
|
2637
|
+
|
|
2638
|
+
"edit.blockAutoGenerated": {
|
|
2639
|
+
type: "boolean",
|
|
2640
|
+
default: true,
|
|
2641
|
+
ui: {
|
|
2642
|
+
tab: "files",
|
|
2643
|
+
group: "Editing",
|
|
2644
|
+
label: "Block Auto-Generated Files",
|
|
2645
|
+
description: "Prevent editing of files that appear to be auto-generated (protoc, sqlc, swagger, etc.)",
|
|
2646
|
+
},
|
|
2647
|
+
},
|
|
2648
|
+
|
|
2649
|
+
readLineNumbers: {
|
|
2650
|
+
type: "boolean",
|
|
2651
|
+
default: false,
|
|
2652
|
+
ui: {
|
|
2653
|
+
tab: "files",
|
|
2654
|
+
group: "Reading",
|
|
2655
|
+
label: "Line Numbers",
|
|
2656
|
+
description: "Prepend line numbers to read tool output by default",
|
|
2657
|
+
},
|
|
2658
|
+
},
|
|
2659
|
+
|
|
2660
|
+
readHashLines: {
|
|
2661
|
+
type: "boolean",
|
|
2662
|
+
default: true,
|
|
2663
|
+
ui: {
|
|
2664
|
+
tab: "files",
|
|
2665
|
+
group: "Reading",
|
|
2666
|
+
label: "Hash Lines",
|
|
2667
|
+
description:
|
|
2668
|
+
"Include snapshot-tag headers and line numbers in read output for hashline edit mode ([PATH#TAG] plus LINE:content)",
|
|
2669
|
+
},
|
|
2670
|
+
},
|
|
2671
|
+
|
|
2672
|
+
"read.defaultLimit": {
|
|
2673
|
+
type: "number",
|
|
2674
|
+
default: 300,
|
|
2675
|
+
ui: {
|
|
2676
|
+
tab: "files",
|
|
2677
|
+
group: "Reading",
|
|
2678
|
+
label: "Default Read Limit",
|
|
2679
|
+
description: "Default number of lines returned when agent calls read without a limit",
|
|
2680
|
+
options: [
|
|
2681
|
+
{ value: "200", label: "200 lines" },
|
|
2682
|
+
{ value: "300", label: "300 lines" },
|
|
2683
|
+
{ value: "500", label: "500 lines" },
|
|
2684
|
+
{ value: "1000", label: "1000 lines" },
|
|
2685
|
+
{ value: "5000", label: "5000 lines" },
|
|
2686
|
+
],
|
|
2687
|
+
},
|
|
2688
|
+
},
|
|
2689
|
+
|
|
2690
|
+
"read.summarize.enabled": {
|
|
2691
|
+
type: "boolean",
|
|
2692
|
+
default: true,
|
|
2693
|
+
ui: {
|
|
2694
|
+
tab: "files",
|
|
2695
|
+
group: "Read Summaries",
|
|
2696
|
+
label: "Read Summaries",
|
|
2697
|
+
description: "Return structural code summaries when read is called without an explicit selector",
|
|
2698
|
+
},
|
|
2699
|
+
},
|
|
2700
|
+
|
|
2701
|
+
"read.summarize.prose": {
|
|
2702
|
+
type: "boolean",
|
|
2703
|
+
default: false,
|
|
2704
|
+
ui: {
|
|
2705
|
+
tab: "files",
|
|
2706
|
+
group: "Read Summaries",
|
|
2707
|
+
label: "Prose Summaries",
|
|
2708
|
+
description: "Return structural summaries for Markdown and plain text reads",
|
|
2709
|
+
},
|
|
2710
|
+
},
|
|
2711
|
+
|
|
2712
|
+
"read.summarize.minBodyLines": {
|
|
2713
|
+
type: "number",
|
|
2714
|
+
default: 4,
|
|
2715
|
+
ui: {
|
|
2716
|
+
tab: "files",
|
|
2717
|
+
group: "Read Summaries",
|
|
2718
|
+
label: "Read Summary Body Lines",
|
|
2719
|
+
description: "Minimum multiline body or literal length before read summaries collapse it",
|
|
2720
|
+
},
|
|
2721
|
+
},
|
|
2722
|
+
|
|
2723
|
+
"read.summarize.minCommentLines": {
|
|
2724
|
+
type: "number",
|
|
2725
|
+
default: 6,
|
|
2726
|
+
ui: {
|
|
2727
|
+
tab: "files",
|
|
2728
|
+
group: "Read Summaries",
|
|
2729
|
+
label: "Read Summary Comment Lines",
|
|
2730
|
+
description: "Minimum multiline block comment length before read summaries collapse it",
|
|
2731
|
+
},
|
|
2732
|
+
},
|
|
2733
|
+
|
|
2734
|
+
"read.summarize.minTotalLines": {
|
|
2735
|
+
type: "number",
|
|
2736
|
+
default: 100,
|
|
2737
|
+
ui: {
|
|
2738
|
+
tab: "files",
|
|
2739
|
+
group: "Read Summaries",
|
|
2740
|
+
label: "Read Summary Minimum File Length",
|
|
2741
|
+
description: "Files with fewer total lines are read verbatim instead of structurally summarized",
|
|
2742
|
+
},
|
|
2743
|
+
},
|
|
2744
|
+
|
|
2745
|
+
"read.summarize.unfoldUntil": {
|
|
2746
|
+
type: "number",
|
|
2747
|
+
default: 50,
|
|
2748
|
+
ui: {
|
|
2749
|
+
tab: "files",
|
|
2750
|
+
group: "Read Summaries",
|
|
2751
|
+
label: "Read Summary Unfold Target",
|
|
2752
|
+
description:
|
|
2753
|
+
"BFS-unfold elidable spans until the summary is at least this many visible lines. 0 keeps only the outermost elisions.",
|
|
2754
|
+
},
|
|
2755
|
+
},
|
|
2756
|
+
|
|
2757
|
+
"read.summarize.unfoldLimit": {
|
|
2758
|
+
type: "number",
|
|
2759
|
+
default: 100,
|
|
2760
|
+
ui: {
|
|
2761
|
+
tab: "files",
|
|
2762
|
+
group: "Read Summaries",
|
|
2763
|
+
label: "Read Summary Unfold Ceiling",
|
|
2764
|
+
description:
|
|
2765
|
+
"Hard ceiling on summary size while BFS-unfolding. An unfold whose revealed lines would exceed this is skipped (that span stays folded) and unfolding continues with the remaining spans.",
|
|
2766
|
+
},
|
|
2767
|
+
},
|
|
2768
|
+
|
|
2769
|
+
"read.toolResultPreview": {
|
|
2770
|
+
type: "boolean",
|
|
2771
|
+
default: false,
|
|
2772
|
+
ui: {
|
|
2773
|
+
tab: "files",
|
|
2774
|
+
group: "Reading",
|
|
2775
|
+
label: "Inline Read Previews",
|
|
2776
|
+
description: "Render read tool results inline in the transcript instead of summary rows",
|
|
2777
|
+
},
|
|
2778
|
+
},
|
|
2779
|
+
|
|
2780
|
+
// LSP
|
|
2781
|
+
"lsp.enabled": {
|
|
2782
|
+
type: "boolean",
|
|
2783
|
+
default: true,
|
|
2784
|
+
ui: {
|
|
2785
|
+
tab: "files",
|
|
2786
|
+
group: "LSP",
|
|
2787
|
+
label: "LSP",
|
|
2788
|
+
description: "Enable the lsp tool for code intelligence (definitions, references, diagnostics, rename)",
|
|
2789
|
+
},
|
|
2790
|
+
},
|
|
2791
|
+
|
|
2792
|
+
"lsp.lazy": {
|
|
2793
|
+
type: "boolean",
|
|
2794
|
+
default: true,
|
|
2795
|
+
ui: {
|
|
2796
|
+
tab: "files",
|
|
2797
|
+
group: "LSP",
|
|
2798
|
+
label: "Lazy LSP Startup",
|
|
2799
|
+
description:
|
|
2800
|
+
"Start language servers on first use (lsp tool or editing a matching file type) instead of at session startup",
|
|
2801
|
+
},
|
|
2802
|
+
},
|
|
2803
|
+
|
|
2804
|
+
"lsp.formatOnWrite": {
|
|
2805
|
+
type: "boolean",
|
|
2806
|
+
default: false,
|
|
2807
|
+
ui: {
|
|
2808
|
+
tab: "files",
|
|
2809
|
+
group: "LSP",
|
|
2810
|
+
label: "Format on Write",
|
|
2811
|
+
description: "Automatically format code files using LSP after writing",
|
|
2812
|
+
},
|
|
2813
|
+
},
|
|
2814
|
+
|
|
2815
|
+
"lsp.diagnosticsOnWrite": {
|
|
2816
|
+
type: "boolean",
|
|
2817
|
+
default: true,
|
|
2818
|
+
ui: {
|
|
2819
|
+
tab: "files",
|
|
2820
|
+
group: "LSP",
|
|
2821
|
+
label: "Diagnostics on Write",
|
|
2822
|
+
description: "Return LSP diagnostics after writing code files",
|
|
2823
|
+
},
|
|
2824
|
+
},
|
|
2825
|
+
|
|
2826
|
+
"lsp.diagnosticsOnEdit": {
|
|
2827
|
+
type: "boolean",
|
|
2828
|
+
default: false,
|
|
2829
|
+
ui: {
|
|
2830
|
+
tab: "files",
|
|
2831
|
+
group: "LSP",
|
|
2832
|
+
label: "Diagnostics on Edit",
|
|
2833
|
+
description: "Return LSP diagnostics after editing code files",
|
|
2834
|
+
},
|
|
2835
|
+
},
|
|
2836
|
+
|
|
2837
|
+
"lsp.diagnosticsDeduplicate": {
|
|
2838
|
+
type: "boolean",
|
|
2839
|
+
default: true,
|
|
2840
|
+
ui: {
|
|
2841
|
+
tab: "files",
|
|
2842
|
+
group: "LSP",
|
|
2843
|
+
label: "Deduplicate Diagnostics",
|
|
2844
|
+
description: "Suppress post-edit LSP diagnostics already shown for a file; only surface new or changed ones",
|
|
2845
|
+
},
|
|
2846
|
+
},
|
|
2847
|
+
|
|
2848
|
+
"bash.enabled": {
|
|
2849
|
+
type: "boolean",
|
|
2850
|
+
default: true,
|
|
2851
|
+
ui: {
|
|
2852
|
+
tab: "shell",
|
|
2853
|
+
group: "Bash",
|
|
2854
|
+
label: "Bash",
|
|
2855
|
+
description: "Enable the bash tool for shell command execution",
|
|
2856
|
+
},
|
|
2857
|
+
},
|
|
2858
|
+
|
|
2859
|
+
"bash.autoBackground.enabled": {
|
|
2860
|
+
type: "boolean",
|
|
2861
|
+
default: false,
|
|
2862
|
+
ui: {
|
|
2863
|
+
tab: "shell",
|
|
2864
|
+
group: "Bash",
|
|
2865
|
+
label: "Bash Auto-Background",
|
|
2866
|
+
description: "Automatically background long-running bash commands and deliver the result later",
|
|
2867
|
+
},
|
|
2868
|
+
},
|
|
2869
|
+
|
|
2870
|
+
// Bash interceptor
|
|
2871
|
+
"bashInterceptor.enabled": {
|
|
2872
|
+
type: "boolean",
|
|
2873
|
+
default: false,
|
|
2874
|
+
ui: {
|
|
2875
|
+
tab: "shell",
|
|
2876
|
+
group: "Bash",
|
|
2877
|
+
label: "Bash Interceptor",
|
|
2878
|
+
description: "Block shell commands that have dedicated tools",
|
|
2879
|
+
},
|
|
2880
|
+
},
|
|
2881
|
+
"bashInterceptor.patterns": { type: "array", default: DEFAULT_BASH_INTERCEPTOR_RULES },
|
|
2882
|
+
|
|
2883
|
+
"bash.stripTrailingHeadTail": {
|
|
2884
|
+
type: "boolean",
|
|
2885
|
+
default: true,
|
|
2886
|
+
ui: {
|
|
2887
|
+
tab: "shell",
|
|
2888
|
+
group: "Bash",
|
|
2889
|
+
label: "Strip head/tail Pipes",
|
|
2890
|
+
description:
|
|
2891
|
+
"Silently drop trailing `| head`/`| tail` pipes from single-line bash commands. Output is already truncated automatically.",
|
|
2892
|
+
},
|
|
2893
|
+
},
|
|
2894
|
+
|
|
2895
|
+
// Shell output minimizer
|
|
2896
|
+
"shellMinimizer.enabled": {
|
|
2897
|
+
type: "boolean",
|
|
2898
|
+
default: true,
|
|
2899
|
+
ui: {
|
|
2900
|
+
tab: "shell",
|
|
2901
|
+
group: "Bash",
|
|
2902
|
+
label: "Shell Minimizer",
|
|
2903
|
+
description: "Compress verbose shell output (git, npm, cargo, etc.) before returning it to the agent",
|
|
2904
|
+
},
|
|
2905
|
+
},
|
|
2906
|
+
"shellMinimizer.settingsPath": {
|
|
2907
|
+
type: "string",
|
|
2908
|
+
default: undefined,
|
|
2909
|
+
},
|
|
2910
|
+
"shellMinimizer.only": { type: "array", default: EMPTY_STRING_ARRAY },
|
|
2911
|
+
"shellMinimizer.except": { type: "array", default: EMPTY_STRING_ARRAY },
|
|
2912
|
+
"shellMinimizer.maxCaptureBytes": {
|
|
2913
|
+
type: "number",
|
|
2914
|
+
default: 4 * 1024 * 1024,
|
|
2915
|
+
},
|
|
2916
|
+
"shellMinimizer.sourceOutlineLevel": {
|
|
2917
|
+
type: "enum",
|
|
2918
|
+
values: ["default", "aggressive"] as const,
|
|
2919
|
+
default: "default",
|
|
2920
|
+
ui: {
|
|
2921
|
+
tab: "shell",
|
|
2922
|
+
group: "Bash",
|
|
2923
|
+
label: "Shell Minimizer Source Outline",
|
|
2924
|
+
description: "Source outline mode for cat/read of source files: default or aggressive",
|
|
2925
|
+
},
|
|
2926
|
+
},
|
|
2927
|
+
"shellMinimizer.legacyFilters": {
|
|
2928
|
+
type: "boolean",
|
|
2929
|
+
default: undefined,
|
|
2930
|
+
},
|
|
2931
|
+
|
|
2932
|
+
// Eval (per-backend toggles; add more as new backends ship, e.g. eval.ts)
|
|
2933
|
+
"eval.py": {
|
|
2934
|
+
type: "boolean",
|
|
2935
|
+
default: true,
|
|
2936
|
+
ui: {
|
|
2937
|
+
tab: "shell",
|
|
2938
|
+
group: "Eval & Python",
|
|
2939
|
+
label: "Python Eval Backend",
|
|
2940
|
+
description: "Allow the eval tool to dispatch Python cells to the IPython kernel",
|
|
2941
|
+
},
|
|
2942
|
+
},
|
|
2943
|
+
|
|
2944
|
+
"eval.js": {
|
|
2945
|
+
type: "boolean",
|
|
2946
|
+
default: true,
|
|
2947
|
+
ui: {
|
|
2948
|
+
tab: "shell",
|
|
2949
|
+
group: "Eval & Python",
|
|
2950
|
+
label: "JavaScript Eval Backend",
|
|
2951
|
+
description: "Allow the eval tool to dispatch JavaScript cells to the in-process runtime",
|
|
2952
|
+
},
|
|
2953
|
+
},
|
|
2954
|
+
|
|
2955
|
+
// Python kernel knobs (consumed by the eval py backend and the /python slash command)
|
|
2956
|
+
"python.kernelMode": {
|
|
2957
|
+
type: "enum",
|
|
2958
|
+
values: ["session", "per-call"] as const,
|
|
2959
|
+
default: "session",
|
|
2960
|
+
ui: {
|
|
2961
|
+
tab: "shell",
|
|
2962
|
+
group: "Eval & Python",
|
|
2963
|
+
label: "Python Kernel Mode",
|
|
2964
|
+
description: "Keep the IPython kernel alive across eval calls or start fresh each time",
|
|
2965
|
+
},
|
|
2966
|
+
},
|
|
2967
|
+
"python.interpreter": {
|
|
2968
|
+
type: "string",
|
|
2969
|
+
default: "",
|
|
2970
|
+
ui: {
|
|
2971
|
+
tab: "shell",
|
|
2972
|
+
group: "Eval & Python",
|
|
2973
|
+
label: "Python Interpreter",
|
|
2974
|
+
description:
|
|
2975
|
+
"Optional path to an exact Python executable. When set, automatic Python runtime discovery is skipped.",
|
|
2976
|
+
},
|
|
2977
|
+
},
|
|
2978
|
+
|
|
2979
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
2980
|
+
// Tools
|
|
2981
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
2982
|
+
|
|
2983
|
+
// Tool approval policies
|
|
2984
|
+
"tools.approval": {
|
|
2985
|
+
type: "record",
|
|
2986
|
+
default: {},
|
|
2987
|
+
ui: {
|
|
2988
|
+
tab: "interaction",
|
|
2989
|
+
group: "Approvals",
|
|
2990
|
+
label: "Tool Approval Policies",
|
|
2991
|
+
description:
|
|
2992
|
+
"Per-tool approval policies. Set to 'allow' to auto-approve, 'prompt' to require confirmation, or 'deny' to block. Overrides are honored in every approval mode.",
|
|
2993
|
+
},
|
|
2994
|
+
},
|
|
2995
|
+
|
|
2996
|
+
// Default tool approval mode (interaction tab, but governs the tool wrapper).
|
|
2997
|
+
// "always-ask" — auto-approves read-tier tools only; prompts for write/exec.
|
|
2998
|
+
// "write" — auto-approves read and write-tier tools; prompts for exec.
|
|
2999
|
+
// "yolo" — auto-approves every tier.
|
|
3000
|
+
"tools.approvalMode": {
|
|
3001
|
+
type: "enum",
|
|
3002
|
+
values: ["always-ask", "write", "yolo"] as const,
|
|
3003
|
+
default: "yolo",
|
|
3004
|
+
ui: {
|
|
3005
|
+
tab: "interaction",
|
|
3006
|
+
group: "Approvals",
|
|
3007
|
+
label: "Tool Approval",
|
|
3008
|
+
description:
|
|
3009
|
+
"Default approval behavior for tool calls. 'Always ask' auto-approves read-only tools only. 'Write' auto-approves read and workspace-write tools. 'Yolo' auto-approves all tiers; user policy may still prompt or block.",
|
|
3010
|
+
options: [
|
|
3011
|
+
{
|
|
3012
|
+
value: "always-ask",
|
|
3013
|
+
label: "Always ask",
|
|
3014
|
+
description: "Auto-approve read-only tools; require confirmation for write and exec tools.",
|
|
3015
|
+
},
|
|
3016
|
+
{
|
|
3017
|
+
value: "write",
|
|
3018
|
+
label: "Write",
|
|
3019
|
+
description:
|
|
3020
|
+
"Auto-approve read-only and write tools; require confirmation for exec tools such as bash, eval, browser, task, and ssh.",
|
|
3021
|
+
},
|
|
3022
|
+
{
|
|
3023
|
+
value: "yolo",
|
|
3024
|
+
label: "Yolo",
|
|
3025
|
+
description:
|
|
3026
|
+
"Auto-approve read, write, and exec tools. User policy can still require confirmation or block calls.",
|
|
3027
|
+
},
|
|
3028
|
+
],
|
|
3029
|
+
},
|
|
3030
|
+
},
|
|
3031
|
+
|
|
3032
|
+
// Todo tool
|
|
3033
|
+
"todo.enabled": {
|
|
3034
|
+
type: "boolean",
|
|
3035
|
+
default: true,
|
|
3036
|
+
ui: {
|
|
3037
|
+
tab: "tools",
|
|
3038
|
+
group: "Available Tools",
|
|
3039
|
+
label: "Todos",
|
|
3040
|
+
description: "Enable the todo tool for task tracking",
|
|
3041
|
+
},
|
|
3042
|
+
},
|
|
3043
|
+
|
|
3044
|
+
"todo.reminders": {
|
|
3045
|
+
type: "boolean",
|
|
3046
|
+
default: true,
|
|
3047
|
+
ui: {
|
|
3048
|
+
tab: "tools",
|
|
3049
|
+
group: "Todos",
|
|
3050
|
+
label: "Todo Reminders",
|
|
3051
|
+
description: "Remind the agent to complete todos before stopping",
|
|
3052
|
+
},
|
|
3053
|
+
},
|
|
3054
|
+
|
|
3055
|
+
"todo.reminders.max": {
|
|
3056
|
+
type: "number",
|
|
3057
|
+
default: 3,
|
|
3058
|
+
ui: {
|
|
3059
|
+
tab: "tools",
|
|
3060
|
+
group: "Todos",
|
|
3061
|
+
label: "Todo Reminder Limit",
|
|
3062
|
+
description: "Maximum number of todo reminders before giving up",
|
|
3063
|
+
options: [
|
|
3064
|
+
{ value: "1", label: "1 reminder" },
|
|
3065
|
+
{ value: "2", label: "2 reminders" },
|
|
3066
|
+
{ value: "3", label: "3 reminders" },
|
|
3067
|
+
{ value: "5", label: "5 reminders" },
|
|
3068
|
+
],
|
|
3069
|
+
},
|
|
3070
|
+
},
|
|
3071
|
+
|
|
3072
|
+
"todo.eager": {
|
|
3073
|
+
type: "enum",
|
|
3074
|
+
values: ["default", "preferred", "always"] as const,
|
|
3075
|
+
default: "default",
|
|
3076
|
+
ui: {
|
|
3077
|
+
tab: "tools",
|
|
3078
|
+
group: "Todos",
|
|
3079
|
+
label: "Create Todos Automatically",
|
|
3080
|
+
description: "How strongly to push automatic todo-list creation after the first message",
|
|
3081
|
+
options: [
|
|
3082
|
+
{ value: "default", label: "Default", description: "Model decides; no automatic todo list" },
|
|
3083
|
+
{
|
|
3084
|
+
value: "preferred",
|
|
3085
|
+
label: "Preferred",
|
|
3086
|
+
description: "Suggests a todo list on the first message (reminder, not forced)",
|
|
3087
|
+
},
|
|
3088
|
+
{ value: "always", label: "Always", description: "Forces a comprehensive todo list on the first message" },
|
|
3089
|
+
],
|
|
3090
|
+
},
|
|
3091
|
+
},
|
|
3092
|
+
|
|
3093
|
+
// Search and AST tools
|
|
3094
|
+
"find.enabled": {
|
|
3095
|
+
type: "boolean",
|
|
3096
|
+
default: true,
|
|
3097
|
+
ui: {
|
|
3098
|
+
tab: "tools",
|
|
3099
|
+
group: "Available Tools",
|
|
3100
|
+
label: "Find",
|
|
3101
|
+
description: "Enable the find tool for glob-based file lookup",
|
|
3102
|
+
},
|
|
3103
|
+
},
|
|
3104
|
+
|
|
3105
|
+
"search.enabled": {
|
|
3106
|
+
type: "boolean",
|
|
3107
|
+
default: true,
|
|
3108
|
+
ui: {
|
|
3109
|
+
tab: "tools",
|
|
3110
|
+
group: "Available Tools",
|
|
3111
|
+
label: "Search",
|
|
3112
|
+
description: "Enable the search tool for regex content search",
|
|
3113
|
+
},
|
|
3114
|
+
},
|
|
3115
|
+
|
|
3116
|
+
"search.contextBefore": {
|
|
3117
|
+
type: "number",
|
|
3118
|
+
default: 1,
|
|
3119
|
+
ui: {
|
|
3120
|
+
tab: "tools",
|
|
3121
|
+
group: "Search & Browser",
|
|
3122
|
+
label: "Search Context Before",
|
|
3123
|
+
description: "Lines of context before each search match",
|
|
3124
|
+
options: [
|
|
3125
|
+
{ value: "0", label: "0 lines" },
|
|
3126
|
+
{ value: "1", label: "1 line" },
|
|
3127
|
+
{ value: "2", label: "2 lines" },
|
|
3128
|
+
{ value: "3", label: "3 lines" },
|
|
3129
|
+
{ value: "5", label: "5 lines" },
|
|
3130
|
+
],
|
|
3131
|
+
},
|
|
3132
|
+
},
|
|
3133
|
+
|
|
3134
|
+
"search.contextAfter": {
|
|
3135
|
+
type: "number",
|
|
3136
|
+
default: 3,
|
|
3137
|
+
ui: {
|
|
3138
|
+
tab: "tools",
|
|
3139
|
+
group: "Search & Browser",
|
|
3140
|
+
label: "Search Context After",
|
|
3141
|
+
description: "Lines of context after each search match",
|
|
3142
|
+
options: [
|
|
3143
|
+
{ value: "0", label: "0 lines" },
|
|
3144
|
+
{ value: "1", label: "1 line" },
|
|
3145
|
+
{ value: "2", label: "2 lines" },
|
|
3146
|
+
{ value: "3", label: "3 lines" },
|
|
3147
|
+
{ value: "5", label: "5 lines" },
|
|
3148
|
+
{ value: "10", label: "10 lines" },
|
|
3149
|
+
],
|
|
3150
|
+
},
|
|
3151
|
+
},
|
|
3152
|
+
|
|
3153
|
+
"astGrep.enabled": {
|
|
3154
|
+
type: "boolean",
|
|
3155
|
+
default: true,
|
|
3156
|
+
ui: {
|
|
3157
|
+
tab: "tools",
|
|
3158
|
+
group: "Available Tools",
|
|
3159
|
+
label: "AST Grep",
|
|
3160
|
+
description: "Enable the ast_grep tool for structural AST search",
|
|
3161
|
+
},
|
|
3162
|
+
},
|
|
3163
|
+
|
|
3164
|
+
"astEdit.enabled": {
|
|
3165
|
+
type: "boolean",
|
|
3166
|
+
default: true,
|
|
3167
|
+
ui: {
|
|
3168
|
+
tab: "tools",
|
|
3169
|
+
group: "Available Tools",
|
|
3170
|
+
label: "AST Edit",
|
|
3171
|
+
description: "Enable the ast_edit tool for structural AST rewrites",
|
|
3172
|
+
},
|
|
3173
|
+
},
|
|
3174
|
+
|
|
3175
|
+
// Optional tools
|
|
3176
|
+
|
|
3177
|
+
"debug.enabled": {
|
|
3178
|
+
type: "boolean",
|
|
3179
|
+
default: true,
|
|
3180
|
+
ui: {
|
|
3181
|
+
tab: "tools",
|
|
3182
|
+
group: "Available Tools",
|
|
3183
|
+
label: "Debug",
|
|
3184
|
+
description: "Enable the debug tool for DAP-based debugging",
|
|
3185
|
+
},
|
|
3186
|
+
},
|
|
3187
|
+
|
|
3188
|
+
"speechgen.enabled": {
|
|
3189
|
+
type: "boolean",
|
|
3190
|
+
default: false,
|
|
3191
|
+
ui: {
|
|
3192
|
+
tab: "tools",
|
|
3193
|
+
group: "Available Tools",
|
|
3194
|
+
label: "Speech Generation",
|
|
3195
|
+
description: "Enable the tts tool for on-device (Kokoro) or xAI Grok Voice speech-file synthesis",
|
|
3196
|
+
},
|
|
3197
|
+
},
|
|
3198
|
+
|
|
3199
|
+
"inspect_image.enabled": {
|
|
3200
|
+
type: "boolean",
|
|
3201
|
+
default: false,
|
|
3202
|
+
ui: {
|
|
3203
|
+
tab: "tools",
|
|
3204
|
+
group: "Available Tools",
|
|
3205
|
+
label: "Inspect Image",
|
|
3206
|
+
description: "Enable the inspect_image tool, delegating image understanding to a vision-capable model",
|
|
3207
|
+
},
|
|
3208
|
+
},
|
|
3209
|
+
|
|
3210
|
+
"checkpoint.enabled": {
|
|
3211
|
+
type: "boolean",
|
|
3212
|
+
default: false,
|
|
3213
|
+
ui: {
|
|
3214
|
+
tab: "tools",
|
|
3215
|
+
group: "Available Tools",
|
|
3216
|
+
label: "Checkpoint/Rewind",
|
|
3217
|
+
description: "Enable the checkpoint and rewind tools for context checkpointing",
|
|
3218
|
+
},
|
|
3219
|
+
},
|
|
3220
|
+
|
|
3221
|
+
// Fetching and browser
|
|
3222
|
+
"fetch.enabled": {
|
|
3223
|
+
type: "boolean",
|
|
3224
|
+
default: true,
|
|
3225
|
+
ui: {
|
|
3226
|
+
tab: "tools",
|
|
3227
|
+
group: "Available Tools",
|
|
3228
|
+
label: "Read URLs",
|
|
3229
|
+
description: "Allow the read tool to fetch and process URLs",
|
|
3230
|
+
},
|
|
3231
|
+
},
|
|
3232
|
+
|
|
3233
|
+
"vault.enabled": {
|
|
3234
|
+
type: "boolean",
|
|
3235
|
+
default: false,
|
|
3236
|
+
ui: {
|
|
3237
|
+
tab: "tools",
|
|
3238
|
+
group: "Available Tools",
|
|
3239
|
+
label: "Obsidian Vault",
|
|
3240
|
+
description:
|
|
3241
|
+
"Enable the vault:// internal URL for reading and editing Obsidian vault content via the Obsidian CLI. When disabled, vault:// resolution is refused and the vault:// entry is omitted from the system prompt.",
|
|
3242
|
+
},
|
|
3243
|
+
},
|
|
3244
|
+
|
|
3245
|
+
"github.enabled": {
|
|
3246
|
+
type: "boolean",
|
|
3247
|
+
default: false,
|
|
3248
|
+
ui: {
|
|
3249
|
+
tab: "tools",
|
|
3250
|
+
group: "Available Tools",
|
|
3251
|
+
label: "GitHub CLI",
|
|
3252
|
+
description:
|
|
3253
|
+
"Enable the github tool (op-based dispatch for repository, issue, pull request, diff, search, checkout, push, and Actions watch workflows)",
|
|
3254
|
+
},
|
|
3255
|
+
},
|
|
3256
|
+
|
|
3257
|
+
"github.cache.enabled": {
|
|
3258
|
+
type: "boolean",
|
|
3259
|
+
default: true,
|
|
3260
|
+
ui: {
|
|
3261
|
+
tab: "tools",
|
|
3262
|
+
group: "GitHub",
|
|
3263
|
+
label: "GitHub View Cache",
|
|
3264
|
+
description: "Cache rendered issue/PR view output in ~/.omp/cache/github-cache.db so repeated reads are free",
|
|
3265
|
+
},
|
|
3266
|
+
},
|
|
3267
|
+
|
|
3268
|
+
"github.cache.softTtlSec": {
|
|
3269
|
+
type: "number",
|
|
3270
|
+
default: 300,
|
|
3271
|
+
ui: {
|
|
3272
|
+
tab: "tools",
|
|
3273
|
+
group: "GitHub",
|
|
3274
|
+
label: "GitHub Cache Soft TTL",
|
|
3275
|
+
description:
|
|
3276
|
+
"Within this window, cached issue/PR view rows are returned directly (seconds; default 5 minutes)",
|
|
3277
|
+
},
|
|
3278
|
+
},
|
|
3279
|
+
|
|
3280
|
+
"github.cache.hardTtlSec": {
|
|
3281
|
+
type: "number",
|
|
3282
|
+
default: 604800,
|
|
3283
|
+
ui: {
|
|
3284
|
+
tab: "tools",
|
|
3285
|
+
group: "GitHub",
|
|
3286
|
+
label: "GitHub Cache Hard TTL",
|
|
3287
|
+
description:
|
|
3288
|
+
"Past the soft TTL the cached row is returned and refreshed in the background; past the hard TTL it is dropped (seconds; default 7 days)",
|
|
3289
|
+
},
|
|
3290
|
+
},
|
|
3291
|
+
|
|
3292
|
+
"web_search.enabled": {
|
|
3293
|
+
type: "boolean",
|
|
3294
|
+
default: true,
|
|
3295
|
+
ui: {
|
|
3296
|
+
tab: "tools",
|
|
3297
|
+
group: "Available Tools",
|
|
3298
|
+
label: "Web Search",
|
|
3299
|
+
description: "Enable the web_search tool for live web results",
|
|
3300
|
+
},
|
|
3301
|
+
},
|
|
3302
|
+
|
|
3303
|
+
"browser.enabled": {
|
|
3304
|
+
type: "boolean",
|
|
3305
|
+
default: true,
|
|
3306
|
+
ui: {
|
|
3307
|
+
tab: "tools",
|
|
3308
|
+
group: "Available Tools",
|
|
3309
|
+
label: "Browser",
|
|
3310
|
+
description: "Enable the browser tool for scripted Chromium automation (puppeteer)",
|
|
3311
|
+
},
|
|
3312
|
+
},
|
|
3313
|
+
|
|
3314
|
+
"browser.headless": {
|
|
3315
|
+
type: "boolean",
|
|
3316
|
+
default: true,
|
|
3317
|
+
ui: {
|
|
3318
|
+
tab: "tools",
|
|
3319
|
+
group: "Search & Browser",
|
|
3320
|
+
label: "Headless Browser",
|
|
3321
|
+
description: "Launch browser in headless mode (disable to show browser UI)",
|
|
3322
|
+
},
|
|
3323
|
+
},
|
|
3324
|
+
|
|
3325
|
+
"browser.cmux": {
|
|
3326
|
+
type: "boolean",
|
|
3327
|
+
default: true,
|
|
3328
|
+
ui: {
|
|
3329
|
+
tab: "tools",
|
|
3330
|
+
group: "Search & Browser",
|
|
3331
|
+
label: "cmux Browser",
|
|
3332
|
+
description:
|
|
3333
|
+
"Use cmux WKWebView surfaces for browser automation when a cmux socket is available. Set PI_BROWSER_CMUX=0 or PI_BROWSER_CMUX=1 to override.",
|
|
3334
|
+
},
|
|
3335
|
+
},
|
|
3336
|
+
"browser.screenshotDir": {
|
|
3337
|
+
type: "string",
|
|
3338
|
+
default: undefined,
|
|
3339
|
+
ui: {
|
|
3340
|
+
tab: "tools",
|
|
3341
|
+
group: "Search & Browser",
|
|
3342
|
+
label: "Screenshot Directory",
|
|
3343
|
+
description:
|
|
3344
|
+
"Directory to save screenshots. If unset, screenshots go to a temp file. Supports ~. Examples: ~/Downloads, ~/Desktop, /sdcard/Download (Android)",
|
|
3345
|
+
},
|
|
3346
|
+
},
|
|
3347
|
+
|
|
3348
|
+
// Tool execution
|
|
3349
|
+
"tools.intentTracing": {
|
|
3350
|
+
type: "boolean",
|
|
3351
|
+
default: true,
|
|
3352
|
+
ui: {
|
|
3353
|
+
tab: "tools",
|
|
3354
|
+
group: "Execution",
|
|
3355
|
+
label: "Intent Tracing",
|
|
3356
|
+
description: "Ask the agent to describe the intent of each tool call before executing it",
|
|
3357
|
+
},
|
|
3358
|
+
},
|
|
3359
|
+
"tools.abortOnFabricatedResult": {
|
|
3360
|
+
type: "boolean",
|
|
3361
|
+
default: true,
|
|
3362
|
+
ui: {
|
|
3363
|
+
tab: "tools",
|
|
3364
|
+
group: "Execution",
|
|
3365
|
+
label: "Abort On Fabricated Tool Result",
|
|
3366
|
+
description:
|
|
3367
|
+
"With in-band tool calls, stop the model immediately when it starts hallucinating a tool result mid-turn. Disable to let the model finish generating and discard the fabricated continuation instead.",
|
|
3368
|
+
},
|
|
3369
|
+
},
|
|
3370
|
+
|
|
3371
|
+
"tools.maxTimeout": {
|
|
3372
|
+
type: "number",
|
|
3373
|
+
default: 0,
|
|
3374
|
+
ui: {
|
|
3375
|
+
tab: "tools",
|
|
3376
|
+
group: "Execution",
|
|
3377
|
+
label: "Max Tool Timeout",
|
|
3378
|
+
description: "Maximum timeout in seconds the agent can set for any tool (0 = no limit)",
|
|
3379
|
+
options: [
|
|
3380
|
+
{ value: "0", label: "No limit" },
|
|
3381
|
+
{ value: "30", label: "30 seconds" },
|
|
3382
|
+
{ value: "60", label: "60 seconds" },
|
|
3383
|
+
{ value: "120", label: "120 seconds" },
|
|
3384
|
+
{ value: "300", label: "5 minutes" },
|
|
3385
|
+
{ value: "600", label: "10 minutes" },
|
|
3386
|
+
],
|
|
3387
|
+
},
|
|
3388
|
+
},
|
|
3389
|
+
|
|
3390
|
+
// Async jobs
|
|
3391
|
+
"async.enabled": {
|
|
3392
|
+
type: "boolean",
|
|
3393
|
+
default: true,
|
|
3394
|
+
ui: {
|
|
3395
|
+
tab: "tools",
|
|
3396
|
+
group: "Execution",
|
|
3397
|
+
label: "Async Execution",
|
|
3398
|
+
description: "Enable async bash commands and background task execution",
|
|
3399
|
+
},
|
|
3400
|
+
},
|
|
3401
|
+
|
|
3402
|
+
"async.maxJobs": {
|
|
3403
|
+
type: "number",
|
|
3404
|
+
default: 100,
|
|
3405
|
+
},
|
|
3406
|
+
|
|
3407
|
+
"async.pollWaitDuration": {
|
|
3408
|
+
type: "enum",
|
|
3409
|
+
values: ["5s", "10s", "30s", "1m", "5m", "smart"] as const,
|
|
3410
|
+
default: "smart",
|
|
3411
|
+
ui: {
|
|
3412
|
+
tab: "tools",
|
|
3413
|
+
group: "Execution",
|
|
3414
|
+
label: "Max Poll Time",
|
|
3415
|
+
description:
|
|
3416
|
+
"How long the poll tool waits for background job updates before returning the current state. A fixed value waits that exact duration every time. `smart` adapts: it starts at 5s and lengthens with each back-to-back poll (up to 5m), then resets to 5s after about a minute without polling.",
|
|
3417
|
+
options: [
|
|
3418
|
+
{ value: "5s", label: "5 seconds" },
|
|
3419
|
+
{ value: "10s", label: "10 seconds" },
|
|
3420
|
+
{ value: "30s", label: "30 seconds" },
|
|
3421
|
+
{ value: "1m", label: "1 minute" },
|
|
3422
|
+
{ value: "5m", label: "5 minutes" },
|
|
3423
|
+
{ value: "smart", label: "Smart", description: "Default — adaptive 5s→5m, resets when you stop polling" },
|
|
3424
|
+
],
|
|
3425
|
+
},
|
|
3426
|
+
},
|
|
3427
|
+
|
|
3428
|
+
"irc.timeoutMs": {
|
|
3429
|
+
type: "number",
|
|
3430
|
+
default: 120_000,
|
|
3431
|
+
ui: {
|
|
3432
|
+
tab: "tools",
|
|
3433
|
+
group: "Execution",
|
|
3434
|
+
label: "IRC Timeout",
|
|
3435
|
+
description: "Default timeout for irc wait (and send await:true) in milliseconds; 0 disables the timeout",
|
|
3436
|
+
options: [
|
|
3437
|
+
{ value: "0", label: "Disabled" },
|
|
3438
|
+
{ value: "30000", label: "30 seconds" },
|
|
3439
|
+
{ value: "60000", label: "1 minute" },
|
|
3440
|
+
{ value: "120000", label: "2 minutes" },
|
|
3441
|
+
{ value: "300000", label: "5 minutes" },
|
|
3442
|
+
],
|
|
3443
|
+
},
|
|
3444
|
+
},
|
|
3445
|
+
|
|
3446
|
+
"bash.autoBackground.thresholdMs": {
|
|
3447
|
+
type: "number",
|
|
3448
|
+
default: 60_000,
|
|
3449
|
+
},
|
|
3450
|
+
|
|
3451
|
+
// Tool Discovery
|
|
3452
|
+
"tools.discoveryMode": {
|
|
3453
|
+
type: "enum",
|
|
3454
|
+
values: ["auto", "off", "mcp-only", "all"] as const,
|
|
3455
|
+
default: "auto",
|
|
3456
|
+
ui: {
|
|
3457
|
+
tab: "tools",
|
|
3458
|
+
group: "Discovery & MCP",
|
|
3459
|
+
label: "Tool Discovery",
|
|
3460
|
+
description:
|
|
3461
|
+
"Hide tools behind a search tool to save tokens. 'auto' hides MCP tools once the tool set has more than 40 tools; 'mcp-only' always hides MCP tools; 'all' hides all non-essential built-ins too.",
|
|
3462
|
+
},
|
|
3463
|
+
},
|
|
3464
|
+
|
|
3465
|
+
"tools.essentialOverride": {
|
|
3466
|
+
type: "array",
|
|
3467
|
+
default: [] as string[],
|
|
3468
|
+
ui: {
|
|
3469
|
+
tab: "tools",
|
|
3470
|
+
group: "Discovery & MCP",
|
|
3471
|
+
label: "Essential Tools Override",
|
|
3472
|
+
description:
|
|
3473
|
+
"Override the always-loaded built-in tools (default: read, bash, edit). Leave empty to use defaults.",
|
|
3474
|
+
},
|
|
3475
|
+
},
|
|
3476
|
+
|
|
3477
|
+
// MCP
|
|
3478
|
+
"mcp.enableProjectConfig": {
|
|
3479
|
+
type: "boolean",
|
|
3480
|
+
default: true,
|
|
3481
|
+
ui: {
|
|
3482
|
+
tab: "tools",
|
|
3483
|
+
group: "Discovery & MCP",
|
|
3484
|
+
label: "MCP Project Config",
|
|
3485
|
+
description: "Load .mcp.json/mcp.json from project root",
|
|
3486
|
+
},
|
|
3487
|
+
},
|
|
3488
|
+
|
|
3489
|
+
"mcp.discoveryMode": {
|
|
3490
|
+
type: "boolean",
|
|
3491
|
+
default: false,
|
|
3492
|
+
ui: {
|
|
3493
|
+
tab: "tools",
|
|
3494
|
+
group: "Discovery & MCP",
|
|
3495
|
+
label: "MCP Tool Discovery",
|
|
3496
|
+
description: "Hide MCP tools by default and expose them through a tool discovery tool",
|
|
3497
|
+
},
|
|
3498
|
+
},
|
|
3499
|
+
|
|
3500
|
+
"mcp.discoveryDefaultServers": {
|
|
3501
|
+
type: "array",
|
|
3502
|
+
default: [] as string[],
|
|
3503
|
+
ui: {
|
|
3504
|
+
tab: "tools",
|
|
3505
|
+
group: "Discovery & MCP",
|
|
3506
|
+
label: "MCP Discovery Default Servers",
|
|
3507
|
+
description: "Keep MCP tools from these servers visible while discovery mode hides other MCP tools",
|
|
3508
|
+
},
|
|
3509
|
+
},
|
|
3510
|
+
|
|
3511
|
+
"mcp.notifications": {
|
|
3512
|
+
type: "boolean",
|
|
3513
|
+
default: false,
|
|
3514
|
+
ui: {
|
|
3515
|
+
tab: "tools",
|
|
3516
|
+
group: "Discovery & MCP",
|
|
3517
|
+
label: "MCP Update Injection",
|
|
3518
|
+
description: "Inject MCP resource updates into the agent conversation",
|
|
3519
|
+
},
|
|
3520
|
+
},
|
|
3521
|
+
|
|
3522
|
+
"mcp.notificationDebounceMs": {
|
|
3523
|
+
type: "number",
|
|
3524
|
+
default: 500,
|
|
3525
|
+
ui: {
|
|
3526
|
+
tab: "tools",
|
|
3527
|
+
group: "Discovery & MCP",
|
|
3528
|
+
label: "MCP Notification Debounce",
|
|
3529
|
+
description:
|
|
3530
|
+
"Debounce window in milliseconds for MCP resource updates before injecting them into the conversation",
|
|
3531
|
+
},
|
|
3532
|
+
},
|
|
3533
|
+
|
|
3534
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
3535
|
+
// Tasks
|
|
3536
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
3537
|
+
|
|
3538
|
+
// Plan mode
|
|
3539
|
+
"plan.enabled": {
|
|
3540
|
+
type: "boolean",
|
|
3541
|
+
default: true,
|
|
3542
|
+
ui: {
|
|
3543
|
+
tab: "tasks",
|
|
3544
|
+
group: "Modes",
|
|
3545
|
+
label: "Plan Mode",
|
|
3546
|
+
description: "Enable plan mode for read-only exploration and planning before execution",
|
|
3547
|
+
},
|
|
3548
|
+
},
|
|
3549
|
+
|
|
3550
|
+
"plan.defaultOnStartup": {
|
|
3551
|
+
type: "boolean",
|
|
3552
|
+
default: false,
|
|
3553
|
+
ui: {
|
|
3554
|
+
tab: "tasks",
|
|
3555
|
+
group: "Modes",
|
|
3556
|
+
label: "Start in Plan Mode",
|
|
3557
|
+
description: "Automatically enter plan mode at the start of every new session",
|
|
3558
|
+
condition: "planModeEnabled",
|
|
3559
|
+
},
|
|
3560
|
+
},
|
|
3561
|
+
|
|
3562
|
+
"goal.enabled": {
|
|
3563
|
+
type: "boolean",
|
|
3564
|
+
default: true,
|
|
3565
|
+
ui: {
|
|
3566
|
+
tab: "tasks",
|
|
3567
|
+
group: "Modes",
|
|
3568
|
+
label: "Goal Mode",
|
|
3569
|
+
description: "Enable per-session goal mode and the hidden goal tool",
|
|
3570
|
+
},
|
|
3571
|
+
},
|
|
3572
|
+
|
|
3573
|
+
"goal.statusInFooter": {
|
|
3574
|
+
type: "boolean",
|
|
3575
|
+
default: true,
|
|
3576
|
+
ui: {
|
|
3577
|
+
tab: "tasks",
|
|
3578
|
+
group: "Modes",
|
|
3579
|
+
label: "Goal Status in Footer",
|
|
3580
|
+
description: "Show token budget alongside the goal indicator in the status line",
|
|
3581
|
+
},
|
|
3582
|
+
},
|
|
3583
|
+
|
|
3584
|
+
"goal.continuationModes": {
|
|
3585
|
+
type: "array",
|
|
3586
|
+
default: ["interactive"],
|
|
3587
|
+
ui: {
|
|
3588
|
+
tab: "tasks",
|
|
3589
|
+
group: "Modes",
|
|
3590
|
+
label: "Goal Continuation Modes",
|
|
3591
|
+
description: "Run modes where active goals may auto-continue between turns",
|
|
3592
|
+
},
|
|
3593
|
+
},
|
|
3594
|
+
|
|
3595
|
+
// Delegation
|
|
3596
|
+
"task.isolation.mode": {
|
|
3597
|
+
type: "enum",
|
|
3598
|
+
values: [
|
|
3599
|
+
"none",
|
|
3600
|
+
"auto",
|
|
3601
|
+
"apfs",
|
|
3602
|
+
"btrfs",
|
|
3603
|
+
"zfs",
|
|
3604
|
+
"reflink",
|
|
3605
|
+
"overlayfs",
|
|
3606
|
+
"projfs",
|
|
3607
|
+
"block-clone",
|
|
3608
|
+
"rcopy",
|
|
3609
|
+
] as const,
|
|
3610
|
+
default: "none",
|
|
3611
|
+
ui: {
|
|
3612
|
+
tab: "tasks",
|
|
3613
|
+
group: "Isolation",
|
|
3614
|
+
label: "Isolation Mode",
|
|
3615
|
+
description:
|
|
3616
|
+
'Isolation backend for subagents. "auto" lets the native PAL pick the best available backend (CoW-aware filesystems, then overlayfs/ProjFS, then a git worktree / recursive-copy fallback).',
|
|
3617
|
+
options: [
|
|
3618
|
+
{ value: "none", label: "None", description: "No isolation" },
|
|
3619
|
+
{ value: "auto", label: "Auto", description: "Let the PAL pick the best available backend" },
|
|
3620
|
+
{ value: "apfs", label: "APFS", description: "macOS clonefile reflink (APFS)" },
|
|
3621
|
+
{ value: "btrfs", label: "btrfs", description: "btrfs subvolume snapshot" },
|
|
3622
|
+
{ value: "zfs", label: "ZFS", description: "ZFS snapshot + clone" },
|
|
3623
|
+
{ value: "reflink", label: "Reflink", description: "Linux FICLONE per-file reflink" },
|
|
3624
|
+
{
|
|
3625
|
+
value: "overlayfs",
|
|
3626
|
+
label: "Overlayfs",
|
|
3627
|
+
description: "Linux kernel overlay (or fuse-overlayfs fallback)",
|
|
3628
|
+
},
|
|
3629
|
+
{ value: "projfs", label: "ProjFS", description: "Windows Projected File System" },
|
|
3630
|
+
{
|
|
3631
|
+
value: "block-clone",
|
|
3632
|
+
label: "Block clone",
|
|
3633
|
+
description: "Windows FSCTL_DUPLICATE_EXTENTS_TO_FILE (NTFS/ReFS)",
|
|
3634
|
+
},
|
|
3635
|
+
{
|
|
3636
|
+
value: "rcopy",
|
|
3637
|
+
label: "Recursive copy",
|
|
3638
|
+
description: "git worktree if available, otherwise recursive copy",
|
|
3639
|
+
},
|
|
3640
|
+
],
|
|
3641
|
+
},
|
|
3642
|
+
},
|
|
3643
|
+
|
|
3644
|
+
"task.isolation.merge": {
|
|
3645
|
+
type: "enum",
|
|
3646
|
+
values: ["patch", "branch"] as const,
|
|
3647
|
+
default: "patch",
|
|
3648
|
+
ui: {
|
|
3649
|
+
tab: "tasks",
|
|
3650
|
+
group: "Isolation",
|
|
3651
|
+
label: "Isolation Merge Strategy",
|
|
3652
|
+
description: "How isolated task changes are integrated (patch apply or branch merge)",
|
|
3653
|
+
options: [
|
|
3654
|
+
{ value: "patch", label: "Patch", description: "Combine diffs and git apply" },
|
|
3655
|
+
{ value: "branch", label: "Branch", description: "Commit per task, merge with --no-ff" },
|
|
3656
|
+
],
|
|
3657
|
+
},
|
|
3658
|
+
},
|
|
3659
|
+
|
|
3660
|
+
"task.isolation.commits": {
|
|
3661
|
+
type: "enum",
|
|
3662
|
+
values: ["generic", "ai"] as const,
|
|
3663
|
+
default: "generic",
|
|
3664
|
+
ui: {
|
|
3665
|
+
tab: "tasks",
|
|
3666
|
+
group: "Isolation",
|
|
3667
|
+
label: "Isolation Commit Style",
|
|
3668
|
+
description: "Commit message style for nested repo changes (generic or AI-generated)",
|
|
3669
|
+
options: [
|
|
3670
|
+
{ value: "generic", label: "Generic", description: "Static commit message" },
|
|
3671
|
+
{ value: "ai", label: "AI", description: "AI-generated commit message from diff" },
|
|
3672
|
+
],
|
|
3673
|
+
},
|
|
3674
|
+
},
|
|
3675
|
+
|
|
3676
|
+
"task.eager": {
|
|
3677
|
+
type: "enum",
|
|
3678
|
+
values: ["default", "preferred", "always"] as const,
|
|
3679
|
+
default: "default",
|
|
3680
|
+
ui: {
|
|
3681
|
+
tab: "tasks",
|
|
3682
|
+
group: "Subagents",
|
|
3683
|
+
label: "Prefer Task Delegation",
|
|
3684
|
+
description: "How strongly to push delegating work to subagents",
|
|
3685
|
+
options: [
|
|
3686
|
+
{ value: "default", label: "Default", description: "Model decides when to delegate" },
|
|
3687
|
+
{ value: "preferred", label: "Preferred", description: "Adds delegation guidance to the system prompt" },
|
|
3688
|
+
{ value: "always", label: "Always", description: "Prompt guidance plus a first-turn delegation reminder" },
|
|
3689
|
+
],
|
|
3690
|
+
},
|
|
3691
|
+
},
|
|
3692
|
+
|
|
3693
|
+
"task.batch": {
|
|
3694
|
+
type: "boolean",
|
|
3695
|
+
default: true,
|
|
3696
|
+
ui: {
|
|
3697
|
+
tab: "tasks",
|
|
3698
|
+
group: "Subagents",
|
|
3699
|
+
label: "Batch Task Calls",
|
|
3700
|
+
description:
|
|
3701
|
+
"Switch the task tool to its batch shape: one call carries { agent, context, tasks[] } — one subagent per item (with per-item isolation) and a required shared context prepended to every assignment. With async.enabled=true, each spawn runs as an independent background agent with the normal idle/parked lifecycle; otherwise the call blocks for merged results. Disable to restore the flat single-spawn schema.",
|
|
3702
|
+
},
|
|
3703
|
+
},
|
|
3704
|
+
|
|
3705
|
+
"task.maxConcurrency": {
|
|
3706
|
+
type: "number",
|
|
3707
|
+
default: 32,
|
|
3708
|
+
ui: {
|
|
3709
|
+
tab: "tasks",
|
|
3710
|
+
group: "Subagents",
|
|
3711
|
+
label: "Max Concurrent Tasks",
|
|
3712
|
+
description: "Maximum number of subagents running concurrently",
|
|
3713
|
+
options: [
|
|
3714
|
+
{ value: "0", label: "Unlimited" },
|
|
3715
|
+
{ value: "1", label: "1 task" },
|
|
3716
|
+
{ value: "2", label: "2 tasks" },
|
|
3717
|
+
{ value: "4", label: "4 tasks" },
|
|
3718
|
+
{ value: "8", label: "8 tasks" },
|
|
3719
|
+
{ value: "16", label: "16 tasks" },
|
|
3720
|
+
{ value: "32", label: "32 tasks" },
|
|
3721
|
+
{ value: "64", label: "64 tasks" },
|
|
3722
|
+
],
|
|
3723
|
+
},
|
|
3724
|
+
},
|
|
3725
|
+
|
|
3726
|
+
"task.enableLsp": {
|
|
3727
|
+
type: "boolean",
|
|
3728
|
+
default: false,
|
|
3729
|
+
ui: {
|
|
3730
|
+
tab: "tasks",
|
|
3731
|
+
group: "Subagents",
|
|
3732
|
+
label: "LSP in Subagents",
|
|
3733
|
+
description:
|
|
3734
|
+
"Allow subagents spawned via the task tool to use the lsp tool. Off by default to keep subagents cheap; enable when LSP-aware delegation is worth the extra tokens.",
|
|
3735
|
+
},
|
|
3736
|
+
},
|
|
3737
|
+
|
|
3738
|
+
"task.maxRecursionDepth": {
|
|
3739
|
+
type: "number",
|
|
3740
|
+
default: 2,
|
|
3741
|
+
ui: {
|
|
3742
|
+
tab: "tasks",
|
|
3743
|
+
group: "Subagents",
|
|
3744
|
+
label: "Max Task Recursion",
|
|
3745
|
+
description: "How many levels deep subagents can spawn their own subagents",
|
|
3746
|
+
options: [
|
|
3747
|
+
{ value: "-1", label: "Unlimited" },
|
|
3748
|
+
{ value: "0", label: "None" },
|
|
3749
|
+
{ value: "1", label: "Single" },
|
|
3750
|
+
{ value: "2", label: "Double" },
|
|
3751
|
+
{ value: "3", label: "Triple" },
|
|
3752
|
+
],
|
|
3753
|
+
},
|
|
3754
|
+
},
|
|
3755
|
+
|
|
3756
|
+
"task.maxRuntimeMs": {
|
|
3757
|
+
type: "number",
|
|
3758
|
+
default: 0,
|
|
3759
|
+
ui: {
|
|
3760
|
+
tab: "tasks",
|
|
3761
|
+
group: "Subagents",
|
|
3762
|
+
label: "Max Subagent Runtime",
|
|
3763
|
+
description:
|
|
3764
|
+
"Hard wall-clock limit per subagent (ms). 0 disables it. Defense-in-depth against provider-side stream hangs that escape the inference-layer watchdog; triggers a normal subagent abort with a 'timed out' reason.",
|
|
3765
|
+
options: [
|
|
3766
|
+
{ value: "0", label: "Unlimited", description: "Default" },
|
|
3767
|
+
{ value: "300000", label: "5 minutes" },
|
|
3768
|
+
{ value: "900000", label: "15 minutes" },
|
|
3769
|
+
{ value: "1800000", label: "30 minutes" },
|
|
3770
|
+
{ value: "3600000", label: "1 hour" },
|
|
3771
|
+
],
|
|
3772
|
+
},
|
|
3773
|
+
},
|
|
3774
|
+
|
|
3775
|
+
"task.agentIdleTtlMs": {
|
|
3776
|
+
type: "number",
|
|
3777
|
+
default: 420_000,
|
|
3778
|
+
ui: {
|
|
3779
|
+
tab: "tasks",
|
|
3780
|
+
group: "Subagents",
|
|
3781
|
+
label: "Agent Idle TTL",
|
|
3782
|
+
description:
|
|
3783
|
+
"How long an idle subagent stays live in memory before being parked to disk (ms). Parked agents are revived automatically when messaged or resumed. 0 keeps idle agents live until exit.",
|
|
3784
|
+
},
|
|
3785
|
+
},
|
|
3786
|
+
|
|
3787
|
+
"task.softRequestBudget": {
|
|
3788
|
+
type: "number",
|
|
3789
|
+
default: 90,
|
|
3790
|
+
ui: {
|
|
3791
|
+
tab: "tasks",
|
|
3792
|
+
group: "Subagents",
|
|
3793
|
+
label: "Soft Subagent Request Budget",
|
|
3794
|
+
description:
|
|
3795
|
+
"Soft per-subagent request budget (assistant requests per run). Crossing it injects one steering notice asking the subagent to wrap up; at 1.5x the budget the run is aborted gracefully, salvaging partial output. 0 disables the guard. Bundled explore/quick_task agents use a lower built-in budget.",
|
|
3796
|
+
options: [
|
|
3797
|
+
{ value: "0", label: "Disabled" },
|
|
3798
|
+
{ value: "40", label: "40 requests" },
|
|
3799
|
+
{ value: "90", label: "90 requests", description: "Default" },
|
|
3800
|
+
{ value: "150", label: "150 requests" },
|
|
3801
|
+
],
|
|
3802
|
+
},
|
|
3803
|
+
},
|
|
3804
|
+
|
|
3805
|
+
"task.disabledAgents": {
|
|
3806
|
+
type: "array",
|
|
3807
|
+
default: [] as string[],
|
|
3808
|
+
},
|
|
3809
|
+
|
|
3810
|
+
"task.agentModelOverrides": {
|
|
3811
|
+
type: "record",
|
|
3812
|
+
default: {} as Record<string, string>,
|
|
3813
|
+
},
|
|
3814
|
+
|
|
3815
|
+
"tasks.todoClearDelay": {
|
|
3816
|
+
type: "number",
|
|
3817
|
+
default: 60,
|
|
3818
|
+
ui: {
|
|
3819
|
+
tab: "tools",
|
|
3820
|
+
group: "Todos",
|
|
3821
|
+
label: "Todo Auto-Clear Delay",
|
|
3822
|
+
description: "Delay before completed or abandoned todos are removed from the todo widget",
|
|
3823
|
+
options: [
|
|
3824
|
+
{ value: "0", label: "Instant" },
|
|
3825
|
+
{ value: "60", label: "1 minute", description: "Default" },
|
|
3826
|
+
{ value: "300", label: "5 minutes" },
|
|
3827
|
+
{ value: "900", label: "15 minutes" },
|
|
3828
|
+
{ value: "1800", label: "30 minutes" },
|
|
3829
|
+
{ value: "3600", label: "1 hour" },
|
|
3830
|
+
{ value: "-1", label: "Never" },
|
|
3831
|
+
],
|
|
3832
|
+
},
|
|
3833
|
+
},
|
|
3834
|
+
|
|
3835
|
+
"task.showResolvedModelBadge": {
|
|
3836
|
+
type: "boolean",
|
|
3837
|
+
default: false,
|
|
3838
|
+
ui: {
|
|
3839
|
+
tab: "appearance",
|
|
3840
|
+
group: "Display",
|
|
3841
|
+
label: "Show Resolved Model Badge",
|
|
3842
|
+
description: "Display the actual model ID used by each subagent in the task widget status line",
|
|
3843
|
+
},
|
|
3844
|
+
},
|
|
3845
|
+
|
|
3846
|
+
// Skills
|
|
3847
|
+
"skills.enabled": { type: "boolean", default: true },
|
|
3848
|
+
|
|
3849
|
+
"skills.enableSkillCommands": {
|
|
3850
|
+
type: "boolean",
|
|
3851
|
+
default: true,
|
|
3852
|
+
ui: {
|
|
3853
|
+
tab: "tasks",
|
|
3854
|
+
group: "Commands & Skills",
|
|
3855
|
+
label: "Skill Commands",
|
|
3856
|
+
description: "Register skills as /skill:name commands",
|
|
3857
|
+
},
|
|
3858
|
+
},
|
|
3859
|
+
|
|
3860
|
+
"skills.enableCodexUser": { type: "boolean", default: true },
|
|
3861
|
+
|
|
3862
|
+
"skills.enableClaudeUser": { type: "boolean", default: true },
|
|
3863
|
+
|
|
3864
|
+
"skills.enableClaudeProject": { type: "boolean", default: true },
|
|
3865
|
+
|
|
3866
|
+
"skills.enablePiUser": { type: "boolean", default: true },
|
|
3867
|
+
|
|
3868
|
+
"skills.enablePiProject": { type: "boolean", default: true },
|
|
3869
|
+
|
|
3870
|
+
"skills.enableAgentsUser": { type: "boolean", default: true },
|
|
3871
|
+
|
|
3872
|
+
"skills.enableAgentsProject": { type: "boolean", default: true },
|
|
3873
|
+
|
|
3874
|
+
"skills.customDirectories": { type: "array", default: [] as string[] },
|
|
3875
|
+
|
|
3876
|
+
"skills.ignoredSkills": { type: "array", default: [] as string[] },
|
|
3877
|
+
|
|
3878
|
+
"skills.includeSkills": { type: "array", default: [] as string[] },
|
|
3879
|
+
|
|
3880
|
+
// Commands
|
|
3881
|
+
"commands.enableClaudeUser": {
|
|
3882
|
+
type: "boolean",
|
|
3883
|
+
default: true,
|
|
3884
|
+
ui: {
|
|
3885
|
+
tab: "tasks",
|
|
3886
|
+
group: "Commands & Skills",
|
|
3887
|
+
label: "Claude User Commands",
|
|
3888
|
+
description: "Load commands from ~/.claude/commands/",
|
|
3889
|
+
},
|
|
3890
|
+
},
|
|
3891
|
+
|
|
3892
|
+
"commands.enableClaudeProject": {
|
|
3893
|
+
type: "boolean",
|
|
3894
|
+
default: true,
|
|
3895
|
+
ui: {
|
|
3896
|
+
tab: "tasks",
|
|
3897
|
+
group: "Commands & Skills",
|
|
3898
|
+
label: "Claude Project Commands",
|
|
3899
|
+
description: "Load commands from .claude/commands/",
|
|
3900
|
+
},
|
|
3901
|
+
},
|
|
3902
|
+
|
|
3903
|
+
"commands.enableOpencodeUser": {
|
|
3904
|
+
type: "boolean",
|
|
3905
|
+
default: true,
|
|
3906
|
+
ui: {
|
|
3907
|
+
tab: "tasks",
|
|
3908
|
+
group: "Commands & Skills",
|
|
3909
|
+
label: "OpenCode User Commands",
|
|
3910
|
+
description: "Load commands from ~/.config/opencode/commands/",
|
|
3911
|
+
},
|
|
3912
|
+
},
|
|
3913
|
+
|
|
3914
|
+
"commands.enableOpencodeProject": {
|
|
3915
|
+
type: "boolean",
|
|
3916
|
+
default: true,
|
|
3917
|
+
ui: {
|
|
3918
|
+
tab: "tasks",
|
|
3919
|
+
group: "Commands & Skills",
|
|
3920
|
+
label: "OpenCode Project Commands",
|
|
3921
|
+
description: "Load commands from .opencode/commands/",
|
|
3922
|
+
},
|
|
3923
|
+
},
|
|
3924
|
+
|
|
3925
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
3926
|
+
// Providers
|
|
3927
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
3928
|
+
|
|
3929
|
+
// Secret handling
|
|
3930
|
+
"secrets.enabled": {
|
|
3931
|
+
type: "boolean",
|
|
3932
|
+
default: false,
|
|
3933
|
+
ui: {
|
|
3934
|
+
tab: "providers",
|
|
3935
|
+
group: "Privacy",
|
|
3936
|
+
label: "Hide Secrets",
|
|
3937
|
+
description: "Obfuscate secrets before sending to AI providers",
|
|
3938
|
+
},
|
|
3939
|
+
},
|
|
3940
|
+
|
|
3941
|
+
// Provider selection
|
|
3942
|
+
"providers.webSearch": {
|
|
3943
|
+
type: "enum",
|
|
3944
|
+
values: SEARCH_PROVIDER_PREFERENCES,
|
|
3945
|
+
default: "auto",
|
|
3946
|
+
ui: {
|
|
3947
|
+
tab: "providers",
|
|
3948
|
+
group: "Services",
|
|
3949
|
+
label: "Web Search Provider",
|
|
3950
|
+
description: "Preferred provider for the web_search tool",
|
|
3951
|
+
options: SEARCH_PROVIDER_OPTIONS,
|
|
3952
|
+
},
|
|
3953
|
+
},
|
|
3954
|
+
"providers.webSearchExclude": {
|
|
3955
|
+
type: "array",
|
|
3956
|
+
default: [] as SearchProviderId[],
|
|
3957
|
+
ui: {
|
|
3958
|
+
tab: "providers",
|
|
3959
|
+
group: "Services",
|
|
3960
|
+
label: "Excluded Web Search Providers",
|
|
3961
|
+
description: "Providers that web_search should never use, even as fallbacks",
|
|
3962
|
+
},
|
|
3963
|
+
},
|
|
3964
|
+
"providers.antigravityEndpoint": {
|
|
3965
|
+
type: "enum",
|
|
3966
|
+
values: ["auto", "production", "sandbox"] as const,
|
|
3967
|
+
default: "auto",
|
|
3968
|
+
ui: {
|
|
3969
|
+
tab: "providers",
|
|
3970
|
+
group: "Services",
|
|
3971
|
+
label: "Antigravity Endpoint Mode",
|
|
3972
|
+
description: "Endpoint routing strategy for google-antigravity providers (chat, search, image, discovery)",
|
|
3973
|
+
options: [
|
|
3974
|
+
{
|
|
3975
|
+
value: "auto",
|
|
3976
|
+
label: "Auto",
|
|
3977
|
+
description: "Try production endpoint, fail over to sandbox on 5xx/429",
|
|
3978
|
+
},
|
|
3979
|
+
{
|
|
3980
|
+
value: "production",
|
|
3981
|
+
label: "Production Only",
|
|
3982
|
+
description: "Force production endpoint only",
|
|
3983
|
+
},
|
|
3984
|
+
{
|
|
3985
|
+
value: "sandbox",
|
|
3986
|
+
label: "Sandbox Only",
|
|
3987
|
+
description: "Force sandbox endpoint only",
|
|
3988
|
+
},
|
|
3989
|
+
],
|
|
3990
|
+
},
|
|
3991
|
+
},
|
|
3992
|
+
"providers.image": {
|
|
3993
|
+
type: "enum",
|
|
3994
|
+
values: ["auto", "openai", "antigravity", "xai", "gemini", "openrouter"] as const,
|
|
3995
|
+
default: "auto",
|
|
3996
|
+
ui: {
|
|
3997
|
+
tab: "providers",
|
|
3998
|
+
group: "Services",
|
|
3999
|
+
label: "Image Provider",
|
|
4000
|
+
description: "Preferred provider for image generation",
|
|
4001
|
+
options: [
|
|
4002
|
+
{
|
|
4003
|
+
value: "auto",
|
|
4004
|
+
label: "Auto",
|
|
4005
|
+
description: "Priority: GPT model image tool > Antigravity > xAI > OpenRouter > Gemini",
|
|
4006
|
+
},
|
|
4007
|
+
{ value: "openai", label: "OpenAI", description: "Uses the active GPT Responses/Codex model" },
|
|
4008
|
+
{
|
|
4009
|
+
value: "antigravity",
|
|
4010
|
+
label: "Antigravity",
|
|
4011
|
+
description: "Requires google-antigravity OAuth",
|
|
4012
|
+
},
|
|
4013
|
+
{
|
|
4014
|
+
value: "xai",
|
|
4015
|
+
label: "xAI Grok Imagine",
|
|
4016
|
+
description: "Requires xAI Grok OAuth or XAI_API_KEY",
|
|
4017
|
+
},
|
|
4018
|
+
{ value: "gemini", label: "Gemini", description: "Requires GEMINI_API_KEY" },
|
|
4019
|
+
{ value: "openrouter", label: "OpenRouter", description: "Requires OPENROUTER_API_KEY" },
|
|
4020
|
+
],
|
|
4021
|
+
},
|
|
4022
|
+
},
|
|
4023
|
+
"providers.tts": {
|
|
4024
|
+
type: "enum",
|
|
4025
|
+
values: ["auto", "local", "xai"] as const,
|
|
4026
|
+
default: "auto",
|
|
4027
|
+
ui: {
|
|
4028
|
+
tab: "providers",
|
|
4029
|
+
group: "Services",
|
|
4030
|
+
label: "Text-to-Speech Provider",
|
|
4031
|
+
description: "Backend for the tts tool: local on-device neural TTS (Kokoro-82M) or xAI Grok Voice",
|
|
4032
|
+
options: [
|
|
4033
|
+
{
|
|
4034
|
+
value: "auto",
|
|
4035
|
+
label: "Auto",
|
|
4036
|
+
description: "Prefer local on-device TTS; route .mp3 output to xAI when credentials exist",
|
|
4037
|
+
},
|
|
4038
|
+
{ value: "local", label: "Local", description: "On-device neural TTS (Kokoro-82M); output is WAV/PCM16" },
|
|
4039
|
+
{
|
|
4040
|
+
value: "xai",
|
|
4041
|
+
label: "xAI Grok Voice",
|
|
4042
|
+
description: "Requires xAI Grok OAuth or XAI_API_KEY; MP3 or WAV",
|
|
4043
|
+
},
|
|
4044
|
+
],
|
|
4045
|
+
},
|
|
4046
|
+
},
|
|
4047
|
+
"tts.localModel": {
|
|
4048
|
+
type: "enum",
|
|
4049
|
+
values: TTS_LOCAL_MODEL_VALUES,
|
|
4050
|
+
default: DEFAULT_TTS_LOCAL_MODEL_KEY,
|
|
4051
|
+
ui: {
|
|
4052
|
+
tab: "providers",
|
|
4053
|
+
group: "Services",
|
|
4054
|
+
label: "Local TTS Model",
|
|
4055
|
+
description: "On-device neural TTS model (Kokoro-82M) used by the local TTS backend",
|
|
4056
|
+
options: TTS_LOCAL_MODEL_OPTIONS,
|
|
4057
|
+
},
|
|
4058
|
+
},
|
|
4059
|
+
"tts.localVoice": {
|
|
4060
|
+
type: "enum",
|
|
4061
|
+
values: TTS_LOCAL_VOICE_VALUES,
|
|
4062
|
+
default: DEFAULT_TTS_VOICE,
|
|
4063
|
+
ui: {
|
|
4064
|
+
tab: "providers",
|
|
4065
|
+
group: "Services",
|
|
4066
|
+
label: "Local TTS Voice",
|
|
4067
|
+
description: "Kokoro voice used by the local TTS backend (American/British, female/male)",
|
|
4068
|
+
options: TTS_LOCAL_VOICE_OPTIONS,
|
|
4069
|
+
},
|
|
4070
|
+
},
|
|
4071
|
+
"speech.enabled": {
|
|
4072
|
+
type: "boolean",
|
|
4073
|
+
default: false,
|
|
4074
|
+
ui: {
|
|
4075
|
+
tab: "providers",
|
|
4076
|
+
group: "Services",
|
|
4077
|
+
label: "Speech Vocalization",
|
|
4078
|
+
description: "Speak the assistant's output aloud through the speakers as it streams",
|
|
4079
|
+
},
|
|
4080
|
+
},
|
|
4081
|
+
"speech.mode": {
|
|
4082
|
+
type: "enum",
|
|
4083
|
+
values: ["all", "assistant", "yield"] as const,
|
|
4084
|
+
default: "assistant",
|
|
4085
|
+
ui: {
|
|
4086
|
+
tab: "providers",
|
|
4087
|
+
group: "Services",
|
|
4088
|
+
label: "Speech Vocalization Mode",
|
|
4089
|
+
description:
|
|
4090
|
+
"What to speak: all = assistant messages + thinking; assistant = messages only; yield = only the final message at turn end",
|
|
4091
|
+
options: [
|
|
4092
|
+
{ value: "all", label: "All (messages + thinking)" },
|
|
4093
|
+
{ value: "assistant", label: "Assistant messages" },
|
|
4094
|
+
{ value: "yield", label: "Final message only" },
|
|
4095
|
+
],
|
|
4096
|
+
},
|
|
4097
|
+
},
|
|
4098
|
+
"speech.voice": {
|
|
4099
|
+
type: "enum",
|
|
4100
|
+
values: TTS_LOCAL_VOICE_VALUES,
|
|
4101
|
+
default: DEFAULT_TTS_VOICE,
|
|
4102
|
+
ui: {
|
|
4103
|
+
tab: "providers",
|
|
4104
|
+
group: "Services",
|
|
4105
|
+
label: "Speech Vocalization Voice",
|
|
4106
|
+
description: "Kokoro voice used when speaking the assistant's output aloud",
|
|
4107
|
+
options: TTS_LOCAL_VOICE_OPTIONS,
|
|
4108
|
+
},
|
|
4109
|
+
},
|
|
4110
|
+
"providers.tinyModel": {
|
|
4111
|
+
type: "enum",
|
|
4112
|
+
values: TINY_TITLE_MODEL_VALUES,
|
|
4113
|
+
default: ONLINE_TINY_TITLE_MODEL_KEY,
|
|
4114
|
+
ui: {
|
|
4115
|
+
tab: "providers",
|
|
4116
|
+
group: "Tiny Model",
|
|
4117
|
+
label: "Tiny Model",
|
|
4118
|
+
description: "Session-title model: online pi/smol by default, or a local on-device model",
|
|
4119
|
+
options: TINY_TITLE_MODEL_OPTIONS,
|
|
4120
|
+
},
|
|
4121
|
+
},
|
|
4122
|
+
"providers.tinyModelDevice": {
|
|
4123
|
+
type: "enum",
|
|
4124
|
+
values: TINY_MODEL_DEVICE_SETTING_VALUES,
|
|
4125
|
+
default: TINY_MODEL_DEVICE_DEFAULT,
|
|
4126
|
+
ui: {
|
|
4127
|
+
tab: "providers",
|
|
4128
|
+
group: "Tiny Model",
|
|
4129
|
+
label: "Tiny Model Device",
|
|
4130
|
+
description:
|
|
4131
|
+
"ONNX execution provider for local tiny models (titles + memory). Default uses CPU-only inference. The PI_TINY_DEVICE env var overrides this.",
|
|
4132
|
+
options: TINY_MODEL_DEVICE_SETTING_OPTIONS,
|
|
4133
|
+
},
|
|
4134
|
+
},
|
|
4135
|
+
"providers.tinyModelDtype": {
|
|
4136
|
+
type: "enum",
|
|
4137
|
+
values: TINY_MODEL_DTYPE_SETTING_VALUES,
|
|
4138
|
+
default: TINY_MODEL_DTYPE_DEFAULT,
|
|
4139
|
+
ui: {
|
|
4140
|
+
tab: "providers",
|
|
4141
|
+
group: "Tiny Model",
|
|
4142
|
+
label: "Tiny Model Precision",
|
|
4143
|
+
description:
|
|
4144
|
+
"ONNX quantization/precision for local tiny models. Default uses each model's shipped dtype (q4); lower precision is faster, higher is more faithful. The PI_TINY_DTYPE env var overrides this.",
|
|
4145
|
+
options: TINY_MODEL_DTYPE_SETTING_OPTIONS,
|
|
4146
|
+
},
|
|
4147
|
+
},
|
|
4148
|
+
"providers.memoryModel": {
|
|
4149
|
+
type: "enum",
|
|
4150
|
+
values: TINY_MEMORY_MODEL_VALUES,
|
|
4151
|
+
default: ONLINE_MEMORY_MODEL_KEY,
|
|
4152
|
+
ui: {
|
|
4153
|
+
tab: "memory",
|
|
4154
|
+
group: "General",
|
|
4155
|
+
label: "Memory Model",
|
|
4156
|
+
description:
|
|
4157
|
+
"Mnemopi LLM for fact extraction + consolidation: online (smol/remote) by default, or a local on-device model",
|
|
4158
|
+
condition: "mnemopiActive",
|
|
4159
|
+
options: TINY_MEMORY_MODEL_OPTIONS,
|
|
4160
|
+
},
|
|
4161
|
+
},
|
|
4162
|
+
|
|
4163
|
+
"providers.autoThinkingModel": {
|
|
4164
|
+
type: "enum",
|
|
4165
|
+
values: AUTO_THINKING_MODEL_VALUES,
|
|
4166
|
+
default: ONLINE_AUTO_THINKING_MODEL_KEY,
|
|
4167
|
+
ui: {
|
|
4168
|
+
tab: "model",
|
|
4169
|
+
group: "Thinking",
|
|
4170
|
+
label: "Auto Thinking Model",
|
|
4171
|
+
description:
|
|
4172
|
+
"Difficulty classifier for the `auto` thinking level: online smol by default, or a local on-device model",
|
|
4173
|
+
condition: "autoThinkingActive",
|
|
4174
|
+
options: AUTO_THINKING_MODEL_OPTIONS,
|
|
4175
|
+
},
|
|
4176
|
+
},
|
|
4177
|
+
"features.unexpectedStopDetection": {
|
|
4178
|
+
type: "boolean",
|
|
4179
|
+
default: false,
|
|
4180
|
+
ui: {
|
|
4181
|
+
tab: "interaction",
|
|
4182
|
+
group: "Agent",
|
|
4183
|
+
label: "Detect unexpected stops",
|
|
4184
|
+
description:
|
|
4185
|
+
"Use a small model to detect when the assistant says it will continue but stops without tool calls; automatically prompt it to continue.",
|
|
4186
|
+
},
|
|
4187
|
+
},
|
|
4188
|
+
"providers.unexpectedStopModel": {
|
|
4189
|
+
type: "enum",
|
|
4190
|
+
values: TINY_MEMORY_MODEL_VALUES,
|
|
4191
|
+
default: ONLINE_MEMORY_MODEL_KEY,
|
|
4192
|
+
ui: {
|
|
4193
|
+
tab: "providers",
|
|
4194
|
+
group: "Tiny Model",
|
|
4195
|
+
label: "Unexpected Stop Model",
|
|
4196
|
+
description: "Classifier for unexpected-stop detection: online smol by default, or a local on-device model.",
|
|
4197
|
+
condition: "unexpectedStopDetection",
|
|
4198
|
+
options: TINY_MEMORY_MODEL_OPTIONS,
|
|
4199
|
+
},
|
|
4200
|
+
},
|
|
4201
|
+
|
|
4202
|
+
"providers.kimiApiFormat": {
|
|
4203
|
+
type: "enum",
|
|
4204
|
+
values: ["openai", "anthropic"] as const,
|
|
4205
|
+
default: "anthropic",
|
|
4206
|
+
ui: {
|
|
4207
|
+
tab: "providers",
|
|
4208
|
+
group: "Protocol",
|
|
4209
|
+
label: "Kimi API Format",
|
|
4210
|
+
description: "API format for Kimi Code provider",
|
|
4211
|
+
options: [
|
|
4212
|
+
{ value: "openai", label: "OpenAI", description: "api.kimi.com" },
|
|
4213
|
+
{ value: "anthropic", label: "Anthropic", description: "api.moonshot.ai" },
|
|
4214
|
+
],
|
|
4215
|
+
},
|
|
4216
|
+
},
|
|
4217
|
+
|
|
4218
|
+
"providers.openaiWebsockets": {
|
|
4219
|
+
type: "enum",
|
|
4220
|
+
values: ["auto", "off", "on"] as const,
|
|
4221
|
+
default: "auto",
|
|
4222
|
+
ui: {
|
|
4223
|
+
tab: "providers",
|
|
4224
|
+
group: "Protocol",
|
|
4225
|
+
label: "OpenAI WebSockets",
|
|
4226
|
+
description: "Websocket policy for OpenAI Codex models (auto uses model defaults, on forces, off disables)",
|
|
4227
|
+
options: [
|
|
4228
|
+
{ value: "auto", label: "Auto", description: "Use model/provider default websocket behavior" },
|
|
4229
|
+
{ value: "off", label: "Off", description: "Disable websockets for OpenAI Codex models" },
|
|
4230
|
+
{ value: "on", label: "On", description: "Force websockets for OpenAI Codex models" },
|
|
4231
|
+
],
|
|
4232
|
+
},
|
|
4233
|
+
},
|
|
4234
|
+
|
|
4235
|
+
"providers.openrouterVariant": {
|
|
4236
|
+
type: "enum",
|
|
4237
|
+
values: ["default", "nitro", "floor", "online", "exacto"] as const,
|
|
4238
|
+
default: "default",
|
|
4239
|
+
ui: {
|
|
4240
|
+
tab: "providers",
|
|
4241
|
+
group: "Protocol",
|
|
4242
|
+
label: "OpenRouter Routing",
|
|
4243
|
+
description:
|
|
4244
|
+
"Default routing-variant suffix appended to OpenRouter model IDs (overridden when the selector already names a variant)",
|
|
4245
|
+
options: [
|
|
4246
|
+
{ value: "default", label: "Default", description: "No suffix; use OpenRouter's default routing" },
|
|
4247
|
+
{ value: "nitro", label: ":nitro", description: "Prioritize throughput / lowest latency" },
|
|
4248
|
+
{ value: "floor", label: ":floor", description: "Prioritize cheapest available provider" },
|
|
4249
|
+
{ value: "online", label: ":online", description: "Enable OpenRouter's web-search plugin" },
|
|
4250
|
+
{
|
|
4251
|
+
value: "exacto",
|
|
4252
|
+
label: ":exacto",
|
|
4253
|
+
description: "Cherry-picked high-quality providers (only defined for select models)",
|
|
4254
|
+
},
|
|
4255
|
+
],
|
|
4256
|
+
},
|
|
4257
|
+
},
|
|
4258
|
+
"providers.fetch": {
|
|
4259
|
+
type: "enum",
|
|
4260
|
+
values: ["auto", "native", "trafilatura", "lynx", "parallel", "jina"] as const,
|
|
4261
|
+
default: "auto",
|
|
4262
|
+
ui: {
|
|
4263
|
+
tab: "providers",
|
|
4264
|
+
group: "Services",
|
|
4265
|
+
label: "Fetch Provider",
|
|
4266
|
+
description: "Reader backend priority for the fetch/read URL tool",
|
|
4267
|
+
options: [
|
|
4268
|
+
{
|
|
4269
|
+
value: "auto",
|
|
4270
|
+
label: "Auto",
|
|
4271
|
+
description: "Priority: native > trafilatura > lynx > parallel > jina",
|
|
4272
|
+
},
|
|
4273
|
+
{ value: "native", label: "Native", description: "In-process HTML→Markdown converter (always available)" },
|
|
4274
|
+
{ value: "trafilatura", label: "Trafilatura", description: "Auto-installs via uv/pip" },
|
|
4275
|
+
{ value: "lynx", label: "Lynx", description: "Requires lynx system package" },
|
|
4276
|
+
{ value: "parallel", label: "Parallel", description: "Requires PARALLEL_API_KEY" },
|
|
4277
|
+
{ value: "jina", label: "Jina", description: "Uses r.jina.ai reader (JINA_API_KEY optional)" },
|
|
4278
|
+
],
|
|
4279
|
+
},
|
|
4280
|
+
},
|
|
4281
|
+
// Codex saved rate-limit resets (auto-redeem)
|
|
4282
|
+
"codexResets.autoRedeem": {
|
|
4283
|
+
type: "enum",
|
|
4284
|
+
values: ["unset", "yes", "no"] as const,
|
|
4285
|
+
default: "unset" as const,
|
|
4286
|
+
ui: {
|
|
4287
|
+
tab: "providers",
|
|
4288
|
+
group: "Services",
|
|
4289
|
+
label: "Codex Auto-Redeem Saved Resets",
|
|
4290
|
+
description:
|
|
4291
|
+
"When a turn is blocked by the Codex weekly limit on the active account and no other account is available, run the conservative saved-reset check. unset asks before spending the first eligible reset, yes spends eligible resets without prompting, and no disables the check entirely. Requires retries enabled.",
|
|
4292
|
+
options: [
|
|
4293
|
+
{
|
|
4294
|
+
value: "unset",
|
|
4295
|
+
label: "Unset",
|
|
4296
|
+
description: "Check eligibility, then ask before spending the first saved reset.",
|
|
4297
|
+
},
|
|
4298
|
+
{ value: "yes", label: "Yes", description: "Spend eligible saved resets without prompting." },
|
|
4299
|
+
{ value: "no", label: "No", description: "Do not run the saved-reset auto-redeem check." },
|
|
4300
|
+
],
|
|
4301
|
+
},
|
|
4302
|
+
},
|
|
4303
|
+
"codexResets.minBlockedMinutes": {
|
|
4304
|
+
type: "number",
|
|
4305
|
+
default: 60,
|
|
4306
|
+
ui: {
|
|
4307
|
+
tab: "providers",
|
|
4308
|
+
group: "Services",
|
|
4309
|
+
label: "Codex Auto-Redeem Min Block",
|
|
4310
|
+
description:
|
|
4311
|
+
"Only auto-redeem when the natural weekly reset is at least this many minutes away (don't spend a ~30-day credit to save a short wait).",
|
|
4312
|
+
},
|
|
4313
|
+
},
|
|
4314
|
+
"codexResets.keepCredits": {
|
|
4315
|
+
type: "number",
|
|
4316
|
+
default: 0,
|
|
4317
|
+
ui: {
|
|
4318
|
+
tab: "providers",
|
|
4319
|
+
group: "Services",
|
|
4320
|
+
label: "Codex Auto-Redeem Reserve",
|
|
4321
|
+
description: "Never auto-spend below this many saved resets (0 = the last credit may be spent automatically).",
|
|
4322
|
+
},
|
|
4323
|
+
},
|
|
4324
|
+
"provider.appendOnlyContext": {
|
|
4325
|
+
type: "enum",
|
|
4326
|
+
values: ["auto", "on", "off"] as const,
|
|
4327
|
+
default: "auto",
|
|
4328
|
+
ui: {
|
|
4329
|
+
tab: "providers",
|
|
4330
|
+
group: "Protocol",
|
|
4331
|
+
label: "Append-Only Context",
|
|
4332
|
+
description:
|
|
4333
|
+
"Cache system prompt + tool specs and keep an append-only message log so provider prefix caches (DeepSeek, Xiaomi/SGLang, Anthropic) hit at maximum rate. Auto enables for known prefix-cache providers.",
|
|
4334
|
+
options: [
|
|
4335
|
+
{ value: "auto", label: "Auto", description: "Enable for known prefix-cache providers (recommended)" },
|
|
4336
|
+
{ value: "on", label: "On", description: "Always enable append-only context" },
|
|
4337
|
+
{ value: "off", label: "Off", description: "Disable append-only context" },
|
|
4338
|
+
],
|
|
4339
|
+
},
|
|
4340
|
+
},
|
|
4341
|
+
|
|
4342
|
+
// Exa
|
|
4343
|
+
"exa.enabled": {
|
|
4344
|
+
type: "boolean",
|
|
4345
|
+
default: true,
|
|
4346
|
+
ui: { tab: "providers", group: "Services", label: "Exa", description: "Master toggle for all Exa search tools" },
|
|
4347
|
+
},
|
|
4348
|
+
|
|
4349
|
+
"exa.enableSearch": {
|
|
4350
|
+
type: "boolean",
|
|
4351
|
+
default: true,
|
|
4352
|
+
ui: {
|
|
4353
|
+
tab: "providers",
|
|
4354
|
+
group: "Services",
|
|
4355
|
+
label: "Exa Search",
|
|
4356
|
+
description: "Enable Exa basic search, deep search, code search, and crawl tools",
|
|
4357
|
+
},
|
|
4358
|
+
},
|
|
4359
|
+
|
|
4360
|
+
"exa.enableResearcher": {
|
|
4361
|
+
type: "boolean",
|
|
4362
|
+
default: false,
|
|
4363
|
+
ui: {
|
|
4364
|
+
tab: "providers",
|
|
4365
|
+
group: "Services",
|
|
4366
|
+
label: "Exa Researcher",
|
|
4367
|
+
description: "Enable the Exa researcher tool for AI-powered deep research",
|
|
4368
|
+
},
|
|
4369
|
+
},
|
|
4370
|
+
|
|
4371
|
+
"exa.enableWebsets": {
|
|
4372
|
+
type: "boolean",
|
|
4373
|
+
default: false,
|
|
4374
|
+
ui: {
|
|
4375
|
+
tab: "providers",
|
|
4376
|
+
group: "Services",
|
|
4377
|
+
label: "Exa Websets",
|
|
4378
|
+
description: "Enable Exa webset management and enrichment tools",
|
|
4379
|
+
},
|
|
4380
|
+
},
|
|
4381
|
+
|
|
4382
|
+
// SearXNG
|
|
4383
|
+
"searxng.endpoint": {
|
|
4384
|
+
type: "string",
|
|
4385
|
+
default: undefined,
|
|
4386
|
+
ui: {
|
|
4387
|
+
tab: "providers",
|
|
4388
|
+
group: "Services",
|
|
4389
|
+
label: "SearXNG Endpoint",
|
|
4390
|
+
description: "Base URL of a self-hosted SearXNG instance used for web search",
|
|
4391
|
+
},
|
|
4392
|
+
},
|
|
4393
|
+
|
|
4394
|
+
"searxng.token": {
|
|
4395
|
+
type: "string",
|
|
4396
|
+
default: undefined,
|
|
4397
|
+
},
|
|
4398
|
+
|
|
4399
|
+
"searxng.basicUsername": {
|
|
4400
|
+
type: "string",
|
|
4401
|
+
default: undefined,
|
|
4402
|
+
},
|
|
4403
|
+
|
|
4404
|
+
"searxng.basicPassword": {
|
|
4405
|
+
type: "string",
|
|
4406
|
+
default: undefined,
|
|
4407
|
+
},
|
|
4408
|
+
|
|
4409
|
+
"searxng.categories": {
|
|
4410
|
+
type: "string",
|
|
4411
|
+
default: undefined,
|
|
4412
|
+
},
|
|
4413
|
+
|
|
4414
|
+
"searxng.language": {
|
|
4415
|
+
type: "string",
|
|
4416
|
+
default: undefined,
|
|
4417
|
+
},
|
|
4418
|
+
|
|
4419
|
+
"commit.mapReduceEnabled": { type: "boolean", default: true },
|
|
4420
|
+
|
|
4421
|
+
"commit.mapReduceMinFiles": { type: "number", default: 4 },
|
|
4422
|
+
|
|
4423
|
+
"commit.mapReduceMaxFileTokens": { type: "number", default: 50000 },
|
|
4424
|
+
|
|
4425
|
+
"commit.mapReduceTimeoutMs": { type: "number", default: 120000 },
|
|
4426
|
+
|
|
4427
|
+
"commit.mapReduceMaxConcurrency": { type: "number", default: 5 },
|
|
4428
|
+
|
|
4429
|
+
"commit.changelogMaxDiffChars": { type: "number", default: 120000 },
|
|
4430
|
+
|
|
4431
|
+
"dev.autoqa": {
|
|
4432
|
+
type: "boolean",
|
|
4433
|
+
default: false,
|
|
4434
|
+
ui: {
|
|
4435
|
+
tab: "tools",
|
|
4436
|
+
group: "Developer",
|
|
4437
|
+
label: "Auto QA",
|
|
4438
|
+
description: "Enable automated tool issue reporting (report_tool_issue) for all agents",
|
|
4439
|
+
},
|
|
4440
|
+
},
|
|
4441
|
+
|
|
4442
|
+
"dev.autoqaPush.endpoint": {
|
|
4443
|
+
type: "string",
|
|
4444
|
+
default: "https://qa.omp.sh/v1/grievances" as const,
|
|
4445
|
+
ui: {
|
|
4446
|
+
tab: "tools",
|
|
4447
|
+
group: "Developer",
|
|
4448
|
+
label: "Auto QA Push Endpoint",
|
|
4449
|
+
description: "Full URL receiving Auto QA JSON reports (default https://qa.omp.sh/v1/grievances)",
|
|
4450
|
+
},
|
|
4451
|
+
},
|
|
4452
|
+
|
|
4453
|
+
"dev.autoqaPush.token": {
|
|
4454
|
+
type: "string",
|
|
4455
|
+
default: undefined,
|
|
4456
|
+
},
|
|
4457
|
+
|
|
4458
|
+
/**
|
|
4459
|
+
* User decision on sharing automatic `report_tool_issue` grievances.
|
|
4460
|
+
*
|
|
4461
|
+
* - `"unset"` — never asked; the first `report_tool_issue` invocation
|
|
4462
|
+
* pops a consent dialog and persists the answer here.
|
|
4463
|
+
* - `"granted"` — record and (when push is configured) ship grievances.
|
|
4464
|
+
* - `"denied"` — silently no-op every `report_tool_issue` call.
|
|
4465
|
+
*
|
|
4466
|
+
* Owned by `packages/coding-agent/src/tools/report-tool-issue.ts` via the
|
|
4467
|
+
* process-global consent handler registered by `InteractiveMode`.
|
|
4468
|
+
*/
|
|
4469
|
+
"dev.autoqa.consent": {
|
|
4470
|
+
type: "enum",
|
|
4471
|
+
values: ["unset", "granted", "denied"] as const,
|
|
4472
|
+
default: "unset" as const,
|
|
4473
|
+
},
|
|
4474
|
+
|
|
4475
|
+
"thinkingBudgets.minimal": { type: "number", default: 1024 },
|
|
4476
|
+
|
|
4477
|
+
"thinkingBudgets.low": { type: "number", default: 2048 },
|
|
4478
|
+
|
|
4479
|
+
"thinkingBudgets.medium": { type: "number", default: 8192 },
|
|
4480
|
+
|
|
4481
|
+
"thinkingBudgets.high": { type: "number", default: 16384 },
|
|
4482
|
+
|
|
4483
|
+
"thinkingBudgets.xhigh": { type: "number", default: 32768 },
|
|
4484
|
+
} as const;
|
|
4485
|
+
|
|
4486
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
4487
|
+
// Type Inference
|
|
4488
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
4489
|
+
|
|
4490
|
+
type Schema = typeof SETTINGS_SCHEMA;
|
|
4491
|
+
|
|
4492
|
+
/** All valid setting paths */
|
|
4493
|
+
export type SettingPath = keyof Schema;
|
|
4494
|
+
|
|
4495
|
+
/** Infer the value type for a setting path */
|
|
4496
|
+
export type SettingValue<P extends SettingPath> = Schema[P] extends { type: "boolean"; default: undefined }
|
|
4497
|
+
? boolean | undefined
|
|
4498
|
+
: Schema[P] extends { type: "boolean" }
|
|
4499
|
+
? boolean
|
|
4500
|
+
: Schema[P] extends { type: "string" }
|
|
4501
|
+
? string | undefined
|
|
4502
|
+
: Schema[P] extends { type: "number" }
|
|
4503
|
+
? number
|
|
4504
|
+
: Schema[P] extends { type: "enum"; values: infer V }
|
|
4505
|
+
? V extends readonly string[]
|
|
4506
|
+
? V[number]
|
|
4507
|
+
: never
|
|
4508
|
+
: Schema[P] extends { type: "array"; default: infer D }
|
|
4509
|
+
? D
|
|
4510
|
+
: Schema[P] extends { type: "record"; default: infer D }
|
|
4511
|
+
? D
|
|
4512
|
+
: never;
|
|
4513
|
+
|
|
4514
|
+
/** Get the default value for a setting path */
|
|
4515
|
+
export function getDefault<P extends SettingPath>(path: P): SettingValue<P> {
|
|
4516
|
+
return SETTINGS_SCHEMA[path].default as SettingValue<P>;
|
|
4517
|
+
}
|
|
4518
|
+
|
|
4519
|
+
/** Check if a path has UI metadata (should appear in settings panel) */
|
|
4520
|
+
export function hasUi(path: SettingPath): boolean {
|
|
4521
|
+
return "ui" in SETTINGS_SCHEMA[path];
|
|
4522
|
+
}
|
|
4523
|
+
|
|
4524
|
+
/** Get UI metadata for a path (undefined if no UI) */
|
|
4525
|
+
export function getUi(path: SettingPath): AnyUiMetadata | undefined {
|
|
4526
|
+
const def = SETTINGS_SCHEMA[path];
|
|
4527
|
+
return "ui" in def ? (def.ui as AnyUiMetadata) : undefined;
|
|
4528
|
+
}
|
|
4529
|
+
|
|
4530
|
+
/** Get all paths for a specific tab */
|
|
4531
|
+
export function getPathsForTab(tab: SettingTab): SettingPath[] {
|
|
4532
|
+
return (Object.keys(SETTINGS_SCHEMA) as SettingPath[]).filter(path => {
|
|
4533
|
+
const ui = getUi(path);
|
|
4534
|
+
return ui?.tab === tab;
|
|
4535
|
+
});
|
|
4536
|
+
}
|
|
4537
|
+
|
|
4538
|
+
/** Get the type of a setting */
|
|
4539
|
+
export function getType(path: SettingPath): SettingDef["type"] {
|
|
4540
|
+
return SETTINGS_SCHEMA[path].type;
|
|
4541
|
+
}
|
|
4542
|
+
|
|
4543
|
+
/** Get enum values for an enum setting */
|
|
4544
|
+
export function getEnumValues(path: SettingPath): readonly string[] | undefined {
|
|
4545
|
+
const def = SETTINGS_SCHEMA[path];
|
|
4546
|
+
return "values" in def ? (def.values as readonly string[]) : undefined;
|
|
4547
|
+
}
|
|
4548
|
+
|
|
4549
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
4550
|
+
// Derived Types from Schema
|
|
4551
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
4552
|
+
|
|
4553
|
+
/** Status line preset - derived from schema */
|
|
4554
|
+
export type StatusLinePreset = SettingValue<"statusLine.preset">;
|
|
4555
|
+
|
|
4556
|
+
/** Status line separator style - derived from schema */
|
|
4557
|
+
export type StatusLineSeparatorStyle = SettingValue<"statusLine.separator">;
|
|
4558
|
+
|
|
4559
|
+
/** Tree selector filter mode - derived from schema */
|
|
4560
|
+
export type TreeFilterMode = SettingValue<"treeFilterMode">;
|
|
4561
|
+
|
|
4562
|
+
/** Personality preset - derived from schema */
|
|
4563
|
+
export type Personality = SettingValue<"personality">;
|
|
4564
|
+
|
|
4565
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
4566
|
+
// Typed Group Definitions
|
|
4567
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
4568
|
+
|
|
4569
|
+
export interface CompactionSettings {
|
|
4570
|
+
enabled: boolean;
|
|
4571
|
+
strategy: "context-full" | "handoff" | "shake" | "snapcompact" | "off";
|
|
4572
|
+
thresholdPercent: number;
|
|
4573
|
+
thresholdTokens: number;
|
|
4574
|
+
reserveTokens: number;
|
|
4575
|
+
keepRecentTokens: number;
|
|
4576
|
+
handoffSaveToDisk: boolean;
|
|
4577
|
+
autoContinue: boolean;
|
|
4578
|
+
remoteEnabled: boolean;
|
|
4579
|
+
remoteEndpoint: string | undefined;
|
|
4580
|
+
idleEnabled: boolean;
|
|
4581
|
+
idleThresholdTokens: number;
|
|
4582
|
+
idleTimeoutSeconds: number;
|
|
4583
|
+
supersedeReads: boolean;
|
|
4584
|
+
dropUseless: boolean;
|
|
4585
|
+
}
|
|
4586
|
+
|
|
4587
|
+
export interface ContextPromotionSettings {
|
|
4588
|
+
enabled: boolean;
|
|
4589
|
+
}
|
|
4590
|
+
export interface RetrySettings {
|
|
4591
|
+
enabled: boolean;
|
|
4592
|
+
maxRetries: number;
|
|
4593
|
+
baseDelayMs: number;
|
|
4594
|
+
maxDelayMs: number;
|
|
4595
|
+
modelFallback: boolean;
|
|
4596
|
+
}
|
|
4597
|
+
|
|
4598
|
+
export interface MemoriesSettings {
|
|
4599
|
+
enabled: boolean;
|
|
4600
|
+
maxRolloutsPerStartup: number;
|
|
4601
|
+
maxRolloutAgeDays: number;
|
|
4602
|
+
minRolloutIdleHours: number;
|
|
4603
|
+
threadScanLimit: number;
|
|
4604
|
+
maxRawMemoriesForGlobal: number;
|
|
4605
|
+
stage1Concurrency: number;
|
|
4606
|
+
stage1LeaseSeconds: number;
|
|
4607
|
+
stage1RetryDelaySeconds: number;
|
|
4608
|
+
phase2LeaseSeconds: number;
|
|
4609
|
+
phase2RetryDelaySeconds: number;
|
|
4610
|
+
phase2HeartbeatSeconds: number;
|
|
4611
|
+
rolloutPayloadPercent: number;
|
|
4612
|
+
fallbackTokenLimit: number;
|
|
4613
|
+
summaryInjectionTokenLimit: number;
|
|
4614
|
+
}
|
|
4615
|
+
|
|
4616
|
+
export interface TodoCompletionSettings {
|
|
4617
|
+
enabled: boolean;
|
|
4618
|
+
maxReminders: number;
|
|
4619
|
+
}
|
|
4620
|
+
|
|
4621
|
+
export interface BranchSummarySettings {
|
|
4622
|
+
enabled: boolean;
|
|
4623
|
+
reserveTokens: number;
|
|
4624
|
+
}
|
|
4625
|
+
|
|
4626
|
+
export interface SkillsSettings {
|
|
4627
|
+
enabled?: boolean;
|
|
4628
|
+
enableSkillCommands?: boolean;
|
|
4629
|
+
enableCodexUser?: boolean;
|
|
4630
|
+
enableClaudeUser?: boolean;
|
|
4631
|
+
enableClaudeProject?: boolean;
|
|
4632
|
+
enablePiUser?: boolean;
|
|
4633
|
+
enablePiProject?: boolean;
|
|
4634
|
+
enableAgentsUser?: boolean;
|
|
4635
|
+
enableAgentsProject?: boolean;
|
|
4636
|
+
customDirectories?: string[];
|
|
4637
|
+
ignoredSkills?: string[];
|
|
4638
|
+
includeSkills?: string[];
|
|
4639
|
+
disabledExtensions?: string[];
|
|
4640
|
+
}
|
|
4641
|
+
|
|
4642
|
+
export interface CommitSettings {
|
|
4643
|
+
mapReduceEnabled: boolean;
|
|
4644
|
+
mapReduceMinFiles: number;
|
|
4645
|
+
mapReduceMaxFileTokens: number;
|
|
4646
|
+
mapReduceTimeoutMs: number;
|
|
4647
|
+
mapReduceMaxConcurrency: number;
|
|
4648
|
+
changelogMaxDiffChars: number;
|
|
4649
|
+
}
|
|
4650
|
+
|
|
4651
|
+
export interface TtsrSettings {
|
|
4652
|
+
enabled: boolean;
|
|
4653
|
+
contextMode: "discard" | "keep";
|
|
4654
|
+
interruptMode: "never" | "prose-only" | "tool-only" | "always";
|
|
4655
|
+
repeatMode: "once" | "after-gap";
|
|
4656
|
+
repeatGap: number;
|
|
4657
|
+
/** Bucketing-only (read by bucketRules, not the TtsrManager). */
|
|
4658
|
+
builtinRules?: boolean;
|
|
4659
|
+
/** Bucketing-only (read by bucketRules, not the TtsrManager). */
|
|
4660
|
+
disabledRules?: string[];
|
|
4661
|
+
}
|
|
4662
|
+
|
|
4663
|
+
export interface ExaSettings {
|
|
4664
|
+
enabled: boolean;
|
|
4665
|
+
enableSearch: boolean;
|
|
4666
|
+
enableResearcher: boolean;
|
|
4667
|
+
enableWebsets: boolean;
|
|
4668
|
+
}
|
|
4669
|
+
|
|
4670
|
+
export interface StatusLineSettings {
|
|
4671
|
+
preset: StatusLinePreset;
|
|
4672
|
+
separator: StatusLineSeparatorStyle;
|
|
4673
|
+
showHookStatus: boolean;
|
|
4674
|
+
leftSegments: StatusLineSegmentId[];
|
|
4675
|
+
rightSegments: StatusLineSegmentId[];
|
|
4676
|
+
segmentOptions: Record<string, unknown>;
|
|
4677
|
+
}
|
|
4678
|
+
|
|
4679
|
+
export interface ThinkingBudgetsSettings {
|
|
4680
|
+
minimal: number;
|
|
4681
|
+
low: number;
|
|
4682
|
+
medium: number;
|
|
4683
|
+
high: number;
|
|
4684
|
+
xhigh: number;
|
|
4685
|
+
}
|
|
4686
|
+
|
|
4687
|
+
export interface SttSettings {
|
|
4688
|
+
enabled: boolean;
|
|
4689
|
+
language: string | undefined;
|
|
4690
|
+
modelName: string;
|
|
4691
|
+
streaming: boolean;
|
|
4692
|
+
}
|
|
4693
|
+
|
|
4694
|
+
export interface BashInterceptorRule {
|
|
4695
|
+
pattern: string;
|
|
4696
|
+
flags?: string;
|
|
4697
|
+
tool: string;
|
|
4698
|
+
message: string;
|
|
4699
|
+
allowSubcommands?: string[];
|
|
4700
|
+
}
|
|
4701
|
+
|
|
4702
|
+
export interface ShellMinimizerSettings {
|
|
4703
|
+
enabled: boolean;
|
|
4704
|
+
settingsPath: string | undefined;
|
|
4705
|
+
only: string[];
|
|
4706
|
+
except: string[];
|
|
4707
|
+
maxCaptureBytes: number;
|
|
4708
|
+
sourceOutlineLevel: "default" | "aggressive";
|
|
4709
|
+
legacyFilters: boolean | undefined;
|
|
4710
|
+
}
|
|
4711
|
+
export type CodexAutoRedeemMode = "unset" | "yes" | "no";
|
|
4712
|
+
|
|
4713
|
+
export interface CodexResetsSettings {
|
|
4714
|
+
autoRedeem: CodexAutoRedeemMode;
|
|
4715
|
+
minBlockedMinutes: number;
|
|
4716
|
+
keepCredits: number;
|
|
4717
|
+
}
|
|
4718
|
+
|
|
4719
|
+
/** Map group prefix -> typed settings interface */
|
|
4720
|
+
export interface GroupTypeMap {
|
|
4721
|
+
compaction: CompactionSettings;
|
|
4722
|
+
contextPromotion: ContextPromotionSettings;
|
|
4723
|
+
retry: RetrySettings;
|
|
4724
|
+
memories: MemoriesSettings;
|
|
4725
|
+
branchSummary: BranchSummarySettings;
|
|
4726
|
+
skills: SkillsSettings;
|
|
4727
|
+
commit: CommitSettings;
|
|
4728
|
+
ttsr: TtsrSettings;
|
|
4729
|
+
exa: ExaSettings;
|
|
4730
|
+
statusLine: StatusLineSettings;
|
|
4731
|
+
thinkingBudgets: ThinkingBudgetsSettings;
|
|
4732
|
+
stt: SttSettings;
|
|
4733
|
+
modelRoles: Record<string, string>;
|
|
4734
|
+
modelTags: ModelTagsSettings;
|
|
4735
|
+
cycleOrder: string[];
|
|
4736
|
+
shellMinimizer: ShellMinimizerSettings;
|
|
4737
|
+
codexResets: CodexResetsSettings;
|
|
4738
|
+
}
|
|
4739
|
+
|
|
4740
|
+
export type GroupPrefix = keyof GroupTypeMap;
|