@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
|
@@ -1,71 +1,78 @@
|
|
|
1
1
|
import type { AgentToolResult } from "@earendil-works/pi-agent-core";
|
|
2
2
|
import type { Usage } from "@earendil-works/pi-ai/compat";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export type
|
|
3
|
+
import type { TaskViewRegistry } from "./view.ts";
|
|
4
|
+
import type { TaskViewData } from "./view-data.ts";
|
|
5
|
+
/** An executor-owned source label, never a dispatch key for the runtime. */
|
|
6
|
+
export type TaskKind = string;
|
|
7
|
+
export type TaskMode = "foreground" | "background";
|
|
8
|
+
export type TaskTerminalStatus = "completed" | "partial" | "failed" | "cancelled" | "timeout";
|
|
9
|
+
export type TaskStatus = "queued" | "running" | "stopping" | TaskTerminalStatus;
|
|
7
10
|
/** A bounded snapshot; truncation is recorded at the source, never inferred from text. */
|
|
8
|
-
export interface
|
|
11
|
+
export interface TaskText {
|
|
9
12
|
text: string;
|
|
10
13
|
truncated: boolean;
|
|
11
14
|
}
|
|
12
|
-
export interface
|
|
15
|
+
export interface TaskItemReport {
|
|
13
16
|
id: string;
|
|
14
17
|
label: string;
|
|
15
|
-
|
|
18
|
+
category: string;
|
|
16
19
|
description: string;
|
|
17
20
|
status: string;
|
|
18
|
-
report:
|
|
21
|
+
report: TaskText;
|
|
19
22
|
error?: string;
|
|
20
23
|
}
|
|
21
24
|
/** A serializable, domain-owned projection. No extension-private renderer imports. */
|
|
22
|
-
export interface
|
|
23
|
-
|
|
25
|
+
export interface TaskItem extends TaskItemReport {
|
|
26
|
+
input: string;
|
|
24
27
|
activity: string;
|
|
25
|
-
|
|
28
|
+
context?: string;
|
|
26
29
|
usage?: string;
|
|
27
30
|
}
|
|
28
|
-
export interface
|
|
31
|
+
export interface TaskProjection {
|
|
32
|
+
nextStep?: string;
|
|
29
33
|
text?: string;
|
|
30
34
|
shell?: {
|
|
31
35
|
name: string;
|
|
32
|
-
output:
|
|
36
|
+
output: TaskText;
|
|
33
37
|
};
|
|
34
|
-
|
|
38
|
+
items?: TaskItem[];
|
|
35
39
|
}
|
|
36
|
-
interface
|
|
40
|
+
interface TaskCompletionBase {
|
|
41
|
+
kind: string;
|
|
37
42
|
version: 1;
|
|
38
43
|
taskId: string;
|
|
39
44
|
title: string;
|
|
40
|
-
status:
|
|
45
|
+
status: TaskTerminalStatus;
|
|
41
46
|
startedAt: number;
|
|
42
47
|
endedAt: number;
|
|
43
48
|
error?: string;
|
|
49
|
+
nextStep?: string;
|
|
44
50
|
}
|
|
45
51
|
/** Self-contained completion-message details. No live handles, tool-private details or accounting. */
|
|
46
|
-
export type
|
|
47
|
-
|
|
52
|
+
export type TaskCompletionSnapshot = TaskCompletionBase & ({
|
|
53
|
+
format: "log";
|
|
48
54
|
shell?: string;
|
|
49
|
-
command?:
|
|
55
|
+
command?: TaskText;
|
|
50
56
|
cwd?: string;
|
|
51
57
|
outputPath?: string;
|
|
52
58
|
/** Process exit code: a number, or null when signal-reaped. */
|
|
53
59
|
exitCode?: number | null;
|
|
54
|
-
output:
|
|
60
|
+
output: TaskText;
|
|
55
61
|
} | {
|
|
56
|
-
|
|
57
|
-
|
|
62
|
+
format: "report";
|
|
63
|
+
items: TaskItemReport[];
|
|
58
64
|
/** Plain fallback when an executor has no worker projection. */
|
|
59
|
-
output?:
|
|
65
|
+
output?: TaskText;
|
|
60
66
|
});
|
|
61
|
-
export interface
|
|
67
|
+
export interface TaskSnapshot {
|
|
62
68
|
id: string;
|
|
63
|
-
kind:
|
|
69
|
+
kind: TaskKind;
|
|
70
|
+
format?: "log" | "report";
|
|
64
71
|
title: string;
|
|
65
72
|
toolCallId: string;
|
|
66
73
|
anchorId: string | null;
|
|
67
|
-
mode:
|
|
68
|
-
status:
|
|
74
|
+
mode: TaskMode;
|
|
75
|
+
status: TaskStatus;
|
|
69
76
|
startedAt: number;
|
|
70
77
|
endedAt?: number;
|
|
71
78
|
command?: string;
|
|
@@ -74,14 +81,15 @@ export interface BackgroundTask {
|
|
|
74
81
|
/** Process exit code (bash): a number, or null when signal-reaped. Absent while running or unreported. */
|
|
75
82
|
exitCode?: number | null;
|
|
76
83
|
outputPath?: string;
|
|
77
|
-
projection?:
|
|
84
|
+
projection?: TaskProjection;
|
|
85
|
+
viewData?: TaskViewData;
|
|
78
86
|
result?: AgentToolResult<unknown>;
|
|
79
87
|
resultTruncated?: boolean;
|
|
80
88
|
error?: string;
|
|
81
89
|
}
|
|
82
|
-
export interface
|
|
90
|
+
export interface TaskCompletion<T> {
|
|
83
91
|
result: AgentToolResult<T>;
|
|
84
|
-
status?:
|
|
92
|
+
status?: TaskTerminalStatus;
|
|
85
93
|
/** Terminal diagnostic, stored independently of log slices and bounded to 4096 bytes. */
|
|
86
94
|
error?: string;
|
|
87
95
|
/** Process exit code (bash): a number, or null when signal-reaped. */
|
|
@@ -89,10 +97,12 @@ export interface BackgroundCompletion<T> {
|
|
|
89
97
|
/** Authoritative cumulative usage; overrides result.usage and any published snapshot. */
|
|
90
98
|
usage?: Usage;
|
|
91
99
|
}
|
|
92
|
-
export interface
|
|
100
|
+
export interface TaskControl<T> {
|
|
93
101
|
readonly id: string;
|
|
94
102
|
readonly signal: AbortSignal;
|
|
95
|
-
readonly mode:
|
|
103
|
+
readonly mode: TaskMode;
|
|
104
|
+
onModeChange(listener: (mode: TaskMode) => void): () => void;
|
|
105
|
+
requestCancel(): boolean;
|
|
96
106
|
/** Accept only after whole-invocation preflight; required before returning a handoff. */
|
|
97
107
|
accept(): void;
|
|
98
108
|
/**
|
|
@@ -100,12 +110,15 @@ export interface BackgroundControl<T> {
|
|
|
100
110
|
* published usage is settled once on rejection (never inferred from details).
|
|
101
111
|
* Final completion.usage, then completion.result.usage, override that snapshot.
|
|
102
112
|
*/
|
|
103
|
-
publish(result: AgentToolResult<T>, projection?:
|
|
113
|
+
publish(result: AgentToolResult<T>, projection?: TaskProjection): void;
|
|
114
|
+
/** Publish bounded, versioned display data without changing tool results or completion delivery. */
|
|
115
|
+
publishView(data: TaskViewData): void;
|
|
104
116
|
/** Register once; cleanup must own only this exclusively-created file and close its writer first. */
|
|
105
117
|
setOutputPath(path: string, cleanup?: () => void | Promise<void>): void;
|
|
106
118
|
}
|
|
107
|
-
export interface
|
|
108
|
-
kind:
|
|
119
|
+
export interface TaskExecution<T> {
|
|
120
|
+
kind: TaskKind;
|
|
121
|
+
format?: "log" | "report";
|
|
109
122
|
title: string;
|
|
110
123
|
toolCallId: string;
|
|
111
124
|
command?: string;
|
|
@@ -113,19 +126,19 @@ export interface BackgroundExecution<T> {
|
|
|
113
126
|
background?: boolean;
|
|
114
127
|
signal?: AbortSignal;
|
|
115
128
|
onUpdate?: (result: AgentToolResult<T>) => void;
|
|
116
|
-
run(control:
|
|
129
|
+
run(control: TaskControl<T>): Promise<TaskCompletion<T>>;
|
|
117
130
|
}
|
|
118
|
-
export type
|
|
131
|
+
export type TaskToolOutcome<T> = {
|
|
119
132
|
kind: "result";
|
|
120
133
|
result: AgentToolResult<T>;
|
|
121
|
-
status?:
|
|
134
|
+
status?: TaskTerminalStatus;
|
|
122
135
|
error?: string;
|
|
123
136
|
} | {
|
|
124
137
|
kind: "background";
|
|
125
|
-
task:
|
|
138
|
+
task: TaskSnapshot;
|
|
126
139
|
};
|
|
127
|
-
export interface
|
|
128
|
-
task:
|
|
140
|
+
export interface TaskRead {
|
|
141
|
+
task: TaskSnapshot;
|
|
129
142
|
text: string;
|
|
130
143
|
/** Bounded log-read/expiry diagnostic, independent of text slicing and byte offsets. */
|
|
131
144
|
readError?: string;
|
|
@@ -134,45 +147,50 @@ export interface BackgroundRead {
|
|
|
134
147
|
fromByte?: number;
|
|
135
148
|
}
|
|
136
149
|
/** Session-bound public capability. Captured instances close on runtime replacement. */
|
|
137
|
-
export interface
|
|
150
|
+
export interface TasksContext {
|
|
151
|
+
readonly views: TaskViewRegistry;
|
|
138
152
|
readonly enabled: boolean;
|
|
139
153
|
readonly closed?: boolean;
|
|
140
|
-
execute<T>(execution:
|
|
141
|
-
list():
|
|
142
|
-
get(id: string):
|
|
154
|
+
execute<T>(execution: TaskExecution<T>): Promise<TaskToolOutcome<T>>;
|
|
155
|
+
list(): TaskSnapshot[];
|
|
156
|
+
get(id: string): TaskSnapshot;
|
|
143
157
|
read(id: string, options?: {
|
|
144
158
|
mode?: "head" | "tail";
|
|
145
159
|
bytes?: number;
|
|
146
160
|
sinceBytes?: number;
|
|
147
|
-
}): Promise<
|
|
161
|
+
}): Promise<TaskRead>;
|
|
148
162
|
/** Observation only: terminal delivery is acknowledged by the host via markDelivered after result persistence. */
|
|
149
|
-
wait(id: string, timeoutMs?: number, signal?: AbortSignal): Promise<
|
|
163
|
+
wait(id: string, timeoutMs?: number, signal?: AbortSignal): Promise<TaskSnapshot>;
|
|
150
164
|
kill(id: string): boolean;
|
|
151
165
|
/** Move every running foreground execution to the background; returns how many moved. */
|
|
152
166
|
detachForeground(): number;
|
|
167
|
+
detach(id: string): boolean;
|
|
153
168
|
subscribe(listener: () => void): () => void;
|
|
154
|
-
|
|
169
|
+
/** Keep retained output available without delaying completion delivery. */
|
|
170
|
+
retain(id: string): () => void;
|
|
171
|
+
/** Hold automatic delivery while preparing a result for the host to persist. */
|
|
172
|
+
holdDelivery(id: string): () => void;
|
|
155
173
|
}
|
|
156
|
-
export interface
|
|
174
|
+
export interface TaskRuntimeOptions {
|
|
157
175
|
enabled?: boolean;
|
|
158
|
-
|
|
176
|
+
backgroundAllowed?: boolean;
|
|
159
177
|
anchor?: () => string | null;
|
|
160
178
|
maxActive?: number;
|
|
161
|
-
/** Per-history limit: foreground
|
|
179
|
+
/** Per-history limit: foreground logs and other managed tasks each get this allowance. */
|
|
162
180
|
maxHistory?: number;
|
|
163
181
|
/** Best-effort cleanup errors, bounded to 4096 bytes; no retries or execution failure. */
|
|
164
182
|
onCleanupError?: (message: string) => void;
|
|
165
183
|
/** Synchronous persistence before terminal observers or notifications. */
|
|
166
|
-
onSettled?: (task:
|
|
184
|
+
onSettled?: (task: TaskSnapshot, usage: Usage | undefined) => void;
|
|
167
185
|
}
|
|
168
|
-
export declare const
|
|
169
|
-
export declare function
|
|
170
|
-
/** Foreground
|
|
171
|
-
export declare function
|
|
186
|
+
export declare const TASK_BACKGROUND_REJECTION = "Background execution is not permitted in this host. Run with background: false or omit background. No work was started.";
|
|
187
|
+
export declare function isTaskTerminal(status: TaskStatus): boolean;
|
|
188
|
+
/** Foreground logs have their own history; reports remain inspectable in either mode. */
|
|
189
|
+
export declare function isInlineLogTask(task: Pick<TaskSnapshot, "format" | "mode">): boolean;
|
|
172
190
|
/** Preserve the foreground throwing contract without guessing status from output text. */
|
|
173
|
-
export declare class
|
|
174
|
-
readonly status:
|
|
175
|
-
constructor(message: string, status:
|
|
191
|
+
export declare class TaskExecutionError extends Error {
|
|
192
|
+
readonly status: TaskTerminalStatus;
|
|
193
|
+
constructor(message: string, status: TaskTerminalStatus);
|
|
176
194
|
}
|
|
177
195
|
/**
|
|
178
196
|
* A failed id lookup, typed so hosts can enrich the message without matching
|
|
@@ -180,10 +198,10 @@ export declare class BackgroundExecutionError extends Error {
|
|
|
180
198
|
* resolved against — including records outside the current branch, which
|
|
181
199
|
* list() hides but prefix matching still collides with.
|
|
182
200
|
*/
|
|
183
|
-
export declare class
|
|
201
|
+
export declare class TaskLookupError extends Error {
|
|
184
202
|
readonly kind: "unknown" | "ambiguous";
|
|
185
|
-
readonly matches:
|
|
186
|
-
constructor(kind: "unknown" | "ambiguous", matches:
|
|
203
|
+
readonly matches: TaskSnapshot[];
|
|
204
|
+
constructor(kind: "unknown" | "ambiguous", matches: TaskSnapshot[]);
|
|
187
205
|
}
|
|
188
206
|
export {};
|
|
189
207
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/tasks/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
export const
|
|
2
|
-
export function
|
|
1
|
+
export const TASK_BACKGROUND_REJECTION = "Background execution is not permitted in this host. Run with background: false or omit background. No work was started.";
|
|
2
|
+
export function isTaskTerminal(status) {
|
|
3
3
|
return status !== "queued" && status !== "running" && status !== "stopping";
|
|
4
4
|
}
|
|
5
|
-
/** Foreground
|
|
6
|
-
export function
|
|
7
|
-
return task.
|
|
5
|
+
/** Foreground logs have their own history; reports remain inspectable in either mode. */
|
|
6
|
+
export function isInlineLogTask(task) {
|
|
7
|
+
return task.format === "log" && task.mode === "foreground";
|
|
8
8
|
}
|
|
9
9
|
/** Preserve the foreground throwing contract without guessing status from output text. */
|
|
10
|
-
export class
|
|
10
|
+
export class TaskExecutionError extends Error {
|
|
11
11
|
constructor(message, status) {
|
|
12
12
|
super(message);
|
|
13
|
-
this.name = "
|
|
13
|
+
this.name = "TaskExecutionError";
|
|
14
14
|
this.status = status;
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -20,10 +20,10 @@ export class BackgroundExecutionError extends Error {
|
|
|
20
20
|
* resolved against — including records outside the current branch, which
|
|
21
21
|
* list() hides but prefix matching still collides with.
|
|
22
22
|
*/
|
|
23
|
-
export class
|
|
23
|
+
export class TaskLookupError extends Error {
|
|
24
24
|
constructor(kind, matches) {
|
|
25
25
|
super(kind === "ambiguous" ? "Ambiguous background task ID" : "Unknown background task ID");
|
|
26
|
-
this.name = "
|
|
26
|
+
this.name = "TaskLookupError";
|
|
27
27
|
this.kind = kind;
|
|
28
28
|
this.matches = matches;
|
|
29
29
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/tasks/types.ts"],"names":[],"mappings":"AAgMA,MAAM,CAAC,MAAM,yBAAyB,GACrC,yHAAyH,CAAC;AAE3H,MAAM,UAAU,cAAc,CAAC,MAAkB;IAChD,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,UAAU,CAAC;AAC7E,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,eAAe,CAAC,IAA2C;IAC1E,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC;AAC5D,CAAC;AAED,0FAA0F;AAC1F,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAE5C,YAAY,OAAe,EAAE,MAA0B;QACtD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;CACD;AAED;;;;;GAKG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAGzC,YAAY,IAA6B,EAAE,OAAuB;QACjE,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC;QAC5F,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;CACD","sourcesContent":["import type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { Usage } from \"@earendil-works/pi-ai/compat\";\nimport type { TaskViewRegistry } from \"./view.ts\";\nimport type { TaskViewData } from \"./view-data.ts\";\n\n/** An executor-owned source label, never a dispatch key for the runtime. */\nexport type TaskKind = string;\nexport type TaskMode = \"foreground\" | \"background\";\nexport type TaskTerminalStatus = \"completed\" | \"partial\" | \"failed\" | \"cancelled\" | \"timeout\";\nexport type TaskStatus = \"queued\" | \"running\" | \"stopping\" | TaskTerminalStatus;\n\n/** A bounded snapshot; truncation is recorded at the source, never inferred from text. */\nexport interface TaskText {\n\ttext: string;\n\ttruncated: boolean;\n}\n\nexport interface TaskItemReport {\n\tid: string;\n\tlabel: string;\n\tcategory: string;\n\tdescription: string;\n\tstatus: string;\n\treport: TaskText;\n\terror?: string;\n}\n\n/** A serializable, domain-owned projection. No extension-private renderer imports. */\nexport interface TaskItem extends TaskItemReport {\n\tinput: string;\n\tactivity: string;\n\tcontext?: string;\n\tusage?: string;\n}\n\nexport interface TaskProjection {\n\tnextStep?: string;\n\ttext?: string;\n\tshell?: { name: string; output: TaskText };\n\titems?: TaskItem[];\n}\n\ninterface TaskCompletionBase {\n\tkind: string;\n\tversion: 1;\n\ttaskId: string;\n\ttitle: string;\n\tstatus: TaskTerminalStatus;\n\tstartedAt: number;\n\tendedAt: number;\n\terror?: string;\n\tnextStep?: string;\n}\n\n/** Self-contained completion-message details. No live handles, tool-private details or accounting. */\nexport type TaskCompletionSnapshot = TaskCompletionBase &\n\t(\n\t\t| {\n\t\t\t\tformat: \"log\";\n\t\t\t\tshell?: string;\n\t\t\t\tcommand?: TaskText;\n\t\t\t\tcwd?: string;\n\t\t\t\toutputPath?: string;\n\t\t\t\t/** Process exit code: a number, or null when signal-reaped. */\n\t\t\t\texitCode?: number | null;\n\t\t\t\toutput: TaskText;\n\t\t }\n\t\t| {\n\t\t\t\tformat: \"report\";\n\t\t\t\titems: TaskItemReport[];\n\t\t\t\t/** Plain fallback when an executor has no worker projection. */\n\t\t\t\toutput?: TaskText;\n\t\t }\n\t);\n\nexport interface TaskSnapshot {\n\tid: string;\n\tkind: TaskKind;\n\tformat?: \"log\" | \"report\";\n\ttitle: string;\n\ttoolCallId: string;\n\tanchorId: string | null;\n\tmode: TaskMode;\n\tstatus: TaskStatus;\n\tstartedAt: number;\n\tendedAt?: number;\n\tcommand?: string;\n\tcommandTruncated?: boolean;\n\tcwd?: string;\n\t/** Process exit code (bash): a number, or null when signal-reaped. Absent while running or unreported. */\n\texitCode?: number | null;\n\toutputPath?: string;\n\tprojection?: TaskProjection;\n\tviewData?: TaskViewData;\n\tresult?: AgentToolResult<unknown>;\n\tresultTruncated?: boolean;\n\terror?: string;\n}\n\nexport interface TaskCompletion<T> {\n\tresult: AgentToolResult<T>;\n\tstatus?: TaskTerminalStatus;\n\t/** Terminal diagnostic, stored independently of log slices and bounded to 4096 bytes. */\n\terror?: string;\n\t/** Process exit code (bash): a number, or null when signal-reaped. */\n\texitCode?: number | null;\n\t/** Authoritative cumulative usage; overrides result.usage and any published snapshot. */\n\tusage?: Usage;\n}\n\nexport interface TaskControl<T> {\n\treadonly id: string;\n\treadonly signal: AbortSignal;\n\treadonly mode: TaskMode;\n\tonModeChange(listener: (mode: TaskMode) => void): () => void;\n\trequestCancel(): boolean;\n\t/** Accept only after whole-invocation preflight; required before returning a handoff. */\n\taccept(): void;\n\t/**\n\t * result.usage is a cumulative snapshot, never a delta. The most recent explicitly\n\t * published usage is settled once on rejection (never inferred from details).\n\t * Final completion.usage, then completion.result.usage, override that snapshot.\n\t */\n\tpublish(result: AgentToolResult<T>, projection?: TaskProjection): void;\n\t/** Publish bounded, versioned display data without changing tool results or completion delivery. */\n\tpublishView(data: TaskViewData): void;\n\t/** Register once; cleanup must own only this exclusively-created file and close its writer first. */\n\tsetOutputPath(path: string, cleanup?: () => void | Promise<void>): void;\n}\n\nexport interface TaskExecution<T> {\n\tkind: TaskKind;\n\tformat?: \"log\" | \"report\";\n\ttitle: string;\n\ttoolCallId: string;\n\tcommand?: string;\n\tcwd?: string;\n\tbackground?: boolean;\n\tsignal?: AbortSignal;\n\tonUpdate?: (result: AgentToolResult<T>) => void;\n\trun(control: TaskControl<T>): Promise<TaskCompletion<T>>;\n}\n\nexport type TaskToolOutcome<T> =\n\t| { kind: \"result\"; result: AgentToolResult<T>; status?: TaskTerminalStatus; error?: string }\n\t| { kind: \"background\"; task: TaskSnapshot };\n\nexport interface TaskRead {\n\ttask: TaskSnapshot;\n\ttext: string;\n\t/** Bounded log-read/expiry diagnostic, independent of text slicing and byte offsets. */\n\treadError?: string;\n\ttotalBytes: number;\n\ttruncated: boolean;\n\tfromByte?: number;\n}\n\n/** Session-bound public capability. Captured instances close on runtime replacement. */\nexport interface TasksContext {\n\treadonly views: TaskViewRegistry;\n\treadonly enabled: boolean;\n\treadonly closed?: boolean;\n\texecute<T>(execution: TaskExecution<T>): Promise<TaskToolOutcome<T>>;\n\tlist(): TaskSnapshot[];\n\tget(id: string): TaskSnapshot;\n\tread(id: string, options?: { mode?: \"head\" | \"tail\"; bytes?: number; sinceBytes?: number }): Promise<TaskRead>;\n\t/** Observation only: terminal delivery is acknowledged by the host via markDelivered after result persistence. */\n\twait(id: string, timeoutMs?: number, signal?: AbortSignal): Promise<TaskSnapshot>;\n\tkill(id: string): boolean;\n\t/** Move every running foreground execution to the background; returns how many moved. */\n\tdetachForeground(): number;\n\tdetach(id: string): boolean;\n\tsubscribe(listener: () => void): () => void;\n\t/** Keep retained output available without delaying completion delivery. */\n\tretain(id: string): () => void;\n\t/** Hold automatic delivery while preparing a result for the host to persist. */\n\tholdDelivery(id: string): () => void;\n}\n\nexport interface TaskRuntimeOptions {\n\tenabled?: boolean;\n\tbackgroundAllowed?: boolean;\n\tanchor?: () => string | null;\n\tmaxActive?: number;\n\t/** Per-history limit: foreground logs and other managed tasks each get this allowance. */\n\tmaxHistory?: number;\n\t/** Best-effort cleanup errors, bounded to 4096 bytes; no retries or execution failure. */\n\tonCleanupError?: (message: string) => void;\n\t/** Synchronous persistence before terminal observers or notifications. */\n\tonSettled?: (task: TaskSnapshot, usage: Usage | undefined) => void;\n}\n\nexport const TASK_BACKGROUND_REJECTION =\n\t\"Background execution is not permitted in this host. Run with background: false or omit background. No work was started.\";\n\nexport function isTaskTerminal(status: TaskStatus): boolean {\n\treturn status !== \"queued\" && status !== \"running\" && status !== \"stopping\";\n}\n\n/** Foreground logs have their own history; reports remain inspectable in either mode. */\nexport function isInlineLogTask(task: Pick<TaskSnapshot, \"format\" | \"mode\">): boolean {\n\treturn task.format === \"log\" && task.mode === \"foreground\";\n}\n\n/** Preserve the foreground throwing contract without guessing status from output text. */\nexport class TaskExecutionError extends Error {\n\treadonly status: TaskTerminalStatus;\n\tconstructor(message: string, status: TaskTerminalStatus) {\n\t\tsuper(message);\n\t\tthis.name = \"TaskExecutionError\";\n\t\tthis.status = status;\n\t}\n}\n\n/**\n * A failed id lookup, typed so hosts can enrich the message without matching\n * on message text. `matches` snapshots exactly the records the id or prefix\n * resolved against — including records outside the current branch, which\n * list() hides but prefix matching still collides with.\n */\nexport class TaskLookupError extends Error {\n\treadonly kind: \"unknown\" | \"ambiguous\";\n\treadonly matches: TaskSnapshot[];\n\tconstructor(kind: \"unknown\" | \"ambiguous\", matches: TaskSnapshot[]) {\n\t\tsuper(kind === \"ambiguous\" ? \"Ambiguous background task ID\" : \"Unknown background task ID\");\n\t\tthis.name = \"TaskLookupError\";\n\t\tthis.kind = kind;\n\t\tthis.matches = matches;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Executor-owned JSON data; the version belongs to its view provider. */
|
|
2
|
+
export interface TaskViewData {
|
|
3
|
+
version: number;
|
|
4
|
+
data: unknown;
|
|
5
|
+
}
|
|
6
|
+
/** Strict, bounded JSON copy. Never invoke accessors, toJSON, or renderer callbacks. */
|
|
7
|
+
export declare function readTaskViewData(source: unknown): TaskViewData;
|
|
8
|
+
//# sourceMappingURL=view-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-data.d.ts","sourceRoot":"","sources":["../../../src/core/tasks/view-data.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACd;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,CA+C9D"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/** Strict, bounded JSON copy. Never invoke accessors, toJSON, or renderer callbacks. */
|
|
2
|
+
export function readTaskViewData(source) {
|
|
3
|
+
let budget = 120 * 1024;
|
|
4
|
+
const copy = (value, depth) => {
|
|
5
|
+
if (depth > 32 || --budget < 0)
|
|
6
|
+
throw new Error("Task view data exceeds storage limits");
|
|
7
|
+
if (value === null || typeof value === "boolean")
|
|
8
|
+
return value;
|
|
9
|
+
if (typeof value === "string") {
|
|
10
|
+
if (value.length > budget)
|
|
11
|
+
throw new Error("Task view data exceeds storage limits");
|
|
12
|
+
budget -= Buffer.byteLength(JSON.stringify(value));
|
|
13
|
+
if (budget < 0)
|
|
14
|
+
throw new Error("Task view data exceeds storage limits");
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
18
|
+
budget -= 24;
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
if (typeof value !== "object" || value === null)
|
|
22
|
+
throw new Error("Task view data must be JSON");
|
|
23
|
+
const array = Array.isArray(value);
|
|
24
|
+
if (!array && Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null)
|
|
25
|
+
throw new Error("Task view data must contain plain objects");
|
|
26
|
+
const output = {};
|
|
27
|
+
const entries = [];
|
|
28
|
+
for (const key of Object.keys(value)) {
|
|
29
|
+
if (array && key !== String(entries.length))
|
|
30
|
+
throw new Error("Task view arrays must be dense JSON arrays");
|
|
31
|
+
const field = Object.getOwnPropertyDescriptor(value, key);
|
|
32
|
+
if (!("value" in field))
|
|
33
|
+
throw new Error("Task view data cannot contain accessors");
|
|
34
|
+
if (field.value === undefined && !array)
|
|
35
|
+
continue;
|
|
36
|
+
copy(key, depth + 1);
|
|
37
|
+
const next = copy(field.value, depth + 1);
|
|
38
|
+
if (array)
|
|
39
|
+
entries.push(next);
|
|
40
|
+
else
|
|
41
|
+
Object.defineProperty(output, key, { value: next, enumerable: true, writable: true, configurable: true });
|
|
42
|
+
}
|
|
43
|
+
if (array && entries.length !== value.length)
|
|
44
|
+
throw new Error("Task view arrays must be dense JSON arrays");
|
|
45
|
+
return array ? entries : output;
|
|
46
|
+
};
|
|
47
|
+
const result = copy(source, 0);
|
|
48
|
+
if (budget < 0)
|
|
49
|
+
throw new Error("Task view data exceeds storage limits");
|
|
50
|
+
if (!result ||
|
|
51
|
+
typeof result.version !== "number" ||
|
|
52
|
+
!Number.isSafeInteger(result.version) ||
|
|
53
|
+
result.version < 1 ||
|
|
54
|
+
!Object.hasOwn(result, "data"))
|
|
55
|
+
throw new Error("Invalid task view data envelope");
|
|
56
|
+
// Traversal already bounds the allocation; enforce the exact serialized limit too.
|
|
57
|
+
if (Buffer.byteLength(JSON.stringify(result)) > 120 * 1024)
|
|
58
|
+
throw new Error("Task view data exceeds storage limits");
|
|
59
|
+
return { version: result.version, data: result.data };
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=view-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-data.js","sourceRoot":"","sources":["../../../src/core/tasks/view-data.ts"],"names":[],"mappings":"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","sourcesContent":["/** Executor-owned JSON data; the version belongs to its view provider. */\nexport interface TaskViewData {\n\tversion: number;\n\tdata: unknown;\n}\n\n/** Strict, bounded JSON copy. Never invoke accessors, toJSON, or renderer callbacks. */\nexport function readTaskViewData(source: unknown): TaskViewData {\n\tlet budget = 120 * 1024;\n\tconst copy = (value: unknown, depth: number): unknown => {\n\t\tif (depth > 32 || --budget < 0) throw new Error(\"Task view data exceeds storage limits\");\n\t\tif (value === null || typeof value === \"boolean\") return value;\n\t\tif (typeof value === \"string\") {\n\t\t\tif (value.length > budget) throw new Error(\"Task view data exceeds storage limits\");\n\t\t\tbudget -= Buffer.byteLength(JSON.stringify(value));\n\t\t\tif (budget < 0) throw new Error(\"Task view data exceeds storage limits\");\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"number\" && Number.isFinite(value)) {\n\t\t\tbudget -= 24;\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value !== \"object\" || value === null) throw new Error(\"Task view data must be JSON\");\n\t\tconst array = Array.isArray(value);\n\t\tif (!array && Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null)\n\t\t\tthrow new Error(\"Task view data must contain plain objects\");\n\t\tconst output: Record<string, unknown> = {};\n\t\tconst entries: unknown[] = [];\n\t\tfor (const key of Object.keys(value)) {\n\t\t\tif (array && key !== String(entries.length)) throw new Error(\"Task view arrays must be dense JSON arrays\");\n\t\t\tconst field = Object.getOwnPropertyDescriptor(value, key)!;\n\t\t\tif (!(\"value\" in field)) throw new Error(\"Task view data cannot contain accessors\");\n\t\t\tif (field.value === undefined && !array) continue;\n\t\t\tcopy(key, depth + 1);\n\t\t\tconst next = copy(field.value, depth + 1);\n\t\t\tif (array) entries.push(next);\n\t\t\telse Object.defineProperty(output, key, { value: next, enumerable: true, writable: true, configurable: true });\n\t\t}\n\t\tif (array && entries.length !== value.length) throw new Error(\"Task view arrays must be dense JSON arrays\");\n\t\treturn array ? entries : output;\n\t};\n\tconst result = copy(source, 0) as Partial<TaskViewData> | null;\n\tif (budget < 0) throw new Error(\"Task view data exceeds storage limits\");\n\tif (\n\t\t!result ||\n\t\ttypeof result.version !== \"number\" ||\n\t\t!Number.isSafeInteger(result.version) ||\n\t\tresult.version < 1 ||\n\t\t!Object.hasOwn(result, \"data\")\n\t)\n\t\tthrow new Error(\"Invalid task view data envelope\");\n\t// Traversal already bounds the allocation; enforce the exact serialized limit too.\n\tif (Buffer.byteLength(JSON.stringify(result)) > 120 * 1024) throw new Error(\"Task view data exceeds storage limits\");\n\treturn { version: result.version, data: result.data };\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Component } from "@earendil-works/pi-tui";
|
|
2
|
+
import type { Theme } from "../../modes/interactive/theme/theme.ts";
|
|
3
|
+
import type { TaskRead, TaskSnapshot } from "./types.ts";
|
|
4
|
+
/** A panel-local view. Components own their content; the panel owns scrolling. */
|
|
5
|
+
export interface TaskView {
|
|
6
|
+
info: Component;
|
|
7
|
+
output: Component;
|
|
8
|
+
update(task: TaskSnapshot, output?: TaskRead): void;
|
|
9
|
+
dispose?(): void;
|
|
10
|
+
}
|
|
11
|
+
export interface TaskViewProvider {
|
|
12
|
+
/** Tail views receive bounded output reads and initially follow the bottom. */
|
|
13
|
+
outputMode: "tail" | "snapshot";
|
|
14
|
+
create(context: {
|
|
15
|
+
theme: Theme;
|
|
16
|
+
requestRender(): void;
|
|
17
|
+
}): TaskView;
|
|
18
|
+
}
|
|
19
|
+
/** Session-local renderer registrations, never part of a persisted task snapshot. */
|
|
20
|
+
export declare class TaskViewRegistry {
|
|
21
|
+
private readonly providers;
|
|
22
|
+
private readonly listeners;
|
|
23
|
+
private closed;
|
|
24
|
+
register(kind: string, provider: TaskViewProvider): () => void;
|
|
25
|
+
get(kind: string): TaskViewProvider | undefined;
|
|
26
|
+
subscribe(listener: () => void): () => void;
|
|
27
|
+
close(): void;
|
|
28
|
+
private emit;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/core/tasks/view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD,kFAAkF;AAClF,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACpD,OAAO,CAAC,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAChC,+EAA+E;IAC/E,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC;IAChC,MAAM,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,aAAa,IAAI,IAAI,CAAA;KAAE,GAAG,QAAQ,CAAC;CACnE;AAED,qFAAqF;AACrF,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IACjE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,MAAM,CAAS;IAEvB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAY9D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI/C,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAQ3C,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,IAAI;CASZ"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** Session-local renderer registrations, never part of a persisted task snapshot. */
|
|
2
|
+
export class TaskViewRegistry {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.providers = new Map();
|
|
5
|
+
this.listeners = new Set();
|
|
6
|
+
this.closed = false;
|
|
7
|
+
}
|
|
8
|
+
register(kind, provider) {
|
|
9
|
+
if (this.closed)
|
|
10
|
+
throw new Error("Task views are closed");
|
|
11
|
+
if (this.providers.has(kind))
|
|
12
|
+
throw new Error(`Task view already registered: ${kind}`);
|
|
13
|
+
this.providers.set(kind, provider);
|
|
14
|
+
this.emit();
|
|
15
|
+
return () => {
|
|
16
|
+
if (this.providers.get(kind) !== provider)
|
|
17
|
+
return;
|
|
18
|
+
this.providers.delete(kind);
|
|
19
|
+
this.emit();
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
get(kind) {
|
|
23
|
+
return this.providers.get(kind);
|
|
24
|
+
}
|
|
25
|
+
subscribe(listener) {
|
|
26
|
+
if (this.closed)
|
|
27
|
+
return () => { };
|
|
28
|
+
this.listeners.add(listener);
|
|
29
|
+
return () => {
|
|
30
|
+
this.listeners.delete(listener);
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
close() {
|
|
34
|
+
this.closed = true;
|
|
35
|
+
this.providers.clear();
|
|
36
|
+
this.emit();
|
|
37
|
+
this.listeners.clear();
|
|
38
|
+
}
|
|
39
|
+
emit() {
|
|
40
|
+
for (const listener of this.listeners) {
|
|
41
|
+
try {
|
|
42
|
+
listener();
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
/* A view cannot interrupt registration or execution. */
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/core/tasks/view.ts"],"names":[],"mappings":"AAkBA,qFAAqF;AACrF,MAAM,OAAO,gBAAgB;IAA7B;QACkB,cAAS,GAAG,IAAI,GAAG,EAA4B,CAAC;QAChD,cAAS,GAAG,IAAI,GAAG,EAAc,CAAC;QAC3C,WAAM,GAAG,KAAK,CAAC;IA0CxB,CAAC;IAxCA,QAAQ,CAAC,IAAY,EAAE,QAA0B;QAChD,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC1D,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;QACvF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,GAAG,EAAE;YACX,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ;gBAAE,OAAO;YAClD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;QACb,CAAC,CAAC;IACH,CAAC;IAED,GAAG,CAAC,IAAY;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,SAAS,CAAC,QAAoB;QAC7B,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACX,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC;IACH,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAEO,IAAI;QACX,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC;gBACJ,QAAQ,EAAE,CAAC;YACZ,CAAC;YAAC,MAAM,CAAC;gBACR,wDAAwD;YACzD,CAAC;QACF,CAAC;IACF,CAAC;CACD","sourcesContent":["import type { Component } from \"@earendil-works/pi-tui\";\nimport type { Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport type { TaskRead, TaskSnapshot } from \"./types.ts\";\n\n/** A panel-local view. Components own their content; the panel owns scrolling. */\nexport interface TaskView {\n\tinfo: Component;\n\toutput: Component;\n\tupdate(task: TaskSnapshot, output?: TaskRead): void;\n\tdispose?(): void;\n}\n\nexport interface TaskViewProvider {\n\t/** Tail views receive bounded output reads and initially follow the bottom. */\n\toutputMode: \"tail\" | \"snapshot\";\n\tcreate(context: { theme: Theme; requestRender(): void }): TaskView;\n}\n\n/** Session-local renderer registrations, never part of a persisted task snapshot. */\nexport class TaskViewRegistry {\n\tprivate readonly providers = new Map<string, TaskViewProvider>();\n\tprivate readonly listeners = new Set<() => void>();\n\tprivate closed = false;\n\n\tregister(kind: string, provider: TaskViewProvider): () => void {\n\t\tif (this.closed) throw new Error(\"Task views are closed\");\n\t\tif (this.providers.has(kind)) throw new Error(`Task view already registered: ${kind}`);\n\t\tthis.providers.set(kind, provider);\n\t\tthis.emit();\n\t\treturn () => {\n\t\t\tif (this.providers.get(kind) !== provider) return;\n\t\t\tthis.providers.delete(kind);\n\t\t\tthis.emit();\n\t\t};\n\t}\n\n\tget(kind: string): TaskViewProvider | undefined {\n\t\treturn this.providers.get(kind);\n\t}\n\n\tsubscribe(listener: () => void): () => void {\n\t\tif (this.closed) return () => {};\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\n\tclose(): void {\n\t\tthis.closed = true;\n\t\tthis.providers.clear();\n\t\tthis.emit();\n\t\tthis.listeners.clear();\n\t}\n\n\tprivate emit(): void {\n\t\tfor (const listener of this.listeners) {\n\t\t\ttry {\n\t\t\t\tlistener();\n\t\t\t} catch {\n\t\t\t\t/* A view cannot interrupt registration or execution. */\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
@@ -1,98 +1,13 @@
|
|
|
1
|
-
import type
|
|
2
|
-
|
|
3
|
-
import { type ShellConfig } from "../../utils/shell.ts";
|
|
4
|
-
import type { ExtensionContext, ToolDefinition } from "../extensions/types.ts";
|
|
5
|
-
import { type TruncationResult } from "./truncate.ts";
|
|
6
|
-
declare const bashSchema: Type.TObject<{
|
|
7
|
-
command: Type.TString;
|
|
8
|
-
timeout: Type.TOptional<Type.TNumber>;
|
|
9
|
-
background: Type.TOptional<Type.TBoolean>;
|
|
10
|
-
}>;
|
|
11
|
-
export declare const bashToolSystemPromptContribution: {
|
|
12
|
-
readonly snippet: "Execute bash commands, foreground or background";
|
|
13
|
-
readonly guidelines: readonly ["You can inspect PI_* environment variables for current model and session details."];
|
|
14
|
-
};
|
|
15
|
-
export type BashToolInput = Static<typeof bashSchema>;
|
|
16
|
-
export interface BashToolDetails {
|
|
17
|
-
truncation?: TruncationResult;
|
|
18
|
-
fullOutputPath?: string;
|
|
19
|
-
/** Settled handoff snapshot, not a command completion or exit code. */
|
|
20
|
-
background?: {
|
|
21
|
-
kind: "background";
|
|
22
|
-
taskId: string;
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Pluggable operations for the bash tool.
|
|
27
|
-
* Override these to delegate command execution to remote systems (for example SSH).
|
|
28
|
-
*/
|
|
29
|
-
export interface BashOperations {
|
|
30
|
-
/**
|
|
31
|
-
* Execute a command and stream output.
|
|
32
|
-
* @param command The command to execute
|
|
33
|
-
* @param cwd Working directory
|
|
34
|
-
* @param options Execution options
|
|
35
|
-
* @returns Promise resolving to the exit code. Report signal terminations as 128 + signal number;
|
|
36
|
-
* a null exit code is treated as a failed command.
|
|
37
|
-
*
|
|
38
|
-
* Error contract: reject with `new Error("aborted")` when aborted via `signal`,
|
|
39
|
-
* and `new Error("timeout:<seconds>")` on timeout expiry. The shared shell
|
|
40
|
-
* execution pipeline classifies outcomes from these exact markers.
|
|
41
|
-
*/
|
|
42
|
-
exec: (command: string, cwd: string, options: {
|
|
43
|
-
onData: (data: Buffer) => void;
|
|
44
|
-
signal?: AbortSignal;
|
|
45
|
-
timeout?: number;
|
|
46
|
-
env?: NodeJS.ProcessEnv;
|
|
47
|
-
}) => Promise<{
|
|
48
|
-
exitCode: number | null;
|
|
49
|
-
}>;
|
|
50
|
-
}
|
|
51
|
-
/** Shared process execution used by the built-in shell tools. */
|
|
52
|
-
export declare function createLocalShellOperations(shellName: string, resolveShellConfig: () => ShellConfig, normalizeCommand?: (command: string) => string): BashOperations;
|
|
53
|
-
/**
|
|
54
|
-
* Create bash operations using pi's built-in local shell execution backend.
|
|
55
|
-
*
|
|
56
|
-
* This is useful for extensions that intercept user_bash and still want pi's
|
|
57
|
-
* standard local shell behavior while wrapping or rewriting commands.
|
|
58
|
-
*/
|
|
1
|
+
import { type BashOperations, type BashToolOptions, createShellToolDefinition } from "./shell-tool.ts";
|
|
2
|
+
export { type BashOperations, type BashRenderState, type BashSpawnContext, type BashSpawnHook, type BashToolDetails, type BashToolInput, type BashToolOptions, bashToolSystemPromptContribution, } from "./shell-tool.ts";
|
|
59
3
|
export declare function normalizeLocalBashCommand(command: string, platform?: NodeJS.Platform): string;
|
|
60
4
|
export declare function createLocalBashOperations(options?: {
|
|
61
5
|
shellPath?: string;
|
|
62
6
|
}): BashOperations;
|
|
63
|
-
export
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
export declare function resolveSpawnContext(command: string, cwd: string, spawnHook: BashSpawnHook | undefined, exposeSessionEnvironment: boolean, ctx: ExtensionContext | undefined): BashSpawnContext;
|
|
70
|
-
export interface BashToolOptions {
|
|
71
|
-
/** Custom operations for command execution. Default: local shell */
|
|
72
|
-
operations?: BashOperations;
|
|
73
|
-
/** Command prefix prepended to every command (for example shell setup commands) */
|
|
74
|
-
commandPrefix?: string;
|
|
75
|
-
/** Optional explicit shell path from settings */
|
|
76
|
-
shellPath?: string;
|
|
77
|
-
/** Expose current Pi session metadata as PI_* environment variables. Default: true */
|
|
78
|
-
exposeSessionEnvironment?: boolean;
|
|
79
|
-
/** Hook to adjust command, cwd, or env before execution */
|
|
80
|
-
spawnHook?: BashSpawnHook;
|
|
81
|
-
}
|
|
82
|
-
export type BashRenderState = {
|
|
83
|
-
dispose?: () => void;
|
|
84
|
-
};
|
|
85
|
-
export interface ShellToolConfig {
|
|
86
|
-
name: string;
|
|
87
|
-
label: string;
|
|
88
|
-
shellName: string;
|
|
89
|
-
prompt: string;
|
|
90
|
-
promptSnippet: string;
|
|
91
|
-
promptGuidelines?: readonly string[];
|
|
92
|
-
tempFilePrefix: string;
|
|
93
|
-
}
|
|
94
|
-
export declare function createShellToolDefinition(cwd: string, config: ShellToolConfig, options?: BashToolOptions): ToolDefinition<typeof bashSchema, BashToolDetails | undefined, BashRenderState>;
|
|
95
|
-
export declare function createBashToolDefinition(cwd: string, options?: BashToolOptions): ToolDefinition<typeof bashSchema, BashToolDetails | undefined, BashRenderState>;
|
|
96
|
-
export declare function createBashTool(cwd: string, options?: BashToolOptions): AgentTool<typeof bashSchema>;
|
|
97
|
-
export {};
|
|
7
|
+
export declare function createBashToolDefinition(cwd: string, options?: BashToolOptions): ReturnType<typeof createShellToolDefinition>;
|
|
8
|
+
export declare function createBashTool(cwd: string, options?: BashToolOptions): import("@earendil-works/pi-agent-core").AgentTool<import("typebox").TObject<{
|
|
9
|
+
command: import("typebox").TString;
|
|
10
|
+
timeout: import("typebox").TOptional<import("typebox").TNumber>;
|
|
11
|
+
background: import("typebox").TOptional<import("typebox").TBoolean>;
|
|
12
|
+
}>, import("./shell-tool.ts").BashToolDetails | undefined>;
|
|
98
13
|
//# sourceMappingURL=bash.d.ts.map
|