@astralyn/pi 0.87.6 → 1.0.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 +69 -9
- 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-CG2BSDQS.js +6 -0
- package/dist/bundle/chunks/anthropic.js +2 -2
- package/dist/bundle/chunks/azure-openai-responses-PBA4QKCM.js +2 -0
- package/dist/bundle/chunks/bedrock-converse-stream.js +8 -8
- package/dist/bundle/chunks/{chunk-NW5FIDD7.js → chunk-6UFFVA7M.js} +3 -3
- package/dist/bundle/chunks/chunk-G4RY3GN7.js +11 -0
- package/dist/bundle/chunks/chunk-GCKVOFWP.js +2 -0
- package/dist/bundle/chunks/chunk-GIG5IHES.js +2 -0
- package/dist/bundle/chunks/{chunk-4W4Q2H6W.js → chunk-HESRDUKO.js} +1000 -625
- package/dist/bundle/chunks/chunk-MPDALHNJ.js +2 -0
- package/dist/bundle/chunks/chunk-OO6DJ3CL.js +31 -0
- package/dist/bundle/chunks/{chunk-LPQCB2VJ.js → chunk-PFZKRUMO.js} +2 -2
- package/dist/bundle/chunks/chunk-SGLYRVQL.js +2 -0
- package/dist/bundle/chunks/chunk-TRHTWM3C.js +2 -0
- package/dist/bundle/chunks/chunk-V66VGGOM.js +2 -0
- package/dist/bundle/chunks/chunk-Z2RKSI3O.js +2 -0
- package/dist/bundle/chunks/cloudflare-workers-ai-system-one-YB7XPPP4.js +2 -0
- package/dist/bundle/chunks/codemode-worker.js +354 -0
- package/dist/bundle/chunks/github-copilot.js +1 -1
- package/dist/bundle/chunks/google-generative-ai-V5ZM5MCL.js +2 -0
- package/dist/bundle/chunks/google-vertex-22THOFP5.js +2 -0
- package/dist/bundle/chunks/llama-cpp-classify-R7DQLTQN.js +22 -0
- package/dist/bundle/chunks/meta.js +2 -0
- package/dist/bundle/chunks/mistral-conversations-WHSCJJWP.js +5 -0
- package/dist/bundle/chunks/openai-chatgpt.js +75 -0
- package/dist/bundle/chunks/openai-codex-responses-N7GDPBPP.js +10 -0
- package/dist/bundle/chunks/openai-codex.js +2 -2
- package/dist/bundle/chunks/openai-completions-RGGQK5UW.js +7 -0
- package/dist/bundle/chunks/openai-responses-3ZLD5JYI.js +3 -0
- package/dist/bundle/chunks/{openrouter-images-6XDE2CEW.js → openrouter-images-YP3YVB54.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-RREJAKWB.js +2 -0
- package/dist/bundle/chunks/virtual-modules-4RQ2L6W4.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 +5 -4
- 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 +15 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +33 -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 +121 -36
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +518 -203
- 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 +67 -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 +310 -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 +70 -5
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +15 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/mcp-servers.d.ts +125 -0
- package/dist/core/mcp-servers.d.ts.map +1 -0
- package/dist/core/mcp-servers.js +199 -0
- package/dist/core/mcp-servers.js.map +1 -0
- package/dist/core/model-registry.d.ts +15 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +29 -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 +47 -3
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +189 -35
- 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/radius.d.ts +2 -0
- package/dist/core/radius.d.ts.map +1 -1
- package/dist/core/radius.js +2 -0
- package/dist/core/radius.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 +21 -11
- 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 +26 -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 +41 -4
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +110 -3
- 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/format.d.ts +7 -0
- package/dist/core/tasks/format.d.ts.map +1 -0
- package/dist/core/tasks/format.js +14 -0
- package/dist/core/tasks/format.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 +8 -51
- package/dist/core/tasks/history.js.map +1 -0
- package/dist/core/{background → tasks}/output.d.ts +12 -4
- package/dist/core/tasks/output.d.ts.map +1 -0
- package/dist/core/{background → tasks}/output.js +30 -11
- package/dist/core/tasks/output.js.map +1 -0
- package/dist/core/tasks/presentation.d.ts +7 -0
- package/dist/core/tasks/presentation.d.ts.map +1 -0
- package/dist/core/tasks/presentation.js +226 -0
- package/dist/core/tasks/presentation.js.map +1 -0
- package/dist/core/tasks/runtime.d.ts +74 -0
- package/dist/core/tasks/runtime.d.ts.map +1 -0
- package/dist/core/tasks/runtime.js +580 -0
- 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 +138 -0
- package/dist/core/tasks/session.js.map +1 -0
- package/dist/core/tasks/store.d.ts +46 -0
- package/dist/core/tasks/store.d.ts.map +1 -0
- package/dist/core/tasks/store.js +162 -0
- package/dist/core/tasks/store.js.map +1 -0
- package/dist/core/{background → tasks}/types.d.ts +64 -86
- package/dist/core/tasks/types.d.ts.map +1 -0
- package/dist/core/tasks/types.js +27 -0
- package/dist/core/tasks/types.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 +11 -35
- 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/shell-execution.d.ts +4 -6
- package/dist/core/tools/shell-execution.d.ts.map +1 -1
- package/dist/core/tools/shell-execution.js +22 -13
- 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 +249 -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 +44 -29
- package/dist/core/tools/tasks/actions.js.map +1 -0
- package/dist/core/tools/tasks/constants.d.ts +20 -0
- package/dist/core/tools/tasks/constants.d.ts.map +1 -0
- package/dist/core/tools/tasks/constants.js +20 -0
- package/dist/core/tools/tasks/constants.js.map +1 -0
- package/dist/{extensions/background → core/tools/tasks}/schema.d.ts +7 -7
- package/dist/core/tools/tasks/schema.d.ts.map +1 -0
- package/dist/{extensions/background → core/tools/tasks}/schema.js +21 -20
- package/dist/core/tools/tasks/schema.js.map +1 -0
- package/dist/core/tools/tasks/types.d.ts +53 -0
- package/dist/core/tools/tasks/types.d.ts.map +1 -0
- package/dist/core/tools/tasks/types.js +12 -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 +117 -0
- package/dist/core/virtual-models.d.ts.map +1 -0
- package/dist/core/virtual-models.js +124 -0
- package/dist/core/virtual-models.js.map +1 -0
- package/dist/extensions/btw/agent.d.ts +17 -8
- package/dist/extensions/btw/agent.d.ts.map +1 -1
- package/dist/extensions/btw/agent.js +74 -76
- package/dist/extensions/btw/agent.js.map +1 -1
- package/dist/extensions/btw/controller.d.ts +0 -1
- package/dist/extensions/btw/controller.d.ts.map +1 -1
- package/dist/extensions/btw/controller.js +26 -33
- package/dist/extensions/btw/controller.js.map +1 -1
- package/dist/extensions/btw/panel.d.ts +13 -14
- package/dist/extensions/btw/panel.d.ts.map +1 -1
- package/dist/extensions/btw/panel.js +38 -29
- package/dist/extensions/btw/panel.js.map +1 -1
- 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 +536 -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 +137 -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 +123 -0
- package/dist/extensions/codemode/tool.d.ts.map +1 -0
- package/dist/extensions/codemode/tool.js +268 -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.js +13 -13
- 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 +500 -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 +72 -0
- package/dist/extensions/mcp/config.d.ts.map +1 -0
- package/dist/extensions/mcp/config.js +158 -0
- package/dist/extensions/mcp/config.js.map +1 -0
- package/dist/extensions/mcp/index.d.ts +76 -0
- package/dist/extensions/mcp/index.d.ts.map +1 -0
- package/dist/extensions/mcp/index.js +1078 -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 +97 -0
- package/dist/extensions/mcp/oauth.d.ts.map +1 -0
- package/dist/extensions/mcp/oauth.js +355 -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 +98 -0
- package/dist/extensions/mcp/runtime.d.ts.map +1 -0
- package/dist/extensions/mcp/runtime.js +379 -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 +84 -0
- package/dist/extensions/mcp/tools.d.ts.map +1 -0
- package/dist/extensions/mcp/tools.js +251 -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 +168 -0
- package/dist/extensions/mcp/ui.js.map +1 -0
- package/dist/extensions/provider/catalog.d.ts +8 -1
- package/dist/extensions/provider/catalog.d.ts.map +1 -1
- package/dist/extensions/provider/catalog.js +31 -0
- package/dist/extensions/provider/catalog.js.map +1 -1
- package/dist/extensions/provider/connection.d.ts +4 -1
- package/dist/extensions/provider/connection.d.ts.map +1 -1
- package/dist/extensions/provider/connection.js +1 -5
- package/dist/extensions/provider/connection.js.map +1 -1
- package/dist/extensions/provider/editing.d.ts +36 -0
- package/dist/extensions/provider/editing.d.ts.map +1 -0
- package/dist/extensions/provider/editing.js +99 -0
- package/dist/extensions/provider/editing.js.map +1 -0
- package/dist/extensions/provider/json-fields.d.ts +5 -0
- package/dist/extensions/provider/json-fields.d.ts.map +1 -0
- package/dist/extensions/provider/json-fields.js +31 -0
- package/dist/extensions/provider/json-fields.js.map +1 -0
- package/dist/extensions/provider/store.d.ts +1 -4
- package/dist/extensions/provider/store.d.ts.map +1 -1
- package/dist/extensions/provider/store.js +2 -30
- package/dist/extensions/provider/store.js.map +1 -1
- package/dist/extensions/provider/ui/builtin-data.d.ts +0 -2
- package/dist/extensions/provider/ui/builtin-data.d.ts.map +1 -1
- package/dist/extensions/provider/ui/builtin-data.js +14 -79
- package/dist/extensions/provider/ui/builtin-data.js.map +1 -1
- package/dist/extensions/provider/ui/compat.d.ts.map +1 -1
- package/dist/extensions/provider/ui/compat.js +6 -9
- package/dist/extensions/provider/ui/compat.js.map +1 -1
- package/dist/extensions/provider/ui/controls.d.ts +48 -0
- package/dist/extensions/provider/ui/controls.d.ts.map +1 -0
- package/dist/extensions/provider/ui/controls.js +108 -0
- package/dist/extensions/provider/ui/controls.js.map +1 -0
- package/dist/extensions/provider/ui/dictionary.d.ts.map +1 -1
- package/dist/extensions/provider/ui/dictionary.js +6 -9
- package/dist/extensions/provider/ui/dictionary.js.map +1 -1
- package/dist/extensions/provider/ui/editor.d.ts +3 -3
- package/dist/extensions/provider/ui/editor.d.ts.map +1 -1
- package/dist/extensions/provider/ui/editor.js +35 -140
- package/dist/extensions/provider/ui/editor.js.map +1 -1
- package/dist/extensions/provider/ui/fetch-models.d.ts +0 -3
- package/dist/extensions/provider/ui/fetch-models.d.ts.map +1 -1
- package/dist/extensions/provider/ui/fetch-models.js +49 -44
- package/dist/extensions/provider/ui/fetch-models.js.map +1 -1
- package/dist/extensions/provider/ui/model-fields.d.ts.map +1 -1
- package/dist/extensions/provider/ui/model-fields.js +11 -14
- package/dist/extensions/provider/ui/model-fields.js.map +1 -1
- package/dist/extensions/provider/ui/model-options.d.ts +4 -34
- package/dist/extensions/provider/ui/model-options.d.ts.map +1 -1
- package/dist/extensions/provider/ui/model-options.js +90 -271
- package/dist/extensions/provider/ui/model-options.js.map +1 -1
- package/dist/extensions/provider/ui/pane.d.ts +4 -18
- package/dist/extensions/provider/ui/pane.d.ts.map +1 -1
- package/dist/extensions/provider/ui/pane.js.map +1 -1
- package/dist/extensions/provider/ui/provider-fields.d.ts +2 -19
- package/dist/extensions/provider/ui/provider-fields.d.ts.map +1 -1
- package/dist/extensions/provider/ui/provider-fields.js +58 -171
- package/dist/extensions/provider/ui/provider-fields.js.map +1 -1
- package/dist/extensions/provider/ui/thinking-map.d.ts.map +1 -1
- package/dist/extensions/provider/ui/thinking-map.js +6 -9
- package/dist/extensions/provider/ui/thinking-map.js.map +1 -1
- package/dist/extensions/question/detail-pane.d.ts +7 -2
- package/dist/extensions/question/detail-pane.d.ts.map +1 -1
- package/dist/extensions/question/detail-pane.js +16 -5
- package/dist/extensions/question/detail-pane.js.map +1 -1
- package/dist/extensions/question/dialog-view.d.ts +41 -0
- package/dist/extensions/question/dialog-view.d.ts.map +1 -0
- package/dist/extensions/question/dialog-view.js +329 -0
- package/dist/extensions/question/dialog-view.js.map +1 -0
- package/dist/extensions/question/dialog.d.ts +3 -3
- package/dist/extensions/question/dialog.d.ts.map +1 -1
- package/dist/extensions/question/dialog.js +220 -634
- package/dist/extensions/question/dialog.js.map +1 -1
- package/dist/extensions/question/index.d.ts.map +1 -1
- package/dist/extensions/question/index.js +2 -3
- package/dist/extensions/question/index.js.map +1 -1
- package/dist/extensions/question/render.d.ts.map +1 -1
- package/dist/extensions/question/render.js +22 -32
- package/dist/extensions/question/render.js.map +1 -1
- package/dist/extensions/question/results.d.ts.map +1 -1
- package/dist/extensions/question/results.js +56 -12
- package/dist/extensions/question/results.js.map +1 -1
- package/dist/extensions/question/schema.d.ts +21 -6
- package/dist/extensions/question/schema.d.ts.map +1 -1
- package/dist/extensions/question/schema.js.map +1 -1
- package/dist/extensions/question/state.d.ts +9 -7
- package/dist/extensions/question/state.d.ts.map +1 -1
- package/dist/extensions/question/state.js +63 -54
- package/dist/extensions/question/state.js.map +1 -1
- package/dist/extensions/question/types.d.ts +41 -18
- package/dist/extensions/question/types.d.ts.map +1 -1
- package/dist/extensions/question/types.js.map +1 -1
- package/dist/extensions/statusline/index.d.ts +4 -0
- package/dist/extensions/statusline/index.d.ts.map +1 -1
- package/dist/extensions/statusline/index.js +18 -355
- package/dist/extensions/statusline/index.js.map +1 -1
- package/dist/extensions/statusline/render.d.ts +19 -0
- package/dist/extensions/statusline/render.d.ts.map +1 -0
- package/dist/extensions/statusline/render.js +163 -0
- package/dist/extensions/statusline/render.js.map +1 -0
- package/dist/extensions/statusline/usage.d.ts +12 -0
- package/dist/extensions/statusline/usage.d.ts.map +1 -0
- package/dist/extensions/statusline/usage.js +36 -0
- package/dist/extensions/statusline/usage.js.map +1 -0
- 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 +73 -0
- package/dist/extensions/tool-search/tool.d.ts.map +1 -0
- package/dist/extensions/tool-search/tool.js +187 -0
- package/dist/extensions/tool-search/tool.js.map +1 -0
- package/dist/extensions/web-search/execute.d.ts +1 -5
- package/dist/extensions/web-search/execute.d.ts.map +1 -1
- package/dist/extensions/web-search/execute.js +4 -9
- package/dist/extensions/web-search/execute.js.map +1 -1
- package/dist/extensions/web-search/format.d.ts +12 -3
- package/dist/extensions/web-search/format.d.ts.map +1 -1
- package/dist/extensions/web-search/format.js +33 -25
- package/dist/extensions/web-search/format.js.map +1 -1
- package/dist/extensions/web-search/index.d.ts.map +1 -1
- package/dist/extensions/web-search/index.js +6 -29
- package/dist/extensions/web-search/index.js.map +1 -1
- package/dist/extensions/web-search/providers/deepseek.d.ts.map +1 -1
- package/dist/extensions/web-search/providers/deepseek.js +0 -1
- package/dist/extensions/web-search/providers/deepseek.js.map +1 -1
- package/dist/extensions/web-search/providers/http.d.ts +1 -1
- package/dist/extensions/web-search/providers/http.d.ts.map +1 -1
- package/dist/extensions/web-search/providers/http.js.map +1 -1
- package/dist/extensions/web-search/providers/minimax.d.ts.map +1 -1
- package/dist/extensions/web-search/providers/minimax.js +0 -1
- package/dist/extensions/web-search/providers/minimax.js.map +1 -1
- package/dist/extensions/web-search/render.d.ts +7 -2
- package/dist/extensions/web-search/render.d.ts.map +1 -1
- package/dist/extensions/web-search/render.js +32 -4
- package/dist/extensions/web-search/render.js.map +1 -1
- package/dist/extensions/web-search/results.d.ts.map +1 -1
- package/dist/extensions/web-search/results.js +3 -8
- package/dist/extensions/web-search/results.js.map +1 -1
- package/dist/extensions/web-search/types.d.ts +4 -2
- package/dist/extensions/web-search/types.d.ts.map +1 -1
- package/dist/extensions/web-search/types.js.map +1 -1
- package/dist/index.d.ts +12 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +16 -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/oauth-selector.d.ts +8 -2
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +24 -21
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/pi-logo-animation.d.ts +68 -0
- package/dist/modes/interactive/components/pi-logo-animation.d.ts.map +1 -0
- package/dist/modes/interactive/components/pi-logo-animation.js +1076 -0
- package/dist/modes/interactive/components/pi-logo-animation.js.map +1 -0
- package/dist/modes/interactive/components/pi-logo-animation.lazy.d.ts +7 -0
- package/dist/modes/interactive/components/pi-logo-animation.lazy.d.ts.map +1 -0
- package/dist/modes/interactive/components/pi-logo-animation.lazy.js +12 -0
- package/dist/modes/interactive/components/pi-logo-animation.lazy.js.map +1 -0
- package/dist/modes/interactive/components/pi-logo.d.ts +19 -0
- package/dist/modes/interactive/components/pi-logo.d.ts.map +1 -0
- package/dist/modes/interactive/components/pi-logo.js +37 -0
- package/dist/modes/interactive/components/pi-logo.js.map +1 -0
- package/dist/modes/interactive/components/radius-login-selector.d.ts +15 -0
- package/dist/modes/interactive/components/radius-login-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/radius-login-selector.js +83 -0
- package/dist/modes/interactive/components/radius-login-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +6 -4
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +33 -11
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/status-marker.d.ts +2 -4
- package/dist/modes/interactive/components/status-marker.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-marker.js +2 -6
- 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/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +5 -4
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts +27 -3
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js +36 -6
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +12 -4
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +377 -199
- 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 +41 -91
- package/dist/modes/interactive/tasks/completion-render.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 +102 -0
- package/dist/modes/interactive/tasks/index.js.map +1 -0
- package/dist/modes/interactive/tasks/inspector.d.ts +35 -0
- package/dist/modes/interactive/tasks/inspector.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/inspector.js +93 -0
- package/dist/modes/interactive/tasks/inspector.js.map +1 -0
- package/dist/modes/interactive/tasks/layout.d.ts +40 -0
- package/dist/modes/interactive/tasks/layout.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/layout.js +212 -0
- package/dist/modes/interactive/tasks/layout.js.map +1 -0
- package/dist/modes/interactive/tasks/list.d.ts +21 -0
- package/dist/modes/interactive/tasks/list.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/list.js +96 -0
- package/dist/modes/interactive/tasks/list.js.map +1 -0
- package/dist/modes/interactive/tasks/manager.d.ts +60 -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/modes/interactive/tasks/model.d.ts +21 -0
- package/dist/modes/interactive/tasks/model.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/model.js +41 -0
- package/dist/modes/interactive/tasks/model.js.map +1 -0
- package/dist/modes/interactive/tasks/render.d.ts +28 -0
- package/dist/modes/interactive/tasks/render.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/render.js +141 -0
- package/dist/modes/interactive/tasks/render.js.map +1 -0
- package/dist/modes/interactive/tasks/task-view.d.ts +13 -0
- package/dist/modes/interactive/tasks/task-view.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/task-view.js +20 -0
- package/dist/modes/interactive/tasks/task-view.js.map +1 -0
- package/dist/modes/interactive/tasks/text.d.ts +6 -0
- package/dist/modes/interactive/tasks/text.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/text.js +16 -0
- package/dist/modes/interactive/tasks/text.js.map +1 -0
- package/dist/modes/interactive/tasks/viewport.d.ts +17 -0
- package/dist/modes/interactive/tasks/viewport.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/viewport.js +59 -0
- package/dist/modes/interactive/tasks/viewport.js.map +1 -0
- package/dist/modes/interactive/tasks/views.d.ts +9 -0
- package/dist/modes/interactive/tasks/views.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/views.js +42 -0
- package/dist/modes/interactive/tasks/views.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 +55 -0
- package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/system-theme.js +546 -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 -9
- package/docs/bundled/extensions/question.md +2 -2
- package/docs/bundled/extensions/statusline.md +26 -17
- package/docs/bundled/tasks.md +127 -0
- package/docs/bundled/tool-presentation.md +1 -1
- package/docs/codemode.md +207 -0
- package/docs/custom-provider.md +44 -0
- package/docs/docs.json +14 -10
- package/docs/environment-variables.md +1 -1
- package/docs/extensions.md +94 -93
- package/docs/index.md +2 -1
- package/docs/keybindings.md +17 -9
- package/docs/llama-cpp.md +12 -1
- package/docs/mcp.md +248 -0
- package/docs/models.md +56 -0
- package/docs/packages.md +4 -0
- package/docs/providers.md +14 -0
- package/docs/rpc.md +5 -3
- package/docs/sdk.md +26 -16
- package/docs/security.md +4 -0
- package/docs/session-format.md +20 -23
- package/docs/settings.md +29 -3
- package/docs/themes.md +27 -5
- package/docs/tui.md +21 -1
- package/docs/usage.md +52 -4
- package/docs/virtual-models.md +114 -0
- package/docs/windows.md +2 -0
- package/examples/README.md +2 -2
- package/examples/extensions/README.md +3 -2
- package/examples/extensions/built-in-tool-renderer.ts +16 -40
- 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/minimal-mode.ts +24 -96
- 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 +420 -423
- package/package.json +14 -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-I5IVW2WS.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/chunk-UUSTLCVC.js +0 -2
- 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 +0 -311
- package/dist/core/background/presentation.js.map +0 -1
- package/dist/core/background/service.d.ts +0 -68
- package/dist/core/background/service.d.ts.map +0 -1
- package/dist/core/background/service.js +0 -641
- 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 +0 -31
- 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 +0 -24
- package/dist/extensions/background/constants.d.ts.map +0 -1
- package/dist/extensions/background/constants.js +0 -24
- 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 +0 -42
- package/dist/extensions/background/render.d.ts.map +0 -1
- package/dist/extensions/background/render.js +0 -225
- 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 +0 -53
- package/dist/extensions/background/task-view.d.ts.map +0 -1
- package/dist/extensions/background/task-view.js +0 -60
- package/dist/extensions/background/task-view.js.map +0 -1
- package/dist/extensions/background/text.d.ts +0 -12
- package/dist/extensions/background/text.d.ts.map +0 -1
- package/dist/extensions/background/text.js +0 -39
- package/dist/extensions/background/text.js.map +0 -1
- package/dist/extensions/background/types.d.ts +0 -85
- package/dist/extensions/background/types.d.ts.map +0 -1
- package/dist/extensions/background/types.js +0 -17
- package/dist/extensions/background/types.js.map +0 -1
- package/dist/extensions/subagent/activity.d.ts +0 -34
- package/dist/extensions/subagent/activity.d.ts.map +0 -1
- package/dist/extensions/subagent/activity.js +0 -192
- package/dist/extensions/subagent/activity.js.map +0 -1
- package/dist/extensions/subagent/agents-command.d.ts +0 -4
- package/dist/extensions/subagent/agents-command.d.ts.map +0 -1
- package/dist/extensions/subagent/agents-command.js +0 -230
- package/dist/extensions/subagent/agents-command.js.map +0 -1
- package/dist/extensions/subagent/agents.d.ts +0 -6
- package/dist/extensions/subagent/agents.d.ts.map +0 -1
- package/dist/extensions/subagent/agents.js +0 -53
- package/dist/extensions/subagent/agents.js.map +0 -1
- package/dist/extensions/subagent/budget.d.ts +0 -15
- package/dist/extensions/subagent/budget.d.ts.map +0 -1
- package/dist/extensions/subagent/budget.js +0 -123
- package/dist/extensions/subagent/budget.js.map +0 -1
- package/dist/extensions/subagent/cancellation.d.ts +0 -29
- package/dist/extensions/subagent/cancellation.d.ts.map +0 -1
- package/dist/extensions/subagent/cancellation.js +0 -91
- package/dist/extensions/subagent/cancellation.js.map +0 -1
- package/dist/extensions/subagent/constants.d.ts +0 -25
- package/dist/extensions/subagent/constants.d.ts.map +0 -1
- package/dist/extensions/subagent/constants.js +0 -50
- package/dist/extensions/subagent/constants.js.map +0 -1
- package/dist/extensions/subagent/index.d.ts +0 -3
- package/dist/extensions/subagent/index.d.ts.map +0 -1
- package/dist/extensions/subagent/index.js +0 -151
- package/dist/extensions/subagent/index.js.map +0 -1
- package/dist/extensions/subagent/model-selection.d.ts +0 -16
- package/dist/extensions/subagent/model-selection.d.ts.map +0 -1
- package/dist/extensions/subagent/model-selection.js +0 -51
- package/dist/extensions/subagent/model-selection.js.map +0 -1
- package/dist/extensions/subagent/render.d.ts +0 -24
- package/dist/extensions/subagent/render.d.ts.map +0 -1
- package/dist/extensions/subagent/render.js +0 -336
- package/dist/extensions/subagent/render.js.map +0 -1
- package/dist/extensions/subagent/resolve.d.ts +0 -31
- package/dist/extensions/subagent/resolve.d.ts.map +0 -1
- package/dist/extensions/subagent/resolve.js +0 -111
- package/dist/extensions/subagent/resolve.js.map +0 -1
- package/dist/extensions/subagent/runner.d.ts +0 -35
- package/dist/extensions/subagent/runner.d.ts.map +0 -1
- package/dist/extensions/subagent/runner.js +0 -255
- package/dist/extensions/subagent/runner.js.map +0 -1
- package/dist/extensions/subagent/schema.d.ts +0 -28
- package/dist/extensions/subagent/schema.d.ts.map +0 -1
- package/dist/extensions/subagent/schema.js +0 -58
- package/dist/extensions/subagent/schema.js.map +0 -1
- package/dist/extensions/subagent/sdk-runner.d.ts +0 -33
- package/dist/extensions/subagent/sdk-runner.d.ts.map +0 -1
- package/dist/extensions/subagent/sdk-runner.js +0 -331
- package/dist/extensions/subagent/sdk-runner.js.map +0 -1
- package/dist/extensions/subagent/settings.d.ts +0 -8
- package/dist/extensions/subagent/settings.d.ts.map +0 -1
- package/dist/extensions/subagent/settings.js +0 -206
- package/dist/extensions/subagent/settings.js.map +0 -1
- package/dist/extensions/subagent/state.d.ts +0 -102
- package/dist/extensions/subagent/state.d.ts.map +0 -1
- package/dist/extensions/subagent/state.js +0 -383
- package/dist/extensions/subagent/state.js.map +0 -1
- package/dist/extensions/subagent/text.d.ts +0 -6
- package/dist/extensions/subagent/text.d.ts.map +0 -1
- package/dist/extensions/subagent/text.js +0 -66
- package/dist/extensions/subagent/text.js.map +0 -1
- package/dist/extensions/subagent/types.d.ts +0 -91
- package/dist/extensions/subagent/types.d.ts.map +0 -1
- package/dist/extensions/subagent/types.js +0 -2
- package/dist/extensions/subagent/types.js.map +0 -1
- package/dist/extensions/subagent/ui/agents-dialog.d.ts +0 -4
- package/dist/extensions/subagent/ui/agents-dialog.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/agents-dialog.js +0 -84
- package/dist/extensions/subagent/ui/agents-dialog.js.map +0 -1
- package/dist/extensions/subagent/ui/choice-menu.d.ts +0 -39
- package/dist/extensions/subagent/ui/choice-menu.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/choice-menu.js +0 -93
- package/dist/extensions/subagent/ui/choice-menu.js.map +0 -1
- package/dist/extensions/subagent/ui/choices.d.ts +0 -36
- package/dist/extensions/subagent/ui/choices.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/choices.js +0 -54
- package/dist/extensions/subagent/ui/choices.js.map +0 -1
- package/dist/extensions/subagent/ui/model-list.d.ts +0 -66
- package/dist/extensions/subagent/ui/model-list.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/model-list.js +0 -235
- package/dist/extensions/subagent/ui/model-list.js.map +0 -1
- package/dist/extensions/subagent/ui/model-picker.d.ts +0 -47
- package/dist/extensions/subagent/ui/model-picker.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/model-picker.js +0 -143
- package/dist/extensions/subagent/ui/model-picker.js.map +0 -1
- package/dist/extensions/subagent/ui/profile-settings-menu.d.ts +0 -41
- package/dist/extensions/subagent/ui/profile-settings-menu.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/profile-settings-menu.js +0 -98
- package/dist/extensions/subagent/ui/profile-settings-menu.js.map +0 -1
- package/dist/extensions/todo/constants.d.ts +0 -16
- package/dist/extensions/todo/constants.d.ts.map +0 -1
- package/dist/extensions/todo/constants.js +0 -30
- package/dist/extensions/todo/constants.js.map +0 -1
- package/dist/extensions/todo/index.d.ts +0 -3
- package/dist/extensions/todo/index.d.ts.map +0 -1
- package/dist/extensions/todo/index.js +0 -98
- package/dist/extensions/todo/index.js.map +0 -1
- package/dist/extensions/todo/schema.d.ts +0 -60
- package/dist/extensions/todo/schema.d.ts.map +0 -1
- package/dist/extensions/todo/schema.js +0 -56
- package/dist/extensions/todo/schema.js.map +0 -1
- package/dist/extensions/todo/state.d.ts +0 -34
- package/dist/extensions/todo/state.d.ts.map +0 -1
- package/dist/extensions/todo/state.js +0 -425
- package/dist/extensions/todo/state.js.map +0 -1
- package/dist/extensions/todo/view.d.ts +0 -36
- package/dist/extensions/todo/view.d.ts.map +0 -1
- package/dist/extensions/todo/view.js +0 -580
- package/dist/extensions/todo/view.js.map +0 -1
- package/dist/extensions/todo/widget.d.ts +0 -15
- package/dist/extensions/todo/widget.d.ts.map +0 -1
- package/dist/extensions/todo/widget.js +0 -50
- package/dist/extensions/todo/widget.js.map +0 -1
- package/docs/bundled/extensions/background.md +0 -132
- package/docs/bundled/extensions/subagent.md +0 -148
- package/docs/bundled/extensions/todo.md +0 -104
- package/examples/extensions/todo.ts +0 -297
|
@@ -1,336 +0,0 @@
|
|
|
1
|
-
import { Container, Markdown, Spacer, Text, truncateToWidth, visibleWidth, } from "@earendil-works/pi-tui";
|
|
2
|
-
import { STATUS_SPINNER_INTERVAL_MS, statusMarker, statusSpinnerFrame, } from "../../modes/interactive/components/status-marker.js";
|
|
3
|
-
import { getMarkdownTheme } from "../../modes/interactive/theme/theme.js";
|
|
4
|
-
import { activityCallText, isDisplayableActivity } from "./activity.js";
|
|
5
|
-
import { AGENT_PROFILE_LABELS } from "./agents.js";
|
|
6
|
-
import { COMPACTION_ACTIVITY_ID, DISPLAY_ACTIVITY_LIMIT } from "./constants.js";
|
|
7
|
-
import { getSubagentRetryView } from "./state.js";
|
|
8
|
-
import { plainLine, truncate } from "./text.js";
|
|
9
|
-
const RETRY_ERROR_LIMIT = 160;
|
|
10
|
-
const FALLBACK_OUTPUT_LIMIT = 4_000;
|
|
11
|
-
const OUTPUT_TRUNCATION_NOTICE_PATTERN = /\s*\[Output truncated(?:: \d+ bytes omitted)?\.\]\s*$/u;
|
|
12
|
-
const ELAPSED_REFRESH_INTERVAL_MS = 1_000;
|
|
13
|
-
const FLOW_SEPARATOR = " · ";
|
|
14
|
-
const FLOW_SEPARATOR_WIDTH = 3;
|
|
15
|
-
/** Width-aware single-line text for compact rows and section headers. */
|
|
16
|
-
class SingleLineText {
|
|
17
|
-
constructor(text) {
|
|
18
|
-
this.text = text;
|
|
19
|
-
}
|
|
20
|
-
render(width) {
|
|
21
|
-
return [truncateToWidth(this.text, Math.max(1, width), "...")];
|
|
22
|
-
}
|
|
23
|
-
invalidate() { }
|
|
24
|
-
}
|
|
25
|
-
function taskPrompt(args, index, run) {
|
|
26
|
-
// Tool calls restored from before the tasks-array shape carry a legacy
|
|
27
|
-
// args object without `tasks`; those sections fall back to the description.
|
|
28
|
-
const tasks = args.tasks;
|
|
29
|
-
return tasks?.[index]?.prompt ?? run.description;
|
|
30
|
-
}
|
|
31
|
-
function profileLabel(agent) {
|
|
32
|
-
return AGENT_PROFILE_LABELS[agent] ?? agent;
|
|
33
|
-
}
|
|
34
|
-
function formatDuration(seconds) {
|
|
35
|
-
const roundedSeconds = Math.round(seconds);
|
|
36
|
-
if (roundedSeconds >= 60)
|
|
37
|
-
return `${Math.floor(roundedSeconds / 60)}m ${roundedSeconds % 60}s`;
|
|
38
|
-
return `${seconds.toFixed(seconds < 10 ? 1 : 0)}s`;
|
|
39
|
-
}
|
|
40
|
-
function elapsed(startedAt, endedAt) {
|
|
41
|
-
if (startedAt === undefined)
|
|
42
|
-
return undefined;
|
|
43
|
-
return formatDuration(Math.max(0, ((endedAt ?? Date.now()) - startedAt) / 1_000));
|
|
44
|
-
}
|
|
45
|
-
/** Settled status marker, colored via the shared status-marker vocabulary. */
|
|
46
|
-
function runMarker(status, theme) {
|
|
47
|
-
const marker = statusMarker(status);
|
|
48
|
-
return theme.fg(marker.color, marker.glyph);
|
|
49
|
-
}
|
|
50
|
-
function displayLine(text) {
|
|
51
|
-
return plainLine(text).replace(OUTPUT_TRUNCATION_NOTICE_PATTERN, "...").trim();
|
|
52
|
-
}
|
|
53
|
-
function retryText(run) {
|
|
54
|
-
const retry = getSubagentRetryView(run);
|
|
55
|
-
if (!retry)
|
|
56
|
-
return undefined;
|
|
57
|
-
const state = retry.remainingSeconds > 0
|
|
58
|
-
? `Retrying (${retry.attempt}/${retry.maxAttempts}) in ${retry.remainingSeconds}s`
|
|
59
|
-
: `Retrying (${retry.attempt}/${retry.maxAttempts}) now...`;
|
|
60
|
-
const error = truncate(displayLine(retry.error), RETRY_ERROR_LIMIT);
|
|
61
|
-
return error ? `${state} · ${error}` : state;
|
|
62
|
-
}
|
|
63
|
-
function latestRunningActivity(run, toolName) {
|
|
64
|
-
for (let index = run.activities.length - 1; index >= 0; index--) {
|
|
65
|
-
const activity = run.activities[index];
|
|
66
|
-
if (activity?.status === "running" && activity.toolName === toolName)
|
|
67
|
-
return activity;
|
|
68
|
-
}
|
|
69
|
-
return undefined;
|
|
70
|
-
}
|
|
71
|
-
function formatTotalTokens(value) {
|
|
72
|
-
const count = Number.isFinite(value) ? Math.max(0, Math.round(value)) : 0;
|
|
73
|
-
if (count < 1_000)
|
|
74
|
-
return String(count);
|
|
75
|
-
const divisor = count < 999_950 ? 1_000 : 1_000_000;
|
|
76
|
-
const suffix = divisor === 1_000 ? "k" : "M";
|
|
77
|
-
const rounded = Math.round((count / divisor) * 10) / 10;
|
|
78
|
-
return `${Number.isInteger(rounded) ? rounded.toFixed(0) : rounded.toFixed(1)}${suffix}`;
|
|
79
|
-
}
|
|
80
|
-
// All spinner and status glyphs are single-width characters; this constant
|
|
81
|
-
// documents the expectation and guards against accidental double-width
|
|
82
|
-
// substitutions causing layout flicker in the collapsed flow.
|
|
83
|
-
const MARKER_WIDTH = 1;
|
|
84
|
-
/** One collapsed cell: status glyph, ordinal, and profile label only. */
|
|
85
|
-
function flowSegment(run, index, theme, now) {
|
|
86
|
-
let marker;
|
|
87
|
-
if (run.status === "running") {
|
|
88
|
-
const glyph = statusSpinnerFrame(now);
|
|
89
|
-
// Pad to MARKER_WIDTH so cellWidth stays stable across frames even if
|
|
90
|
-
// a glyph measures wider on some terminal/font combinations.
|
|
91
|
-
const pad = Math.max(0, MARKER_WIDTH - visibleWidth(glyph));
|
|
92
|
-
marker = theme.fg("accent", glyph) + (pad > 0 ? " ".repeat(pad) : "");
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
marker = runMarker(run.status, theme);
|
|
96
|
-
}
|
|
97
|
-
return `${marker} ${theme.fg("dim", `#${index + 1}`)} ${theme.fg("accent", profileLabel(run.agent))}`;
|
|
98
|
-
}
|
|
99
|
-
/** Collapsed batch flow: one cell per run, wrapped at cell boundaries with
|
|
100
|
-
* uniform cell widths so continuation rows keep their columns aligned. */
|
|
101
|
-
class CollapsedFlow {
|
|
102
|
-
constructor(segments) {
|
|
103
|
-
this.segments = segments;
|
|
104
|
-
this.cellWidth = segments.reduce((max, segment) => Math.max(max, visibleWidth(segment)), 1);
|
|
105
|
-
}
|
|
106
|
-
render(width) {
|
|
107
|
-
const usable = Math.max(1, width);
|
|
108
|
-
const joined = this.segments.join(FLOW_SEPARATOR);
|
|
109
|
-
const packed = visibleWidth(joined);
|
|
110
|
-
if (packed <= usable)
|
|
111
|
-
return [joined];
|
|
112
|
-
if (this.cellWidth > usable) {
|
|
113
|
-
return this.segments.map((segment) => truncateToWidth(segment, usable, "..."));
|
|
114
|
-
}
|
|
115
|
-
const columnCount = Math.max(1, Math.floor((usable + FLOW_SEPARATOR_WIDTH) / (this.cellWidth + FLOW_SEPARATOR_WIDTH)));
|
|
116
|
-
const lines = [];
|
|
117
|
-
for (let start = 0; start < this.segments.length; start += columnCount) {
|
|
118
|
-
const row = this.segments.slice(start, start + columnCount);
|
|
119
|
-
lines.push(row
|
|
120
|
-
.map((segment, index) => {
|
|
121
|
-
if (index === row.length - 1)
|
|
122
|
-
return segment;
|
|
123
|
-
const padding = Math.max(0, this.cellWidth - visibleWidth(segment));
|
|
124
|
-
return `${segment}${padding > 0 ? " ".repeat(padding) : ""}${FLOW_SEPARATOR}`;
|
|
125
|
-
})
|
|
126
|
-
.join(""));
|
|
127
|
-
}
|
|
128
|
-
return lines;
|
|
129
|
-
}
|
|
130
|
-
invalidate() { }
|
|
131
|
-
}
|
|
132
|
-
function toolCallLabel(count) {
|
|
133
|
-
return `${count} tool call${count === 1 ? "" : "s"}`;
|
|
134
|
-
}
|
|
135
|
-
function runHeader(run, index, theme) {
|
|
136
|
-
const separator = theme.fg("dim", " · ");
|
|
137
|
-
const duration = elapsed(run.startedAt, run.endedAt) ?? "0.0s";
|
|
138
|
-
const metrics = [
|
|
139
|
-
run.model,
|
|
140
|
-
run.thinking,
|
|
141
|
-
`${formatTotalTokens(run.usage.totalTokens)} tok`,
|
|
142
|
-
toolCallLabel(run.usage.toolUses),
|
|
143
|
-
duration,
|
|
144
|
-
].map((metric) => theme.fg("muted", metric));
|
|
145
|
-
return [theme.fg("accent", theme.bold(`#${index + 1} ${profileLabel(run.agent)}`)), ...metrics].join(separator);
|
|
146
|
-
}
|
|
147
|
-
function sectionTitle(title, theme, color, suffix) {
|
|
148
|
-
const heading = theme.fg(color, theme.bold(title));
|
|
149
|
-
return suffix ? `${heading}${theme.fg("dim", ` · ${suffix}`)}` : heading;
|
|
150
|
-
}
|
|
151
|
-
function activityTitleSuffix(total, shown) {
|
|
152
|
-
if (total <= DISPLAY_ACTIVITY_LIMIT && shown >= total)
|
|
153
|
-
return toolCallLabel(total);
|
|
154
|
-
if (shown > 0)
|
|
155
|
-
return `last ${shown} of ${total} tool calls`;
|
|
156
|
-
return toolCallLabel(total);
|
|
157
|
-
}
|
|
158
|
-
function activityLine(activity, theme) {
|
|
159
|
-
// State color stays on the two-column status marker; the call text itself
|
|
160
|
-
// keeps the quiet toolOutput color so a running row does not flash a whole
|
|
161
|
-
// accent-colored command line on every refresh.
|
|
162
|
-
const text = theme.fg("toolOutput", activityCallText(activity));
|
|
163
|
-
if (activity.status === "failed")
|
|
164
|
-
return `${theme.fg("error", "×")} ${text}`;
|
|
165
|
-
if (activity.status === "running")
|
|
166
|
-
return `${theme.fg("accent", "›")} ${text}`;
|
|
167
|
-
return ` ${text}`;
|
|
168
|
-
}
|
|
169
|
-
function addPrompt(container, run, index, args, theme) {
|
|
170
|
-
container.addChild(new Text(sectionTitle("Prompt", theme, "toolTitle"), 0, 0));
|
|
171
|
-
container.addChild(new Text(theme.fg("toolOutput", taskPrompt(args, index, run)), 2, 0));
|
|
172
|
-
}
|
|
173
|
-
function addActivity(container, run, theme) {
|
|
174
|
-
const toolCalls = run.activities.filter(isDisplayableActivity);
|
|
175
|
-
const shown = toolCalls.slice(-DISPLAY_ACTIVITY_LIMIT);
|
|
176
|
-
const total = Math.max(run.usage.toolUses, toolCalls.length);
|
|
177
|
-
container.addChild(new Text(sectionTitle("Activity", theme, "toolTitle", activityTitleSuffix(total, shown.length)), 0, 0));
|
|
178
|
-
if (shown.length === 0) {
|
|
179
|
-
const empty = total === 0 ? "No tool calls yet." : "Activity unavailable.";
|
|
180
|
-
container.addChild(new Text(theme.fg("muted", empty), 2, 0));
|
|
181
|
-
return;
|
|
182
|
-
}
|
|
183
|
-
for (const activity of shown)
|
|
184
|
-
container.addChild(new SingleLineText(activityLine(activity, theme)));
|
|
185
|
-
}
|
|
186
|
-
function outcomeColor(status) {
|
|
187
|
-
if (status === "completed")
|
|
188
|
-
return "success";
|
|
189
|
-
if (status === "failed")
|
|
190
|
-
return "error";
|
|
191
|
-
if (status === "aborted")
|
|
192
|
-
return "warning";
|
|
193
|
-
return "accent";
|
|
194
|
-
}
|
|
195
|
-
function outcomeReport(run) {
|
|
196
|
-
if (typeof run.report === "string")
|
|
197
|
-
return run.report;
|
|
198
|
-
const legacyOutput = run.finalOutput;
|
|
199
|
-
return typeof legacyOutput === "string" ? legacyOutput : "";
|
|
200
|
-
}
|
|
201
|
-
function hasOutcome(report) {
|
|
202
|
-
return report.trim().length > 0;
|
|
203
|
-
}
|
|
204
|
-
function addOutcomeMarkdown(container, report, theme) {
|
|
205
|
-
container.addChild(new Markdown(report, 2, 0, getMarkdownTheme(), {
|
|
206
|
-
color: (text) => theme.fg("toolOutput", text),
|
|
207
|
-
}));
|
|
208
|
-
}
|
|
209
|
-
function addOutcome(container, run, theme) {
|
|
210
|
-
const color = outcomeColor(run.status);
|
|
211
|
-
const report = outcomeReport(run);
|
|
212
|
-
container.addChild(new Text(sectionTitle("Outcome", theme, color), 0, 0));
|
|
213
|
-
if (run.status === "queued" || run.status === "running") {
|
|
214
|
-
container.addChild(new Text(theme.fg("muted", "Still running..."), 2, 0));
|
|
215
|
-
const retry = retryText(run);
|
|
216
|
-
if (retry) {
|
|
217
|
-
container.addChild(new Text(theme.fg("warning", retry), 2, 0));
|
|
218
|
-
}
|
|
219
|
-
else if (latestRunningActivity(run, COMPACTION_ACTIVITY_ID)) {
|
|
220
|
-
container.addChild(new Text(theme.fg("accent", "Compacting context..."), 2, 0));
|
|
221
|
-
}
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
if (run.status === "completed") {
|
|
225
|
-
if (hasOutcome(report))
|
|
226
|
-
addOutcomeMarkdown(container, report, theme);
|
|
227
|
-
else
|
|
228
|
-
container.addChild(new Text(theme.fg("muted", "No outcome returned."), 2, 0));
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
const verdict = run.status === "failed" ? "Failed" : "Aborted";
|
|
232
|
-
const reason = run.error ? `${verdict}: ${run.error}` : `${verdict}.`;
|
|
233
|
-
container.addChild(new Text(theme.fg(color, reason), 2, 0));
|
|
234
|
-
if (hasOutcome(report)) {
|
|
235
|
-
container.addChild(new Spacer(1));
|
|
236
|
-
container.addChild(new Text(theme.fg("muted", "Partial outcome:"), 2, 0));
|
|
237
|
-
addOutcomeMarkdown(container, report, theme);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
function renderRun(run, index, args, theme) {
|
|
241
|
-
const container = new Container();
|
|
242
|
-
container.addChild(new SingleLineText(runHeader(run, index, theme)));
|
|
243
|
-
container.addChild(new Spacer(1));
|
|
244
|
-
addPrompt(container, run, index, args, theme);
|
|
245
|
-
container.addChild(new Spacer(1));
|
|
246
|
-
addActivity(container, run, theme);
|
|
247
|
-
container.addChild(new Spacer(1));
|
|
248
|
-
addOutcome(container, run, theme);
|
|
249
|
-
return container;
|
|
250
|
-
}
|
|
251
|
-
function fallbackResult(result, theme, isError) {
|
|
252
|
-
const text = result.content.find((part) => part.type === "text");
|
|
253
|
-
const value = text?.type === "text" ? truncate(text.text, FALLBACK_OUTPUT_LIMIT) : "(no output)";
|
|
254
|
-
return new Text(theme.fg(isError ? "error" : "muted", value), 0, 0);
|
|
255
|
-
}
|
|
256
|
-
/** Pure refresh policy: schedule only while the current view contains changing text. */
|
|
257
|
-
export function desiredRefreshInterval(runs, options) {
|
|
258
|
-
if (!options.isPartial)
|
|
259
|
-
return undefined;
|
|
260
|
-
if (!options.expanded) {
|
|
261
|
-
return runs.some((run) => run.status === "running") ? STATUS_SPINNER_INTERVAL_MS : undefined;
|
|
262
|
-
}
|
|
263
|
-
return runs.some((run) => run.status === "running" || run.retry !== undefined)
|
|
264
|
-
? ELAPSED_REFRESH_INTERVAL_MS
|
|
265
|
-
: undefined;
|
|
266
|
-
}
|
|
267
|
-
function clearLiveRefresh(state) {
|
|
268
|
-
if (state.refreshTimer !== undefined)
|
|
269
|
-
clearTimeout(state.refreshTimer);
|
|
270
|
-
state.refreshTimer = undefined;
|
|
271
|
-
state.refreshInterval = undefined;
|
|
272
|
-
}
|
|
273
|
-
// One one-shot timer per row. A paint with the same cadence keeps the existing
|
|
274
|
-
// deadline; expansion, settlement, or loss of dynamic content clears or
|
|
275
|
-
// reschedules immediately.
|
|
276
|
-
export function scheduleLiveRefresh(context, isPartial) {
|
|
277
|
-
const state = context.state;
|
|
278
|
-
state.dispose ??= () => clearLiveRefresh(state);
|
|
279
|
-
const interval = desiredRefreshInterval(context.result?.details?.runs ?? [], {
|
|
280
|
-
isPartial,
|
|
281
|
-
expanded: context.expanded,
|
|
282
|
-
});
|
|
283
|
-
if (interval === undefined) {
|
|
284
|
-
clearLiveRefresh(state);
|
|
285
|
-
return;
|
|
286
|
-
}
|
|
287
|
-
if (state.refreshTimer !== undefined) {
|
|
288
|
-
// Keep a matching timer so unrelated re-renders cannot postpone the
|
|
289
|
-
// next tick; only reschedule when the desired cadence changes.
|
|
290
|
-
if (state.refreshInterval === interval)
|
|
291
|
-
return;
|
|
292
|
-
clearTimeout(state.refreshTimer);
|
|
293
|
-
}
|
|
294
|
-
state.refreshInterval = interval;
|
|
295
|
-
state.refreshTimer = setTimeout(() => {
|
|
296
|
-
state.refreshTimer = undefined;
|
|
297
|
-
state.refreshInterval = undefined;
|
|
298
|
-
context.invalidate();
|
|
299
|
-
}, interval);
|
|
300
|
-
state.refreshTimer.unref?.();
|
|
301
|
-
}
|
|
302
|
-
export function renderSubagentCall(args, theme) {
|
|
303
|
-
const count = Array.isArray(args.tasks) ? args.tasks.length : 0;
|
|
304
|
-
const title = theme.fg(count > 0 ? "toolTitle" : "error", theme.bold("Subagent"));
|
|
305
|
-
return new Text(title, 0, 0);
|
|
306
|
-
}
|
|
307
|
-
export function renderSubagentResult(result, options, theme, args, isError) {
|
|
308
|
-
const details = result.details;
|
|
309
|
-
if (details?.background) {
|
|
310
|
-
const summary = `Handed to background · ${details.background.id}`;
|
|
311
|
-
const rows = options.expanded
|
|
312
|
-
? details.runs
|
|
313
|
-
.map((run, index) => `#${index + 1} ${profileLabel(run.agent)} · ${run.status} at handoff`)
|
|
314
|
-
.join("\n")
|
|
315
|
-
: "";
|
|
316
|
-
const text = [summary, rows, "Use /bg for live progress and outcomes."].filter(Boolean).join("\n");
|
|
317
|
-
return new Text(theme.fg("muted", text), 0, 0);
|
|
318
|
-
}
|
|
319
|
-
if (!details || !Array.isArray(details.runs))
|
|
320
|
-
return fallbackResult(result, theme, isError);
|
|
321
|
-
if (details.runs.length === 0)
|
|
322
|
-
return new Text(theme.fg("muted", "Starting..."), 0, 0);
|
|
323
|
-
const container = new Container();
|
|
324
|
-
if (!options.expanded) {
|
|
325
|
-
const now = Date.now();
|
|
326
|
-
container.addChild(new CollapsedFlow(details.runs.map((run, index) => flowSegment(run, index, theme, now))));
|
|
327
|
-
return container;
|
|
328
|
-
}
|
|
329
|
-
for (const [index, run] of details.runs.entries()) {
|
|
330
|
-
if (index > 0)
|
|
331
|
-
container.addChild(new Spacer(1));
|
|
332
|
-
container.addChild(renderRun(run, index, args, theme));
|
|
333
|
-
}
|
|
334
|
-
return container;
|
|
335
|
-
}
|
|
336
|
-
//# sourceMappingURL=render.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/extensions/subagent/render.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype Component,\n\tContainer,\n\tMarkdown,\n\tSpacer,\n\tText,\n\ttruncateToWidth,\n\tvisibleWidth,\n} from \"@earendil-works/pi-tui\";\nimport type { AgentToolResult, ToolRenderContext, ToolRenderResultOptions } from \"../../core/extensions/types.ts\";\nimport {\n\tSTATUS_SPINNER_INTERVAL_MS,\n\tstatusMarker,\n\tstatusSpinnerFrame,\n} from \"../../modes/interactive/components/status-marker.ts\";\nimport { getMarkdownTheme, type Theme, type ThemeColor } from \"../../modes/interactive/theme/theme.ts\";\nimport { activityCallText, isDisplayableActivity } from \"./activity.ts\";\nimport { AGENT_PROFILE_LABELS } from \"./agents.ts\";\nimport { COMPACTION_ACTIVITY_ID, DISPLAY_ACTIVITY_LIMIT, type SubagentAgentName } from \"./constants.ts\";\nimport type { SubagentParams } from \"./schema.ts\";\nimport { getSubagentRetryView } from \"./state.ts\";\nimport { plainLine, truncate } from \"./text.ts\";\nimport type { SubagentDetails, SubagentRunDetails, SubagentRunStatus, ToolActivity } from \"./types.ts\";\n\nconst RETRY_ERROR_LIMIT = 160;\nconst FALLBACK_OUTPUT_LIMIT = 4_000;\nconst OUTPUT_TRUNCATION_NOTICE_PATTERN = /\\s*\\[Output truncated(?:: \\d+ bytes omitted)?\\.\\]\\s*$/u;\n\nconst ELAPSED_REFRESH_INTERVAL_MS = 1_000;\nconst FLOW_SEPARATOR = \" · \";\nconst FLOW_SEPARATOR_WIDTH = 3;\n\n/** Width-aware single-line text for compact rows and section headers. */\nclass SingleLineText implements Component {\n\tprivate readonly text: string;\n\n\tconstructor(text: string) {\n\t\tthis.text = text;\n\t}\n\n\trender(width: number): string[] {\n\t\treturn [truncateToWidth(this.text, Math.max(1, width), \"...\")];\n\t}\n\n\tinvalidate(): void {}\n}\n\nfunction taskPrompt(args: SubagentParams, index: number, run: SubagentRunDetails): string {\n\t// Tool calls restored from before the tasks-array shape carry a legacy\n\t// args object without `tasks`; those sections fall back to the description.\n\tconst tasks = (args as Partial<SubagentParams>).tasks;\n\treturn tasks?.[index]?.prompt ?? run.description;\n}\n\nfunction profileLabel(agent: string): string {\n\treturn AGENT_PROFILE_LABELS[agent as SubagentAgentName] ?? agent;\n}\n\nfunction formatDuration(seconds: number): string {\n\tconst roundedSeconds = Math.round(seconds);\n\tif (roundedSeconds >= 60) return `${Math.floor(roundedSeconds / 60)}m ${roundedSeconds % 60}s`;\n\treturn `${seconds.toFixed(seconds < 10 ? 1 : 0)}s`;\n}\n\nfunction elapsed(startedAt: number | undefined, endedAt?: number): string | undefined {\n\tif (startedAt === undefined) return undefined;\n\treturn formatDuration(Math.max(0, ((endedAt ?? Date.now()) - startedAt) / 1_000));\n}\n\n/** Settled status marker, colored via the shared status-marker vocabulary. */\nfunction runMarker(status: SubagentRunStatus, theme: Theme): string {\n\tconst marker = statusMarker(status);\n\treturn theme.fg(marker.color, marker.glyph);\n}\n\nfunction displayLine(text: string): string {\n\treturn plainLine(text).replace(OUTPUT_TRUNCATION_NOTICE_PATTERN, \"...\").trim();\n}\n\nfunction retryText(run: SubagentRunDetails): string | undefined {\n\tconst retry = getSubagentRetryView(run);\n\tif (!retry) return undefined;\n\tconst state =\n\t\tretry.remainingSeconds > 0\n\t\t\t? `Retrying (${retry.attempt}/${retry.maxAttempts}) in ${retry.remainingSeconds}s`\n\t\t\t: `Retrying (${retry.attempt}/${retry.maxAttempts}) now...`;\n\tconst error = truncate(displayLine(retry.error), RETRY_ERROR_LIMIT);\n\treturn error ? `${state} · ${error}` : state;\n}\n\nfunction latestRunningActivity(run: SubagentRunDetails, toolName: string): ToolActivity | undefined {\n\tfor (let index = run.activities.length - 1; index >= 0; index--) {\n\t\tconst activity = run.activities[index];\n\t\tif (activity?.status === \"running\" && activity.toolName === toolName) return activity;\n\t}\n\treturn undefined;\n}\n\nfunction formatTotalTokens(value: number): string {\n\tconst count = Number.isFinite(value) ? Math.max(0, Math.round(value)) : 0;\n\tif (count < 1_000) return String(count);\n\tconst divisor = count < 999_950 ? 1_000 : 1_000_000;\n\tconst suffix = divisor === 1_000 ? \"k\" : \"M\";\n\tconst rounded = Math.round((count / divisor) * 10) / 10;\n\treturn `${Number.isInteger(rounded) ? rounded.toFixed(0) : rounded.toFixed(1)}${suffix}`;\n}\n\n// All spinner and status glyphs are single-width characters; this constant\n// documents the expectation and guards against accidental double-width\n// substitutions causing layout flicker in the collapsed flow.\nconst MARKER_WIDTH = 1;\n\n/** One collapsed cell: status glyph, ordinal, and profile label only. */\nfunction flowSegment(run: SubagentRunDetails, index: number, theme: Theme, now: number): string {\n\tlet marker: string;\n\tif (run.status === \"running\") {\n\t\tconst glyph = statusSpinnerFrame(now);\n\t\t// Pad to MARKER_WIDTH so cellWidth stays stable across frames even if\n\t\t// a glyph measures wider on some terminal/font combinations.\n\t\tconst pad = Math.max(0, MARKER_WIDTH - visibleWidth(glyph));\n\t\tmarker = theme.fg(\"accent\", glyph) + (pad > 0 ? \" \".repeat(pad) : \"\");\n\t} else {\n\t\tmarker = runMarker(run.status, theme);\n\t}\n\treturn `${marker} ${theme.fg(\"dim\", `#${index + 1}`)} ${theme.fg(\"accent\", profileLabel(run.agent))}`;\n}\n\n/** Collapsed batch flow: one cell per run, wrapped at cell boundaries with\n * uniform cell widths so continuation rows keep their columns aligned. */\nclass CollapsedFlow implements Component {\n\tprivate readonly segments: string[];\n\tprivate readonly cellWidth: number;\n\n\tconstructor(segments: string[]) {\n\t\tthis.segments = segments;\n\t\tthis.cellWidth = segments.reduce((max, segment) => Math.max(max, visibleWidth(segment)), 1);\n\t}\n\n\trender(width: number): string[] {\n\t\tconst usable = Math.max(1, width);\n\t\tconst joined = this.segments.join(FLOW_SEPARATOR);\n\t\tconst packed = visibleWidth(joined);\n\t\tif (packed <= usable) return [joined];\n\t\tif (this.cellWidth > usable) {\n\t\t\treturn this.segments.map((segment) => truncateToWidth(segment, usable, \"...\"));\n\t\t}\n\t\tconst columnCount = Math.max(\n\t\t\t1,\n\t\t\tMath.floor((usable + FLOW_SEPARATOR_WIDTH) / (this.cellWidth + FLOW_SEPARATOR_WIDTH)),\n\t\t);\n\t\tconst lines: string[] = [];\n\t\tfor (let start = 0; start < this.segments.length; start += columnCount) {\n\t\t\tconst row = this.segments.slice(start, start + columnCount);\n\t\t\tlines.push(\n\t\t\t\trow\n\t\t\t\t\t.map((segment, index) => {\n\t\t\t\t\t\tif (index === row.length - 1) return segment;\n\t\t\t\t\t\tconst padding = Math.max(0, this.cellWidth - visibleWidth(segment));\n\t\t\t\t\t\treturn `${segment}${padding > 0 ? \" \".repeat(padding) : \"\"}${FLOW_SEPARATOR}`;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\"),\n\t\t\t);\n\t\t}\n\t\treturn lines;\n\t}\n\n\tinvalidate(): void {}\n}\n\nfunction toolCallLabel(count: number): string {\n\treturn `${count} tool call${count === 1 ? \"\" : \"s\"}`;\n}\n\nfunction runHeader(run: SubagentRunDetails, index: number, theme: Theme): string {\n\tconst separator = theme.fg(\"dim\", \" · \");\n\tconst duration = elapsed(run.startedAt, run.endedAt) ?? \"0.0s\";\n\tconst metrics = [\n\t\trun.model,\n\t\trun.thinking,\n\t\t`${formatTotalTokens(run.usage.totalTokens)} tok`,\n\t\ttoolCallLabel(run.usage.toolUses),\n\t\tduration,\n\t].map((metric) => theme.fg(\"muted\", metric));\n\treturn [theme.fg(\"accent\", theme.bold(`#${index + 1} ${profileLabel(run.agent)}`)), ...metrics].join(separator);\n}\n\nfunction sectionTitle(title: string, theme: Theme, color: ThemeColor, suffix?: string): string {\n\tconst heading = theme.fg(color, theme.bold(title));\n\treturn suffix ? `${heading}${theme.fg(\"dim\", ` · ${suffix}`)}` : heading;\n}\n\nfunction activityTitleSuffix(total: number, shown: number): string {\n\tif (total <= DISPLAY_ACTIVITY_LIMIT && shown >= total) return toolCallLabel(total);\n\tif (shown > 0) return `last ${shown} of ${total} tool calls`;\n\treturn toolCallLabel(total);\n}\n\nfunction activityLine(activity: ToolActivity, theme: Theme): string {\n\t// State color stays on the two-column status marker; the call text itself\n\t// keeps the quiet toolOutput color so a running row does not flash a whole\n\t// accent-colored command line on every refresh.\n\tconst text = theme.fg(\"toolOutput\", activityCallText(activity));\n\tif (activity.status === \"failed\") return `${theme.fg(\"error\", \"×\")} ${text}`;\n\tif (activity.status === \"running\") return `${theme.fg(\"accent\", \"›\")} ${text}`;\n\treturn ` ${text}`;\n}\n\nfunction addPrompt(\n\tcontainer: Container,\n\trun: SubagentRunDetails,\n\tindex: number,\n\targs: SubagentParams,\n\ttheme: Theme,\n): void {\n\tcontainer.addChild(new Text(sectionTitle(\"Prompt\", theme, \"toolTitle\"), 0, 0));\n\tcontainer.addChild(new Text(theme.fg(\"toolOutput\", taskPrompt(args, index, run)), 2, 0));\n}\n\nfunction addActivity(container: Container, run: SubagentRunDetails, theme: Theme): void {\n\tconst toolCalls = run.activities.filter(isDisplayableActivity);\n\tconst shown = toolCalls.slice(-DISPLAY_ACTIVITY_LIMIT);\n\tconst total = Math.max(run.usage.toolUses, toolCalls.length);\n\tcontainer.addChild(\n\t\tnew Text(sectionTitle(\"Activity\", theme, \"toolTitle\", activityTitleSuffix(total, shown.length)), 0, 0),\n\t);\n\tif (shown.length === 0) {\n\t\tconst empty = total === 0 ? \"No tool calls yet.\" : \"Activity unavailable.\";\n\t\tcontainer.addChild(new Text(theme.fg(\"muted\", empty), 2, 0));\n\t\treturn;\n\t}\n\tfor (const activity of shown) container.addChild(new SingleLineText(activityLine(activity, theme)));\n}\n\nfunction outcomeColor(status: SubagentRunStatus): ThemeColor {\n\tif (status === \"completed\") return \"success\";\n\tif (status === \"failed\") return \"error\";\n\tif (status === \"aborted\") return \"warning\";\n\treturn \"accent\";\n}\n\nfunction outcomeReport(run: SubagentRunDetails): string {\n\tif (typeof run.report === \"string\") return run.report;\n\tconst legacyOutput = (run as SubagentRunDetails & { finalOutput?: unknown }).finalOutput;\n\treturn typeof legacyOutput === \"string\" ? legacyOutput : \"\";\n}\n\nfunction hasOutcome(report: string): boolean {\n\treturn report.trim().length > 0;\n}\n\nfunction addOutcomeMarkdown(container: Container, report: string, theme: Theme): void {\n\tcontainer.addChild(\n\t\tnew Markdown(report, 2, 0, getMarkdownTheme(), {\n\t\t\tcolor: (text) => theme.fg(\"toolOutput\", text),\n\t\t}),\n\t);\n}\n\nfunction addOutcome(container: Container, run: SubagentRunDetails, theme: Theme): void {\n\tconst color = outcomeColor(run.status);\n\tconst report = outcomeReport(run);\n\tcontainer.addChild(new Text(sectionTitle(\"Outcome\", theme, color), 0, 0));\n\n\tif (run.status === \"queued\" || run.status === \"running\") {\n\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Still running...\"), 2, 0));\n\t\tconst retry = retryText(run);\n\t\tif (retry) {\n\t\t\tcontainer.addChild(new Text(theme.fg(\"warning\", retry), 2, 0));\n\t\t} else if (latestRunningActivity(run, COMPACTION_ACTIVITY_ID)) {\n\t\t\tcontainer.addChild(new Text(theme.fg(\"accent\", \"Compacting context...\"), 2, 0));\n\t\t}\n\t\treturn;\n\t}\n\n\tif (run.status === \"completed\") {\n\t\tif (hasOutcome(report)) addOutcomeMarkdown(container, report, theme);\n\t\telse container.addChild(new Text(theme.fg(\"muted\", \"No outcome returned.\"), 2, 0));\n\t\treturn;\n\t}\n\n\tconst verdict = run.status === \"failed\" ? \"Failed\" : \"Aborted\";\n\tconst reason = run.error ? `${verdict}: ${run.error}` : `${verdict}.`;\n\tcontainer.addChild(new Text(theme.fg(color, reason), 2, 0));\n\tif (hasOutcome(report)) {\n\t\tcontainer.addChild(new Spacer(1));\n\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Partial outcome:\"), 2, 0));\n\t\taddOutcomeMarkdown(container, report, theme);\n\t}\n}\n\nfunction renderRun(run: SubagentRunDetails, index: number, args: SubagentParams, theme: Theme): Component {\n\tconst container = new Container();\n\tcontainer.addChild(new SingleLineText(runHeader(run, index, theme)));\n\tcontainer.addChild(new Spacer(1));\n\taddPrompt(container, run, index, args, theme);\n\tcontainer.addChild(new Spacer(1));\n\taddActivity(container, run, theme);\n\tcontainer.addChild(new Spacer(1));\n\taddOutcome(container, run, theme);\n\treturn container;\n}\n\nfunction fallbackResult(result: AgentToolResult<SubagentDetails>, theme: Theme, isError: boolean): Component {\n\tconst text = result.content.find((part) => part.type === \"text\");\n\tconst value = text?.type === \"text\" ? truncate(text.text, FALLBACK_OUTPUT_LIMIT) : \"(no output)\";\n\treturn new Text(theme.fg(isError ? \"error\" : \"muted\", value), 0, 0);\n}\n\n/** Per-result live-refresh state owned by the shell's render context. */\nexport interface SubagentRenderState {\n\trefreshTimer?: ReturnType<typeof setTimeout>;\n\t/** Cadence the current timer was created with, used to detect changes. */\n\trefreshInterval?: number;\n\t/** Called by the shell when the transcript row is disposed. */\n\tdispose?: () => void;\n}\n\ntype SubagentToolRenderContext = ToolRenderContext<SubagentRenderState, SubagentParams, SubagentDetails>;\n\n/** Pure refresh policy: schedule only while the current view contains changing text. */\nexport function desiredRefreshInterval(\n\truns: readonly SubagentRunDetails[],\n\toptions: { isPartial: boolean; expanded: boolean },\n): number | undefined {\n\tif (!options.isPartial) return undefined;\n\tif (!options.expanded) {\n\t\treturn runs.some((run) => run.status === \"running\") ? STATUS_SPINNER_INTERVAL_MS : undefined;\n\t}\n\treturn runs.some((run) => run.status === \"running\" || run.retry !== undefined)\n\t\t? ELAPSED_REFRESH_INTERVAL_MS\n\t\t: undefined;\n}\n\nfunction clearLiveRefresh(state: SubagentRenderState): void {\n\tif (state.refreshTimer !== undefined) clearTimeout(state.refreshTimer);\n\tstate.refreshTimer = undefined;\n\tstate.refreshInterval = undefined;\n}\n\n// One one-shot timer per row. A paint with the same cadence keeps the existing\n// deadline; expansion, settlement, or loss of dynamic content clears or\n// reschedules immediately.\nexport function scheduleLiveRefresh(context: SubagentToolRenderContext, isPartial: boolean): void {\n\tconst state = context.state;\n\tstate.dispose ??= () => clearLiveRefresh(state);\n\tconst interval = desiredRefreshInterval(context.result?.details?.runs ?? [], {\n\t\tisPartial,\n\t\texpanded: context.expanded,\n\t});\n\tif (interval === undefined) {\n\t\tclearLiveRefresh(state);\n\t\treturn;\n\t}\n\tif (state.refreshTimer !== undefined) {\n\t\t// Keep a matching timer so unrelated re-renders cannot postpone the\n\t\t// next tick; only reschedule when the desired cadence changes.\n\t\tif (state.refreshInterval === interval) return;\n\t\tclearTimeout(state.refreshTimer);\n\t}\n\tstate.refreshInterval = interval;\n\tstate.refreshTimer = setTimeout(() => {\n\t\tstate.refreshTimer = undefined;\n\t\tstate.refreshInterval = undefined;\n\t\tcontext.invalidate();\n\t}, interval);\n\tstate.refreshTimer.unref?.();\n}\n\nexport function renderSubagentCall(args: SubagentParams, theme: Theme): Component {\n\tconst count = Array.isArray(args.tasks) ? args.tasks.length : 0;\n\tconst title = theme.fg(count > 0 ? \"toolTitle\" : \"error\", theme.bold(\"Subagent\"));\n\treturn new Text(title, 0, 0);\n}\n\nexport function renderSubagentResult(\n\tresult: AgentToolResult<SubagentDetails>,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\targs: SubagentParams,\n\tisError: boolean,\n): Component {\n\tconst details = result.details;\n\tif (details?.background) {\n\t\tconst summary = `Handed to background · ${details.background.id}`;\n\t\tconst rows = options.expanded\n\t\t\t? details.runs\n\t\t\t\t\t.map((run, index) => `#${index + 1} ${profileLabel(run.agent)} · ${run.status} at handoff`)\n\t\t\t\t\t.join(\"\\n\")\n\t\t\t: \"\";\n\t\tconst text = [summary, rows, \"Use /bg for live progress and outcomes.\"].filter(Boolean).join(\"\\n\");\n\t\treturn new Text(theme.fg(\"muted\", text), 0, 0);\n\t}\n\tif (!details || !Array.isArray(details.runs)) return fallbackResult(result, theme, isError);\n\tif (details.runs.length === 0) return new Text(theme.fg(\"muted\", \"Starting...\"), 0, 0);\n\n\tconst container = new Container();\n\tif (!options.expanded) {\n\t\tconst now = Date.now();\n\t\tcontainer.addChild(new CollapsedFlow(details.runs.map((run, index) => flowSegment(run, index, theme, now))));\n\t\treturn container;\n\t}\n\n\tfor (const [index, run] of details.runs.entries()) {\n\t\tif (index > 0) container.addChild(new Spacer(1));\n\t\tcontainer.addChild(renderRun(run, index, args, theme));\n\t}\n\treturn container;\n}\n"]}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { ThinkingLevel } from "@earendil-works/pi-agent-core";
|
|
2
|
-
import { type Api, type Model } from "@earendil-works/pi-ai/compat";
|
|
3
|
-
import type { ModelRegistry } from "../../core/model-registry.ts";
|
|
4
|
-
import type { SubagentTask } from "./schema.ts";
|
|
5
|
-
import type { ResolvedSubagentTask, SubagentConfigFile } from "./types.ts";
|
|
6
|
-
export interface ParentModelContext {
|
|
7
|
-
model: Model<Api> | undefined;
|
|
8
|
-
thinking: ThinkingLevel;
|
|
9
|
-
modelRegistry: Pick<ModelRegistry, "find" | "getAvailable" | "hasConfiguredAuth">;
|
|
10
|
-
}
|
|
11
|
-
export interface ResolvedTaskCwd {
|
|
12
|
-
cwd: string;
|
|
13
|
-
/** False for a directory outside the parent: the task runs untrusted there. */
|
|
14
|
-
insideParent: boolean;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Resolve the requested cwd against the parent working directory. A directory
|
|
18
|
-
* outside the parent is allowed but marked untrusted (the runner starts it
|
|
19
|
-
* without the parent project's trust, so its .pi settings are never loaded);
|
|
20
|
-
* only a missing or non-directory cwd fails. The inside/outside decision is
|
|
21
|
-
* always made on canonical paths, so a symlink that points outside the parent
|
|
22
|
-
* is treated as outside rather than rejected.
|
|
23
|
-
*/
|
|
24
|
-
export declare function resolveTaskCwd(parentCwd: string, requestedCwd: string | undefined): ResolvedTaskCwd;
|
|
25
|
-
export declare function taskLabel(task: Pick<SubagentTask, "prompt"> & {
|
|
26
|
-
description?: string | null;
|
|
27
|
-
}): string;
|
|
28
|
-
/** Group title shown in the /bg list, status line, and completion notification. */
|
|
29
|
-
export declare function subagentGroupTitle(tasks: readonly SubagentTask[]): string;
|
|
30
|
-
export declare function resolveSubagentTask(task: SubagentTask, parentCwd: string, parent: ParentModelContext, configAgentDir?: string, preloadedConfig?: SubagentConfigFile): Promise<ResolvedSubagentTask>;
|
|
31
|
-
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/extensions/subagent/resolve.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,KAAK,GAAG,EAAsB,KAAK,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAExF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAA2B,MAAM,YAAY,CAAC;AAEpG,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC9B,QAAQ,EAAE,aAAa,CAAC;IACxB,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc,GAAG,mBAAmB,CAAC,CAAC;CAClF;AA8BD,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,+EAA+E;IAC/E,YAAY,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,eAAe,CAYnG;AAyBD,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,MAAM,CAItG;AAED,mFAAmF;AACnF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CAIzE;AAED,wBAAsB,mBAAmB,CACxC,IAAI,EAAE,YAAY,EAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,kBAAkB,EAC1B,cAAc,SAAgB,EAC9B,eAAe,CAAC,EAAE,kBAAkB,GAClC,OAAO,CAAC,oBAAoB,CAAC,CAoB/B"}
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { existsSync, realpathSync, statSync } from "node:fs";
|
|
2
|
-
import { dirname, isAbsolute, relative, resolve } from "node:path";
|
|
3
|
-
import { clampThinkingLevel } from "@earendil-works/pi-ai/compat";
|
|
4
|
-
import { getAgentDir } from "../../config.js";
|
|
5
|
-
import { AGENT_PROFILES } from "./agents.js";
|
|
6
|
-
import { findAvailableModel } from "./model-selection.js";
|
|
7
|
-
import { loadSubagentConfig } from "./settings.js";
|
|
8
|
-
import { firstPlainLine, truncate } from "./text.js";
|
|
9
|
-
function normalizeCwdInput(value) {
|
|
10
|
-
if (value === undefined)
|
|
11
|
-
return undefined;
|
|
12
|
-
const trimmed = value.trim();
|
|
13
|
-
if (!trimmed)
|
|
14
|
-
throw new Error("cwd must not be empty.");
|
|
15
|
-
return trimmed.startsWith("@") ? trimmed.slice(1) : trimmed;
|
|
16
|
-
}
|
|
17
|
-
function isWithin(parent, child) {
|
|
18
|
-
const normalizedParent = process.platform === "win32" ? parent.toLowerCase() : parent;
|
|
19
|
-
const normalizedChild = process.platform === "win32" ? child.toLowerCase() : child;
|
|
20
|
-
const rest = relative(normalizedParent, normalizedChild);
|
|
21
|
-
return rest === "" || (rest !== ".." && !rest.startsWith(`..${PATH_SEP}`) && !isAbsolute(rest));
|
|
22
|
-
}
|
|
23
|
-
const PATH_SEP = process.platform === "win32" ? "\\" : "/";
|
|
24
|
-
/** Closest existing ancestor directory, for "does not exist" diagnostics. */
|
|
25
|
-
function nearestExistingParent(candidate) {
|
|
26
|
-
let current = candidate;
|
|
27
|
-
for (let depth = 0; depth < 64; depth++) {
|
|
28
|
-
const parent = dirname(current);
|
|
29
|
-
if (parent === current)
|
|
30
|
-
return current;
|
|
31
|
-
if (existsSync(parent))
|
|
32
|
-
return parent;
|
|
33
|
-
current = parent;
|
|
34
|
-
}
|
|
35
|
-
return current;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Resolve the requested cwd against the parent working directory. A directory
|
|
39
|
-
* outside the parent is allowed but marked untrusted (the runner starts it
|
|
40
|
-
* without the parent project's trust, so its .pi settings are never loaded);
|
|
41
|
-
* only a missing or non-directory cwd fails. The inside/outside decision is
|
|
42
|
-
* always made on canonical paths, so a symlink that points outside the parent
|
|
43
|
-
* is treated as outside rather than rejected.
|
|
44
|
-
*/
|
|
45
|
-
export function resolveTaskCwd(parentCwd, requestedCwd) {
|
|
46
|
-
const value = normalizeCwdInput(requestedCwd);
|
|
47
|
-
// Models routinely echo the parent working directory back as an absolute
|
|
48
|
-
// path; accept an absolute cwd instead of failing the task over path style.
|
|
49
|
-
const candidate = value !== undefined && isAbsolute(value) ? resolve(value) : resolve(parentCwd, value ?? ".");
|
|
50
|
-
if (!existsSync(candidate)) {
|
|
51
|
-
throw new Error(`${candidate} does not exist; nearest existing parent: ${nearestExistingParent(candidate)}`);
|
|
52
|
-
}
|
|
53
|
-
if (!statSync(candidate).isDirectory())
|
|
54
|
-
throw new Error(`Subagent cwd is not a directory: ${candidate}`);
|
|
55
|
-
const realParent = realpathSync(parentCwd);
|
|
56
|
-
const realCandidate = realpathSync(candidate);
|
|
57
|
-
return { cwd: realCandidate, insideParent: isWithin(realParent, realCandidate) };
|
|
58
|
-
}
|
|
59
|
-
// Exactly two layers: a /agents override wins, otherwise the subagent
|
|
60
|
-
// inherits the parent session. Callers and agent files cannot pick models.
|
|
61
|
-
function resolveModel(override, parent) {
|
|
62
|
-
if (override?.model)
|
|
63
|
-
return findAvailableModel(override.model, parent.modelRegistry);
|
|
64
|
-
if (!parent.model)
|
|
65
|
-
throw new Error("The parent session has no active model.");
|
|
66
|
-
return parent.model;
|
|
67
|
-
}
|
|
68
|
-
function resolveThinking(override, parent, model) {
|
|
69
|
-
const requested = override?.thinking ?? parent.thinking;
|
|
70
|
-
return clampThinkingLevel(model, requested);
|
|
71
|
-
}
|
|
72
|
-
// The schema restricts task.agent to explorer|general; an omitted or null
|
|
73
|
-
// agent resolves to the read-only explorer profile.
|
|
74
|
-
const DEFAULT_AGENT_NAME = "explorer";
|
|
75
|
-
// An explicit short label wins; otherwise derive a bounded plain-text label from
|
|
76
|
-
// the briefing's first meaningful line so UI rows and report headings stay readable.
|
|
77
|
-
export function taskLabel(task) {
|
|
78
|
-
const explicit = task.description?.trim();
|
|
79
|
-
if (explicit)
|
|
80
|
-
return explicit;
|
|
81
|
-
return truncate(firstPlainLine(task.prompt), 80);
|
|
82
|
-
}
|
|
83
|
-
/** Group title shown in the /bg list, status line, and completion notification. */
|
|
84
|
-
export function subagentGroupTitle(tasks) {
|
|
85
|
-
const labels = tasks.map((task) => taskLabel(task));
|
|
86
|
-
if (labels.length === 1)
|
|
87
|
-
return truncate(`Subagent · ${labels[0]}`, 100);
|
|
88
|
-
return truncate(`Subagent · ${tasks.length} tasks: ${labels.join(", ")}`, 100);
|
|
89
|
-
}
|
|
90
|
-
export async function resolveSubagentTask(task, parentCwd, parent, configAgentDir = getAgentDir(), preloadedConfig) {
|
|
91
|
-
const agentName = task.agent ?? DEFAULT_AGENT_NAME;
|
|
92
|
-
const agent = AGENT_PROFILES.find((candidate) => candidate.name === agentName);
|
|
93
|
-
if (!agent) {
|
|
94
|
-
const available = AGENT_PROFILES.map((candidate) => candidate.name).join(", ") || "none";
|
|
95
|
-
throw new Error(`Unknown agent "${agentName}". Available agents: ${available}.`);
|
|
96
|
-
}
|
|
97
|
-
const config = preloadedConfig ?? (await loadSubagentConfig(configAgentDir));
|
|
98
|
-
const override = config.profiles[agent.name];
|
|
99
|
-
const model = resolveModel(override, parent);
|
|
100
|
-
const { cwd, insideParent } = resolveTaskCwd(parentCwd, task.cwd ?? undefined);
|
|
101
|
-
return {
|
|
102
|
-
agent,
|
|
103
|
-
description: taskLabel(task),
|
|
104
|
-
prompt: task.prompt,
|
|
105
|
-
cwd,
|
|
106
|
-
insideParent,
|
|
107
|
-
model,
|
|
108
|
-
thinking: resolveThinking(override, parent, model),
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
//# sourceMappingURL=resolve.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/extensions/subagent/resolve.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, realpathSync, statSync } from \"node:fs\";\nimport { dirname, isAbsolute, relative, resolve } from \"node:path\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { type Api, clampThinkingLevel, type Model } from \"@earendil-works/pi-ai/compat\";\nimport { getAgentDir } from \"../../config.ts\";\nimport type { ModelRegistry } from \"../../core/model-registry.ts\";\nimport { AGENT_PROFILES } from \"./agents.ts\";\nimport { findAvailableModel } from \"./model-selection.ts\";\nimport type { SubagentTask } from \"./schema.ts\";\nimport { loadSubagentConfig } from \"./settings.ts\";\nimport { firstPlainLine, truncate } from \"./text.ts\";\nimport type { ResolvedSubagentTask, SubagentConfigFile, SubagentProfileOverride } from \"./types.ts\";\n\nexport interface ParentModelContext {\n\tmodel: Model<Api> | undefined;\n\tthinking: ThinkingLevel;\n\tmodelRegistry: Pick<ModelRegistry, \"find\" | \"getAvailable\" | \"hasConfiguredAuth\">;\n}\n\nfunction normalizeCwdInput(value: string | undefined): string | undefined {\n\tif (value === undefined) return undefined;\n\tconst trimmed = value.trim();\n\tif (!trimmed) throw new Error(\"cwd must not be empty.\");\n\treturn trimmed.startsWith(\"@\") ? trimmed.slice(1) : trimmed;\n}\n\nfunction isWithin(parent: string, child: string): boolean {\n\tconst normalizedParent = process.platform === \"win32\" ? parent.toLowerCase() : parent;\n\tconst normalizedChild = process.platform === \"win32\" ? child.toLowerCase() : child;\n\tconst rest = relative(normalizedParent, normalizedChild);\n\treturn rest === \"\" || (rest !== \"..\" && !rest.startsWith(`..${PATH_SEP}`) && !isAbsolute(rest));\n}\n\nconst PATH_SEP = process.platform === \"win32\" ? \"\\\\\" : \"/\";\n\n/** Closest existing ancestor directory, for \"does not exist\" diagnostics. */\nfunction nearestExistingParent(candidate: string): string {\n\tlet current = candidate;\n\tfor (let depth = 0; depth < 64; depth++) {\n\t\tconst parent = dirname(current);\n\t\tif (parent === current) return current;\n\t\tif (existsSync(parent)) return parent;\n\t\tcurrent = parent;\n\t}\n\treturn current;\n}\n\nexport interface ResolvedTaskCwd {\n\tcwd: string;\n\t/** False for a directory outside the parent: the task runs untrusted there. */\n\tinsideParent: boolean;\n}\n\n/**\n * Resolve the requested cwd against the parent working directory. A directory\n * outside the parent is allowed but marked untrusted (the runner starts it\n * without the parent project's trust, so its .pi settings are never loaded);\n * only a missing or non-directory cwd fails. The inside/outside decision is\n * always made on canonical paths, so a symlink that points outside the parent\n * is treated as outside rather than rejected.\n */\nexport function resolveTaskCwd(parentCwd: string, requestedCwd: string | undefined): ResolvedTaskCwd {\n\tconst value = normalizeCwdInput(requestedCwd);\n\t// Models routinely echo the parent working directory back as an absolute\n\t// path; accept an absolute cwd instead of failing the task over path style.\n\tconst candidate = value !== undefined && isAbsolute(value) ? resolve(value) : resolve(parentCwd, value ?? \".\");\n\tif (!existsSync(candidate)) {\n\t\tthrow new Error(`${candidate} does not exist; nearest existing parent: ${nearestExistingParent(candidate)}`);\n\t}\n\tif (!statSync(candidate).isDirectory()) throw new Error(`Subagent cwd is not a directory: ${candidate}`);\n\tconst realParent = realpathSync(parentCwd);\n\tconst realCandidate = realpathSync(candidate);\n\treturn { cwd: realCandidate, insideParent: isWithin(realParent, realCandidate) };\n}\n\n// Exactly two layers: a /agents override wins, otherwise the subagent\n// inherits the parent session. Callers and agent files cannot pick models.\nfunction resolveModel(override: SubagentProfileOverride | undefined, parent: ParentModelContext): Model<Api> {\n\tif (override?.model) return findAvailableModel(override.model, parent.modelRegistry);\n\tif (!parent.model) throw new Error(\"The parent session has no active model.\");\n\treturn parent.model;\n}\n\nfunction resolveThinking(\n\toverride: SubagentProfileOverride | undefined,\n\tparent: ParentModelContext,\n\tmodel: Model<Api>,\n): ThinkingLevel {\n\tconst requested = override?.thinking ?? parent.thinking;\n\treturn clampThinkingLevel(model, requested) as ThinkingLevel;\n}\n\n// The schema restricts task.agent to explorer|general; an omitted or null\n// agent resolves to the read-only explorer profile.\nconst DEFAULT_AGENT_NAME = \"explorer\";\n\n// An explicit short label wins; otherwise derive a bounded plain-text label from\n// the briefing's first meaningful line so UI rows and report headings stay readable.\nexport function taskLabel(task: Pick<SubagentTask, \"prompt\"> & { description?: string | null }): string {\n\tconst explicit = task.description?.trim();\n\tif (explicit) return explicit;\n\treturn truncate(firstPlainLine(task.prompt), 80);\n}\n\n/** Group title shown in the /bg list, status line, and completion notification. */\nexport function subagentGroupTitle(tasks: readonly SubagentTask[]): string {\n\tconst labels = tasks.map((task) => taskLabel(task));\n\tif (labels.length === 1) return truncate(`Subagent · ${labels[0]}`, 100);\n\treturn truncate(`Subagent · ${tasks.length} tasks: ${labels.join(\", \")}`, 100);\n}\n\nexport async function resolveSubagentTask(\n\ttask: SubagentTask,\n\tparentCwd: string,\n\tparent: ParentModelContext,\n\tconfigAgentDir = getAgentDir(),\n\tpreloadedConfig?: SubagentConfigFile,\n): Promise<ResolvedSubagentTask> {\n\tconst agentName = task.agent ?? DEFAULT_AGENT_NAME;\n\tconst agent = AGENT_PROFILES.find((candidate) => candidate.name === agentName);\n\tif (!agent) {\n\t\tconst available = AGENT_PROFILES.map((candidate) => candidate.name).join(\", \") || \"none\";\n\t\tthrow new Error(`Unknown agent \"${agentName}\". Available agents: ${available}.`);\n\t}\n\tconst config = preloadedConfig ?? (await loadSubagentConfig(configAgentDir));\n\tconst override = config.profiles[agent.name];\n\tconst model = resolveModel(override, parent);\n\tconst { cwd, insideParent } = resolveTaskCwd(parentCwd, task.cwd ?? undefined);\n\treturn {\n\t\tagent,\n\t\tdescription: taskLabel(task),\n\t\tprompt: task.prompt,\n\t\tcwd,\n\t\tinsideParent,\n\t\tmodel,\n\t\tthinking: resolveThinking(override, parent, model),\n\t};\n}\n"]}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import type { BackgroundProjection } from "../../core/background/types.ts";
|
|
2
|
-
import type { ModelRuntime } from "../../core/model-runtime.ts";
|
|
3
|
-
import { type ParentModelContext } from "./resolve.ts";
|
|
4
|
-
import type { SubagentParams } from "./schema.ts";
|
|
5
|
-
import type { SubagentDetails, SubagentExecutionResult } from "./types.ts";
|
|
6
|
-
export declare class ConcurrencyGate {
|
|
7
|
-
private active;
|
|
8
|
-
private readonly waiters;
|
|
9
|
-
private readonly limit;
|
|
10
|
-
constructor(limit?: number);
|
|
11
|
-
acquire(signal?: AbortSignal): Promise<() => void>;
|
|
12
|
-
private release;
|
|
13
|
-
}
|
|
14
|
-
export interface SubagentInvocationOptions {
|
|
15
|
-
params: SubagentParams;
|
|
16
|
-
parentCwd: string;
|
|
17
|
-
parent: ParentModelContext;
|
|
18
|
-
modelRuntime: ModelRuntime;
|
|
19
|
-
agentDir: string;
|
|
20
|
-
projectTrusted: boolean;
|
|
21
|
-
signal?: AbortSignal;
|
|
22
|
-
gate: ConcurrencyGate;
|
|
23
|
-
onUpdate?: (details: SubagentDetails, projection: BackgroundProjection) => void;
|
|
24
|
-
/** Whole-batch preflight and initial publication finished; no worker has started. */
|
|
25
|
-
onAccepted?: () => void;
|
|
26
|
-
onConfigWarning?: (message: string) => void;
|
|
27
|
-
registerAbort?: (abort: () => Promise<void>) => () => void;
|
|
28
|
-
/** Test hook: overrides the task-retry backoff base delay. */
|
|
29
|
-
taskRetryBaseDelayMs?: number;
|
|
30
|
-
/** Tool-call id of the invoking call; prefixes per-run ids for readability. */
|
|
31
|
-
batchId?: string;
|
|
32
|
-
}
|
|
33
|
-
export declare function runSubagentInvocation(options: SubagentInvocationOptions): Promise<SubagentExecutionResult>;
|
|
34
|
-
export { isSubagentError } from "./state.ts";
|
|
35
|
-
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/extensions/subagent/runner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAKhE,OAAO,EAAE,KAAK,kBAAkB,EAAuB,MAAM,cAAc,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,aAAa,CAAC;AAahE,OAAO,KAAK,EAAwB,eAAe,EAAE,uBAAuB,EAAiB,MAAM,YAAY,CAAC;AAUhH,qBAAa,eAAe;IAC3B,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,KAAK,SAAkB;IAInC,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IAsBlD,OAAO,CAAC,OAAO;CAYf;AAED,MAAM,WAAW,yBAAyB;IACzC,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAChF,qFAAqF;IACrF,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC;IAC3D,8DAA8D;IAC9D,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAsKD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA0DhH;AAED,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|