@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,8 +1,10 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { boundedResult, boundText, finiteLimit, readOutputSlice, sliceText, TASK_TITLE_BYTES } from "./output.js";
|
|
3
|
+
import { readTaskProjection } from "./presentation.js";
|
|
4
|
+
import { TaskStore } from "./store.js";
|
|
5
|
+
import { TASK_BACKGROUND_REJECTION, TaskExecutionError, TaskLookupError, } from "./types.js";
|
|
6
|
+
import { TaskViewRegistry } from "./view.js";
|
|
7
|
+
import { readTaskViewData } from "./view-data.js";
|
|
6
8
|
function errorText(error) {
|
|
7
9
|
try {
|
|
8
10
|
return boundText(error instanceof Error ? error.message : String(error), 4096);
|
|
@@ -12,7 +14,7 @@ function errorText(error) {
|
|
|
12
14
|
}
|
|
13
15
|
}
|
|
14
16
|
function storeResult(task, result, truncated = false) {
|
|
15
|
-
const bounded = boundedResult(result);
|
|
17
|
+
const bounded = boundedResult({ content: result.content, details: undefined });
|
|
16
18
|
task.result = bounded;
|
|
17
19
|
task.resultTruncated =
|
|
18
20
|
truncated ||
|
|
@@ -22,24 +24,16 @@ function storeResult(task, result, truncated = false) {
|
|
|
22
24
|
return original?.type !== "text" || block.type !== "text" || block.text !== original.text;
|
|
23
25
|
});
|
|
24
26
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
for (const task of tasks) {
|
|
28
|
-
if (!oldest || task.endedAt < oldest.endedAt)
|
|
29
|
-
oldest = task;
|
|
30
|
-
}
|
|
31
|
-
return oldest;
|
|
32
|
-
}
|
|
33
|
-
/** Session-local supervision. Executors own their processes, workers and output files. */
|
|
34
|
-
export class BackgroundService {
|
|
27
|
+
/** Session-local supervision. Executors own their processes, items and output files. */
|
|
28
|
+
export class TaskRuntime {
|
|
35
29
|
get closed() {
|
|
36
30
|
return this._closed;
|
|
37
31
|
}
|
|
38
32
|
constructor(options = {}) {
|
|
39
|
-
this.
|
|
33
|
+
this.views = new TaskViewRegistry();
|
|
34
|
+
this.executions = new Map();
|
|
40
35
|
this.listeners = new Set();
|
|
41
36
|
this._closed = false;
|
|
42
|
-
this.cleanups = new Set();
|
|
43
37
|
this.pauses = 0;
|
|
44
38
|
this.options = options;
|
|
45
39
|
this.configuredEnabled = options.enabled ?? false;
|
|
@@ -47,6 +41,7 @@ export class BackgroundService {
|
|
|
47
41
|
this.maxHistory = finiteLimit(options.maxHistory, 32, 1024);
|
|
48
42
|
// Separate foreground shell history, plus the existing history/protected-record allowance.
|
|
49
43
|
this.maxRetained = this.maxActive + 2 * Math.max(1, this.maxHistory) + this.maxHistory;
|
|
44
|
+
this.store = new TaskStore(this.maxHistory, this.maxRetained, () => this.closed, options.onCleanupError);
|
|
50
45
|
}
|
|
51
46
|
/**
|
|
52
47
|
* Rehydrate terminal version-2 custom data only, newest endedAt in each history
|
|
@@ -55,68 +50,10 @@ export class BackgroundService {
|
|
|
55
50
|
* The host supplies the current branch; closed services ignore restoration.
|
|
56
51
|
*/
|
|
57
52
|
restoreHistory(records) {
|
|
58
|
-
|
|
59
|
-
return;
|
|
60
|
-
// Restoration must not evict runtime-owned records or run their cleanup callbacks.
|
|
61
|
-
const history = this.historyRecords();
|
|
62
|
-
const shells = history.filter((record) => isForegroundShellTask(record.task)).length;
|
|
63
|
-
const shellCapacity = Math.max(0, this.maxHistory - shells);
|
|
64
|
-
const taskCapacity = Math.max(0, this.maxHistory - (history.length - shells));
|
|
65
|
-
const capacity = Math.max(0, Math.min(shellCapacity + taskCapacity, this.maxRetained - this.records.size - this.cleanups.size));
|
|
66
|
-
const newest = new Map();
|
|
67
|
-
for (const value of records) {
|
|
68
|
-
const task = parseBackgroundHistory(value);
|
|
69
|
-
if (!task)
|
|
70
|
-
continue;
|
|
71
|
-
const existing = this.records.get(task.id);
|
|
72
|
-
if (existing) {
|
|
73
|
-
if (existing.settled)
|
|
74
|
-
existing.visible = true;
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
if (capacity === 0)
|
|
78
|
-
continue;
|
|
79
|
-
const previous = newest.get(task.id);
|
|
80
|
-
if (previous && previous.endedAt > task.endedAt)
|
|
81
|
-
continue;
|
|
82
|
-
newest.delete(task.id);
|
|
83
|
-
const shell = isForegroundShellTask(task);
|
|
84
|
-
const limit = shell ? shellCapacity : taskCapacity;
|
|
85
|
-
if (limit === 0)
|
|
86
|
-
continue;
|
|
87
|
-
newest.set(task.id, task);
|
|
88
|
-
const group = [...newest.values()].filter((candidate) => isForegroundShellTask(candidate) === shell);
|
|
89
|
-
if (group.length > limit)
|
|
90
|
-
newest.delete(oldestTask(group).id);
|
|
91
|
-
if (newest.size > capacity) {
|
|
92
|
-
// Protected runtime records can leave less room than both histories allow.
|
|
93
|
-
// Restore inspectable tasks before hidden foreground shell logs in that case.
|
|
94
|
-
const foreground = [...newest.values()].filter(isForegroundShellTask);
|
|
95
|
-
newest.delete(oldestTask(foreground.length ? foreground : newest.values()).id);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
for (const task of [...newest.values()].sort((a, b) => a.endedAt - b.endedAt)) {
|
|
99
|
-
this.records.set(task.id, {
|
|
100
|
-
task,
|
|
101
|
-
controller: new AbortController(),
|
|
102
|
-
accepted: false,
|
|
103
|
-
handedOff: false,
|
|
104
|
-
detachRequested: false,
|
|
105
|
-
settled: true,
|
|
106
|
-
accounted: true,
|
|
107
|
-
visible: true,
|
|
108
|
-
suppressed: true,
|
|
109
|
-
delivery: "delivered",
|
|
110
|
-
pins: 0,
|
|
111
|
-
waiters: new Set(),
|
|
112
|
-
removeParent: () => { },
|
|
113
|
-
handoff: () => { },
|
|
114
|
-
done: Promise.resolve(),
|
|
115
|
-
});
|
|
116
|
-
}
|
|
53
|
+
this.store.restoreHistory(records);
|
|
117
54
|
}
|
|
118
55
|
get enabled() {
|
|
119
|
-
return this.configuredEnabled && !this.closed && this.options.
|
|
56
|
+
return this.configuredEnabled && !this.closed && this.options.backgroundAllowed !== false;
|
|
120
57
|
}
|
|
121
58
|
setEnabled(enabled) {
|
|
122
59
|
this.configuredEnabled = enabled;
|
|
@@ -124,27 +61,30 @@ export class BackgroundService {
|
|
|
124
61
|
}
|
|
125
62
|
async execute(execution) {
|
|
126
63
|
// Admission and registration happen synchronously, before invoking user code or awaiting anything.
|
|
127
|
-
if (this.options.
|
|
128
|
-
throw new Error(
|
|
64
|
+
if (execution.background && this.options.backgroundAllowed === false)
|
|
65
|
+
throw new Error(TASK_BACKGROUND_REJECTION);
|
|
129
66
|
if (this.closed)
|
|
130
67
|
throw new Error("Background service is closed");
|
|
131
|
-
if (!this.enabled)
|
|
68
|
+
if (execution.background && !this.enabled)
|
|
132
69
|
throw new Error("Background execution is not available in this host");
|
|
133
70
|
if (execution.signal?.aborted)
|
|
134
71
|
throw execution.signal.reason ?? new Error("Execution aborted");
|
|
135
|
-
if ([...this.records.values()].filter((record) => !record.settled).length >= this.maxActive) {
|
|
72
|
+
if ([...this.store.records.values()].filter((record) => !record.settled).length >= this.maxActive) {
|
|
136
73
|
throw new Error(`Background execution limit reached (${this.maxActive})`);
|
|
137
74
|
}
|
|
138
|
-
if (this.records.size + this.cleanups.size >= this.maxRetained) {
|
|
75
|
+
if (this.store.records.size + this.store.cleanups.size >= this.maxRetained) {
|
|
139
76
|
throw new Error("Background history retention limit reached; deliver pending notifications or release pinned or claimed records");
|
|
140
77
|
}
|
|
78
|
+
if (!/^[a-z][a-z0-9-]{0,63}$/.test(execution.kind))
|
|
79
|
+
throw new Error("Invalid task source");
|
|
141
80
|
const anchorId = this.options.anchor?.() ?? null;
|
|
142
81
|
if (anchorId !== null && Buffer.byteLength(anchorId) > 8192)
|
|
143
82
|
throw new Error("Background branch anchor is too large");
|
|
144
83
|
const task = {
|
|
145
84
|
id: `${execution.kind}-${randomUUID()}`,
|
|
146
85
|
kind: execution.kind,
|
|
147
|
-
|
|
86
|
+
format: execution.format ?? "report",
|
|
87
|
+
title: boundText(execution.title, TASK_TITLE_BYTES),
|
|
148
88
|
toolCallId: boundText(execution.toolCallId, 512),
|
|
149
89
|
anchorId,
|
|
150
90
|
mode: execution.background ? "background" : "foreground",
|
|
@@ -163,30 +103,35 @@ export class BackgroundService {
|
|
|
163
103
|
let resolveDone;
|
|
164
104
|
const record = {
|
|
165
105
|
task,
|
|
166
|
-
controller: new AbortController(),
|
|
167
|
-
accepted: false,
|
|
168
|
-
handedOff: false,
|
|
169
|
-
detachRequested: execution.background ?? false,
|
|
170
106
|
settled: false,
|
|
171
107
|
accounted: false,
|
|
172
108
|
visible: true,
|
|
173
109
|
suppressed: false,
|
|
174
110
|
delivery: "pending",
|
|
175
111
|
pins: 0,
|
|
112
|
+
deliveryHolds: 0,
|
|
176
113
|
waiters: new Set(),
|
|
114
|
+
};
|
|
115
|
+
const active = {
|
|
116
|
+
controller: new AbortController(),
|
|
117
|
+
accepted: false,
|
|
118
|
+
handedOff: false,
|
|
119
|
+
detachRequested: execution.background ?? false,
|
|
120
|
+
modeListeners: new Set(),
|
|
177
121
|
removeParent: () => { },
|
|
178
122
|
handoff: () => {
|
|
179
|
-
if (!
|
|
180
|
-
!
|
|
123
|
+
if (!active.accepted ||
|
|
124
|
+
!active.detachRequested ||
|
|
181
125
|
record.settled ||
|
|
182
|
-
|
|
126
|
+
active.handedOff ||
|
|
183
127
|
this.closed ||
|
|
184
128
|
record.suppressed ||
|
|
185
|
-
|
|
129
|
+
active.controller.signal.aborted)
|
|
186
130
|
return;
|
|
131
|
+
active.handedOff = true;
|
|
187
132
|
record.handedOff = true;
|
|
188
133
|
task.mode = "background";
|
|
189
|
-
|
|
134
|
+
active.removeParent();
|
|
190
135
|
resolveCaller({ kind: "background", task: this.snapshot(record) });
|
|
191
136
|
this.emit();
|
|
192
137
|
},
|
|
@@ -197,31 +142,41 @@ export class BackgroundService {
|
|
|
197
142
|
const parentSignal = execution.signal;
|
|
198
143
|
let onUpdate = execution.background ? undefined : execution.onUpdate;
|
|
199
144
|
const parentAbort = () => {
|
|
200
|
-
if (!
|
|
145
|
+
if (!active.detachRequested || !active.accepted)
|
|
201
146
|
this.cancel(record);
|
|
202
147
|
};
|
|
203
148
|
parentSignal?.addEventListener("abort", parentAbort, { once: true });
|
|
204
|
-
|
|
149
|
+
active.removeParent = () => {
|
|
205
150
|
parentSignal?.removeEventListener("abort", parentAbort);
|
|
206
151
|
onUpdate = undefined;
|
|
207
152
|
};
|
|
208
|
-
this.records.set(task.id, record);
|
|
153
|
+
this.store.records.set(task.id, record);
|
|
154
|
+
this.executions.set(task.id, active);
|
|
209
155
|
const control = {
|
|
210
156
|
id: task.id,
|
|
211
|
-
signal:
|
|
157
|
+
signal: active.controller.signal,
|
|
212
158
|
get mode() {
|
|
213
159
|
return task.mode;
|
|
214
160
|
},
|
|
161
|
+
onModeChange: (listener) => {
|
|
162
|
+
if (record.settled || this.closed)
|
|
163
|
+
return () => { };
|
|
164
|
+
active.modeListeners.add(listener);
|
|
165
|
+
return () => {
|
|
166
|
+
active.modeListeners.delete(listener);
|
|
167
|
+
};
|
|
168
|
+
},
|
|
169
|
+
requestCancel: () => this.cancel(record),
|
|
215
170
|
accept: () => {
|
|
216
|
-
if (record.settled ||
|
|
171
|
+
if (record.settled || active.accepted || this.closed || active.controller.signal.aborted)
|
|
217
172
|
return;
|
|
218
|
-
|
|
173
|
+
active.accepted = true;
|
|
219
174
|
if (task.status === "queued")
|
|
220
175
|
task.status = "running";
|
|
221
|
-
if (
|
|
222
|
-
|
|
176
|
+
if (active.detachRequested)
|
|
177
|
+
active.removeParent();
|
|
223
178
|
// Let an already available final result win over a handoff.
|
|
224
|
-
queueMicrotask(() => queueMicrotask(
|
|
179
|
+
queueMicrotask(() => queueMicrotask(active.handoff));
|
|
225
180
|
this.emit();
|
|
226
181
|
},
|
|
227
182
|
publish: (result, projection) => {
|
|
@@ -229,10 +184,10 @@ export class BackgroundService {
|
|
|
229
184
|
return;
|
|
230
185
|
storeResult(task, result);
|
|
231
186
|
if (result.usage !== undefined)
|
|
232
|
-
|
|
187
|
+
active.publishedUsage = structuredClone(result.usage);
|
|
233
188
|
if (projection)
|
|
234
|
-
task.projection =
|
|
235
|
-
if (!
|
|
189
|
+
task.projection = readTaskProjection(projection);
|
|
190
|
+
if (!active.detachRequested && !active.handedOff) {
|
|
236
191
|
try {
|
|
237
192
|
onUpdate?.(result);
|
|
238
193
|
}
|
|
@@ -257,19 +212,26 @@ export class BackgroundService {
|
|
|
257
212
|
task.outputPath = path;
|
|
258
213
|
this.emit();
|
|
259
214
|
},
|
|
215
|
+
publishView: (data) => {
|
|
216
|
+
if (record.settled || this.closed)
|
|
217
|
+
return;
|
|
218
|
+
task.viewData = readTaskViewData(data);
|
|
219
|
+
this.emit();
|
|
220
|
+
},
|
|
260
221
|
};
|
|
261
222
|
const finish = (completion, error) => {
|
|
262
223
|
if (record.settled)
|
|
263
224
|
return;
|
|
264
225
|
record.settled = true;
|
|
265
|
-
|
|
226
|
+
active.modeListeners.clear();
|
|
227
|
+
active.removeParent();
|
|
266
228
|
task.endedAt = Date.now();
|
|
267
229
|
const failed = completion === undefined;
|
|
268
230
|
task.status =
|
|
269
231
|
completion?.status ??
|
|
270
|
-
(error instanceof
|
|
232
|
+
(error instanceof TaskExecutionError
|
|
271
233
|
? error.status
|
|
272
|
-
:
|
|
234
|
+
: active.controller.signal.aborted
|
|
273
235
|
? "cancelled"
|
|
274
236
|
: failed
|
|
275
237
|
? "failed"
|
|
@@ -290,7 +252,7 @@ export class BackgroundService {
|
|
|
290
252
|
}
|
|
291
253
|
let settlementWarning;
|
|
292
254
|
try {
|
|
293
|
-
this.options.onSettled?.(this.snapshot(record), completion?.usage ?? completion?.result.usage ??
|
|
255
|
+
this.options.onSettled?.(this.snapshot(record), completion?.usage ?? completion?.result.usage ?? active.publishedUsage);
|
|
294
256
|
}
|
|
295
257
|
catch (accountingError) {
|
|
296
258
|
const warning = `Usage settlement failed: ${errorText(accountingError)}`;
|
|
@@ -301,9 +263,9 @@ export class BackgroundService {
|
|
|
301
263
|
details: task.result?.details,
|
|
302
264
|
}, task.resultTruncated);
|
|
303
265
|
}
|
|
304
|
-
|
|
266
|
+
active.publishedUsage = undefined;
|
|
305
267
|
record.accounted = true;
|
|
306
|
-
if (!
|
|
268
|
+
if (!active.handedOff) {
|
|
307
269
|
record.delivery = "delivered";
|
|
308
270
|
if (failed)
|
|
309
271
|
rejectCaller(error);
|
|
@@ -317,7 +279,8 @@ export class BackgroundService {
|
|
|
317
279
|
for (const waiter of [...record.waiters])
|
|
318
280
|
waiter();
|
|
319
281
|
resolveDone();
|
|
320
|
-
this.
|
|
282
|
+
this.executions.delete(task.id);
|
|
283
|
+
this.store.trim();
|
|
321
284
|
this.emit();
|
|
322
285
|
};
|
|
323
286
|
// The rejection handler is installed immediately, including for synchronous preflight throws.
|
|
@@ -334,30 +297,57 @@ export class BackgroundService {
|
|
|
334
297
|
detachForeground() {
|
|
335
298
|
if (!this.enabled)
|
|
336
299
|
return 0;
|
|
337
|
-
const records = [...this.records.values()].filter((record) =>
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
record.removeParent();
|
|
344
|
-
}
|
|
300
|
+
const records = [...this.store.records.values()].filter((record) => {
|
|
301
|
+
const active = this.executions.get(record.task.id);
|
|
302
|
+
return active && !record.settled && !active.detachRequested && !active.controller.signal.aborted;
|
|
303
|
+
});
|
|
304
|
+
for (const record of records)
|
|
305
|
+
this.prepareDetach(record);
|
|
345
306
|
for (const record of records)
|
|
346
|
-
|
|
307
|
+
this.finishDetach(record);
|
|
347
308
|
if (records.length)
|
|
348
309
|
this.emit();
|
|
349
310
|
return records.length;
|
|
350
311
|
}
|
|
312
|
+
detach(id) {
|
|
313
|
+
const record = this.lookup(id);
|
|
314
|
+
const active = this.executions.get(record.task.id);
|
|
315
|
+
if (!this.enabled || !active || record.settled || active.detachRequested || active.controller.signal.aborted)
|
|
316
|
+
return false;
|
|
317
|
+
this.prepareDetach(record);
|
|
318
|
+
this.finishDetach(record);
|
|
319
|
+
this.emit();
|
|
320
|
+
return true;
|
|
321
|
+
}
|
|
322
|
+
prepareDetach(record) {
|
|
323
|
+
const active = this.executions.get(record.task.id);
|
|
324
|
+
active.detachRequested = true;
|
|
325
|
+
record.task.mode = "background";
|
|
326
|
+
if (active.accepted)
|
|
327
|
+
active.removeParent();
|
|
328
|
+
}
|
|
329
|
+
finishDetach(record) {
|
|
330
|
+
const active = this.executions.get(record.task.id);
|
|
331
|
+
active.handoff();
|
|
332
|
+
for (const listener of active.modeListeners) {
|
|
333
|
+
try {
|
|
334
|
+
listener(record.task.mode);
|
|
335
|
+
}
|
|
336
|
+
catch {
|
|
337
|
+
/* Executors own their diagnostics. */
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
351
341
|
list() {
|
|
352
|
-
return [...this.records.values()].filter((record) => record.visible).map((record) => this.snapshot(record));
|
|
342
|
+
return [...this.store.records.values()].filter((record) => record.visible).map((record) => this.snapshot(record));
|
|
353
343
|
}
|
|
354
344
|
lookup(id) {
|
|
355
|
-
const exact = this.records.get(id);
|
|
345
|
+
const exact = this.store.records.get(id);
|
|
356
346
|
if (exact)
|
|
357
347
|
return exact;
|
|
358
|
-
const matches = [...this.records.values()].filter(({ task }) => task.id.startsWith(id) || task.id.slice(task.kind.length + 1).startsWith(id));
|
|
348
|
+
const matches = [...this.store.records.values()].filter(({ task }) => task.id.startsWith(id) || task.id.slice(task.kind.length + 1).startsWith(id));
|
|
359
349
|
if (!id || matches.length !== 1) {
|
|
360
|
-
throw new
|
|
350
|
+
throw new TaskLookupError(matches.length > 1 ? "ambiguous" : "unknown", matches.map((record) => this.snapshot(record)));
|
|
361
351
|
}
|
|
362
352
|
return matches[0];
|
|
363
353
|
}
|
|
@@ -366,7 +356,7 @@ export class BackgroundService {
|
|
|
366
356
|
}
|
|
367
357
|
async read(id, options = {}) {
|
|
368
358
|
const record = this.lookup(id);
|
|
369
|
-
const release = this.
|
|
359
|
+
const release = this.retain(record.task.id);
|
|
370
360
|
try {
|
|
371
361
|
const task = this.snapshot(record);
|
|
372
362
|
if (task.outputPath) {
|
|
@@ -418,7 +408,7 @@ export class BackgroundService {
|
|
|
418
408
|
reject(signal?.reason ?? new Error("Wait aborted"));
|
|
419
409
|
else
|
|
420
410
|
resolve(this.snapshot(record));
|
|
421
|
-
this.trim();
|
|
411
|
+
this.store.trim();
|
|
422
412
|
this.emit();
|
|
423
413
|
};
|
|
424
414
|
const wake = () => complete();
|
|
@@ -434,10 +424,11 @@ export class BackgroundService {
|
|
|
434
424
|
return this.cancel(this.lookup(id));
|
|
435
425
|
}
|
|
436
426
|
cancel(record) {
|
|
437
|
-
|
|
427
|
+
const active = this.executions.get(record.task.id);
|
|
428
|
+
if (!active || record.settled || active.controller.signal.aborted)
|
|
438
429
|
return false;
|
|
439
430
|
record.task.status = "stopping";
|
|
440
|
-
|
|
431
|
+
active.controller.abort();
|
|
441
432
|
this.emit();
|
|
442
433
|
return true;
|
|
443
434
|
}
|
|
@@ -450,11 +441,9 @@ export class BackgroundService {
|
|
|
450
441
|
};
|
|
451
442
|
}
|
|
452
443
|
/**
|
|
453
|
-
*
|
|
454
|
-
* never races an automatic notification for the same record. Releasing resumes both, and
|
|
455
|
-
* announces the record only when that unblocks a delivery.
|
|
444
|
+
* Retention protects snapshots and logs only. Delivery has its own explicit hold.
|
|
456
445
|
*/
|
|
457
|
-
|
|
446
|
+
retain(id) {
|
|
458
447
|
const record = this.lookup(id);
|
|
459
448
|
record.pins++;
|
|
460
449
|
let released = false;
|
|
@@ -463,11 +452,24 @@ export class BackgroundService {
|
|
|
463
452
|
return;
|
|
464
453
|
released = true;
|
|
465
454
|
record.pins--;
|
|
466
|
-
this.trim();
|
|
455
|
+
this.store.trim();
|
|
467
456
|
if (!this.closed && this.pauses === 0 && this.candidate(record))
|
|
468
457
|
this.emit();
|
|
469
458
|
};
|
|
470
459
|
}
|
|
460
|
+
holdDelivery(id) {
|
|
461
|
+
const record = this.lookup(id);
|
|
462
|
+
const releaseRetention = this.retain(id);
|
|
463
|
+
record.deliveryHolds++;
|
|
464
|
+
let released = false;
|
|
465
|
+
return () => {
|
|
466
|
+
if (released)
|
|
467
|
+
return;
|
|
468
|
+
released = true;
|
|
469
|
+
record.deliveryHolds--;
|
|
470
|
+
releaseRetention();
|
|
471
|
+
};
|
|
472
|
+
}
|
|
471
473
|
pause() {
|
|
472
474
|
this.pauses++;
|
|
473
475
|
let resumed = false;
|
|
@@ -482,80 +484,80 @@ export class BackgroundService {
|
|
|
482
484
|
pendingNotifications() {
|
|
483
485
|
if (this.closed || this.pauses > 0)
|
|
484
486
|
return [];
|
|
485
|
-
return [...this.records.values()]
|
|
487
|
+
return [...this.store.records.values()]
|
|
486
488
|
.filter((record) => this.candidate(record))
|
|
487
489
|
.map((record) => this.snapshot(record));
|
|
488
490
|
}
|
|
489
491
|
/**
|
|
490
|
-
*
|
|
491
|
-
* a terminal `bg wait` or `bg read` delivers the result as its own tool result instead.
|
|
492
|
+
* Only explicit result-delivery holds delay an automatic completion.
|
|
492
493
|
*/
|
|
493
494
|
candidate(record) {
|
|
494
495
|
return (record.visible &&
|
|
495
496
|
record.settled &&
|
|
496
497
|
record.accounted &&
|
|
497
|
-
record.handedOff &&
|
|
498
|
+
record.handedOff === true &&
|
|
498
499
|
!record.suppressed &&
|
|
499
500
|
record.delivery === "pending" &&
|
|
500
501
|
record.waiters.size === 0 &&
|
|
501
|
-
record.
|
|
502
|
+
record.deliveryHolds === 0);
|
|
502
503
|
}
|
|
503
504
|
claimNotification(id) {
|
|
504
505
|
if (this.closed || this.pauses > 0)
|
|
505
506
|
return false;
|
|
506
|
-
const record = this.records.get(id);
|
|
507
|
+
const record = this.store.records.get(id);
|
|
507
508
|
if (!record || !this.candidate(record))
|
|
508
509
|
return false;
|
|
509
510
|
record.delivery = "claimed";
|
|
510
511
|
return true;
|
|
511
512
|
}
|
|
512
513
|
markDelivered(id) {
|
|
513
|
-
const record = this.records.get(id);
|
|
514
|
+
const record = this.store.records.get(id);
|
|
514
515
|
if (!record)
|
|
515
516
|
return;
|
|
516
517
|
record.delivery = "delivered";
|
|
517
|
-
this.trim();
|
|
518
|
+
this.store.trim();
|
|
518
519
|
}
|
|
519
520
|
releaseNotification(id) {
|
|
520
|
-
const record = this.records.get(id);
|
|
521
|
+
const record = this.store.records.get(id);
|
|
521
522
|
if (!record || record.delivery !== "claimed")
|
|
522
523
|
return;
|
|
523
524
|
record.delivery = "pending";
|
|
524
|
-
this.trim();
|
|
525
|
+
this.store.trim();
|
|
525
526
|
this.emit();
|
|
526
527
|
}
|
|
527
528
|
close() {
|
|
528
529
|
if (this.closed)
|
|
529
530
|
return;
|
|
530
531
|
this._closed = true;
|
|
532
|
+
this.views.close();
|
|
531
533
|
this.listeners.clear();
|
|
532
|
-
for (const record of this.records.values()) {
|
|
534
|
+
for (const record of this.store.records.values()) {
|
|
533
535
|
record.suppressed = true;
|
|
534
|
-
record.removeParent();
|
|
536
|
+
this.executions.get(record.task.id)?.removeParent();
|
|
535
537
|
this.cancel(record);
|
|
536
538
|
for (const waiter of [...record.waiters])
|
|
537
539
|
waiter();
|
|
538
540
|
}
|
|
539
|
-
this.trim();
|
|
541
|
+
this.store.trim();
|
|
540
542
|
}
|
|
541
543
|
async shutdown(graceMs = 2000) {
|
|
542
544
|
this.close();
|
|
543
|
-
await this.drain([...this.records.values()], graceMs);
|
|
545
|
+
await this.drain([...this.store.records.values()], graceMs);
|
|
544
546
|
}
|
|
545
547
|
async cancelOutsideBranch(ancestors) {
|
|
546
|
-
for (const record of this.records.values()) {
|
|
548
|
+
for (const record of this.store.records.values()) {
|
|
547
549
|
record.visible = record.task.anchorId === null || ancestors.has(record.task.anchorId);
|
|
548
550
|
// Returning to a branch revives its undelivered completions; restored history
|
|
549
551
|
// stays delivered and suppressed.
|
|
550
552
|
if (record.visible && record.delivery === "pending")
|
|
551
553
|
record.suppressed = false;
|
|
552
554
|
}
|
|
553
|
-
const outside = [...this.records.values()].filter((record) => !record.visible);
|
|
555
|
+
const outside = [...this.store.records.values()].filter((record) => !record.visible);
|
|
554
556
|
for (const record of outside)
|
|
555
557
|
record.suppressed = true;
|
|
556
558
|
for (const record of outside)
|
|
557
559
|
this.cancel(record);
|
|
558
|
-
this.trim();
|
|
560
|
+
this.store.trim();
|
|
559
561
|
this.emit();
|
|
560
562
|
await this.drain(outside, 2000);
|
|
561
563
|
}
|
|
@@ -563,7 +565,7 @@ export class BackgroundService {
|
|
|
563
565
|
let timer;
|
|
564
566
|
try {
|
|
565
567
|
await Promise.race([
|
|
566
|
-
Promise.all(records.map((record) => record.done)).then(() => Promise.all(this.cleanups)),
|
|
568
|
+
Promise.all(records.map((record) => this.executions.get(record.task.id)?.done)).then(() => Promise.all(this.store.cleanups)),
|
|
567
569
|
new Promise((resolve) => {
|
|
568
570
|
timer = setTimeout(resolve, finiteLimit(graceMs, 2000, 60_000));
|
|
569
571
|
}),
|
|
@@ -577,52 +579,6 @@ export class BackgroundService {
|
|
|
577
579
|
snapshot(record) {
|
|
578
580
|
return structuredClone(record.task);
|
|
579
581
|
}
|
|
580
|
-
cleanupOutput(record) {
|
|
581
|
-
if (!record.settled || record.pins || record.waiters.size || !record.cleanup)
|
|
582
|
-
return;
|
|
583
|
-
const cleanup = record.cleanup;
|
|
584
|
-
record.cleanup = undefined;
|
|
585
|
-
// Snapshots retain final bounded text; expired files are never needed to render history.
|
|
586
|
-
record.task.outputPath = undefined;
|
|
587
|
-
record.readError = "Output has expired: the managed log was released; showing the stored result.";
|
|
588
|
-
const pending = Promise.resolve()
|
|
589
|
-
.then(cleanup)
|
|
590
|
-
.catch((error) => {
|
|
591
|
-
try {
|
|
592
|
-
this.options.onCleanupError?.(errorText(error));
|
|
593
|
-
}
|
|
594
|
-
catch {
|
|
595
|
-
/* Cleanup/reporting is best effort, never an unhandled rejection. */
|
|
596
|
-
}
|
|
597
|
-
})
|
|
598
|
-
.finally(() => this.cleanups.delete(pending));
|
|
599
|
-
this.cleanups.add(pending);
|
|
600
|
-
}
|
|
601
|
-
/** Pending delivery, active reads and pins have their own bounded retention allowance. */
|
|
602
|
-
historyRecords() {
|
|
603
|
-
return [...this.records.values()].filter((record) => record.settled && record.delivery === "delivered" && !record.pins && !record.waiters.size);
|
|
604
|
-
}
|
|
605
|
-
trim() {
|
|
606
|
-
if (this.closed) {
|
|
607
|
-
for (const record of this.records.values())
|
|
608
|
-
this.cleanupOutput(record);
|
|
609
|
-
return;
|
|
610
|
-
}
|
|
611
|
-
// Undelivered notifications and claims are never evicted. Admission bounds all retention.
|
|
612
|
-
const history = this.historyRecords();
|
|
613
|
-
// Delivered history can be restored from branch snapshots; hidden rows must
|
|
614
|
-
// not occupy the current branch's history budget. Pending results stay owned.
|
|
615
|
-
const expired = history.filter((record) => !record.visible);
|
|
616
|
-
for (const shell of [false, true]) {
|
|
617
|
-
const group = history.filter((record) => record.visible && isForegroundShellTask(record.task) === shell);
|
|
618
|
-
group.sort((left, right) => (left.task.endedAt ?? 0) - (right.task.endedAt ?? 0));
|
|
619
|
-
expired.push(...group.slice(0, Math.max(0, group.length - this.maxHistory)));
|
|
620
|
-
}
|
|
621
|
-
for (const record of expired) {
|
|
622
|
-
this.records.delete(record.task.id);
|
|
623
|
-
this.cleanupOutput(record);
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
582
|
emit() {
|
|
627
583
|
if (this.closed)
|
|
628
584
|
return;
|
|
@@ -638,4 +594,4 @@ export class BackgroundService {
|
|
|
638
594
|
}
|
|
639
595
|
}
|
|
640
596
|
}
|
|
641
|
-
//# sourceMappingURL=
|
|
597
|
+
//# sourceMappingURL=runtime.js.map
|