@astralyn/pi 0.87.5 → 0.99.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +51 -6
- package/README.md +3 -3
- package/dist/bun/runtime-setup.js +4 -1
- package/dist/bun/runtime-setup.js.map +1 -1
- package/dist/bundle/chunks/anthropic-messages-KIXY7EDT.js +6 -0
- package/dist/bundle/chunks/anthropic.js +2 -2
- package/dist/bundle/chunks/azure-openai-responses-RPBERDXD.js +2 -0
- package/dist/bundle/chunks/bedrock-converse-stream.js +8 -8
- package/dist/bundle/chunks/{chunk-LPQCB2VJ.js → chunk-A576H74Y.js} +2 -2
- package/dist/bundle/chunks/{chunk-NW5FIDD7.js → chunk-ABVRAYXT.js} +3 -3
- package/dist/bundle/chunks/{chunk-I5IVW2WS.js → chunk-CLLDCO64.js} +1 -1
- package/dist/bundle/chunks/chunk-DEWXBB6W.js +2 -0
- package/dist/bundle/chunks/chunk-G4RY3GN7.js +11 -0
- package/dist/bundle/chunks/chunk-GCKVOFWP.js +2 -0
- package/dist/bundle/chunks/chunk-MPDALHNJ.js +2 -0
- package/dist/bundle/chunks/chunk-OO6DJ3CL.js +31 -0
- package/dist/bundle/chunks/{chunk-EWLAVDVN.js → chunk-VW2P3X6P.js} +921 -293
- package/dist/bundle/chunks/chunk-VWCWZD6E.js +2 -0
- package/dist/bundle/chunks/cloudflare-workers-ai-system-one-ZYSAFXXL.js +2 -0
- package/dist/bundle/chunks/codemode-worker.js +295 -0
- package/dist/bundle/chunks/github-copilot.js +1 -1
- package/dist/bundle/chunks/google-generative-ai-SDNQVVXA.js +2 -0
- package/dist/bundle/chunks/google-vertex-LZXOLBIO.js +2 -0
- package/dist/bundle/chunks/llama-cpp-classify-7IYGGPND.js +22 -0
- package/dist/bundle/chunks/meta.js +2 -0
- package/dist/bundle/chunks/mistral-conversations-VYKPSSAM.js +5 -0
- package/dist/bundle/chunks/openai-chatgpt.js +75 -0
- package/dist/bundle/chunks/openai-codex-responses-HZ4VUDXD.js +10 -0
- package/dist/bundle/chunks/openai-codex.js +2 -2
- package/dist/bundle/chunks/openai-completions-SKDGF6OE.js +7 -0
- package/dist/bundle/chunks/openai-responses-FPML4SSG.js +3 -0
- package/dist/bundle/chunks/{openrouter-images-6XDE2CEW.js → openrouter-images-5524IQHX.js} +1 -1
- package/dist/bundle/chunks/openrouter.js +2 -2
- package/dist/bundle/chunks/{pi-messages-MQMPIPNC.js → pi-messages-HZZ7GEEW.js} +2 -2
- package/dist/bundle/chunks/radius.js +2 -2
- package/dist/bundle/chunks/typesafe-system-one-Z2CDLKEY.js +2 -0
- package/dist/bundle/chunks/virtual-modules-TQRORWJQ.js +2 -0
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +4 -3
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +38 -30
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/config.d.ts +18 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +30 -4
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +13 -13
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +2 -2
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +14 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +107 -58
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +505 -298
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bug-report.js +1 -1
- package/dist/core/bug-report.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +1 -22
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/utils.d.ts +2 -1
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js +25 -18
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/context-snapshot.d.ts +17 -4
- package/dist/core/context-snapshot.d.ts.map +1 -1
- package/dist/core/context-snapshot.js +48 -50
- package/dist/core/context-snapshot.js.map +1 -1
- package/dist/core/crash-log.d.ts.map +1 -1
- package/dist/core/crash-log.js +2 -1
- package/dist/core/crash-log.js.map +1 -1
- package/dist/core/export-html/template.css +10 -0
- package/dist/core/export-html/template.js +66 -17
- package/dist/core/extensions/distribution-api.d.ts +1 -8
- package/dist/core/extensions/distribution-api.d.ts.map +1 -1
- package/dist/core/extensions/distribution-api.js +6 -6
- package/dist/core/extensions/distribution-api.js.map +1 -1
- package/dist/core/extensions/index.d.ts +3 -3
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +58 -7
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +22 -3
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +124 -8
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +306 -30
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts +2 -2
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js +3 -3
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/keybindings.d.ts +40 -5
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +10 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/mcp-servers.d.ts +98 -0
- package/dist/core/mcp-servers.d.ts.map +1 -0
- package/dist/core/mcp-servers.js +158 -0
- package/dist/core/mcp-servers.js.map +1 -0
- package/dist/core/model-registry.d.ts +13 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +25 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +2 -2
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +5 -5
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +41 -3
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +167 -17
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/nested-tool-calls.d.ts +102 -0
- package/dist/core/nested-tool-calls.d.ts.map +1 -0
- package/dist/core/nested-tool-calls.js +177 -0
- package/dist/core/nested-tool-calls.js.map +1 -0
- package/dist/core/package-manager.d.ts +4 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +58 -12
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/provider-composer.d.ts +40 -21
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +92 -40
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts +8 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +18 -3
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resource-loader.d.ts +7 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +160 -35
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts +3 -3
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +84 -14
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +9 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +22 -22
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +36 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +108 -2
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/source-info.d.ts +8 -0
- package/dist/core/source-info.d.ts.map +1 -1
- package/dist/core/source-info.js +16 -0
- package/dist/core/source-info.js.map +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tasks/delivery.d.ts +40 -0
- package/dist/core/tasks/delivery.d.ts.map +1 -0
- package/dist/core/tasks/delivery.js +157 -0
- package/dist/core/tasks/delivery.js.map +1 -0
- package/dist/core/tasks/history.d.ts +4 -0
- package/dist/core/tasks/history.d.ts.map +1 -0
- package/dist/core/{background → tasks}/history.js +24 -48
- package/dist/core/tasks/history.js.map +1 -0
- package/dist/core/{background → tasks}/output.d.ts +4 -4
- package/dist/core/tasks/output.d.ts.map +1 -0
- package/dist/core/{background → tasks}/output.js +11 -11
- package/dist/core/tasks/output.js.map +1 -0
- package/dist/core/tasks/presentation.d.ts +9 -0
- package/dist/core/tasks/presentation.d.ts.map +1 -0
- package/dist/core/{background → tasks}/presentation.js +53 -51
- package/dist/core/tasks/presentation.js.map +1 -0
- package/dist/core/{background/service.d.ts → tasks/runtime.d.ts} +22 -23
- package/dist/core/tasks/runtime.d.ts.map +1 -0
- package/dist/core/{background/service.js → tasks/runtime.js} +154 -198
- package/dist/core/tasks/runtime.js.map +1 -0
- package/dist/core/tasks/session.d.ts +49 -0
- package/dist/core/tasks/session.d.ts.map +1 -0
- package/dist/core/tasks/session.js +129 -0
- package/dist/core/tasks/session.js.map +1 -0
- package/dist/core/tasks/store.d.ts +32 -0
- package/dist/core/tasks/store.d.ts.map +1 -0
- package/dist/core/tasks/store.js +135 -0
- package/dist/core/tasks/store.js.map +1 -0
- package/dist/core/{background → tasks}/types.d.ts +80 -62
- package/dist/core/tasks/types.d.ts.map +1 -0
- package/dist/core/{background → tasks}/types.js +9 -9
- package/dist/core/tasks/types.js.map +1 -0
- package/dist/core/tasks/view-data.d.ts +8 -0
- package/dist/core/tasks/view-data.d.ts.map +1 -0
- package/dist/core/tasks/view-data.js +61 -0
- package/dist/core/tasks/view-data.js.map +1 -0
- package/dist/core/tasks/view.d.ts +30 -0
- package/dist/core/tasks/view.d.ts.map +1 -0
- package/dist/core/tasks/view.js +50 -0
- package/dist/core/tasks/view.js.map +1 -0
- package/dist/core/tools/bash.d.ts +8 -95
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +8 -240
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +0 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +2 -0
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +2 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +2 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +9 -0
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +0 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +11 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +36 -0
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/powershell.d.ts +6 -2
- package/dist/core/tools/powershell.d.ts.map +1 -1
- package/dist/core/tools/powershell.js +1 -1
- package/dist/core/tools/powershell.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +0 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +6 -7
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +26 -11
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/renderers/bash.d.ts +1 -1
- package/dist/core/tools/renderers/bash.d.ts.map +1 -1
- package/dist/core/tools/renderers/bash.js +65 -12
- package/dist/core/tools/renderers/bash.js.map +1 -1
- package/dist/core/tools/renderers/edit.d.ts.map +1 -1
- package/dist/core/tools/renderers/edit.js +4 -22
- package/dist/core/tools/renderers/edit.js.map +1 -1
- package/dist/core/tools/renderers/find.d.ts.map +1 -1
- package/dist/core/tools/renderers/find.js +7 -6
- package/dist/core/tools/renderers/find.js.map +1 -1
- package/dist/core/tools/renderers/grep.d.ts.map +1 -1
- package/dist/core/tools/renderers/grep.js +8 -7
- package/dist/core/tools/renderers/grep.js.map +1 -1
- package/dist/core/tools/renderers/index.d.ts.map +1 -1
- package/dist/core/tools/renderers/index.js +5 -7
- package/dist/core/tools/renderers/index.js.map +1 -1
- package/dist/core/tools/renderers/ls.d.ts.map +1 -1
- package/dist/core/tools/renderers/ls.js +3 -2
- package/dist/core/tools/renderers/ls.js.map +1 -1
- package/dist/core/tools/renderers/read.d.ts.map +1 -1
- package/dist/core/tools/renderers/read.js +10 -14
- package/dist/core/tools/renderers/read.js.map +1 -1
- package/dist/core/tools/renderers/shell-task.d.ts +4 -0
- package/dist/core/tools/renderers/shell-task.d.ts.map +1 -0
- package/dist/core/tools/renderers/shell-task.js +35 -0
- package/dist/core/tools/renderers/shell-task.js.map +1 -0
- package/dist/core/tools/renderers/write.d.ts.map +1 -1
- package/dist/core/tools/renderers/write.js +3 -2
- package/dist/core/tools/renderers/write.js.map +1 -1
- package/dist/core/tools/shell-execution.d.ts +4 -5
- package/dist/core/tools/shell-execution.d.ts.map +1 -1
- package/dist/core/tools/shell-execution.js +19 -3
- package/dist/core/tools/shell-execution.js.map +1 -1
- package/dist/core/tools/shell-tool.d.ts +93 -0
- package/dist/core/tools/shell-tool.d.ts.map +1 -0
- package/dist/core/tools/shell-tool.js +251 -0
- package/dist/core/tools/shell-tool.js.map +1 -0
- package/dist/core/tools/tasks/actions.d.ts +12 -0
- package/dist/core/tools/tasks/actions.d.ts.map +1 -0
- package/dist/{extensions/background → core/tools/tasks}/actions.js +20 -19
- package/dist/core/tools/tasks/actions.js.map +1 -0
- package/dist/core/tools/tasks/constants.d.ts +24 -0
- package/dist/core/tools/tasks/constants.d.ts.map +1 -0
- package/dist/{extensions/background → core/tools/tasks}/constants.js +11 -9
- package/dist/core/tools/tasks/constants.js.map +1 -0
- package/dist/{extensions/background → core/tools/tasks}/schema.d.ts +6 -6
- package/dist/core/tools/tasks/schema.d.ts.map +1 -0
- package/dist/{extensions/background → core/tools/tasks}/schema.js +17 -17
- package/dist/core/tools/tasks/schema.js.map +1 -0
- package/dist/{extensions/background → core/tools/tasks}/types.d.ts +15 -17
- package/dist/core/tools/tasks/types.d.ts.map +1 -0
- package/dist/core/tools/tasks/types.js.map +1 -0
- package/dist/core/tools/tasks.d.ts +14 -0
- package/dist/core/tools/tasks.d.ts.map +1 -0
- package/dist/core/tools/tasks.js +40 -0
- package/dist/core/tools/tasks.js.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts +5 -8
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +4 -4
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/truncate.d.ts +14 -0
- package/dist/core/tools/truncate.d.ts.map +1 -1
- package/dist/core/tools/truncate.js +29 -0
- package/dist/core/tools/truncate.js.map +1 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +1 -0
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/core/usage-totals.d.ts +5 -3
- package/dist/core/usage-totals.d.ts.map +1 -1
- package/dist/core/usage-totals.js +27 -4
- package/dist/core/usage-totals.js.map +1 -1
- package/dist/core/virtual-models.d.ts +115 -0
- package/dist/core/virtual-models.d.ts.map +1 -0
- package/dist/core/virtual-models.js +117 -0
- package/dist/core/virtual-models.js.map +1 -0
- package/dist/extensions/codemode/execute.d.ts +16 -0
- package/dist/extensions/codemode/execute.d.ts.map +1 -0
- package/dist/extensions/codemode/execute.js +390 -0
- package/dist/extensions/codemode/execute.js.map +1 -0
- package/dist/extensions/codemode/execute.lazy.d.ts +3 -0
- package/dist/extensions/codemode/execute.lazy.d.ts.map +1 -0
- package/dist/extensions/codemode/execute.lazy.js +3 -0
- package/dist/extensions/codemode/execute.lazy.js.map +1 -0
- package/dist/extensions/codemode/index.d.ts +21 -0
- package/dist/extensions/codemode/index.d.ts.map +1 -0
- package/dist/extensions/codemode/index.js +36 -0
- package/dist/extensions/codemode/index.js.map +1 -0
- package/dist/extensions/codemode/renderer.d.ts +12 -0
- package/dist/extensions/codemode/renderer.d.ts.map +1 -0
- package/dist/extensions/codemode/renderer.js +119 -0
- package/dist/extensions/codemode/renderer.js.map +1 -0
- package/dist/extensions/codemode/search.d.ts +33 -0
- package/dist/extensions/codemode/search.d.ts.map +1 -0
- package/dist/extensions/codemode/search.js +117 -0
- package/dist/extensions/codemode/search.js.map +1 -0
- package/dist/extensions/codemode/tool.d.ts +122 -0
- package/dist/extensions/codemode/tool.d.ts.map +1 -0
- package/dist/extensions/codemode/tool.js +324 -0
- package/dist/extensions/codemode/tool.js.map +1 -0
- package/dist/extensions/codemode/worker.d.ts +7 -0
- package/dist/extensions/codemode/worker.d.ts.map +1 -0
- package/dist/extensions/codemode/worker.js +7 -0
- package/dist/extensions/codemode/worker.js.map +1 -0
- package/dist/extensions/deepwiki/schema.d.ts +1 -1
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +14 -12
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +65 -13
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/extensions/mcp/cli.d.ts +21 -0
- package/dist/extensions/mcp/cli.d.ts.map +1 -0
- package/dist/extensions/mcp/cli.js +485 -0
- package/dist/extensions/mcp/cli.js.map +1 -0
- package/dist/extensions/mcp/cli.lazy.d.ts +3 -0
- package/dist/extensions/mcp/cli.lazy.d.ts.map +1 -0
- package/dist/extensions/mcp/cli.lazy.js +3 -0
- package/dist/extensions/mcp/cli.lazy.js.map +1 -0
- package/dist/extensions/mcp/config.d.ts +70 -0
- package/dist/extensions/mcp/config.d.ts.map +1 -0
- package/dist/extensions/mcp/config.js +146 -0
- package/dist/extensions/mcp/config.js.map +1 -0
- package/dist/extensions/mcp/index.d.ts +52 -0
- package/dist/extensions/mcp/index.d.ts.map +1 -0
- package/dist/extensions/mcp/index.js +904 -0
- package/dist/extensions/mcp/index.js.map +1 -0
- package/dist/extensions/mcp/log.d.ts +16 -0
- package/dist/extensions/mcp/log.d.ts.map +1 -0
- package/dist/extensions/mcp/log.js +64 -0
- package/dist/extensions/mcp/log.js.map +1 -0
- package/dist/extensions/mcp/oauth.d.ts +94 -0
- package/dist/extensions/mcp/oauth.d.ts.map +1 -0
- package/dist/extensions/mcp/oauth.js +330 -0
- package/dist/extensions/mcp/oauth.js.map +1 -0
- package/dist/extensions/mcp/resources.d.ts +43 -0
- package/dist/extensions/mcp/resources.d.ts.map +1 -0
- package/dist/extensions/mcp/resources.js +262 -0
- package/dist/extensions/mcp/resources.js.map +1 -0
- package/dist/extensions/mcp/runtime.d.ts +96 -0
- package/dist/extensions/mcp/runtime.d.ts.map +1 -0
- package/dist/extensions/mcp/runtime.js +372 -0
- package/dist/extensions/mcp/runtime.js.map +1 -0
- package/dist/extensions/mcp/runtime.lazy.d.ts +3 -0
- package/dist/extensions/mcp/runtime.lazy.d.ts.map +1 -0
- package/dist/extensions/mcp/runtime.lazy.js +3 -0
- package/dist/extensions/mcp/runtime.lazy.js.map +1 -0
- package/dist/extensions/mcp/tools.d.ts +83 -0
- package/dist/extensions/mcp/tools.d.ts.map +1 -0
- package/dist/extensions/mcp/tools.js +233 -0
- package/dist/extensions/mcp/tools.js.map +1 -0
- package/dist/extensions/mcp/ui.d.ts +60 -0
- package/dist/extensions/mcp/ui.d.ts.map +1 -0
- package/dist/extensions/mcp/ui.js +166 -0
- package/dist/extensions/mcp/ui.js.map +1 -0
- package/dist/extensions/question/detail-pane.d.ts +12 -0
- package/dist/extensions/question/detail-pane.d.ts.map +1 -0
- package/dist/extensions/question/detail-pane.js +42 -0
- package/dist/extensions/question/detail-pane.js.map +1 -0
- package/dist/extensions/question/dialog.d.ts.map +1 -1
- package/dist/extensions/question/dialog.js +175 -105
- package/dist/extensions/question/dialog.js.map +1 -1
- package/dist/extensions/question/option-window.d.ts +26 -0
- package/dist/extensions/question/option-window.d.ts.map +1 -0
- package/dist/extensions/question/option-window.js +53 -0
- package/dist/extensions/question/option-window.js.map +1 -0
- package/dist/extensions/question/render-cache.d.ts +4 -4
- package/dist/extensions/question/render-cache.d.ts.map +1 -1
- package/dist/extensions/question/render-cache.js +10 -11
- package/dist/extensions/question/render-cache.js.map +1 -1
- package/dist/extensions/statusline/index.js +2 -2
- package/dist/extensions/statusline/index.js.map +1 -1
- package/dist/extensions/todo/index.d.ts.map +1 -1
- package/dist/extensions/todo/index.js +12 -8
- package/dist/extensions/todo/index.js.map +1 -1
- package/dist/extensions/todo/view.d.ts +3 -3
- package/dist/extensions/todo/view.d.ts.map +1 -1
- package/dist/extensions/todo/view.js +7 -6
- package/dist/extensions/todo/view.js.map +1 -1
- package/dist/extensions/tool-search/index.d.ts +12 -0
- package/dist/extensions/tool-search/index.d.ts.map +1 -0
- package/dist/extensions/tool-search/index.js +20 -0
- package/dist/extensions/tool-search/index.js.map +1 -0
- package/dist/extensions/tool-search/tool.d.ts +72 -0
- package/dist/extensions/tool-search/tool.d.ts.map +1 -0
- package/dist/extensions/tool-search/tool.js +208 -0
- package/dist/extensions/tool-search/tool.js.map +1 -0
- package/dist/index.d.ts +13 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +10 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +13 -3
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +3 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts +4 -4
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.js +8 -2
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +7 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +42 -3
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +1 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +1 -1
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/pi-logo.d.ts +12 -0
- package/dist/modes/interactive/components/pi-logo.d.ts.map +1 -0
- package/dist/modes/interactive/components/pi-logo.js +25 -0
- package/dist/modes/interactive/components/pi-logo.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +28 -6
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/status-marker.d.ts +4 -4
- package/dist/modes/interactive/components/status-marker.js +4 -4
- package/dist/modes/interactive/components/status-marker.js.map +1 -1
- package/dist/modes/interactive/components/themed-text.d.ts +17 -0
- package/dist/modes/interactive/components/themed-text.d.ts.map +1 -0
- package/dist/modes/interactive/components/themed-text.js +28 -0
- package/dist/modes/interactive/components/themed-text.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +2 -4
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +221 -173
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/tasks/completion-render.d.ts +8 -0
- package/dist/modes/interactive/tasks/completion-render.d.ts.map +1 -0
- package/dist/{extensions/background → modes/interactive/tasks}/completion-render.js +33 -30
- package/dist/modes/interactive/tasks/completion-render.js.map +1 -0
- package/dist/modes/interactive/tasks/fallback-view.d.ts +4 -0
- package/dist/modes/interactive/tasks/fallback-view.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/fallback-view.js +27 -0
- package/dist/modes/interactive/tasks/fallback-view.js.map +1 -0
- package/dist/modes/interactive/tasks/index.d.ts +12 -0
- package/dist/modes/interactive/tasks/index.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/index.js +97 -0
- package/dist/modes/interactive/tasks/index.js.map +1 -0
- package/dist/modes/interactive/tasks/manager.d.ts +67 -0
- package/dist/modes/interactive/tasks/manager.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/manager.js +380 -0
- package/dist/modes/interactive/tasks/manager.js.map +1 -0
- package/dist/{extensions/background → modes/interactive/tasks}/render.d.ts +13 -13
- package/dist/modes/interactive/tasks/render.d.ts.map +1 -0
- package/dist/{extensions/background → modes/interactive/tasks}/render.js +18 -18
- package/dist/modes/interactive/tasks/render.js.map +1 -0
- package/dist/{extensions/background → modes/interactive/tasks}/task-view.d.ts +7 -7
- package/dist/modes/interactive/tasks/task-view.d.ts.map +1 -0
- package/dist/{extensions/background → modes/interactive/tasks}/task-view.js +4 -4
- package/dist/modes/interactive/tasks/task-view.js.map +1 -0
- package/dist/{extensions/background → modes/interactive/tasks}/text.d.ts +1 -1
- package/dist/modes/interactive/tasks/text.d.ts.map +1 -0
- package/dist/{extensions/background → modes/interactive/tasks}/text.js +1 -1
- package/dist/modes/interactive/tasks/text.js.map +1 -0
- package/dist/modes/interactive/tasks/viewport.d.ts +15 -0
- package/dist/modes/interactive/tasks/viewport.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/viewport.js +49 -0
- package/dist/modes/interactive/tasks/viewport.js.map +1 -0
- package/dist/modes/interactive/theme/dark.json +59 -72
- package/dist/modes/interactive/theme/light.json +57 -69
- package/dist/modes/interactive/theme/system-theme.d.ts +54 -0
- package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/system-theme.js +535 -0
- package/dist/modes/interactive/theme/system-theme.js.map +1 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts +46 -6
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js +125 -47
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive/theme/theme-json.d.ts +1 -0
- package/dist/modes/interactive/theme/theme-json.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-json.js +3 -1
- package/dist/modes/interactive/theme/theme-json.js.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.json +7 -2
- package/dist/modes/interactive/theme/theme.d.ts +70 -39
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +247 -314
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/interactive/tool-view/chat.d.ts +20 -0
- package/dist/modes/interactive/tool-view/chat.d.ts.map +1 -0
- package/dist/modes/interactive/tool-view/chat.js +46 -0
- package/dist/modes/interactive/tool-view/chat.js.map +1 -0
- package/dist/modes/interactive/tool-view/fallback.d.ts +14 -0
- package/dist/modes/interactive/tool-view/fallback.d.ts.map +1 -0
- package/dist/modes/interactive/tool-view/fallback.js +55 -0
- package/dist/modes/interactive/tool-view/fallback.js.map +1 -0
- package/dist/modes/interactive/tool-view/style.d.ts +63 -0
- package/dist/modes/interactive/tool-view/style.d.ts.map +1 -0
- package/dist/modes/interactive/tool-view/style.js +83 -0
- package/dist/modes/interactive/tool-view/style.js.map +1 -0
- package/dist/modes/interactive/{components → tool-view}/tool-execution.d.ts +17 -24
- package/dist/modes/interactive/tool-view/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/{components → tool-view}/tool-execution.js +42 -116
- package/dist/modes/interactive/tool-view/tool-execution.js.map +1 -0
- package/dist/modes/interactive/tui-renderer.d.ts +2 -1
- package/dist/modes/interactive/tui-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/tui-renderer.js +1 -0
- package/dist/modes/interactive/tui-renderer.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +6 -6
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +12 -8
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +7 -9
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +10 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +6 -2
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +14 -17
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +5 -0
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/paths.d.ts +3 -3
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +5 -4
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/shell.d.ts +1 -3
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +3 -30
- package/dist/utils/shell.js.map +1 -1
- package/docs/bundled/README.md +22 -8
- package/docs/bundled/extensions/question.md +6 -5
- package/docs/bundled/extensions/statusline.md +2 -2
- package/docs/bundled/tasks.md +141 -0
- package/docs/bundled/tool-presentation.md +41 -31
- package/docs/custom-provider.md +44 -0
- package/docs/docs.json +10 -6
- package/docs/extensions.md +90 -90
- package/docs/index.md +2 -1
- package/docs/keybindings.md +19 -7
- package/docs/llama-cpp.md +12 -1
- package/docs/mcp.md +188 -0
- package/docs/models.md +35 -0
- package/docs/packages.md +4 -0
- package/docs/providers.md +6 -0
- package/docs/rpc.md +5 -3
- package/docs/sdk.md +26 -16
- package/docs/security.md +4 -0
- package/docs/session-format.md +18 -11
- package/docs/settings.md +26 -2
- package/docs/themes.md +27 -5
- package/docs/tui.md +20 -0
- package/docs/usage.md +61 -3
- package/docs/virtual-models.md +114 -0
- package/docs/windows.md +2 -0
- package/examples/README.md +1 -1
- package/examples/extensions/README.md +2 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +4 -4
- package/examples/extensions/debug-provider.ts +90 -0
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/jev-router.ts +113 -0
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/rpc-client.ts +1 -1
- package/examples/rpc-extension-ui.ts +1 -1
- package/examples/sdk/14-codemode-mcp.ts +61 -0
- package/examples/sdk/README.md +1 -0
- package/npm-shrinkwrap.json +409 -423
- package/package.json +13 -10
- package/dist/bundle/chunks/anthropic-messages-XWFTZP2N.js +0 -6
- package/dist/bundle/chunks/azure-openai-responses-HS35BQV6.js +0 -2
- package/dist/bundle/chunks/chunk-2IO5GDBS.js +0 -11
- package/dist/bundle/chunks/chunk-APQ4ACY3.js +0 -2
- package/dist/bundle/chunks/chunk-EDBLK2JQ.js +0 -2
- package/dist/bundle/chunks/chunk-NUHFSC37.js +0 -25
- package/dist/bundle/chunks/google-generative-ai-NOVAJBFC.js +0 -2
- package/dist/bundle/chunks/google-vertex-4VHCZJV5.js +0 -2
- package/dist/bundle/chunks/mistral-conversations-WC6A2WCJ.js +0 -5
- package/dist/bundle/chunks/openai-codex-responses-XCDG75W2.js +0 -10
- package/dist/bundle/chunks/openai-completions-SHS3CAEL.js +0 -7
- package/dist/bundle/chunks/openai-responses-UT6XFKC7.js +0 -2
- package/dist/bundle/chunks/virtual-modules-W3OGMIX7.js +0 -2
- package/dist/core/background/history.d.ts +0 -4
- package/dist/core/background/history.d.ts.map +0 -1
- package/dist/core/background/history.js.map +0 -1
- package/dist/core/background/output.d.ts.map +0 -1
- package/dist/core/background/output.js.map +0 -1
- package/dist/core/background/presentation.d.ts +0 -9
- package/dist/core/background/presentation.d.ts.map +0 -1
- package/dist/core/background/presentation.js.map +0 -1
- package/dist/core/background/service.d.ts.map +0 -1
- package/dist/core/background/service.js.map +0 -1
- package/dist/core/background/session.d.ts +0 -63
- package/dist/core/background/session.d.ts.map +0 -1
- package/dist/core/background/session.js +0 -222
- package/dist/core/background/session.js.map +0 -1
- package/dist/core/background/types.d.ts.map +0 -1
- package/dist/core/background/types.js.map +0 -1
- package/dist/core/model-stream-options.d.ts +0 -6
- package/dist/core/model-stream-options.d.ts.map +0 -1
- package/dist/core/model-stream-options.js +0 -20
- package/dist/core/model-stream-options.js.map +0 -1
- package/dist/extensions/background/actions.d.ts +0 -11
- package/dist/extensions/background/actions.d.ts.map +0 -1
- package/dist/extensions/background/actions.js.map +0 -1
- package/dist/extensions/background/completion-render.d.ts +0 -8
- package/dist/extensions/background/completion-render.d.ts.map +0 -1
- package/dist/extensions/background/completion-render.js.map +0 -1
- package/dist/extensions/background/constants.d.ts +0 -22
- package/dist/extensions/background/constants.d.ts.map +0 -1
- package/dist/extensions/background/constants.js.map +0 -1
- package/dist/extensions/background/index.d.ts +0 -7
- package/dist/extensions/background/index.d.ts.map +0 -1
- package/dist/extensions/background/index.js +0 -109
- package/dist/extensions/background/index.js.map +0 -1
- package/dist/extensions/background/keybindings.d.ts +0 -10
- package/dist/extensions/background/keybindings.d.ts.map +0 -1
- package/dist/extensions/background/keybindings.js +0 -14
- package/dist/extensions/background/keybindings.js.map +0 -1
- package/dist/extensions/background/manager.d.ts +0 -80
- package/dist/extensions/background/manager.d.ts.map +0 -1
- package/dist/extensions/background/manager.js +0 -673
- package/dist/extensions/background/manager.js.map +0 -1
- package/dist/extensions/background/render.d.ts.map +0 -1
- package/dist/extensions/background/render.js.map +0 -1
- package/dist/extensions/background/schema.d.ts.map +0 -1
- package/dist/extensions/background/schema.js.map +0 -1
- package/dist/extensions/background/task-view.d.ts.map +0 -1
- package/dist/extensions/background/task-view.js.map +0 -1
- package/dist/extensions/background/text.d.ts.map +0 -1
- package/dist/extensions/background/text.js.map +0 -1
- package/dist/extensions/background/types.d.ts.map +0 -1
- package/dist/extensions/background/types.js.map +0 -1
- package/dist/extensions/subagent/activity.d.ts +0 -34
- package/dist/extensions/subagent/activity.d.ts.map +0 -1
- package/dist/extensions/subagent/activity.js +0 -192
- package/dist/extensions/subagent/activity.js.map +0 -1
- package/dist/extensions/subagent/agents-command.d.ts +0 -4
- package/dist/extensions/subagent/agents-command.d.ts.map +0 -1
- package/dist/extensions/subagent/agents-command.js +0 -230
- package/dist/extensions/subagent/agents-command.js.map +0 -1
- package/dist/extensions/subagent/agents.d.ts +0 -6
- package/dist/extensions/subagent/agents.d.ts.map +0 -1
- package/dist/extensions/subagent/agents.js +0 -53
- package/dist/extensions/subagent/agents.js.map +0 -1
- package/dist/extensions/subagent/budget.d.ts +0 -15
- package/dist/extensions/subagent/budget.d.ts.map +0 -1
- package/dist/extensions/subagent/budget.js +0 -123
- package/dist/extensions/subagent/budget.js.map +0 -1
- package/dist/extensions/subagent/cancellation.d.ts +0 -29
- package/dist/extensions/subagent/cancellation.d.ts.map +0 -1
- package/dist/extensions/subagent/cancellation.js +0 -91
- package/dist/extensions/subagent/cancellation.js.map +0 -1
- package/dist/extensions/subagent/constants.d.ts +0 -25
- package/dist/extensions/subagent/constants.d.ts.map +0 -1
- package/dist/extensions/subagent/constants.js +0 -50
- package/dist/extensions/subagent/constants.js.map +0 -1
- package/dist/extensions/subagent/index.d.ts +0 -3
- package/dist/extensions/subagent/index.d.ts.map +0 -1
- package/dist/extensions/subagent/index.js +0 -151
- package/dist/extensions/subagent/index.js.map +0 -1
- package/dist/extensions/subagent/model-selection.d.ts +0 -16
- package/dist/extensions/subagent/model-selection.d.ts.map +0 -1
- package/dist/extensions/subagent/model-selection.js +0 -51
- package/dist/extensions/subagent/model-selection.js.map +0 -1
- package/dist/extensions/subagent/render.d.ts +0 -24
- package/dist/extensions/subagent/render.d.ts.map +0 -1
- package/dist/extensions/subagent/render.js +0 -336
- package/dist/extensions/subagent/render.js.map +0 -1
- package/dist/extensions/subagent/resolve.d.ts +0 -31
- package/dist/extensions/subagent/resolve.d.ts.map +0 -1
- package/dist/extensions/subagent/resolve.js +0 -111
- package/dist/extensions/subagent/resolve.js.map +0 -1
- package/dist/extensions/subagent/runner.d.ts +0 -35
- package/dist/extensions/subagent/runner.d.ts.map +0 -1
- package/dist/extensions/subagent/runner.js +0 -255
- package/dist/extensions/subagent/runner.js.map +0 -1
- package/dist/extensions/subagent/schema.d.ts +0 -28
- package/dist/extensions/subagent/schema.d.ts.map +0 -1
- package/dist/extensions/subagent/schema.js +0 -58
- package/dist/extensions/subagent/schema.js.map +0 -1
- package/dist/extensions/subagent/sdk-runner.d.ts +0 -33
- package/dist/extensions/subagent/sdk-runner.d.ts.map +0 -1
- package/dist/extensions/subagent/sdk-runner.js +0 -331
- package/dist/extensions/subagent/sdk-runner.js.map +0 -1
- package/dist/extensions/subagent/settings.d.ts +0 -8
- package/dist/extensions/subagent/settings.d.ts.map +0 -1
- package/dist/extensions/subagent/settings.js +0 -206
- package/dist/extensions/subagent/settings.js.map +0 -1
- package/dist/extensions/subagent/state.d.ts +0 -102
- package/dist/extensions/subagent/state.d.ts.map +0 -1
- package/dist/extensions/subagent/state.js +0 -383
- package/dist/extensions/subagent/state.js.map +0 -1
- package/dist/extensions/subagent/text.d.ts +0 -6
- package/dist/extensions/subagent/text.d.ts.map +0 -1
- package/dist/extensions/subagent/text.js +0 -66
- package/dist/extensions/subagent/text.js.map +0 -1
- package/dist/extensions/subagent/types.d.ts +0 -91
- package/dist/extensions/subagent/types.d.ts.map +0 -1
- package/dist/extensions/subagent/types.js +0 -2
- package/dist/extensions/subagent/types.js.map +0 -1
- package/dist/extensions/subagent/ui/agents-dialog.d.ts +0 -4
- package/dist/extensions/subagent/ui/agents-dialog.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/agents-dialog.js +0 -84
- package/dist/extensions/subagent/ui/agents-dialog.js.map +0 -1
- package/dist/extensions/subagent/ui/choice-menu.d.ts +0 -39
- package/dist/extensions/subagent/ui/choice-menu.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/choice-menu.js +0 -93
- package/dist/extensions/subagent/ui/choice-menu.js.map +0 -1
- package/dist/extensions/subagent/ui/choices.d.ts +0 -36
- package/dist/extensions/subagent/ui/choices.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/choices.js +0 -54
- package/dist/extensions/subagent/ui/choices.js.map +0 -1
- package/dist/extensions/subagent/ui/model-list.d.ts +0 -66
- package/dist/extensions/subagent/ui/model-list.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/model-list.js +0 -235
- package/dist/extensions/subagent/ui/model-list.js.map +0 -1
- package/dist/extensions/subagent/ui/model-picker.d.ts +0 -47
- package/dist/extensions/subagent/ui/model-picker.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/model-picker.js +0 -143
- package/dist/extensions/subagent/ui/model-picker.js.map +0 -1
- package/dist/extensions/subagent/ui/profile-settings-menu.d.ts +0 -41
- package/dist/extensions/subagent/ui/profile-settings-menu.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/profile-settings-menu.js +0 -98
- package/dist/extensions/subagent/ui/profile-settings-menu.js.map +0 -1
- package/dist/modes/interactive/components/tool-chrome.d.ts +0 -28
- package/dist/modes/interactive/components/tool-chrome.d.ts.map +0 -1
- package/dist/modes/interactive/components/tool-chrome.js +0 -84
- package/dist/modes/interactive/components/tool-chrome.js.map +0 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
- package/dist/modes/interactive/components/tool-execution.js.map +0 -1
- package/dist/modes/interactive/components/tool-group.d.ts +0 -17
- package/dist/modes/interactive/components/tool-group.d.ts.map +0 -1
- package/dist/modes/interactive/components/tool-group.js +0 -78
- package/dist/modes/interactive/components/tool-group.js.map +0 -1
- package/dist/modes/interactive/tool-chat.d.ts +0 -21
- package/dist/modes/interactive/tool-chat.d.ts.map +0 -1
- package/dist/modes/interactive/tool-chat.js +0 -58
- package/dist/modes/interactive/tool-chat.js.map +0 -1
- package/docs/bundled/extensions/background.md +0 -132
- package/docs/bundled/extensions/subagent.md +0 -148
- /package/dist/{extensions/background → core/tools/tasks}/types.js +0 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import * as path from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { backgroundAnsi, colorToHex, colorToOklch, foregroundAnsi, getTerminalColorMode, indexedColor, mixColors, parseColor, rgbColor, styleTextWithAnsi, } from "@earendil-works/pi-tui";
|
|
4
4
|
import chalk from "chalk";
|
|
5
5
|
import { getCustomThemesDir, getThemesDir } from "../../../config.js";
|
|
6
6
|
import { closeWatcher, watchWithErrorHandler } from "../../../utils/fs-watch.js";
|
|
7
7
|
import { highlight, supportsLanguage } from "../../../utils/syntax-highlight.js";
|
|
8
8
|
import { stripBom } from "../../../utils/text.js";
|
|
9
|
+
import { generateSystemThemeColors, SYSTEM_THEME_NAME, terminalAppearance } from "./system-theme.js";
|
|
10
|
+
export { SYSTEM_THEME_NAME } from "./system-theme.js";
|
|
9
11
|
let themeJsonValidator;
|
|
10
12
|
/**
|
|
11
13
|
* Install full theme validation. Without it, documents are accepted as-is, which is what built-in
|
|
@@ -15,134 +17,11 @@ let themeJsonValidator;
|
|
|
15
17
|
export function setThemeJsonValidator(validator) {
|
|
16
18
|
themeJsonValidator = validator;
|
|
17
19
|
}
|
|
18
|
-
const THEME_BACKGROUND_KEYS = new Set([
|
|
19
|
-
"selectedBg",
|
|
20
|
-
"searchMatchBg",
|
|
21
|
-
"userMessageBg",
|
|
22
|
-
"customMessageBg",
|
|
23
|
-
"toolPendingBg",
|
|
24
|
-
"toolSuccessBg",
|
|
25
|
-
"toolErrorBg",
|
|
26
|
-
]);
|
|
27
20
|
// ============================================================================
|
|
28
21
|
// Color Utilities
|
|
29
22
|
// ============================================================================
|
|
30
|
-
function hexToRgb(hex) {
|
|
31
|
-
const cleaned = hex.replace("#", "");
|
|
32
|
-
if (cleaned.length !== 6) {
|
|
33
|
-
throw new Error(`Invalid hex color: ${hex}`);
|
|
34
|
-
}
|
|
35
|
-
const r = parseInt(cleaned.substring(0, 2), 16);
|
|
36
|
-
const g = parseInt(cleaned.substring(2, 4), 16);
|
|
37
|
-
const b = parseInt(cleaned.substring(4, 6), 16);
|
|
38
|
-
if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) {
|
|
39
|
-
throw new Error(`Invalid hex color: ${hex}`);
|
|
40
|
-
}
|
|
41
|
-
return { r, g, b };
|
|
42
|
-
}
|
|
43
|
-
// The 6x6x6 color cube channel values (indices 0-5)
|
|
44
|
-
const CUBE_VALUES = [0, 95, 135, 175, 215, 255];
|
|
45
|
-
// Grayscale ramp values (indices 232-255, 24 grays from 8 to 238)
|
|
46
|
-
const GRAY_VALUES = Array.from({ length: 24 }, (_, i) => 8 + i * 10);
|
|
47
|
-
function findClosestCubeIndex(value) {
|
|
48
|
-
let minDist = Infinity;
|
|
49
|
-
let minIdx = 0;
|
|
50
|
-
for (let i = 0; i < CUBE_VALUES.length; i++) {
|
|
51
|
-
const dist = Math.abs(value - CUBE_VALUES[i]);
|
|
52
|
-
if (dist < minDist) {
|
|
53
|
-
minDist = dist;
|
|
54
|
-
minIdx = i;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return minIdx;
|
|
58
|
-
}
|
|
59
|
-
function findClosestGrayIndex(gray) {
|
|
60
|
-
let minDist = Infinity;
|
|
61
|
-
let minIdx = 0;
|
|
62
|
-
for (let i = 0; i < GRAY_VALUES.length; i++) {
|
|
63
|
-
const dist = Math.abs(gray - GRAY_VALUES[i]);
|
|
64
|
-
if (dist < minDist) {
|
|
65
|
-
minDist = dist;
|
|
66
|
-
minIdx = i;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return minIdx;
|
|
70
|
-
}
|
|
71
|
-
function colorDistance(r1, g1, b1, r2, g2, b2) {
|
|
72
|
-
// Weighted Euclidean distance (human eye is more sensitive to green)
|
|
73
|
-
const dr = r1 - r2;
|
|
74
|
-
const dg = g1 - g2;
|
|
75
|
-
const db = b1 - b2;
|
|
76
|
-
return dr * dr * 0.299 + dg * dg * 0.587 + db * db * 0.114;
|
|
77
|
-
}
|
|
78
|
-
function rgbTo256(r, g, b) {
|
|
79
|
-
// Find closest color in the 6x6x6 cube
|
|
80
|
-
const rIdx = findClosestCubeIndex(r);
|
|
81
|
-
const gIdx = findClosestCubeIndex(g);
|
|
82
|
-
const bIdx = findClosestCubeIndex(b);
|
|
83
|
-
const cubeR = CUBE_VALUES[rIdx];
|
|
84
|
-
const cubeG = CUBE_VALUES[gIdx];
|
|
85
|
-
const cubeB = CUBE_VALUES[bIdx];
|
|
86
|
-
const cubeIndex = 16 + 36 * rIdx + 6 * gIdx + bIdx;
|
|
87
|
-
const cubeDist = colorDistance(r, g, b, cubeR, cubeG, cubeB);
|
|
88
|
-
// Find closest grayscale
|
|
89
|
-
const gray = Math.round(0.299 * r + 0.587 * g + 0.114 * b);
|
|
90
|
-
const grayIdx = findClosestGrayIndex(gray);
|
|
91
|
-
const grayValue = GRAY_VALUES[grayIdx];
|
|
92
|
-
const grayIndex = 232 + grayIdx;
|
|
93
|
-
const grayDist = colorDistance(r, g, b, grayValue, grayValue, grayValue);
|
|
94
|
-
// Check if color has noticeable saturation (hue matters)
|
|
95
|
-
// If max-min spread is significant, prefer cube to preserve tint
|
|
96
|
-
const maxC = Math.max(r, g, b);
|
|
97
|
-
const minC = Math.min(r, g, b);
|
|
98
|
-
const spread = maxC - minC;
|
|
99
|
-
// Only consider grayscale if color is nearly neutral (spread < 10)
|
|
100
|
-
// AND grayscale is actually closer
|
|
101
|
-
if (spread < 10 && grayDist < cubeDist) {
|
|
102
|
-
return grayIndex;
|
|
103
|
-
}
|
|
104
|
-
return cubeIndex;
|
|
105
|
-
}
|
|
106
|
-
function hexTo256(hex) {
|
|
107
|
-
const { r, g, b } = hexToRgb(hex);
|
|
108
|
-
return rgbTo256(r, g, b);
|
|
109
|
-
}
|
|
110
|
-
function fgAnsi(color, mode) {
|
|
111
|
-
if (color === "")
|
|
112
|
-
return "\x1b[39m";
|
|
113
|
-
if (typeof color === "number")
|
|
114
|
-
return `\x1b[38;5;${color}m`;
|
|
115
|
-
if (color.startsWith("#")) {
|
|
116
|
-
if (mode === "truecolor") {
|
|
117
|
-
const { r, g, b } = hexToRgb(color);
|
|
118
|
-
return `\x1b[38;2;${r};${g};${b}m`;
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
const index = hexTo256(color);
|
|
122
|
-
return `\x1b[38;5;${index}m`;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
throw new Error(`Invalid color value: ${color}`);
|
|
126
|
-
}
|
|
127
|
-
function bgAnsi(color, mode) {
|
|
128
|
-
if (color === "")
|
|
129
|
-
return "\x1b[49m";
|
|
130
|
-
if (typeof color === "number")
|
|
131
|
-
return `\x1b[48;5;${color}m`;
|
|
132
|
-
if (color.startsWith("#")) {
|
|
133
|
-
if (mode === "truecolor") {
|
|
134
|
-
const { r, g, b } = hexToRgb(color);
|
|
135
|
-
return `\x1b[48;2;${r};${g};${b}m`;
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
const index = hexTo256(color);
|
|
139
|
-
return `\x1b[48;5;${index}m`;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
throw new Error(`Invalid color value: ${color}`);
|
|
143
|
-
}
|
|
144
23
|
function resolveVarRefs(value, vars, visited = new Set()) {
|
|
145
|
-
if (typeof value === "number" || value === "" || value.startsWith("#")) {
|
|
24
|
+
if (typeof value === "number" || value === "" || value.startsWith("#") || /^ok(lch|hsl)\(/i.test(value)) {
|
|
146
25
|
return value;
|
|
147
26
|
}
|
|
148
27
|
if (visited.has(value)) {
|
|
@@ -171,47 +50,161 @@ function withThemeColorFallbacks(colors) {
|
|
|
171
50
|
searchMatchText: colors.searchMatchText ?? colors.text,
|
|
172
51
|
};
|
|
173
52
|
}
|
|
53
|
+
// The terminal's reported colors. Replaced (never mutated) on update, so themes can cache resolved colors
|
|
54
|
+
// by identity.
|
|
55
|
+
let terminalColors = {};
|
|
56
|
+
// While the terminal color query is in flight, the system theme renders in grayscale.
|
|
57
|
+
let terminalColorsPending = false;
|
|
58
|
+
// The terminal's last light/dark report (mode 2031). Only used while it has not reported a background.
|
|
59
|
+
let terminalColorScheme;
|
|
60
|
+
/**
|
|
61
|
+
* Record the terminal's reported colors. Themes use the default colors for tokens set to "" (terminal
|
|
62
|
+
* default); the system theme is generated from all of them. Ends the pending state.
|
|
63
|
+
*/
|
|
64
|
+
export function setTerminalColors(colors) {
|
|
65
|
+
terminalColors = { ...colors };
|
|
66
|
+
terminalColorsPending = false;
|
|
67
|
+
}
|
|
68
|
+
/** Record the terminal's light/dark report, the fallback for terminals that do not report their background. */
|
|
69
|
+
export function setTerminalColorScheme(scheme) {
|
|
70
|
+
terminalColorScheme = scheme;
|
|
71
|
+
}
|
|
72
|
+
/** Render the system theme in grayscale until `setTerminalColors()` reports the terminal's colors. */
|
|
73
|
+
export function markTerminalColorsPending() {
|
|
74
|
+
terminalColorsPending = true;
|
|
75
|
+
}
|
|
76
|
+
/** Assumed terminal default colors when the terminal does not report them. */
|
|
77
|
+
const GUESSED_DEFAULT_COLORS = {
|
|
78
|
+
dark: { foreground: parseColor("#e5e5e7"), background: parseColor("#000000") },
|
|
79
|
+
light: { foreground: parseColor("#000000"), background: parseColor("#ffffff") },
|
|
80
|
+
};
|
|
81
|
+
function averageLightness(colors) {
|
|
82
|
+
// Palette colors 0-15 follow the user's terminal palette, so they say nothing about the theme.
|
|
83
|
+
const fixed = colors.filter((color) => color.kind !== "indexed" || color.index >= 16);
|
|
84
|
+
if (fixed.length === 0)
|
|
85
|
+
return undefined;
|
|
86
|
+
return fixed.reduce((sum, color) => sum + colorToOklch(color).l, 0) / fixed.length;
|
|
87
|
+
}
|
|
88
|
+
/** Detect the background a theme is designed for from the lightness of its own colors. */
|
|
89
|
+
function detectAppearance(foregrounds, backgrounds) {
|
|
90
|
+
const fg = averageLightness(foregrounds);
|
|
91
|
+
const bg = averageLightness(backgrounds);
|
|
92
|
+
if (fg !== undefined && bg !== undefined)
|
|
93
|
+
return bg < fg ? "dark" : "light";
|
|
94
|
+
if (bg !== undefined)
|
|
95
|
+
return bg < 0.5 ? "dark" : "light";
|
|
96
|
+
if (fg !== undefined)
|
|
97
|
+
return fg > 0.5 ? "dark" : "light";
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
174
100
|
// ============================================================================
|
|
175
101
|
// Theme Class
|
|
176
102
|
// ============================================================================
|
|
177
103
|
export class Theme {
|
|
178
104
|
constructor(fgColors, bgColors, mode, options = {}) {
|
|
105
|
+
// Precomputed escape sequences keep fg()/bg() on the render hot path to a lookup and concat.
|
|
106
|
+
this.fgAnsi = new Map();
|
|
107
|
+
this.bgAnsi = new Map();
|
|
108
|
+
// Tokens set to "" have no color of their own; `colors` fills them from the terminal defaults.
|
|
109
|
+
this.concreteColors = {};
|
|
110
|
+
this.defaultForegroundTokens = [];
|
|
111
|
+
this.defaultBackgroundTokens = [];
|
|
179
112
|
this.name = options.name;
|
|
180
113
|
this.sourcePath = options.sourcePath;
|
|
181
114
|
this.sourceInfo = options.sourceInfo;
|
|
182
115
|
this.mode = mode;
|
|
183
|
-
this.
|
|
184
|
-
const
|
|
116
|
+
this.dimTokens = new Set(options.dim);
|
|
117
|
+
const foregrounds = {
|
|
185
118
|
...fgColors,
|
|
186
119
|
scrollbarTrack: fgColors.scrollbarTrack ?? fgColors.muted,
|
|
187
120
|
scrollbarThumb: fgColors.scrollbarThumb ?? fgColors.text,
|
|
188
121
|
thinkingMax: fgColors.thinkingMax ?? fgColors.thinkingXhigh,
|
|
189
122
|
searchMatchText: fgColors.searchMatchText ?? fgColors.text,
|
|
190
123
|
};
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
const
|
|
196
|
-
|
|
197
|
-
|
|
124
|
+
const backgrounds = { ...bgColors, searchMatchBg: bgColors.searchMatchBg ?? bgColors.selectedBg };
|
|
125
|
+
const concreteForegrounds = [];
|
|
126
|
+
const concreteBackgrounds = [];
|
|
127
|
+
// Returns the escape sequence for the token's own slot.
|
|
128
|
+
const addToken = (token, value, isBackground) => {
|
|
129
|
+
if (value === "") {
|
|
130
|
+
(isBackground ? this.defaultBackgroundTokens : this.defaultForegroundTokens).push(token);
|
|
131
|
+
return isBackground ? "\x1b[49m" : "\x1b[39m";
|
|
132
|
+
}
|
|
133
|
+
const color = parseColor(value);
|
|
134
|
+
this.concreteColors[token] = color;
|
|
135
|
+
(isBackground ? concreteBackgrounds : concreteForegrounds).push(color);
|
|
136
|
+
return isBackground ? backgroundAnsi(color, mode) : foregroundAnsi(color, mode);
|
|
198
137
|
};
|
|
199
|
-
for (const [
|
|
200
|
-
this.
|
|
138
|
+
for (const [token, value] of Object.entries(foregrounds)) {
|
|
139
|
+
this.fgAnsi.set(token, addToken(token, value, false));
|
|
140
|
+
}
|
|
141
|
+
for (const [token, value] of Object.entries(backgrounds)) {
|
|
142
|
+
this.bgAnsi.set(token, addToken(token, value, true));
|
|
143
|
+
}
|
|
144
|
+
this.ownAppearance = options.appearance ?? detectAppearance(concreteForegrounds, concreteBackgrounds);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* The background the theme is designed for: declared in the theme JSON, detected from its colors,
|
|
148
|
+
* or, for themes without usable colors, the terminal's appearance.
|
|
149
|
+
*/
|
|
150
|
+
get appearance() {
|
|
151
|
+
return this.ownAppearance ?? getTerminalTheme();
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Concrete colors for all tokens. Tokens set to "" (terminal default) use the terminal's reported
|
|
155
|
+
* default colors, or a guess based on `appearance` when the terminal did not report them. Faint
|
|
156
|
+
* tokens are approximated by mixing their color toward the background.
|
|
157
|
+
*/
|
|
158
|
+
get colors() {
|
|
159
|
+
const terminal = terminalColors;
|
|
160
|
+
if (this.resolvedColors?.terminal !== terminal) {
|
|
161
|
+
const guess = GUESSED_DEFAULT_COLORS[this.appearance];
|
|
162
|
+
const toColor = (rgb, fallback) => rgb ? rgbColor(rgb.r, rgb.g, rgb.b) : fallback;
|
|
163
|
+
const foreground = toColor(terminal.foreground, guess.foreground);
|
|
164
|
+
const background = toColor(terminal.background, guess.background);
|
|
165
|
+
const colors = { ...this.concreteColors };
|
|
166
|
+
for (const token of this.defaultForegroundTokens)
|
|
167
|
+
colors[token] = foreground;
|
|
168
|
+
for (const token of this.defaultBackgroundTokens)
|
|
169
|
+
colors[token] = background;
|
|
170
|
+
for (const token of this.dimTokens) {
|
|
171
|
+
const color = colors[token];
|
|
172
|
+
if (color)
|
|
173
|
+
colors[token] = mixColors(color, background, 0.4);
|
|
174
|
+
}
|
|
175
|
+
this.resolvedColors = { terminal, colors: Object.freeze(colors) };
|
|
201
176
|
}
|
|
177
|
+
return this.resolvedColors.colors;
|
|
178
|
+
}
|
|
179
|
+
style(text, options) {
|
|
180
|
+
const { fg, bg } = options;
|
|
181
|
+
if (typeof fg === "string" && this.dimTokens.has(fg))
|
|
182
|
+
options = { ...options, dim: true };
|
|
183
|
+
return styleTextWithAnsi(text, fg === undefined
|
|
184
|
+
? undefined
|
|
185
|
+
: typeof fg === "string"
|
|
186
|
+
? this.tokenAnsi(this.fgAnsi, fg)
|
|
187
|
+
: foregroundAnsi(fg, this.mode), bg === undefined
|
|
188
|
+
? undefined
|
|
189
|
+
: typeof bg === "string"
|
|
190
|
+
? this.tokenAnsi(this.bgAnsi, bg)
|
|
191
|
+
: backgroundAnsi(bg, this.mode), options);
|
|
202
192
|
}
|
|
203
193
|
fg(color, text) {
|
|
204
|
-
const ansi = this.
|
|
205
|
-
if (
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
return `${ansi}${text.replaceAll("\x1b[39m", ansi)}\x1b[39m`;
|
|
194
|
+
const ansi = this.tokenAnsi(this.fgAnsi, color);
|
|
195
|
+
if (this.dimTokens.has(color))
|
|
196
|
+
return `${ansi}\x1b[2m${text}\x1b[22;39m`;
|
|
197
|
+
return `${ansi}${text}\x1b[39m`;
|
|
209
198
|
}
|
|
210
199
|
bg(color, text) {
|
|
211
|
-
const ansi = this.
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
200
|
+
const ansi = this.tokenAnsi(this.bgAnsi, color);
|
|
201
|
+
return `${ansi}${text}\x1b[49m`;
|
|
202
|
+
}
|
|
203
|
+
tokenAnsi(ansi, token) {
|
|
204
|
+
const value = ansi.get(token);
|
|
205
|
+
if (value === undefined)
|
|
206
|
+
throw new Error(`Unknown theme color: ${token}`);
|
|
207
|
+
return value;
|
|
215
208
|
}
|
|
216
209
|
bold(text) {
|
|
217
210
|
return chalk.bold(text);
|
|
@@ -228,17 +221,13 @@ export class Theme {
|
|
|
228
221
|
strikethrough(text) {
|
|
229
222
|
return chalk.strikethrough(text);
|
|
230
223
|
}
|
|
224
|
+
/** Opening escape sequence for a foreground token. Faint tokens include SGR 2, which `\x1b[22m` closes. */
|
|
231
225
|
getFgAnsi(color) {
|
|
232
|
-
const ansi = this.
|
|
233
|
-
|
|
234
|
-
throw new Error(`Unknown theme color: ${color}`);
|
|
235
|
-
return ansi;
|
|
226
|
+
const ansi = this.tokenAnsi(this.fgAnsi, color);
|
|
227
|
+
return this.dimTokens.has(color) ? `${ansi}\x1b[2m` : ansi;
|
|
236
228
|
}
|
|
237
229
|
getBgAnsi(color) {
|
|
238
|
-
|
|
239
|
-
if (!ansi)
|
|
240
|
-
throw new Error(`Unknown theme background color: ${color}`);
|
|
241
|
-
return ansi;
|
|
230
|
+
return this.tokenAnsi(this.bgAnsi, color);
|
|
242
231
|
}
|
|
243
232
|
getColorMode() {
|
|
244
233
|
return this.mode;
|
|
@@ -298,7 +287,8 @@ export function getAvailableThemesWithPaths() {
|
|
|
298
287
|
seen.add(themeInfo.name);
|
|
299
288
|
result.push(themeInfo);
|
|
300
289
|
};
|
|
301
|
-
// Built-in themes
|
|
290
|
+
// Built-in themes. The system theme is generated, so it has no file.
|
|
291
|
+
addTheme({ name: SYSTEM_THEME_NAME, path: undefined });
|
|
302
292
|
for (const name of Object.keys(getBuiltinThemes())) {
|
|
303
293
|
addTheme({ name, path: path.join(themesDir, `${name}.json`) });
|
|
304
294
|
}
|
|
@@ -309,7 +299,8 @@ export function getAvailableThemesWithPaths() {
|
|
|
309
299
|
for (const [name, theme] of registeredThemes.entries()) {
|
|
310
300
|
addTheme({ name, path: theme.sourcePath });
|
|
311
301
|
}
|
|
312
|
-
|
|
302
|
+
// The system theme comes first: it is the default and adapts to every terminal.
|
|
303
|
+
return result.sort((a, b) => a.name === SYSTEM_THEME_NAME ? -1 : b.name === SYSTEM_THEME_NAME ? 1 : a.name.localeCompare(b.name));
|
|
313
304
|
}
|
|
314
305
|
function getCustomThemeInfos() {
|
|
315
306
|
const customThemesDir = getCustomThemesDir();
|
|
@@ -379,22 +370,50 @@ function loadThemeJson(name) {
|
|
|
379
370
|
const content = fs.readFileSync(themePath, "utf-8");
|
|
380
371
|
return parseThemeJsonContent(name, content);
|
|
381
372
|
}
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
373
|
+
const BACKGROUND_TOKENS = new Set([
|
|
374
|
+
"selectedBg",
|
|
375
|
+
"searchMatchBg",
|
|
376
|
+
"userMessageBg",
|
|
377
|
+
"customMessageBg",
|
|
378
|
+
"toolPendingBg",
|
|
379
|
+
"toolSuccessBg",
|
|
380
|
+
"toolErrorBg",
|
|
381
|
+
]);
|
|
382
|
+
function splitThemeColors(colors) {
|
|
385
383
|
const fgColors = {};
|
|
386
384
|
const bgColors = {};
|
|
387
|
-
for (const [key, value] of Object.entries(
|
|
388
|
-
if (
|
|
385
|
+
for (const [key, value] of Object.entries(colors)) {
|
|
386
|
+
if (BACKGROUND_TOKENS.has(key)) {
|
|
389
387
|
bgColors[key] = value;
|
|
390
388
|
}
|
|
391
389
|
else {
|
|
392
390
|
fgColors[key] = value;
|
|
393
391
|
}
|
|
394
392
|
}
|
|
393
|
+
return { fgColors, bgColors };
|
|
394
|
+
}
|
|
395
|
+
function createTheme(themeJson, mode, sourcePath) {
|
|
396
|
+
const colorMode = mode ?? getTerminalColorMode();
|
|
397
|
+
const resolvedColors = resolveThemeColors(withThemeColorFallbacks(themeJson.colors), themeJson.vars);
|
|
398
|
+
const { fgColors, bgColors } = splitThemeColors(resolvedColors);
|
|
395
399
|
return new Theme(fgColors, bgColors, colorMode, {
|
|
396
400
|
name: themeJson.name,
|
|
397
401
|
sourcePath,
|
|
402
|
+
appearance: themeJson.appearance,
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
/** Generate the system theme from the terminal's reported colors (grayscale while they are pending). */
|
|
406
|
+
function createSystemTheme(mode) {
|
|
407
|
+
const generated = generateSystemThemeColors({
|
|
408
|
+
...terminalColors,
|
|
409
|
+
saturation: terminalColorsPending ? 0 : 1,
|
|
410
|
+
appearanceHint: getTerminalTheme(),
|
|
411
|
+
});
|
|
412
|
+
const { fgColors, bgColors } = splitThemeColors(generated.colors);
|
|
413
|
+
return new Theme(fgColors, bgColors, mode ?? getTerminalColorMode(), {
|
|
414
|
+
name: SYSTEM_THEME_NAME,
|
|
415
|
+
appearance: generated.appearance,
|
|
416
|
+
dim: generated.dim,
|
|
398
417
|
});
|
|
399
418
|
}
|
|
400
419
|
export function loadThemeFromPath(themePath, mode) {
|
|
@@ -403,6 +422,9 @@ export function loadThemeFromPath(themePath, mode) {
|
|
|
403
422
|
return createTheme(themeJson, mode, themePath);
|
|
404
423
|
}
|
|
405
424
|
function loadTheme(name, mode) {
|
|
425
|
+
// The system theme name is reserved: it takes precedence over custom themes of the same name.
|
|
426
|
+
if (name === SYSTEM_THEME_NAME)
|
|
427
|
+
return createSystemTheme(mode);
|
|
406
428
|
const registeredTheme = registeredThemes.get(name);
|
|
407
429
|
if (registeredTheme) {
|
|
408
430
|
return registeredTheme;
|
|
@@ -443,95 +465,45 @@ export function resolveThemeSetting(themeSetting, terminalTheme) {
|
|
|
443
465
|
return themeSetting;
|
|
444
466
|
return undefined;
|
|
445
467
|
}
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
const
|
|
458
|
-
|
|
459
|
-
return
|
|
460
|
-
|
|
461
|
-
return 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);
|
|
462
|
-
}
|
|
463
|
-
function getAnsiColorLuminance(index) {
|
|
464
|
-
return getRgbColorLuminance(hexToRgb(ansi256ToHex(index)));
|
|
465
|
-
}
|
|
466
|
-
export function getThemeForRgbColor(rgb) {
|
|
467
|
-
return getRgbColorLuminance(rgb) >= 0.5 ? "light" : "dark";
|
|
468
|
-
}
|
|
469
|
-
export function detectTerminalBackgroundFromEnv(options = {}) {
|
|
470
|
-
const env = options.env ?? process.env;
|
|
471
|
-
const colorfgbg = env.COLORFGBG || "";
|
|
472
|
-
const bg = getColorFgBgBackgroundIndex(colorfgbg);
|
|
473
|
-
if (bg !== undefined) {
|
|
474
|
-
return {
|
|
475
|
-
theme: getAnsiColorLuminance(bg) >= 0.5 ? "light" : "dark",
|
|
476
|
-
source: "COLORFGBG",
|
|
477
|
-
detail: `background color index ${bg}`,
|
|
478
|
-
confidence: "high",
|
|
479
|
-
};
|
|
480
|
-
}
|
|
481
|
-
return {
|
|
482
|
-
theme: "dark",
|
|
483
|
-
source: "fallback",
|
|
484
|
-
detail: "no terminal background hint found",
|
|
485
|
-
confidence: "low",
|
|
486
|
-
};
|
|
487
|
-
}
|
|
488
|
-
export async function detectTerminalBackgroundTheme({ ui, timeoutMs, env, }) {
|
|
489
|
-
try {
|
|
490
|
-
const rgb = await ui.queryTerminalBackgroundColor({ timeoutMs });
|
|
491
|
-
if (rgb) {
|
|
492
|
-
return {
|
|
493
|
-
theme: getThemeForRgbColor(rgb),
|
|
494
|
-
source: "terminal background",
|
|
495
|
-
detail: `OSC 11 background rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`,
|
|
496
|
-
confidence: "high",
|
|
497
|
-
};
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
catch {
|
|
501
|
-
// Fall back to environment-based detection when the terminal query fails.
|
|
502
|
-
}
|
|
503
|
-
return detectTerminalBackgroundFromEnv({ env });
|
|
468
|
+
/**
|
|
469
|
+
* Dark or light from the `COLORFGBG` environment variable some terminals set, or undefined without a
|
|
470
|
+
* usable background index. The value is `fg;bg` or `fg;xpm;bg` (rxvt), where a field is an ANSI color
|
|
471
|
+
* index or `default` when the color is not in the palette. The index refers to the terminal's own palette,
|
|
472
|
+
* whose colors are unknown here, so it is classified by index like Vim does: 0-6 and 8 (bright black, e.g.
|
|
473
|
+
* Solarized Dark's background) are dark, 7 and 9-15 are light.
|
|
474
|
+
*/
|
|
475
|
+
export function detectColorFgBgTheme(env = process.env) {
|
|
476
|
+
const bg = env.COLORFGBG?.split(";").at(-1)?.trim();
|
|
477
|
+
if (!bg || !/^\d{1,2}$/.test(bg))
|
|
478
|
+
return undefined;
|
|
479
|
+
const index = Number(bg);
|
|
480
|
+
if (index > 15)
|
|
481
|
+
return undefined;
|
|
482
|
+
return index <= 6 || index === 8 ? "dark" : "light";
|
|
504
483
|
}
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
const colorScheme = await colorSchemePromise;
|
|
516
|
-
if (colorScheme)
|
|
517
|
-
return colorScheme;
|
|
518
|
-
}
|
|
519
|
-
catch {
|
|
520
|
-
// Fall back to the concurrently queried OSC 11 / COLORFGBG detection.
|
|
521
|
-
}
|
|
522
|
-
return (await backgroundThemePromise).theme;
|
|
484
|
+
/**
|
|
485
|
+
* Whether the terminal is dark or light. The background it renders decides, classified the same way the
|
|
486
|
+
* system theme does. Without a reported background: the terminal's light/dark report, then COLORFGBG,
|
|
487
|
+
* then dark.
|
|
488
|
+
*/
|
|
489
|
+
export function detectTerminalTheme(colors = {}, reportedScheme, env = process.env) {
|
|
490
|
+
const { background, foreground } = colors;
|
|
491
|
+
if (background)
|
|
492
|
+
return terminalAppearance(background, foreground);
|
|
493
|
+
return reportedScheme ?? detectColorFgBgTheme(env) ?? "dark";
|
|
523
494
|
}
|
|
524
|
-
|
|
525
|
-
|
|
495
|
+
/** Whether the terminal is dark or light, from everything it reported so far. See `detectTerminalTheme()`. */
|
|
496
|
+
export function getTerminalTheme() {
|
|
497
|
+
return detectTerminalTheme(terminalColors, terminalColorScheme);
|
|
526
498
|
}
|
|
527
499
|
// ============================================================================
|
|
528
500
|
// Global Theme Instance
|
|
529
501
|
// ============================================================================
|
|
530
|
-
// Use globalThis to share theme across module loaders (
|
|
502
|
+
// Use globalThis to share theme across module loaders (node + jiti in dev mode)
|
|
531
503
|
const THEME_KEY = Symbol.for("@earendil-works/pi-coding-agent:theme");
|
|
532
504
|
const THEME_KEY_OLD = Symbol.for("@mariozechner/pi-coding-agent:theme");
|
|
533
505
|
// Export theme as a getter that reads from globalThis
|
|
534
|
-
// This ensures all module instances (
|
|
506
|
+
// This ensures all module instances (node, jiti) see the same theme
|
|
535
507
|
export const theme = new Proxy({}, {
|
|
536
508
|
get(_target, prop) {
|
|
537
509
|
const t = globalThis[THEME_KEY];
|
|
@@ -559,7 +531,7 @@ export function setRegisteredThemes(themes) {
|
|
|
559
531
|
}
|
|
560
532
|
}
|
|
561
533
|
export function initTheme(themeName, enableWatcher = false) {
|
|
562
|
-
const name = themeName ??
|
|
534
|
+
const name = themeName ?? SYSTEM_THEME_NAME;
|
|
563
535
|
currentThemeName = name;
|
|
564
536
|
try {
|
|
565
537
|
setGlobalTheme(loadTheme(name));
|
|
@@ -568,9 +540,9 @@ export function initTheme(themeName, enableWatcher = false) {
|
|
|
568
540
|
}
|
|
569
541
|
}
|
|
570
542
|
catch (_error) {
|
|
571
|
-
// Theme is invalid - fall back to
|
|
572
|
-
currentThemeName =
|
|
573
|
-
setGlobalTheme(loadTheme(
|
|
543
|
+
// Theme is invalid - fall back to the system theme silently
|
|
544
|
+
currentThemeName = SYSTEM_THEME_NAME;
|
|
545
|
+
setGlobalTheme(loadTheme(SYSTEM_THEME_NAME));
|
|
574
546
|
// Don't start watcher for fallback theme
|
|
575
547
|
}
|
|
576
548
|
}
|
|
@@ -587,9 +559,9 @@ export function setTheme(name, enableWatcher = false) {
|
|
|
587
559
|
return { success: true };
|
|
588
560
|
}
|
|
589
561
|
catch (error) {
|
|
590
|
-
// Theme is invalid - fall back to
|
|
591
|
-
currentThemeName =
|
|
592
|
-
setGlobalTheme(loadTheme(
|
|
562
|
+
// Theme is invalid - fall back to the system theme
|
|
563
|
+
currentThemeName = SYSTEM_THEME_NAME;
|
|
564
|
+
setGlobalTheme(loadTheme(SYSTEM_THEME_NAME));
|
|
593
565
|
// Don't start watcher for fallback theme
|
|
594
566
|
return {
|
|
595
567
|
success: false,
|
|
@@ -611,7 +583,7 @@ export function onThemeChange(callback) {
|
|
|
611
583
|
function startThemeWatcher() {
|
|
612
584
|
stopThemeWatcher();
|
|
613
585
|
// Only watch if it's a custom theme (not built-in)
|
|
614
|
-
if (!currentThemeName || currentThemeName in getBuiltinThemes()) {
|
|
586
|
+
if (!currentThemeName || currentThemeName in getBuiltinThemes() || currentThemeName === SYSTEM_THEME_NAME) {
|
|
615
587
|
return;
|
|
616
588
|
}
|
|
617
589
|
const customThemesDir = getCustomThemesDir();
|
|
@@ -680,95 +652,56 @@ export function stopThemeWatcher() {
|
|
|
680
652
|
// ============================================================================
|
|
681
653
|
// HTML Export Helpers
|
|
682
654
|
// ============================================================================
|
|
683
|
-
/**
|
|
684
|
-
* Convert a 256-color index to hex string.
|
|
685
|
-
* Indices 0-15: basic colors (approximate)
|
|
686
|
-
* Indices 16-231: 6x6x6 color cube
|
|
687
|
-
* Indices 232-255: grayscale ramp
|
|
688
|
-
*/
|
|
689
|
-
function ansi256ToHex(index) {
|
|
690
|
-
// Basic colors (0-15) - approximate common terminal values
|
|
691
|
-
const basicColors = [
|
|
692
|
-
"#000000",
|
|
693
|
-
"#800000",
|
|
694
|
-
"#008000",
|
|
695
|
-
"#808000",
|
|
696
|
-
"#000080",
|
|
697
|
-
"#800080",
|
|
698
|
-
"#008080",
|
|
699
|
-
"#c0c0c0",
|
|
700
|
-
"#808080",
|
|
701
|
-
"#ff0000",
|
|
702
|
-
"#00ff00",
|
|
703
|
-
"#ffff00",
|
|
704
|
-
"#0000ff",
|
|
705
|
-
"#ff00ff",
|
|
706
|
-
"#00ffff",
|
|
707
|
-
"#ffffff",
|
|
708
|
-
];
|
|
709
|
-
if (index < 16) {
|
|
710
|
-
return basicColors[index];
|
|
711
|
-
}
|
|
712
|
-
// Color cube (16-231): 6x6x6 = 216 colors
|
|
713
|
-
if (index < 232) {
|
|
714
|
-
const cubeIndex = index - 16;
|
|
715
|
-
const r = Math.floor(cubeIndex / 36);
|
|
716
|
-
const g = Math.floor((cubeIndex % 36) / 6);
|
|
717
|
-
const b = cubeIndex % 6;
|
|
718
|
-
const toHex = (n) => (n === 0 ? 0 : 55 + n * 40).toString(16).padStart(2, "0");
|
|
719
|
-
return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
|
|
720
|
-
}
|
|
721
|
-
// Grayscale (232-255): 24 shades
|
|
722
|
-
const gray = 8 + (index - 232) * 10;
|
|
723
|
-
const grayHex = gray.toString(16).padStart(2, "0");
|
|
724
|
-
return `#${grayHex}${grayHex}${grayHex}`;
|
|
725
|
-
}
|
|
726
655
|
/**
|
|
727
656
|
* Get resolved theme colors as CSS-compatible hex strings.
|
|
728
657
|
* Used by HTML export to generate CSS custom properties.
|
|
729
658
|
*/
|
|
730
659
|
export function getResolvedThemeColors(themeName) {
|
|
731
|
-
const name = themeName ?? currentThemeName ??
|
|
732
|
-
const
|
|
733
|
-
const
|
|
734
|
-
const
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
const
|
|
739
|
-
for (const [
|
|
740
|
-
if (
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
return cssColors;
|
|
660
|
+
const name = themeName ?? currentThemeName ?? SYSTEM_THEME_NAME;
|
|
661
|
+
const colors = loadTheme(name).colors;
|
|
662
|
+
const css = Object.fromEntries(Object.entries(colors).map(([token, color]) => [token, colorToHex(color)]));
|
|
663
|
+
const registered = registeredThemes.get(name);
|
|
664
|
+
if (name === SYSTEM_THEME_NAME || (registered && !registered.sourcePath))
|
|
665
|
+
return css;
|
|
666
|
+
const json = loadThemeJson(name);
|
|
667
|
+
const resolved = resolveThemeColors(withThemeColorFallbacks(json.colors), json.vars);
|
|
668
|
+
for (const [token, value] of Object.entries(resolved)) {
|
|
669
|
+
if (value === "")
|
|
670
|
+
css[token] = BACKGROUND_TOKENS.has(token) ? "transparent" : css.text;
|
|
671
|
+
}
|
|
672
|
+
return css;
|
|
673
|
+
}
|
|
674
|
+
/**
|
|
675
|
+
* Check if a theme is a "light" theme (for CSS that needs light/dark variants).
|
|
676
|
+
*/
|
|
677
|
+
export function isLightTheme(themeName) {
|
|
678
|
+
return loadTheme(themeName ?? currentThemeName ?? SYSTEM_THEME_NAME).appearance === "light";
|
|
751
679
|
}
|
|
752
680
|
/**
|
|
753
681
|
* Get explicit export colors from theme JSON, if specified.
|
|
754
682
|
* Returns undefined for each color that isn't explicitly set.
|
|
755
683
|
*/
|
|
756
684
|
export function getThemeExportColors(themeName) {
|
|
757
|
-
const name = themeName ?? currentThemeName ??
|
|
685
|
+
const name = themeName ?? currentThemeName ?? SYSTEM_THEME_NAME;
|
|
686
|
+
if (name === SYSTEM_THEME_NAME)
|
|
687
|
+
return {};
|
|
758
688
|
try {
|
|
759
689
|
const themeJson = loadThemeJson(name);
|
|
760
690
|
const exportSection = themeJson.export;
|
|
761
691
|
if (!exportSection)
|
|
762
692
|
return {};
|
|
763
693
|
const vars = themeJson.vars ?? {};
|
|
694
|
+
// Export colors end up in CSS, which understands hex and oklch() values directly but not okhsl().
|
|
764
695
|
const resolve = (value) => {
|
|
765
696
|
if (value === undefined)
|
|
766
697
|
return undefined;
|
|
767
698
|
const resolved = resolveVarRefs(value, vars);
|
|
768
699
|
if (typeof resolved === "number")
|
|
769
|
-
return
|
|
700
|
+
return colorToHex(indexedColor(resolved));
|
|
770
701
|
if (resolved === "")
|
|
771
702
|
return undefined;
|
|
703
|
+
if (/^okhsl\(/i.test(resolved))
|
|
704
|
+
return colorToHex(parseColor(resolved));
|
|
772
705
|
return resolved;
|
|
773
706
|
};
|
|
774
707
|
return {
|
|
@@ -928,7 +861,7 @@ export function getMarkdownTheme() {
|
|
|
928
861
|
bold: (text) => theme.bold(text),
|
|
929
862
|
italic: (text) => theme.italic(text),
|
|
930
863
|
underline: (text) => theme.underline(text),
|
|
931
|
-
strikethrough: (text) =>
|
|
864
|
+
strikethrough: (text) => theme.strikethrough(text),
|
|
932
865
|
highlightCode: (code, lang) => {
|
|
933
866
|
// Validate language before highlighting to avoid stderr spam from cli-highlight
|
|
934
867
|
const validLang = lang && supportsLanguage(lang) ? lang : undefined;
|