@astralyn/pi 0.87.6 → 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 +30 -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-4W4Q2H6W.js → chunk-VW2P3X6P.js} +905 -278
- 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 +100 -35
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +456 -194
- 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/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 -1
- package/dist/core/extensions/distribution-api.d.ts.map +1 -1
- package/dist/core/extensions/distribution-api.js.map +1 -1
- package/dist/core/extensions/index.d.ts +2 -2
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +55 -5
- 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 +305 -25
- package/dist/core/extensions/types.d.ts.map +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 +30 -5
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +7 -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 +25 -7
- 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 -93
- 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/grep.d.ts +2 -0
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +2 -0
- 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/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/render-utils.d.ts +6 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +26 -0
- 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 +9 -10
- package/dist/core/tools/renderers/bash.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/read.d.ts.map +1 -1
- package/dist/core/tools/renderers/read.js +3 -2
- 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/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/{extensions/background → core/tools/tasks}/constants.d.ts +10 -10
- package/dist/core/tools/tasks/constants.d.ts.map +1 -0
- package/dist/{extensions/background → core/tools/tasks}/constants.js +10 -10
- 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 +4 -3
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +4 -2
- 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/statusline/index.js +2 -2
- package/dist/extensions/statusline/index.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/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 +2 -2
- package/dist/modes/interactive/components/status-marker.js +2 -2
- 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 +214 -163
- 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 +31 -27
- 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 -313
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/interactive/tool-view/fallback.d.ts +1 -1
- package/dist/modes/interactive/tool-view/fallback.d.ts.map +1 -1
- package/dist/modes/interactive/tool-view/fallback.js +4 -1
- package/dist/modes/interactive/tool-view/fallback.js.map +1 -1
- package/dist/modes/interactive/tool-view/tool-execution.js +2 -2
- package/dist/modes/interactive/tool-view/tool-execution.js.map +1 -1
- 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/statusline.md +2 -2
- package/docs/bundled/tasks.md +141 -0
- package/docs/bundled/tool-presentation.md +1 -1
- package/docs/custom-provider.md +44 -0
- package/docs/docs.json +10 -6
- package/docs/extensions.md +89 -86
- package/docs/index.md +2 -1
- package/docs/keybindings.md +8 -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-EDBLK2JQ.js +0 -2
- package/dist/bundle/chunks/chunk-IORR2FW4.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-KUEIEAZN.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 -67
- package/dist/core/background/session.d.ts.map +0 -1
- package/dist/core/background/session.js +0 -248
- 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/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.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 -135
- 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/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
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool calls that a tool makes while it runs (`ctx.executeTool()`), for example from codemode
|
|
3
|
+
* scripts. The agent loop does not know about them: the session runs each one through the agent's
|
|
4
|
+
* tool pipeline (`runToolCall`) with its own hooks, emits `tool_execution_*` events with
|
|
5
|
+
* `parentToolCallId`, and records the calls and their usage on the model-issued call's tool result
|
|
6
|
+
* message.
|
|
7
|
+
*
|
|
8
|
+
* Nothing here runs until a tool calls `ctx.executeTool()`.
|
|
9
|
+
*/
|
|
10
|
+
import type { AgentTool, AgentToolCall, AgentToolCallOutcome, AgentToolResult, AgentToolUpdateCallback } from "@earendil-works/pi-agent-core";
|
|
11
|
+
import type { NestedToolCallRecord, NestedToolCalls, Usage } from "@earendil-works/pi-ai";
|
|
12
|
+
/**
|
|
13
|
+
* Limits of the nested-call record on a tool result: arguments
|
|
14
|
+
* over the per-call or total size are omitted, calls beyond the count are dropped, and the record
|
|
15
|
+
* is marked incomplete when any of that happens.
|
|
16
|
+
*/
|
|
17
|
+
export declare const NESTED_CALL_LIMITS: {
|
|
18
|
+
readonly maxCalls: 256;
|
|
19
|
+
readonly maxArgumentBytesPerCall: number;
|
|
20
|
+
readonly maxArgumentBytesTotal: number;
|
|
21
|
+
readonly maxErrorChars: 500;
|
|
22
|
+
};
|
|
23
|
+
/** What the nested calls of one model-issued tool call leave on its tool result message. */
|
|
24
|
+
export interface NestedCallSummary {
|
|
25
|
+
/** Becomes `nestedCalls`. Undefined when no nested call was made. */
|
|
26
|
+
calls: NestedToolCalls | undefined;
|
|
27
|
+
/** Summed `usage` of the nested results, added to the message's `usage`. */
|
|
28
|
+
usage: Usage | undefined;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Collects the nested calls of one model-issued tool call, including calls made by nested tools.
|
|
32
|
+
* The snapshot becomes `nestedCalls` on the tool result message.
|
|
33
|
+
*/
|
|
34
|
+
export declare class NestedCallRecorder {
|
|
35
|
+
private readonly calls;
|
|
36
|
+
private readonly startedAt;
|
|
37
|
+
private complete;
|
|
38
|
+
private argumentBytes;
|
|
39
|
+
/** Summed usage of every nested result, including calls dropped from the record. */
|
|
40
|
+
private usage;
|
|
41
|
+
/** Record a call as it starts. Returns undefined when the call is dropped. */
|
|
42
|
+
start(toolCall: AgentToolCall): NestedToolCallRecord | undefined;
|
|
43
|
+
finish(record: NestedToolCallRecord | undefined, isError: boolean, errorText: string): void;
|
|
44
|
+
addUsage(usage: Usage): void;
|
|
45
|
+
get totalUsage(): Usage | undefined;
|
|
46
|
+
/** Copy of the record so far, or undefined when no nested call was made. */
|
|
47
|
+
snapshot(): NestedToolCalls | undefined;
|
|
48
|
+
}
|
|
49
|
+
export interface NestedToolCallOptions {
|
|
50
|
+
/** Defaults to the calling tool's signal. */
|
|
51
|
+
signal?: AbortSignal;
|
|
52
|
+
/** Receives partial results of the nested tool, in addition to `tool_execution_update` events. */
|
|
53
|
+
onUpdate?: AgentToolUpdateCallback;
|
|
54
|
+
}
|
|
55
|
+
/** `tool_execution_*` events of nested calls. */
|
|
56
|
+
export type NestedToolExecutionEvent = {
|
|
57
|
+
type: "tool_execution_start";
|
|
58
|
+
toolCallId: string;
|
|
59
|
+
toolName: string;
|
|
60
|
+
args: unknown;
|
|
61
|
+
parentToolCallId: string;
|
|
62
|
+
} | {
|
|
63
|
+
type: "tool_execution_update";
|
|
64
|
+
toolCallId: string;
|
|
65
|
+
toolName: string;
|
|
66
|
+
args: unknown;
|
|
67
|
+
partialResult: AgentToolResult<unknown>;
|
|
68
|
+
parentToolCallId: string;
|
|
69
|
+
} | {
|
|
70
|
+
type: "tool_execution_end";
|
|
71
|
+
toolCallId: string;
|
|
72
|
+
toolName: string;
|
|
73
|
+
result: AgentToolResult<unknown>;
|
|
74
|
+
isError: boolean;
|
|
75
|
+
parentToolCallId: string;
|
|
76
|
+
};
|
|
77
|
+
export interface NestedToolCallHost {
|
|
78
|
+
/** Tools nested calls resolve against. */
|
|
79
|
+
getTools(): readonly AgentTool[];
|
|
80
|
+
/** Whether every nested call runs exclusively, as when the agent executes tool calls sequentially. */
|
|
81
|
+
isSequential(): boolean;
|
|
82
|
+
/** Run the call through the tool pipeline, with hooks that report `parentToolCallId`. */
|
|
83
|
+
runToolCall(toolCall: AgentToolCall, parentToolCallId: string, signal: AbortSignal | undefined, onUpdate: (partialResult: AgentToolResult<unknown>) => Promise<void>): Promise<AgentToolCallOutcome>;
|
|
84
|
+
emit(event: NestedToolExecutionEvent): Promise<void>;
|
|
85
|
+
}
|
|
86
|
+
export declare class NestedToolCallRunner {
|
|
87
|
+
private readonly host;
|
|
88
|
+
/** Scopes by the id of the calling tool call. */
|
|
89
|
+
private readonly scopes;
|
|
90
|
+
/** Serializes nested calls that must not run concurrently. */
|
|
91
|
+
private queueTail;
|
|
92
|
+
constructor(host: NestedToolCallHost);
|
|
93
|
+
/**
|
|
94
|
+
* Run `name` on behalf of the call `callerId`. The nested call gets the id `<callerId>/<n>`.
|
|
95
|
+
* Never rejects for tool failures: they come back as `isError: true`.
|
|
96
|
+
*/
|
|
97
|
+
execute(callerId: string, name: string, args: unknown, options?: NestedToolCallOptions): Promise<AgentToolCallOutcome>;
|
|
98
|
+
/** Remove and return the record of the nested calls a model-issued call made. */
|
|
99
|
+
takeRecord(toolCallId: string): NestedCallSummary | undefined;
|
|
100
|
+
clear(): void;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=nested-tool-calls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nested-tool-calls.d.ts","sourceRoot":"","sources":["../../src/core/nested-tool-calls.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool calls that a tool makes while it runs (`ctx.executeTool()`), for example from codemode
|
|
3
|
+
* scripts. The agent loop does not know about them: the session runs each one through the agent's
|
|
4
|
+
* tool pipeline (`runToolCall`) with its own hooks, emits `tool_execution_*` events with
|
|
5
|
+
* `parentToolCallId`, and records the calls and their usage on the model-issued call's tool result
|
|
6
|
+
* message.
|
|
7
|
+
*
|
|
8
|
+
* Nothing here runs until a tool calls `ctx.executeTool()`.
|
|
9
|
+
*/
|
|
10
|
+
import { combineUsage } from "./usage-totals.js";
|
|
11
|
+
/**
|
|
12
|
+
* Limits of the nested-call record on a tool result: arguments
|
|
13
|
+
* over the per-call or total size are omitted, calls beyond the count are dropped, and the record
|
|
14
|
+
* is marked incomplete when any of that happens.
|
|
15
|
+
*/
|
|
16
|
+
export const NESTED_CALL_LIMITS = {
|
|
17
|
+
maxCalls: 256,
|
|
18
|
+
maxArgumentBytesPerCall: 8 * 1024,
|
|
19
|
+
maxArgumentBytesTotal: 32 * 1024,
|
|
20
|
+
maxErrorChars: 500,
|
|
21
|
+
};
|
|
22
|
+
const encoder = new TextEncoder();
|
|
23
|
+
/**
|
|
24
|
+
* Collects the nested calls of one model-issued tool call, including calls made by nested tools.
|
|
25
|
+
* The snapshot becomes `nestedCalls` on the tool result message.
|
|
26
|
+
*/
|
|
27
|
+
export class NestedCallRecorder {
|
|
28
|
+
constructor() {
|
|
29
|
+
this.calls = [];
|
|
30
|
+
this.startedAt = new Map();
|
|
31
|
+
this.complete = true;
|
|
32
|
+
this.argumentBytes = 0;
|
|
33
|
+
}
|
|
34
|
+
/** Record a call as it starts. Returns undefined when the call is dropped. */
|
|
35
|
+
start(toolCall) {
|
|
36
|
+
if (this.calls.length >= NESTED_CALL_LIMITS.maxCalls) {
|
|
37
|
+
this.complete = false;
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
const record = { id: toolCall.id, name: toolCall.name, status: "unfinished" };
|
|
41
|
+
const json = JSON.stringify(toolCall.arguments ?? {});
|
|
42
|
+
const bytes = encoder.encode(json).length;
|
|
43
|
+
if (bytes > NESTED_CALL_LIMITS.maxArgumentBytesPerCall ||
|
|
44
|
+
this.argumentBytes + bytes > NESTED_CALL_LIMITS.maxArgumentBytesTotal) {
|
|
45
|
+
record.argumentsBytes = bytes;
|
|
46
|
+
this.complete = false;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
record.arguments = JSON.parse(json);
|
|
50
|
+
this.argumentBytes += bytes;
|
|
51
|
+
}
|
|
52
|
+
this.calls.push(record);
|
|
53
|
+
this.startedAt.set(record, performance.now());
|
|
54
|
+
return record;
|
|
55
|
+
}
|
|
56
|
+
finish(record, isError, errorText) {
|
|
57
|
+
if (!record)
|
|
58
|
+
return;
|
|
59
|
+
record.status = isError ? "error" : "ok";
|
|
60
|
+
record.durationMs = Math.round(performance.now() - (this.startedAt.get(record) ?? performance.now()));
|
|
61
|
+
this.startedAt.delete(record);
|
|
62
|
+
if (isError && errorText)
|
|
63
|
+
record.error = errorText.slice(0, NESTED_CALL_LIMITS.maxErrorChars);
|
|
64
|
+
}
|
|
65
|
+
addUsage(usage) {
|
|
66
|
+
this.usage = this.usage ? combineUsage(this.usage, usage) : usage;
|
|
67
|
+
}
|
|
68
|
+
get totalUsage() {
|
|
69
|
+
return this.usage;
|
|
70
|
+
}
|
|
71
|
+
/** Copy of the record so far, or undefined when no nested call was made. */
|
|
72
|
+
snapshot() {
|
|
73
|
+
if (this.calls.length === 0 && this.complete)
|
|
74
|
+
return undefined;
|
|
75
|
+
const calls = this.calls.map((call) => ({ ...call }));
|
|
76
|
+
return { calls, complete: this.complete && calls.every((call) => call.status !== "unfinished") };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function textOf(result) {
|
|
80
|
+
return (result.content ?? [])
|
|
81
|
+
.filter((block) => block.type === "text")
|
|
82
|
+
.map((block) => block.text)
|
|
83
|
+
.join("\n");
|
|
84
|
+
}
|
|
85
|
+
export class NestedToolCallRunner {
|
|
86
|
+
constructor(host) {
|
|
87
|
+
/** Scopes by the id of the calling tool call. */
|
|
88
|
+
this.scopes = new Map();
|
|
89
|
+
/** Serializes nested calls that must not run concurrently. */
|
|
90
|
+
this.queueTail = Promise.resolve();
|
|
91
|
+
this.host = host;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Run `name` on behalf of the call `callerId`. The nested call gets the id `<callerId>/<n>`.
|
|
95
|
+
* Never rejects for tool failures: they come back as `isError: true`.
|
|
96
|
+
*/
|
|
97
|
+
async execute(callerId, name, args, options = {}) {
|
|
98
|
+
let scope = this.scopes.get(callerId);
|
|
99
|
+
if (!scope) {
|
|
100
|
+
scope = { recorder: new NestedCallRecorder(), nextId: 1, holdsQueue: false };
|
|
101
|
+
this.scopes.set(callerId, scope);
|
|
102
|
+
}
|
|
103
|
+
const toolCall = {
|
|
104
|
+
type: "toolCall",
|
|
105
|
+
id: `${callerId}/${scope.nextId++}`,
|
|
106
|
+
name,
|
|
107
|
+
arguments: (args ?? {}),
|
|
108
|
+
};
|
|
109
|
+
const record = scope.recorder.start(toolCall);
|
|
110
|
+
await this.host.emit({
|
|
111
|
+
type: "tool_execution_start",
|
|
112
|
+
toolCallId: toolCall.id,
|
|
113
|
+
toolName: name,
|
|
114
|
+
args: toolCall.arguments,
|
|
115
|
+
parentToolCallId: callerId,
|
|
116
|
+
});
|
|
117
|
+
const exclusive = !scope.holdsQueue &&
|
|
118
|
+
(this.host.isSequential() ||
|
|
119
|
+
this.host.getTools().find((tool) => tool.name === name)?.executionMode === "sequential");
|
|
120
|
+
let release;
|
|
121
|
+
if (exclusive) {
|
|
122
|
+
const previous = this.queueTail;
|
|
123
|
+
this.queueTail = new Promise((resolve) => {
|
|
124
|
+
release = resolve;
|
|
125
|
+
});
|
|
126
|
+
await previous;
|
|
127
|
+
}
|
|
128
|
+
this.scopes.set(toolCall.id, {
|
|
129
|
+
recorder: scope.recorder,
|
|
130
|
+
nextId: 1,
|
|
131
|
+
holdsQueue: scope.holdsQueue || exclusive,
|
|
132
|
+
});
|
|
133
|
+
let outcome;
|
|
134
|
+
try {
|
|
135
|
+
outcome = await this.host.runToolCall(toolCall, callerId, options.signal, async (partialResult) => {
|
|
136
|
+
options.onUpdate?.(partialResult);
|
|
137
|
+
await this.host.emit({
|
|
138
|
+
type: "tool_execution_update",
|
|
139
|
+
toolCallId: toolCall.id,
|
|
140
|
+
toolName: name,
|
|
141
|
+
args: toolCall.arguments,
|
|
142
|
+
partialResult,
|
|
143
|
+
parentToolCallId: callerId,
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
finally {
|
|
148
|
+
this.scopes.delete(toolCall.id);
|
|
149
|
+
release?.();
|
|
150
|
+
}
|
|
151
|
+
scope.recorder.finish(record, outcome.isError, textOf(outcome.result));
|
|
152
|
+
// Nested results are not persisted, so their usage is only counted through the recorder.
|
|
153
|
+
if (outcome.result.usage)
|
|
154
|
+
scope.recorder.addUsage(outcome.result.usage);
|
|
155
|
+
await this.host.emit({
|
|
156
|
+
type: "tool_execution_end",
|
|
157
|
+
toolCallId: toolCall.id,
|
|
158
|
+
toolName: name,
|
|
159
|
+
result: outcome.result,
|
|
160
|
+
isError: outcome.isError,
|
|
161
|
+
parentToolCallId: callerId,
|
|
162
|
+
});
|
|
163
|
+
return outcome;
|
|
164
|
+
}
|
|
165
|
+
/** Remove and return the record of the nested calls a model-issued call made. */
|
|
166
|
+
takeRecord(toolCallId) {
|
|
167
|
+
const scope = this.scopes.get(toolCallId);
|
|
168
|
+
this.scopes.delete(toolCallId);
|
|
169
|
+
if (!scope)
|
|
170
|
+
return undefined;
|
|
171
|
+
return { calls: scope.recorder.snapshot(), usage: scope.recorder.totalUsage };
|
|
172
|
+
}
|
|
173
|
+
clear() {
|
|
174
|
+
this.scopes.clear();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=nested-tool-calls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nested-tool-calls.js","sourceRoot":"","sources":["../../src/core/nested-tool-calls.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tool calls that a tool makes while it runs (`ctx.executeTool()`), for example from codemode\n * scripts. The agent loop does not know about them: the session runs each one through the agent's\n * tool pipeline (`runToolCall`) with its own hooks, emits `tool_execution_*` events with\n * `parentToolCallId`, and records the calls and their usage on the model-issued call's tool result\n * message.\n *\n * Nothing here runs until a tool calls `ctx.executeTool()`.\n */\n\nimport type {\n\tAgentTool,\n\tAgentToolCall,\n\tAgentToolCallOutcome,\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n} from \"@earendil-works/pi-agent-core\";\nimport type { JsonObject, NestedToolCallRecord, NestedToolCalls, TextContent, Usage } from \"@earendil-works/pi-ai\";\nimport { combineUsage } from \"./usage-totals.ts\";\n\n/**\n * Limits of the nested-call record on a tool result: arguments\n * over the per-call or total size are omitted, calls beyond the count are dropped, and the record\n * is marked incomplete when any of that happens.\n */\nexport const NESTED_CALL_LIMITS = {\n\tmaxCalls: 256,\n\tmaxArgumentBytesPerCall: 8 * 1024,\n\tmaxArgumentBytesTotal: 32 * 1024,\n\tmaxErrorChars: 500,\n} as const;\n\nconst encoder = new TextEncoder();\n\n/** What the nested calls of one model-issued tool call leave on its tool result message. */\nexport interface NestedCallSummary {\n\t/** Becomes `nestedCalls`. Undefined when no nested call was made. */\n\tcalls: NestedToolCalls | undefined;\n\t/** Summed `usage` of the nested results, added to the message's `usage`. */\n\tusage: Usage | undefined;\n}\n\n/**\n * Collects the nested calls of one model-issued tool call, including calls made by nested tools.\n * The snapshot becomes `nestedCalls` on the tool result message.\n */\nexport class NestedCallRecorder {\n\tprivate readonly calls: NestedToolCallRecord[] = [];\n\tprivate readonly startedAt = new Map<NestedToolCallRecord, number>();\n\tprivate complete = true;\n\tprivate argumentBytes = 0;\n\t/** Summed usage of every nested result, including calls dropped from the record. */\n\tprivate usage: Usage | undefined;\n\n\t/** Record a call as it starts. Returns undefined when the call is dropped. */\n\tstart(toolCall: AgentToolCall): NestedToolCallRecord | undefined {\n\t\tif (this.calls.length >= NESTED_CALL_LIMITS.maxCalls) {\n\t\t\tthis.complete = false;\n\t\t\treturn undefined;\n\t\t}\n\t\tconst record: NestedToolCallRecord = { id: toolCall.id, name: toolCall.name, status: \"unfinished\" };\n\t\tconst json = JSON.stringify(toolCall.arguments ?? {});\n\t\tconst bytes = encoder.encode(json).length;\n\t\tif (\n\t\t\tbytes > NESTED_CALL_LIMITS.maxArgumentBytesPerCall ||\n\t\t\tthis.argumentBytes + bytes > NESTED_CALL_LIMITS.maxArgumentBytesTotal\n\t\t) {\n\t\t\trecord.argumentsBytes = bytes;\n\t\t\tthis.complete = false;\n\t\t} else {\n\t\t\trecord.arguments = JSON.parse(json) as JsonObject;\n\t\t\tthis.argumentBytes += bytes;\n\t\t}\n\t\tthis.calls.push(record);\n\t\tthis.startedAt.set(record, performance.now());\n\t\treturn record;\n\t}\n\n\tfinish(record: NestedToolCallRecord | undefined, isError: boolean, errorText: string): void {\n\t\tif (!record) return;\n\t\trecord.status = isError ? \"error\" : \"ok\";\n\t\trecord.durationMs = Math.round(performance.now() - (this.startedAt.get(record) ?? performance.now()));\n\t\tthis.startedAt.delete(record);\n\t\tif (isError && errorText) record.error = errorText.slice(0, NESTED_CALL_LIMITS.maxErrorChars);\n\t}\n\n\taddUsage(usage: Usage): void {\n\t\tthis.usage = this.usage ? combineUsage(this.usage, usage) : usage;\n\t}\n\n\tget totalUsage(): Usage | undefined {\n\t\treturn this.usage;\n\t}\n\n\t/** Copy of the record so far, or undefined when no nested call was made. */\n\tsnapshot(): NestedToolCalls | undefined {\n\t\tif (this.calls.length === 0 && this.complete) return undefined;\n\t\tconst calls = this.calls.map((call) => ({ ...call }));\n\t\treturn { calls, complete: this.complete && calls.every((call) => call.status !== \"unfinished\") };\n\t}\n}\n\nexport interface NestedToolCallOptions {\n\t/** Defaults to the calling tool's signal. */\n\tsignal?: AbortSignal;\n\t/** Receives partial results of the nested tool, in addition to `tool_execution_update` events. */\n\tonUpdate?: AgentToolUpdateCallback;\n}\n\n/** `tool_execution_*` events of nested calls. */\nexport type NestedToolExecutionEvent =\n\t| { type: \"tool_execution_start\"; toolCallId: string; toolName: string; args: unknown; parentToolCallId: string }\n\t| {\n\t\t\ttype: \"tool_execution_update\";\n\t\t\ttoolCallId: string;\n\t\t\ttoolName: string;\n\t\t\targs: unknown;\n\t\t\tpartialResult: AgentToolResult<unknown>;\n\t\t\tparentToolCallId: string;\n\t }\n\t| {\n\t\t\ttype: \"tool_execution_end\";\n\t\t\ttoolCallId: string;\n\t\t\ttoolName: string;\n\t\t\tresult: AgentToolResult<unknown>;\n\t\t\tisError: boolean;\n\t\t\tparentToolCallId: string;\n\t };\n\nexport interface NestedToolCallHost {\n\t/** Tools nested calls resolve against. */\n\tgetTools(): readonly AgentTool[];\n\t/** Whether every nested call runs exclusively, as when the agent executes tool calls sequentially. */\n\tisSequential(): boolean;\n\t/** Run the call through the tool pipeline, with hooks that report `parentToolCallId`. */\n\trunToolCall(\n\t\ttoolCall: AgentToolCall,\n\t\tparentToolCallId: string,\n\t\tsignal: AbortSignal | undefined,\n\t\tonUpdate: (partialResult: AgentToolResult<unknown>) => Promise<void>,\n\t): Promise<AgentToolCallOutcome>;\n\temit(event: NestedToolExecutionEvent): Promise<void>;\n}\n\n/** Calls below one model-issued call share its recorder. */\ninterface CallScope {\n\trecorder: NestedCallRecorder;\n\tnextId: number;\n\t/** Set inside a call that holds the exclusive queue, so its own nested calls do not wait on it. */\n\tholdsQueue: boolean;\n}\n\nfunction textOf(result: AgentToolResult<unknown>): string {\n\treturn (result.content ?? [])\n\t\t.filter((block): block is TextContent => block.type === \"text\")\n\t\t.map((block) => block.text)\n\t\t.join(\"\\n\");\n}\n\nexport class NestedToolCallRunner {\n\tprivate readonly host: NestedToolCallHost;\n\t/** Scopes by the id of the calling tool call. */\n\tprivate readonly scopes = new Map<string, CallScope>();\n\t/** Serializes nested calls that must not run concurrently. */\n\tprivate queueTail: Promise<void> = Promise.resolve();\n\n\tconstructor(host: NestedToolCallHost) {\n\t\tthis.host = host;\n\t}\n\n\t/**\n\t * Run `name` on behalf of the call `callerId`. The nested call gets the id `<callerId>/<n>`.\n\t * Never rejects for tool failures: they come back as `isError: true`.\n\t */\n\tasync execute(\n\t\tcallerId: string,\n\t\tname: string,\n\t\targs: unknown,\n\t\toptions: NestedToolCallOptions = {},\n\t): Promise<AgentToolCallOutcome> {\n\t\tlet scope = this.scopes.get(callerId);\n\t\tif (!scope) {\n\t\t\tscope = { recorder: new NestedCallRecorder(), nextId: 1, holdsQueue: false };\n\t\t\tthis.scopes.set(callerId, scope);\n\t\t}\n\t\tconst toolCall: AgentToolCall = {\n\t\t\ttype: \"toolCall\",\n\t\t\tid: `${callerId}/${scope.nextId++}`,\n\t\t\tname,\n\t\t\targuments: (args ?? {}) as AgentToolCall[\"arguments\"],\n\t\t};\n\t\tconst record = scope.recorder.start(toolCall);\n\t\tawait this.host.emit({\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: name,\n\t\t\targs: toolCall.arguments,\n\t\t\tparentToolCallId: callerId,\n\t\t});\n\n\t\tconst exclusive =\n\t\t\t!scope.holdsQueue &&\n\t\t\t(this.host.isSequential() ||\n\t\t\t\tthis.host.getTools().find((tool) => tool.name === name)?.executionMode === \"sequential\");\n\t\tlet release: (() => void) | undefined;\n\t\tif (exclusive) {\n\t\t\tconst previous = this.queueTail;\n\t\t\tthis.queueTail = new Promise((resolve) => {\n\t\t\t\trelease = resolve;\n\t\t\t});\n\t\t\tawait previous;\n\t\t}\n\t\tthis.scopes.set(toolCall.id, {\n\t\t\trecorder: scope.recorder,\n\t\t\tnextId: 1,\n\t\t\tholdsQueue: scope.holdsQueue || exclusive,\n\t\t});\n\t\tlet outcome: AgentToolCallOutcome;\n\t\ttry {\n\t\t\toutcome = await this.host.runToolCall(toolCall, callerId, options.signal, async (partialResult) => {\n\t\t\t\toptions.onUpdate?.(partialResult);\n\t\t\t\tawait this.host.emit({\n\t\t\t\t\ttype: \"tool_execution_update\",\n\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\ttoolName: name,\n\t\t\t\t\targs: toolCall.arguments,\n\t\t\t\t\tpartialResult,\n\t\t\t\t\tparentToolCallId: callerId,\n\t\t\t\t});\n\t\t\t});\n\t\t} finally {\n\t\t\tthis.scopes.delete(toolCall.id);\n\t\t\trelease?.();\n\t\t}\n\n\t\tscope.recorder.finish(record, outcome.isError, textOf(outcome.result));\n\t\t// Nested results are not persisted, so their usage is only counted through the recorder.\n\t\tif (outcome.result.usage) scope.recorder.addUsage(outcome.result.usage);\n\t\tawait this.host.emit({\n\t\t\ttype: \"tool_execution_end\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: name,\n\t\t\tresult: outcome.result,\n\t\t\tisError: outcome.isError,\n\t\t\tparentToolCallId: callerId,\n\t\t});\n\t\treturn outcome;\n\t}\n\n\t/** Remove and return the record of the nested calls a model-issued call made. */\n\ttakeRecord(toolCallId: string): NestedCallSummary | undefined {\n\t\tconst scope = this.scopes.get(toolCallId);\n\t\tthis.scopes.delete(toolCallId);\n\t\tif (!scope) return undefined;\n\t\treturn { calls: scope.recorder.snapshot(), usage: scope.recorder.totalUsage };\n\t}\n\n\tclear(): void {\n\t\tthis.scopes.clear();\n\t}\n}\n"]}
|
|
@@ -4,6 +4,7 @@ export interface PathMetadata {
|
|
|
4
4
|
scope: SourceScope;
|
|
5
5
|
origin: "package" | "top-level";
|
|
6
6
|
baseDir?: string;
|
|
7
|
+
packageRoot?: string;
|
|
7
8
|
}
|
|
8
9
|
export interface ResolvedResource {
|
|
9
10
|
path: string;
|
|
@@ -69,6 +70,8 @@ interface PackageManagerOptions {
|
|
|
69
70
|
cwd: string;
|
|
70
71
|
agentDir: string;
|
|
71
72
|
settingsManager: SettingsManager;
|
|
73
|
+
/** Names of built-in extensions, resolved as `builtin:<name>` extension resources. */
|
|
74
|
+
builtinExtensions?: string[];
|
|
72
75
|
}
|
|
73
76
|
type SourceScope = "user" | "project" | "temporary";
|
|
74
77
|
export declare function getExtensionTempFolder(agentDir: string): string;
|
|
@@ -76,6 +79,7 @@ export declare class DefaultPackageManager implements PackageManager {
|
|
|
76
79
|
private cwd;
|
|
77
80
|
private agentDir;
|
|
78
81
|
private settingsManager;
|
|
82
|
+
private builtinExtensions;
|
|
79
83
|
private globalNpmRoot;
|
|
80
84
|
private globalNpmRootCommandKey;
|
|
81
85
|
private progressCallback;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/core/package-manager.ts"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAiB,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/core/package-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,7 @@ import { canonicalizePath, isLocalPath, markPathIgnoredByCloudSync, resolvePath
|
|
|
31
31
|
import { stripBom } from "../utils/text.js";
|
|
32
32
|
import { isStdoutTakenOver } from "./output-guard.js";
|
|
33
33
|
import { readPiManifest } from "./pi-manifest.js";
|
|
34
|
+
import { BUILTIN_PATH_PREFIX } from "./source-info.js";
|
|
34
35
|
const NETWORK_TIMEOUT_MS = 10000;
|
|
35
36
|
const UPDATE_CHECK_CONCURRENCY = 4;
|
|
36
37
|
const GIT_UPDATE_CONCURRENCY = 4;
|
|
@@ -59,6 +60,9 @@ function getNpmVersionRange(version) {
|
|
|
59
60
|
* 4 package resource (origin: "package")
|
|
60
61
|
*/
|
|
61
62
|
function resourcePrecedenceRank(m) {
|
|
63
|
+
// Built-in extensions load after file and package extensions, whichever scope enables them.
|
|
64
|
+
if (m.source === "builtin")
|
|
65
|
+
return 5;
|
|
62
66
|
if (m.origin === "package")
|
|
63
67
|
return 4;
|
|
64
68
|
const scopeBase = m.scope === "project" ? 0 : 2;
|
|
@@ -605,6 +609,7 @@ export class DefaultPackageManager {
|
|
|
605
609
|
this.cwd = resolvePath(options.cwd);
|
|
606
610
|
this.agentDir = resolvePath(options.agentDir);
|
|
607
611
|
this.settingsManager = options.settingsManager;
|
|
612
|
+
this.builtinExtensions = options.builtinExtensions ?? [];
|
|
608
613
|
}
|
|
609
614
|
setProgressCallback(callback) {
|
|
610
615
|
this.progressCallback = callback;
|
|
@@ -722,12 +727,25 @@ export class DefaultPackageManager {
|
|
|
722
727
|
}, globalBaseDir);
|
|
723
728
|
}
|
|
724
729
|
this.addAutoDiscoveredResources(accumulator, globalSettings, projectSettings, globalBaseDir, projectBaseDir);
|
|
730
|
+
// Built-in extensions are enabled unless the user `extensions` setting excludes them, for example
|
|
731
|
+
// with `-builtin:mcp`. A matching `+`, `-`, or `!` entry in the project setting overrides that.
|
|
732
|
+
for (const name of this.builtinExtensions) {
|
|
733
|
+
const path = `${BUILTIN_PATH_PREFIX}${name}`;
|
|
734
|
+
const projectEnabled = applyAutoloadDisabledPatterns([path], getOverridePatterns(projectSettings.extensions ?? []), projectBaseDir).get(path);
|
|
735
|
+
this.addResource(accumulator.extensions, path, { source: "builtin", scope: projectEnabled === undefined ? "user" : "project", origin: "top-level" }, projectEnabled ?? isEnabledByOverrides(path, globalSettings.extensions ?? [], globalBaseDir));
|
|
736
|
+
}
|
|
725
737
|
return this.toResolvedPaths(accumulator);
|
|
726
738
|
}
|
|
727
739
|
async resolveExtensionSources(sources, options) {
|
|
728
740
|
const accumulator = this.createAccumulator();
|
|
729
741
|
const scope = options?.temporary ? "temporary" : options?.local ? "project" : "user";
|
|
730
|
-
|
|
742
|
+
// `-e builtin:<name>` loads a built-in extension; the resource loader reports unknown names.
|
|
743
|
+
for (const source of sources.filter((source) => source.startsWith(BUILTIN_PATH_PREFIX))) {
|
|
744
|
+
this.addResource(accumulator.extensions, source, { source: "builtin", scope, origin: "top-level" }, true);
|
|
745
|
+
}
|
|
746
|
+
const packageSources = sources
|
|
747
|
+
.filter((source) => !source.startsWith(BUILTIN_PATH_PREFIX))
|
|
748
|
+
.map((source) => ({ pkg: source, scope }));
|
|
731
749
|
await this.resolvePackageSources(packageSources, accumulator);
|
|
732
750
|
return this.toResolvedPaths(accumulator);
|
|
733
751
|
}
|
|
@@ -1011,6 +1029,7 @@ export class DefaultPackageManager {
|
|
|
1011
1029
|
installedPath = this.getNpmInstallPath(parsed, resolvedScope);
|
|
1012
1030
|
}
|
|
1013
1031
|
metadata.baseDir = installedPath;
|
|
1032
|
+
metadata.packageRoot = installedPath;
|
|
1014
1033
|
this.collectPackageResources(installedPath, accumulator, filter, metadata);
|
|
1015
1034
|
continue;
|
|
1016
1035
|
}
|
|
@@ -1025,6 +1044,7 @@ export class DefaultPackageManager {
|
|
|
1025
1044
|
await this.refreshTemporaryGitSource(parsed, resolvedSource);
|
|
1026
1045
|
}
|
|
1027
1046
|
metadata.baseDir = installedPath;
|
|
1047
|
+
metadata.packageRoot = installedPath;
|
|
1028
1048
|
this.collectPackageResources(installedPath, accumulator, filter, metadata);
|
|
1029
1049
|
}
|
|
1030
1050
|
}
|
|
@@ -1051,6 +1071,7 @@ export class DefaultPackageManager {
|
|
|
1051
1071
|
}
|
|
1052
1072
|
if (stats.isDirectory()) {
|
|
1053
1073
|
metadata.baseDir = resolved;
|
|
1074
|
+
metadata.packageRoot = resolved;
|
|
1054
1075
|
const resources = this.collectPackageResources(resolved, accumulator, filter, metadata);
|
|
1055
1076
|
if (!resources) {
|
|
1056
1077
|
this.addResource(accumulator.extensions, resolved, metadata, true);
|
|
@@ -1430,21 +1451,45 @@ export class DefaultPackageManager {
|
|
|
1430
1451
|
}
|
|
1431
1452
|
getPackageManagerName() {
|
|
1432
1453
|
const npmCommand = this.getNpmCommand();
|
|
1433
|
-
const
|
|
1434
|
-
const
|
|
1435
|
-
const
|
|
1436
|
-
|
|
1454
|
+
const normalizeCommandName = (command) => basename(command).replace(/\.(cmd|exe)$/i, "");
|
|
1455
|
+
const supportedPackageManagers = new Set(["npm", "pnpm", "bun"]);
|
|
1456
|
+
const directCommand = normalizeCommandName(npmCommand.command);
|
|
1457
|
+
const separatorIndex = npmCommand.args.lastIndexOf("--");
|
|
1458
|
+
if (separatorIndex >= 0) {
|
|
1459
|
+
const wrappedCommand = npmCommand.args[separatorIndex + 1];
|
|
1460
|
+
return wrappedCommand ? normalizeCommandName(wrappedCommand) : directCommand;
|
|
1461
|
+
}
|
|
1462
|
+
if (supportedPackageManagers.has(directCommand))
|
|
1463
|
+
return directCommand;
|
|
1464
|
+
const wrappedPackageManagers = [
|
|
1465
|
+
...new Set(npmCommand.args.map(normalizeCommandName).filter((command) => supportedPackageManagers.has(command))),
|
|
1466
|
+
];
|
|
1467
|
+
if (wrappedPackageManagers.length > 1) {
|
|
1468
|
+
throw new Error(`Ambiguous npmCommand package managers: ${wrappedPackageManagers.join(", ")}`);
|
|
1469
|
+
}
|
|
1470
|
+
return wrappedPackageManagers[0] ?? directCommand;
|
|
1437
1471
|
}
|
|
1438
1472
|
async runNpmCommand(args, options) {
|
|
1439
1473
|
const npmCommand = this.getNpmCommand();
|
|
1440
1474
|
await this.runCommand(npmCommand.command, [...npmCommand.args, ...args], options);
|
|
1441
1475
|
}
|
|
1442
1476
|
getGitDependencyInstallArgs() {
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1477
|
+
switch (this.getPackageManagerName()) {
|
|
1478
|
+
case "bun":
|
|
1479
|
+
return ["install", "--omit=dev", "--omit=peer"];
|
|
1480
|
+
case "pnpm":
|
|
1481
|
+
return [
|
|
1482
|
+
"install",
|
|
1483
|
+
"--prod",
|
|
1484
|
+
"--config.auto-install-peers=false",
|
|
1485
|
+
"--config.strict-peer-dependencies=false",
|
|
1486
|
+
"--config.strict-dep-builds=false",
|
|
1487
|
+
];
|
|
1488
|
+
case "npm":
|
|
1489
|
+
return ["install", "--omit=dev", "--legacy-peer-deps"];
|
|
1490
|
+
default:
|
|
1491
|
+
return ["install"];
|
|
1446
1492
|
}
|
|
1447
|
-
return ["install", "--omit=dev"];
|
|
1448
1493
|
}
|
|
1449
1494
|
runNpmCommandSync(args) {
|
|
1450
1495
|
const npmCommand = this.getNpmCommand();
|
|
@@ -1742,7 +1787,8 @@ export class DefaultPackageManager {
|
|
|
1742
1787
|
}
|
|
1743
1788
|
getGitInstallPath(source, scope) {
|
|
1744
1789
|
if (scope === "temporary") {
|
|
1745
|
-
|
|
1790
|
+
// Include the ref in the hash so each pinned ref gets its own checkout.
|
|
1791
|
+
return this.getTemporaryDir(`git-${source.host}`, source.path, source.ref);
|
|
1746
1792
|
}
|
|
1747
1793
|
const installRoot = this.getGitInstallRoot(scope);
|
|
1748
1794
|
if (!installRoot) {
|
|
@@ -1760,10 +1806,10 @@ export class DefaultPackageManager {
|
|
|
1760
1806
|
}
|
|
1761
1807
|
return join(this.agentDir, "git");
|
|
1762
1808
|
}
|
|
1763
|
-
getTemporaryDir(prefix, suffix) {
|
|
1809
|
+
getTemporaryDir(prefix, suffix, ref) {
|
|
1764
1810
|
const root = this.resolveManagedPath(getExtensionTempFolder(this.agentDir), prefix);
|
|
1765
1811
|
const hash = createHash("sha256")
|
|
1766
|
-
.update(`${prefix}-${suffix ?? ""}`)
|
|
1812
|
+
.update(`${prefix}-${suffix ?? ""}${ref ? `@${ref}` : ""}`)
|
|
1767
1813
|
.digest("hex")
|
|
1768
1814
|
.slice(0, 8);
|
|
1769
1815
|
return this.resolveManagedPath(root, hash, suffix ?? "");
|