@astralyn/pi 0.87.5 → 0.99.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +51 -6
- package/README.md +3 -3
- package/dist/bun/runtime-setup.js +4 -1
- package/dist/bun/runtime-setup.js.map +1 -1
- package/dist/bundle/chunks/anthropic-messages-KIXY7EDT.js +6 -0
- package/dist/bundle/chunks/anthropic.js +2 -2
- package/dist/bundle/chunks/azure-openai-responses-RPBERDXD.js +2 -0
- package/dist/bundle/chunks/bedrock-converse-stream.js +8 -8
- package/dist/bundle/chunks/{chunk-LPQCB2VJ.js → chunk-A576H74Y.js} +2 -2
- package/dist/bundle/chunks/{chunk-NW5FIDD7.js → chunk-ABVRAYXT.js} +3 -3
- package/dist/bundle/chunks/{chunk-I5IVW2WS.js → chunk-CLLDCO64.js} +1 -1
- package/dist/bundle/chunks/chunk-DEWXBB6W.js +2 -0
- package/dist/bundle/chunks/chunk-G4RY3GN7.js +11 -0
- package/dist/bundle/chunks/chunk-GCKVOFWP.js +2 -0
- package/dist/bundle/chunks/chunk-MPDALHNJ.js +2 -0
- package/dist/bundle/chunks/chunk-OO6DJ3CL.js +31 -0
- package/dist/bundle/chunks/{chunk-EWLAVDVN.js → chunk-VW2P3X6P.js} +921 -293
- package/dist/bundle/chunks/chunk-VWCWZD6E.js +2 -0
- package/dist/bundle/chunks/cloudflare-workers-ai-system-one-ZYSAFXXL.js +2 -0
- package/dist/bundle/chunks/codemode-worker.js +295 -0
- package/dist/bundle/chunks/github-copilot.js +1 -1
- package/dist/bundle/chunks/google-generative-ai-SDNQVVXA.js +2 -0
- package/dist/bundle/chunks/google-vertex-LZXOLBIO.js +2 -0
- package/dist/bundle/chunks/llama-cpp-classify-7IYGGPND.js +22 -0
- package/dist/bundle/chunks/meta.js +2 -0
- package/dist/bundle/chunks/mistral-conversations-VYKPSSAM.js +5 -0
- package/dist/bundle/chunks/openai-chatgpt.js +75 -0
- package/dist/bundle/chunks/openai-codex-responses-HZ4VUDXD.js +10 -0
- package/dist/bundle/chunks/openai-codex.js +2 -2
- package/dist/bundle/chunks/openai-completions-SKDGF6OE.js +7 -0
- package/dist/bundle/chunks/openai-responses-FPML4SSG.js +3 -0
- package/dist/bundle/chunks/{openrouter-images-6XDE2CEW.js → openrouter-images-5524IQHX.js} +1 -1
- package/dist/bundle/chunks/openrouter.js +2 -2
- package/dist/bundle/chunks/{pi-messages-MQMPIPNC.js → pi-messages-HZZ7GEEW.js} +2 -2
- package/dist/bundle/chunks/radius.js +2 -2
- package/dist/bundle/chunks/typesafe-system-one-Z2CDLKEY.js +2 -0
- package/dist/bundle/chunks/virtual-modules-TQRORWJQ.js +2 -0
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +4 -3
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +38 -30
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/config.d.ts +18 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +30 -4
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +13 -13
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +2 -2
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +14 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +107 -58
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +505 -298
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bug-report.js +1 -1
- package/dist/core/bug-report.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +1 -22
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/utils.d.ts +2 -1
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js +25 -18
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/context-snapshot.d.ts +17 -4
- package/dist/core/context-snapshot.d.ts.map +1 -1
- package/dist/core/context-snapshot.js +48 -50
- package/dist/core/context-snapshot.js.map +1 -1
- package/dist/core/crash-log.d.ts.map +1 -1
- package/dist/core/crash-log.js +2 -1
- package/dist/core/crash-log.js.map +1 -1
- package/dist/core/export-html/template.css +10 -0
- package/dist/core/export-html/template.js +66 -17
- package/dist/core/extensions/distribution-api.d.ts +1 -8
- package/dist/core/extensions/distribution-api.d.ts.map +1 -1
- package/dist/core/extensions/distribution-api.js +6 -6
- package/dist/core/extensions/distribution-api.js.map +1 -1
- package/dist/core/extensions/index.d.ts +3 -3
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +58 -7
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +22 -3
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +124 -8
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +306 -30
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts +2 -2
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js +3 -3
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/keybindings.d.ts +40 -5
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +10 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/mcp-servers.d.ts +98 -0
- package/dist/core/mcp-servers.d.ts.map +1 -0
- package/dist/core/mcp-servers.js +158 -0
- package/dist/core/mcp-servers.js.map +1 -0
- package/dist/core/model-registry.d.ts +13 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +25 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +2 -2
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +5 -5
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +41 -3
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +167 -17
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/nested-tool-calls.d.ts +102 -0
- package/dist/core/nested-tool-calls.d.ts.map +1 -0
- package/dist/core/nested-tool-calls.js +177 -0
- package/dist/core/nested-tool-calls.js.map +1 -0
- package/dist/core/package-manager.d.ts +4 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +58 -12
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/provider-composer.d.ts +40 -21
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +92 -40
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts +8 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +18 -3
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resource-loader.d.ts +7 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +160 -35
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts +3 -3
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +84 -14
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +9 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +22 -22
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +36 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +108 -2
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/source-info.d.ts +8 -0
- package/dist/core/source-info.d.ts.map +1 -1
- package/dist/core/source-info.js +16 -0
- package/dist/core/source-info.js.map +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tasks/delivery.d.ts +40 -0
- package/dist/core/tasks/delivery.d.ts.map +1 -0
- package/dist/core/tasks/delivery.js +157 -0
- package/dist/core/tasks/delivery.js.map +1 -0
- package/dist/core/tasks/history.d.ts +4 -0
- package/dist/core/tasks/history.d.ts.map +1 -0
- package/dist/core/{background → tasks}/history.js +24 -48
- package/dist/core/tasks/history.js.map +1 -0
- package/dist/core/{background → tasks}/output.d.ts +4 -4
- package/dist/core/tasks/output.d.ts.map +1 -0
- package/dist/core/{background → tasks}/output.js +11 -11
- package/dist/core/tasks/output.js.map +1 -0
- package/dist/core/tasks/presentation.d.ts +9 -0
- package/dist/core/tasks/presentation.d.ts.map +1 -0
- package/dist/core/{background → tasks}/presentation.js +53 -51
- package/dist/core/tasks/presentation.js.map +1 -0
- package/dist/core/{background/service.d.ts → tasks/runtime.d.ts} +22 -23
- package/dist/core/tasks/runtime.d.ts.map +1 -0
- package/dist/core/{background/service.js → tasks/runtime.js} +154 -198
- package/dist/core/tasks/runtime.js.map +1 -0
- package/dist/core/tasks/session.d.ts +49 -0
- package/dist/core/tasks/session.d.ts.map +1 -0
- package/dist/core/tasks/session.js +129 -0
- package/dist/core/tasks/session.js.map +1 -0
- package/dist/core/tasks/store.d.ts +32 -0
- package/dist/core/tasks/store.d.ts.map +1 -0
- package/dist/core/tasks/store.js +135 -0
- package/dist/core/tasks/store.js.map +1 -0
- package/dist/core/{background → tasks}/types.d.ts +80 -62
- package/dist/core/tasks/types.d.ts.map +1 -0
- package/dist/core/{background → tasks}/types.js +9 -9
- package/dist/core/tasks/types.js.map +1 -0
- package/dist/core/tasks/view-data.d.ts +8 -0
- package/dist/core/tasks/view-data.d.ts.map +1 -0
- package/dist/core/tasks/view-data.js +61 -0
- package/dist/core/tasks/view-data.js.map +1 -0
- package/dist/core/tasks/view.d.ts +30 -0
- package/dist/core/tasks/view.d.ts.map +1 -0
- package/dist/core/tasks/view.js +50 -0
- package/dist/core/tasks/view.js.map +1 -0
- package/dist/core/tools/bash.d.ts +8 -95
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +8 -240
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +0 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +2 -0
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +2 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +2 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +9 -0
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +0 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +11 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +36 -0
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/powershell.d.ts +6 -2
- package/dist/core/tools/powershell.d.ts.map +1 -1
- package/dist/core/tools/powershell.js +1 -1
- package/dist/core/tools/powershell.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +0 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +6 -7
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +26 -11
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/renderers/bash.d.ts +1 -1
- package/dist/core/tools/renderers/bash.d.ts.map +1 -1
- package/dist/core/tools/renderers/bash.js +65 -12
- package/dist/core/tools/renderers/bash.js.map +1 -1
- package/dist/core/tools/renderers/edit.d.ts.map +1 -1
- package/dist/core/tools/renderers/edit.js +4 -22
- package/dist/core/tools/renderers/edit.js.map +1 -1
- package/dist/core/tools/renderers/find.d.ts.map +1 -1
- package/dist/core/tools/renderers/find.js +7 -6
- package/dist/core/tools/renderers/find.js.map +1 -1
- package/dist/core/tools/renderers/grep.d.ts.map +1 -1
- package/dist/core/tools/renderers/grep.js +8 -7
- package/dist/core/tools/renderers/grep.js.map +1 -1
- package/dist/core/tools/renderers/index.d.ts.map +1 -1
- package/dist/core/tools/renderers/index.js +5 -7
- package/dist/core/tools/renderers/index.js.map +1 -1
- package/dist/core/tools/renderers/ls.d.ts.map +1 -1
- package/dist/core/tools/renderers/ls.js +3 -2
- package/dist/core/tools/renderers/ls.js.map +1 -1
- package/dist/core/tools/renderers/read.d.ts.map +1 -1
- package/dist/core/tools/renderers/read.js +10 -14
- package/dist/core/tools/renderers/read.js.map +1 -1
- package/dist/core/tools/renderers/shell-task.d.ts +4 -0
- package/dist/core/tools/renderers/shell-task.d.ts.map +1 -0
- package/dist/core/tools/renderers/shell-task.js +35 -0
- package/dist/core/tools/renderers/shell-task.js.map +1 -0
- package/dist/core/tools/renderers/write.d.ts.map +1 -1
- package/dist/core/tools/renderers/write.js +3 -2
- package/dist/core/tools/renderers/write.js.map +1 -1
- package/dist/core/tools/shell-execution.d.ts +4 -5
- package/dist/core/tools/shell-execution.d.ts.map +1 -1
- package/dist/core/tools/shell-execution.js +19 -3
- package/dist/core/tools/shell-execution.js.map +1 -1
- package/dist/core/tools/shell-tool.d.ts +93 -0
- package/dist/core/tools/shell-tool.d.ts.map +1 -0
- package/dist/core/tools/shell-tool.js +251 -0
- package/dist/core/tools/shell-tool.js.map +1 -0
- package/dist/core/tools/tasks/actions.d.ts +12 -0
- package/dist/core/tools/tasks/actions.d.ts.map +1 -0
- package/dist/{extensions/background → core/tools/tasks}/actions.js +20 -19
- package/dist/core/tools/tasks/actions.js.map +1 -0
- package/dist/core/tools/tasks/constants.d.ts +24 -0
- package/dist/core/tools/tasks/constants.d.ts.map +1 -0
- package/dist/{extensions/background → core/tools/tasks}/constants.js +11 -9
- package/dist/core/tools/tasks/constants.js.map +1 -0
- package/dist/{extensions/background → core/tools/tasks}/schema.d.ts +6 -6
- package/dist/core/tools/tasks/schema.d.ts.map +1 -0
- package/dist/{extensions/background → core/tools/tasks}/schema.js +17 -17
- package/dist/core/tools/tasks/schema.js.map +1 -0
- package/dist/{extensions/background → core/tools/tasks}/types.d.ts +15 -17
- package/dist/core/tools/tasks/types.d.ts.map +1 -0
- package/dist/core/tools/tasks/types.js.map +1 -0
- package/dist/core/tools/tasks.d.ts +14 -0
- package/dist/core/tools/tasks.d.ts.map +1 -0
- package/dist/core/tools/tasks.js +40 -0
- package/dist/core/tools/tasks.js.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts +5 -8
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +4 -4
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/truncate.d.ts +14 -0
- package/dist/core/tools/truncate.d.ts.map +1 -1
- package/dist/core/tools/truncate.js +29 -0
- package/dist/core/tools/truncate.js.map +1 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +1 -0
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/core/usage-totals.d.ts +5 -3
- package/dist/core/usage-totals.d.ts.map +1 -1
- package/dist/core/usage-totals.js +27 -4
- package/dist/core/usage-totals.js.map +1 -1
- package/dist/core/virtual-models.d.ts +115 -0
- package/dist/core/virtual-models.d.ts.map +1 -0
- package/dist/core/virtual-models.js +117 -0
- package/dist/core/virtual-models.js.map +1 -0
- package/dist/extensions/codemode/execute.d.ts +16 -0
- package/dist/extensions/codemode/execute.d.ts.map +1 -0
- package/dist/extensions/codemode/execute.js +390 -0
- package/dist/extensions/codemode/execute.js.map +1 -0
- package/dist/extensions/codemode/execute.lazy.d.ts +3 -0
- package/dist/extensions/codemode/execute.lazy.d.ts.map +1 -0
- package/dist/extensions/codemode/execute.lazy.js +3 -0
- package/dist/extensions/codemode/execute.lazy.js.map +1 -0
- package/dist/extensions/codemode/index.d.ts +21 -0
- package/dist/extensions/codemode/index.d.ts.map +1 -0
- package/dist/extensions/codemode/index.js +36 -0
- package/dist/extensions/codemode/index.js.map +1 -0
- package/dist/extensions/codemode/renderer.d.ts +12 -0
- package/dist/extensions/codemode/renderer.d.ts.map +1 -0
- package/dist/extensions/codemode/renderer.js +119 -0
- package/dist/extensions/codemode/renderer.js.map +1 -0
- package/dist/extensions/codemode/search.d.ts +33 -0
- package/dist/extensions/codemode/search.d.ts.map +1 -0
- package/dist/extensions/codemode/search.js +117 -0
- package/dist/extensions/codemode/search.js.map +1 -0
- package/dist/extensions/codemode/tool.d.ts +122 -0
- package/dist/extensions/codemode/tool.d.ts.map +1 -0
- package/dist/extensions/codemode/tool.js +324 -0
- package/dist/extensions/codemode/tool.js.map +1 -0
- package/dist/extensions/codemode/worker.d.ts +7 -0
- package/dist/extensions/codemode/worker.d.ts.map +1 -0
- package/dist/extensions/codemode/worker.js +7 -0
- package/dist/extensions/codemode/worker.js.map +1 -0
- package/dist/extensions/deepwiki/schema.d.ts +1 -1
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +14 -12
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +65 -13
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/extensions/mcp/cli.d.ts +21 -0
- package/dist/extensions/mcp/cli.d.ts.map +1 -0
- package/dist/extensions/mcp/cli.js +485 -0
- package/dist/extensions/mcp/cli.js.map +1 -0
- package/dist/extensions/mcp/cli.lazy.d.ts +3 -0
- package/dist/extensions/mcp/cli.lazy.d.ts.map +1 -0
- package/dist/extensions/mcp/cli.lazy.js +3 -0
- package/dist/extensions/mcp/cli.lazy.js.map +1 -0
- package/dist/extensions/mcp/config.d.ts +70 -0
- package/dist/extensions/mcp/config.d.ts.map +1 -0
- package/dist/extensions/mcp/config.js +146 -0
- package/dist/extensions/mcp/config.js.map +1 -0
- package/dist/extensions/mcp/index.d.ts +52 -0
- package/dist/extensions/mcp/index.d.ts.map +1 -0
- package/dist/extensions/mcp/index.js +904 -0
- package/dist/extensions/mcp/index.js.map +1 -0
- package/dist/extensions/mcp/log.d.ts +16 -0
- package/dist/extensions/mcp/log.d.ts.map +1 -0
- package/dist/extensions/mcp/log.js +64 -0
- package/dist/extensions/mcp/log.js.map +1 -0
- package/dist/extensions/mcp/oauth.d.ts +94 -0
- package/dist/extensions/mcp/oauth.d.ts.map +1 -0
- package/dist/extensions/mcp/oauth.js +330 -0
- package/dist/extensions/mcp/oauth.js.map +1 -0
- package/dist/extensions/mcp/resources.d.ts +43 -0
- package/dist/extensions/mcp/resources.d.ts.map +1 -0
- package/dist/extensions/mcp/resources.js +262 -0
- package/dist/extensions/mcp/resources.js.map +1 -0
- package/dist/extensions/mcp/runtime.d.ts +96 -0
- package/dist/extensions/mcp/runtime.d.ts.map +1 -0
- package/dist/extensions/mcp/runtime.js +372 -0
- package/dist/extensions/mcp/runtime.js.map +1 -0
- package/dist/extensions/mcp/runtime.lazy.d.ts +3 -0
- package/dist/extensions/mcp/runtime.lazy.d.ts.map +1 -0
- package/dist/extensions/mcp/runtime.lazy.js +3 -0
- package/dist/extensions/mcp/runtime.lazy.js.map +1 -0
- package/dist/extensions/mcp/tools.d.ts +83 -0
- package/dist/extensions/mcp/tools.d.ts.map +1 -0
- package/dist/extensions/mcp/tools.js +233 -0
- package/dist/extensions/mcp/tools.js.map +1 -0
- package/dist/extensions/mcp/ui.d.ts +60 -0
- package/dist/extensions/mcp/ui.d.ts.map +1 -0
- package/dist/extensions/mcp/ui.js +166 -0
- package/dist/extensions/mcp/ui.js.map +1 -0
- package/dist/extensions/question/detail-pane.d.ts +12 -0
- package/dist/extensions/question/detail-pane.d.ts.map +1 -0
- package/dist/extensions/question/detail-pane.js +42 -0
- package/dist/extensions/question/detail-pane.js.map +1 -0
- package/dist/extensions/question/dialog.d.ts.map +1 -1
- package/dist/extensions/question/dialog.js +175 -105
- package/dist/extensions/question/dialog.js.map +1 -1
- package/dist/extensions/question/option-window.d.ts +26 -0
- package/dist/extensions/question/option-window.d.ts.map +1 -0
- package/dist/extensions/question/option-window.js +53 -0
- package/dist/extensions/question/option-window.js.map +1 -0
- package/dist/extensions/question/render-cache.d.ts +4 -4
- package/dist/extensions/question/render-cache.d.ts.map +1 -1
- package/dist/extensions/question/render-cache.js +10 -11
- package/dist/extensions/question/render-cache.js.map +1 -1
- package/dist/extensions/statusline/index.js +2 -2
- package/dist/extensions/statusline/index.js.map +1 -1
- package/dist/extensions/todo/index.d.ts.map +1 -1
- package/dist/extensions/todo/index.js +12 -8
- package/dist/extensions/todo/index.js.map +1 -1
- package/dist/extensions/todo/view.d.ts +3 -3
- package/dist/extensions/todo/view.d.ts.map +1 -1
- package/dist/extensions/todo/view.js +7 -6
- package/dist/extensions/todo/view.js.map +1 -1
- package/dist/extensions/tool-search/index.d.ts +12 -0
- package/dist/extensions/tool-search/index.d.ts.map +1 -0
- package/dist/extensions/tool-search/index.js +20 -0
- package/dist/extensions/tool-search/index.js.map +1 -0
- package/dist/extensions/tool-search/tool.d.ts +72 -0
- package/dist/extensions/tool-search/tool.d.ts.map +1 -0
- package/dist/extensions/tool-search/tool.js +208 -0
- package/dist/extensions/tool-search/tool.js.map +1 -0
- package/dist/index.d.ts +13 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +10 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +13 -3
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +3 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts +4 -4
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.js +8 -2
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +7 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +42 -3
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +1 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +1 -1
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/pi-logo.d.ts +12 -0
- package/dist/modes/interactive/components/pi-logo.d.ts.map +1 -0
- package/dist/modes/interactive/components/pi-logo.js +25 -0
- package/dist/modes/interactive/components/pi-logo.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +28 -6
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/status-marker.d.ts +4 -4
- package/dist/modes/interactive/components/status-marker.js +4 -4
- package/dist/modes/interactive/components/status-marker.js.map +1 -1
- package/dist/modes/interactive/components/themed-text.d.ts +17 -0
- package/dist/modes/interactive/components/themed-text.d.ts.map +1 -0
- package/dist/modes/interactive/components/themed-text.js +28 -0
- package/dist/modes/interactive/components/themed-text.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +2 -4
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +221 -173
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/tasks/completion-render.d.ts +8 -0
- package/dist/modes/interactive/tasks/completion-render.d.ts.map +1 -0
- package/dist/{extensions/background → modes/interactive/tasks}/completion-render.js +33 -30
- package/dist/modes/interactive/tasks/completion-render.js.map +1 -0
- package/dist/modes/interactive/tasks/fallback-view.d.ts +4 -0
- package/dist/modes/interactive/tasks/fallback-view.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/fallback-view.js +27 -0
- package/dist/modes/interactive/tasks/fallback-view.js.map +1 -0
- package/dist/modes/interactive/tasks/index.d.ts +12 -0
- package/dist/modes/interactive/tasks/index.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/index.js +97 -0
- package/dist/modes/interactive/tasks/index.js.map +1 -0
- package/dist/modes/interactive/tasks/manager.d.ts +67 -0
- package/dist/modes/interactive/tasks/manager.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/manager.js +380 -0
- package/dist/modes/interactive/tasks/manager.js.map +1 -0
- package/dist/{extensions/background → modes/interactive/tasks}/render.d.ts +13 -13
- package/dist/modes/interactive/tasks/render.d.ts.map +1 -0
- package/dist/{extensions/background → modes/interactive/tasks}/render.js +18 -18
- package/dist/modes/interactive/tasks/render.js.map +1 -0
- package/dist/{extensions/background → modes/interactive/tasks}/task-view.d.ts +7 -7
- package/dist/modes/interactive/tasks/task-view.d.ts.map +1 -0
- package/dist/{extensions/background → modes/interactive/tasks}/task-view.js +4 -4
- package/dist/modes/interactive/tasks/task-view.js.map +1 -0
- package/dist/{extensions/background → modes/interactive/tasks}/text.d.ts +1 -1
- package/dist/modes/interactive/tasks/text.d.ts.map +1 -0
- package/dist/{extensions/background → modes/interactive/tasks}/text.js +1 -1
- package/dist/modes/interactive/tasks/text.js.map +1 -0
- package/dist/modes/interactive/tasks/viewport.d.ts +15 -0
- package/dist/modes/interactive/tasks/viewport.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/viewport.js +49 -0
- package/dist/modes/interactive/tasks/viewport.js.map +1 -0
- package/dist/modes/interactive/theme/dark.json +59 -72
- package/dist/modes/interactive/theme/light.json +57 -69
- package/dist/modes/interactive/theme/system-theme.d.ts +54 -0
- package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/system-theme.js +535 -0
- package/dist/modes/interactive/theme/system-theme.js.map +1 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts +46 -6
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js +125 -47
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive/theme/theme-json.d.ts +1 -0
- package/dist/modes/interactive/theme/theme-json.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-json.js +3 -1
- package/dist/modes/interactive/theme/theme-json.js.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.json +7 -2
- package/dist/modes/interactive/theme/theme.d.ts +70 -39
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +247 -314
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/interactive/tool-view/chat.d.ts +20 -0
- package/dist/modes/interactive/tool-view/chat.d.ts.map +1 -0
- package/dist/modes/interactive/tool-view/chat.js +46 -0
- package/dist/modes/interactive/tool-view/chat.js.map +1 -0
- package/dist/modes/interactive/tool-view/fallback.d.ts +14 -0
- package/dist/modes/interactive/tool-view/fallback.d.ts.map +1 -0
- package/dist/modes/interactive/tool-view/fallback.js +55 -0
- package/dist/modes/interactive/tool-view/fallback.js.map +1 -0
- package/dist/modes/interactive/tool-view/style.d.ts +63 -0
- package/dist/modes/interactive/tool-view/style.d.ts.map +1 -0
- package/dist/modes/interactive/tool-view/style.js +83 -0
- package/dist/modes/interactive/tool-view/style.js.map +1 -0
- package/dist/modes/interactive/{components → tool-view}/tool-execution.d.ts +17 -24
- package/dist/modes/interactive/tool-view/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/{components → tool-view}/tool-execution.js +42 -116
- package/dist/modes/interactive/tool-view/tool-execution.js.map +1 -0
- package/dist/modes/interactive/tui-renderer.d.ts +2 -1
- package/dist/modes/interactive/tui-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/tui-renderer.js +1 -0
- package/dist/modes/interactive/tui-renderer.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +6 -6
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +12 -8
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +7 -9
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +10 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +6 -2
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +14 -17
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +5 -0
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/paths.d.ts +3 -3
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +5 -4
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/shell.d.ts +1 -3
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +3 -30
- package/dist/utils/shell.js.map +1 -1
- package/docs/bundled/README.md +22 -8
- package/docs/bundled/extensions/question.md +6 -5
- package/docs/bundled/extensions/statusline.md +2 -2
- package/docs/bundled/tasks.md +141 -0
- package/docs/bundled/tool-presentation.md +41 -31
- package/docs/custom-provider.md +44 -0
- package/docs/docs.json +10 -6
- package/docs/extensions.md +90 -90
- package/docs/index.md +2 -1
- package/docs/keybindings.md +19 -7
- package/docs/llama-cpp.md +12 -1
- package/docs/mcp.md +188 -0
- package/docs/models.md +35 -0
- package/docs/packages.md +4 -0
- package/docs/providers.md +6 -0
- package/docs/rpc.md +5 -3
- package/docs/sdk.md +26 -16
- package/docs/security.md +4 -0
- package/docs/session-format.md +18 -11
- package/docs/settings.md +26 -2
- package/docs/themes.md +27 -5
- package/docs/tui.md +20 -0
- package/docs/usage.md +61 -3
- package/docs/virtual-models.md +114 -0
- package/docs/windows.md +2 -0
- package/examples/README.md +1 -1
- package/examples/extensions/README.md +2 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +4 -4
- package/examples/extensions/debug-provider.ts +90 -0
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/jev-router.ts +113 -0
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/rpc-client.ts +1 -1
- package/examples/rpc-extension-ui.ts +1 -1
- package/examples/sdk/14-codemode-mcp.ts +61 -0
- package/examples/sdk/README.md +1 -0
- package/npm-shrinkwrap.json +409 -423
- package/package.json +13 -10
- package/dist/bundle/chunks/anthropic-messages-XWFTZP2N.js +0 -6
- package/dist/bundle/chunks/azure-openai-responses-HS35BQV6.js +0 -2
- package/dist/bundle/chunks/chunk-2IO5GDBS.js +0 -11
- package/dist/bundle/chunks/chunk-APQ4ACY3.js +0 -2
- package/dist/bundle/chunks/chunk-EDBLK2JQ.js +0 -2
- package/dist/bundle/chunks/chunk-NUHFSC37.js +0 -25
- package/dist/bundle/chunks/google-generative-ai-NOVAJBFC.js +0 -2
- package/dist/bundle/chunks/google-vertex-4VHCZJV5.js +0 -2
- package/dist/bundle/chunks/mistral-conversations-WC6A2WCJ.js +0 -5
- package/dist/bundle/chunks/openai-codex-responses-XCDG75W2.js +0 -10
- package/dist/bundle/chunks/openai-completions-SHS3CAEL.js +0 -7
- package/dist/bundle/chunks/openai-responses-UT6XFKC7.js +0 -2
- package/dist/bundle/chunks/virtual-modules-W3OGMIX7.js +0 -2
- package/dist/core/background/history.d.ts +0 -4
- package/dist/core/background/history.d.ts.map +0 -1
- package/dist/core/background/history.js.map +0 -1
- package/dist/core/background/output.d.ts.map +0 -1
- package/dist/core/background/output.js.map +0 -1
- package/dist/core/background/presentation.d.ts +0 -9
- package/dist/core/background/presentation.d.ts.map +0 -1
- package/dist/core/background/presentation.js.map +0 -1
- package/dist/core/background/service.d.ts.map +0 -1
- package/dist/core/background/service.js.map +0 -1
- package/dist/core/background/session.d.ts +0 -63
- package/dist/core/background/session.d.ts.map +0 -1
- package/dist/core/background/session.js +0 -222
- package/dist/core/background/session.js.map +0 -1
- package/dist/core/background/types.d.ts.map +0 -1
- package/dist/core/background/types.js.map +0 -1
- package/dist/core/model-stream-options.d.ts +0 -6
- package/dist/core/model-stream-options.d.ts.map +0 -1
- package/dist/core/model-stream-options.js +0 -20
- package/dist/core/model-stream-options.js.map +0 -1
- package/dist/extensions/background/actions.d.ts +0 -11
- package/dist/extensions/background/actions.d.ts.map +0 -1
- package/dist/extensions/background/actions.js.map +0 -1
- package/dist/extensions/background/completion-render.d.ts +0 -8
- package/dist/extensions/background/completion-render.d.ts.map +0 -1
- package/dist/extensions/background/completion-render.js.map +0 -1
- package/dist/extensions/background/constants.d.ts +0 -22
- package/dist/extensions/background/constants.d.ts.map +0 -1
- package/dist/extensions/background/constants.js.map +0 -1
- package/dist/extensions/background/index.d.ts +0 -7
- package/dist/extensions/background/index.d.ts.map +0 -1
- package/dist/extensions/background/index.js +0 -109
- package/dist/extensions/background/index.js.map +0 -1
- package/dist/extensions/background/keybindings.d.ts +0 -10
- package/dist/extensions/background/keybindings.d.ts.map +0 -1
- package/dist/extensions/background/keybindings.js +0 -14
- package/dist/extensions/background/keybindings.js.map +0 -1
- package/dist/extensions/background/manager.d.ts +0 -80
- package/dist/extensions/background/manager.d.ts.map +0 -1
- package/dist/extensions/background/manager.js +0 -673
- package/dist/extensions/background/manager.js.map +0 -1
- package/dist/extensions/background/render.d.ts.map +0 -1
- package/dist/extensions/background/render.js.map +0 -1
- package/dist/extensions/background/schema.d.ts.map +0 -1
- package/dist/extensions/background/schema.js.map +0 -1
- package/dist/extensions/background/task-view.d.ts.map +0 -1
- package/dist/extensions/background/task-view.js.map +0 -1
- package/dist/extensions/background/text.d.ts.map +0 -1
- package/dist/extensions/background/text.js.map +0 -1
- package/dist/extensions/background/types.d.ts.map +0 -1
- package/dist/extensions/background/types.js.map +0 -1
- package/dist/extensions/subagent/activity.d.ts +0 -34
- package/dist/extensions/subagent/activity.d.ts.map +0 -1
- package/dist/extensions/subagent/activity.js +0 -192
- package/dist/extensions/subagent/activity.js.map +0 -1
- package/dist/extensions/subagent/agents-command.d.ts +0 -4
- package/dist/extensions/subagent/agents-command.d.ts.map +0 -1
- package/dist/extensions/subagent/agents-command.js +0 -230
- package/dist/extensions/subagent/agents-command.js.map +0 -1
- package/dist/extensions/subagent/agents.d.ts +0 -6
- package/dist/extensions/subagent/agents.d.ts.map +0 -1
- package/dist/extensions/subagent/agents.js +0 -53
- package/dist/extensions/subagent/agents.js.map +0 -1
- package/dist/extensions/subagent/budget.d.ts +0 -15
- package/dist/extensions/subagent/budget.d.ts.map +0 -1
- package/dist/extensions/subagent/budget.js +0 -123
- package/dist/extensions/subagent/budget.js.map +0 -1
- package/dist/extensions/subagent/cancellation.d.ts +0 -29
- package/dist/extensions/subagent/cancellation.d.ts.map +0 -1
- package/dist/extensions/subagent/cancellation.js +0 -91
- package/dist/extensions/subagent/cancellation.js.map +0 -1
- package/dist/extensions/subagent/constants.d.ts +0 -25
- package/dist/extensions/subagent/constants.d.ts.map +0 -1
- package/dist/extensions/subagent/constants.js +0 -50
- package/dist/extensions/subagent/constants.js.map +0 -1
- package/dist/extensions/subagent/index.d.ts +0 -3
- package/dist/extensions/subagent/index.d.ts.map +0 -1
- package/dist/extensions/subagent/index.js +0 -151
- package/dist/extensions/subagent/index.js.map +0 -1
- package/dist/extensions/subagent/model-selection.d.ts +0 -16
- package/dist/extensions/subagent/model-selection.d.ts.map +0 -1
- package/dist/extensions/subagent/model-selection.js +0 -51
- package/dist/extensions/subagent/model-selection.js.map +0 -1
- package/dist/extensions/subagent/render.d.ts +0 -24
- package/dist/extensions/subagent/render.d.ts.map +0 -1
- package/dist/extensions/subagent/render.js +0 -336
- package/dist/extensions/subagent/render.js.map +0 -1
- package/dist/extensions/subagent/resolve.d.ts +0 -31
- package/dist/extensions/subagent/resolve.d.ts.map +0 -1
- package/dist/extensions/subagent/resolve.js +0 -111
- package/dist/extensions/subagent/resolve.js.map +0 -1
- package/dist/extensions/subagent/runner.d.ts +0 -35
- package/dist/extensions/subagent/runner.d.ts.map +0 -1
- package/dist/extensions/subagent/runner.js +0 -255
- package/dist/extensions/subagent/runner.js.map +0 -1
- package/dist/extensions/subagent/schema.d.ts +0 -28
- package/dist/extensions/subagent/schema.d.ts.map +0 -1
- package/dist/extensions/subagent/schema.js +0 -58
- package/dist/extensions/subagent/schema.js.map +0 -1
- package/dist/extensions/subagent/sdk-runner.d.ts +0 -33
- package/dist/extensions/subagent/sdk-runner.d.ts.map +0 -1
- package/dist/extensions/subagent/sdk-runner.js +0 -331
- package/dist/extensions/subagent/sdk-runner.js.map +0 -1
- package/dist/extensions/subagent/settings.d.ts +0 -8
- package/dist/extensions/subagent/settings.d.ts.map +0 -1
- package/dist/extensions/subagent/settings.js +0 -206
- package/dist/extensions/subagent/settings.js.map +0 -1
- package/dist/extensions/subagent/state.d.ts +0 -102
- package/dist/extensions/subagent/state.d.ts.map +0 -1
- package/dist/extensions/subagent/state.js +0 -383
- package/dist/extensions/subagent/state.js.map +0 -1
- package/dist/extensions/subagent/text.d.ts +0 -6
- package/dist/extensions/subagent/text.d.ts.map +0 -1
- package/dist/extensions/subagent/text.js +0 -66
- package/dist/extensions/subagent/text.js.map +0 -1
- package/dist/extensions/subagent/types.d.ts +0 -91
- package/dist/extensions/subagent/types.d.ts.map +0 -1
- package/dist/extensions/subagent/types.js +0 -2
- package/dist/extensions/subagent/types.js.map +0 -1
- package/dist/extensions/subagent/ui/agents-dialog.d.ts +0 -4
- package/dist/extensions/subagent/ui/agents-dialog.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/agents-dialog.js +0 -84
- package/dist/extensions/subagent/ui/agents-dialog.js.map +0 -1
- package/dist/extensions/subagent/ui/choice-menu.d.ts +0 -39
- package/dist/extensions/subagent/ui/choice-menu.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/choice-menu.js +0 -93
- package/dist/extensions/subagent/ui/choice-menu.js.map +0 -1
- package/dist/extensions/subagent/ui/choices.d.ts +0 -36
- package/dist/extensions/subagent/ui/choices.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/choices.js +0 -54
- package/dist/extensions/subagent/ui/choices.js.map +0 -1
- package/dist/extensions/subagent/ui/model-list.d.ts +0 -66
- package/dist/extensions/subagent/ui/model-list.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/model-list.js +0 -235
- package/dist/extensions/subagent/ui/model-list.js.map +0 -1
- package/dist/extensions/subagent/ui/model-picker.d.ts +0 -47
- package/dist/extensions/subagent/ui/model-picker.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/model-picker.js +0 -143
- package/dist/extensions/subagent/ui/model-picker.js.map +0 -1
- package/dist/extensions/subagent/ui/profile-settings-menu.d.ts +0 -41
- package/dist/extensions/subagent/ui/profile-settings-menu.d.ts.map +0 -1
- package/dist/extensions/subagent/ui/profile-settings-menu.js +0 -98
- package/dist/extensions/subagent/ui/profile-settings-menu.js.map +0 -1
- package/dist/modes/interactive/components/tool-chrome.d.ts +0 -28
- package/dist/modes/interactive/components/tool-chrome.d.ts.map +0 -1
- package/dist/modes/interactive/components/tool-chrome.js +0 -84
- package/dist/modes/interactive/components/tool-chrome.js.map +0 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
- package/dist/modes/interactive/components/tool-execution.js.map +0 -1
- package/dist/modes/interactive/components/tool-group.d.ts +0 -17
- package/dist/modes/interactive/components/tool-group.d.ts.map +0 -1
- package/dist/modes/interactive/components/tool-group.js +0 -78
- package/dist/modes/interactive/components/tool-group.js.map +0 -1
- package/dist/modes/interactive/tool-chat.d.ts +0 -21
- package/dist/modes/interactive/tool-chat.d.ts.map +0 -1
- package/dist/modes/interactive/tool-chat.js +0 -58
- package/dist/modes/interactive/tool-chat.js.map +0 -1
- package/docs/bundled/extensions/background.md +0 -132
- package/docs/bundled/extensions/subagent.md +0 -148
- /package/dist/{extensions/background → core/tools/tasks}/types.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/core/compaction/utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared utilities for compaction and branch summarization.\n */\n\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport { contentText, type Message } from \"@earendil-works/pi-ai\";\n\n// ============================================================================\n// File Operation Tracking\n// ============================================================================\n\nexport interface FileOperations {\n\tread: Set<string>;\n\twritten: Set<string>;\n\tedited: Set<string>;\n}\n\nexport function createFileOps(): FileOperations {\n\treturn {\n\t\tread: new Set(),\n\t\twritten: new Set(),\n\t\tedited: new Set(),\n\t};\n}\n\n/**\n * Extract file operations from tool calls in an assistant message.\n */\nexport function extractFileOpsFromMessage(message: AgentMessage, fileOps: FileOperations): void {\n\tif (message.role !== \"assistant\") return;\n\tif (!(\"content\" in message) || !Array.isArray(message.content)) return;\n\n\tfor (const block of message.content) {\n\t\tif (typeof block !== \"object\" || block === null) continue;\n\t\tif (!(\"type\" in block) || block.type !== \"toolCall\") continue;\n\t\tif (!(\"arguments\" in block) || !(\"name\" in block)) continue;\n\n\t\tconst args = block.arguments as Record<string, unknown> | undefined;\n\t\tif (!args) continue;\n\n\t\tconst path = typeof args.path === \"string\" ? args.path : undefined;\n\t\tif (!path) continue;\n\n\t\tswitch (block.name) {\n\t\t\tcase \"read\":\n\t\t\t\tfileOps.read.add(path);\n\t\t\t\tbreak;\n\t\t\tcase \"write\":\n\t\t\t\tfileOps.written.add(path);\n\t\t\t\tbreak;\n\t\t\tcase \"edit\":\n\t\t\t\tfileOps.edited.add(path);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\n/**\n * Compute final file lists from file operations.\n * Returns readFiles (files only read, not modified) and modifiedFiles.\n */\nexport function computeFileLists(fileOps: FileOperations): { readFiles: string[]; modifiedFiles: string[] } {\n\tconst modified = new Set([...fileOps.edited, ...fileOps.written]);\n\tconst readOnly = [...fileOps.read].filter((f) => !modified.has(f)).sort();\n\tconst modifiedFiles = [...modified].sort();\n\treturn { readFiles: readOnly, modifiedFiles };\n}\n\n/**\n * Format file operations as XML tags for summary.\n */\nexport function formatFileOperations(readFiles: string[], modifiedFiles: string[]): string {\n\tconst sections: string[] = [];\n\tif (readFiles.length > 0) {\n\t\tsections.push(`<read-files>\\n${readFiles.join(\"\\n\")}\\n</read-files>`);\n\t}\n\tif (modifiedFiles.length > 0) {\n\t\tsections.push(`<modified-files>\\n${modifiedFiles.join(\"\\n\")}\\n</modified-files>`);\n\t}\n\tif (sections.length === 0) return \"\";\n\treturn `\\n\\n${sections.join(\"\\n\\n\")}`;\n}\n\n// ============================================================================\n// Message Serialization\n// ============================================================================\n\n/** Maximum characters for a tool result in serialized summaries. */\nconst TOOL_RESULT_MAX_CHARS = 2000;\n\n/**\n * Truncate text to a maximum character length for summarization.\n * Keeps the beginning and appends a truncation marker.\n */\nfunction truncateForSummary(text: string, maxChars: number): string {\n\tif (text.length <= maxChars) return text;\n\tconst truncatedChars = text.length - maxChars;\n\treturn `${text.slice(0, maxChars)}\\n\\n[... ${truncatedChars} more characters truncated]`;\n}\n\n/**\n * Serialize LLM messages to text for summarization.\n * This prevents the model from treating it as a conversation to continue.\n * Call convertToLlm() first to handle custom message types.\n *\n * Tool results are truncated to keep the summarization request within\n * reasonable token budgets. Full content is not needed for summarization.\n */\nexport function serializeConversation(messages: Message[]): string {\n\tconst parts: string[] = [];\n\n\tfor (const msg of messages) {\n\t\tif (msg.role === \"user\") {\n\t\t\tconst content = contentText(msg.content, \"\");\n\t\t\tif (content) parts.push(`[User]: ${content}`);\n\t\t} else if (msg.role === \"assistant\") {\n\t\t\tconst thinkingParts: string[] = [];\n\t\t\tconst toolCalls: string[] = [];\n\n\t\t\tfor (const block of msg.content) {\n\t\t\t\tif (block.type === \"thinking\") {\n\t\t\t\t\tthinkingParts.push(block.thinking);\n\t\t\t\t} else if (block.type === \"toolCall\") {\n\t\t\t\t\tconst args = block.arguments as Record<string, unknown>;\n\t\t\t\t\tconst argsStr = Object.entries(args)\n\t\t\t\t\t\t.map(([k, v]) => `${k}=${JSON.stringify(v)}`)\n\t\t\t\t\t\t.join(\", \");\n\t\t\t\t\ttoolCalls.push(`${block.name}(${argsStr})`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (thinkingParts.length > 0) {\n\t\t\t\tparts.push(`[Assistant thinking]: ${thinkingParts.join(\"\\n\")}`);\n\t\t\t}\n\t\t\tif (msg.content.some((block) => block.type === \"text\")) {\n\t\t\t\tparts.push(`[Assistant]: ${contentText(msg.content)}`);\n\t\t\t}\n\t\t\tif (toolCalls.length > 0) {\n\t\t\t\tparts.push(`[Assistant tool calls]: ${toolCalls.join(\"; \")}`);\n\t\t\t}\n\t\t} else if (msg.role === \"toolResult\") {\n\t\t\tconst content = contentText(msg.content, \"\");\n\t\t\tif (content) {\n\t\t\t\tparts.push(`[Tool result]: ${truncateForSummary(content, TOOL_RESULT_MAX_CHARS)}`);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn parts.join(\"\\n\\n\");\n}\n\n// ============================================================================\n// Summarization System Prompt\n// ============================================================================\n\nexport const SUMMARIZATION_SYSTEM_PROMPT = `You are a context summarization assistant. Your task is to read a conversation between a user and an AI assistant, then produce a structured summary following the exact format specified.\n\nDo NOT continue the conversation. Do NOT respond to any questions in the conversation. ONLY output the structured summary.`;\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/core/compaction/utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared utilities for compaction and branch summarization.\n */\n\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport { contentText, type Message } from \"@earendil-works/pi-ai\";\n\n// ============================================================================\n// File Operation Tracking\n// ============================================================================\n\nexport interface FileOperations {\n\tread: Set<string>;\n\twritten: Set<string>;\n\tedited: Set<string>;\n}\n\nexport function createFileOps(): FileOperations {\n\treturn {\n\t\tread: new Set(),\n\t\twritten: new Set(),\n\t\tedited: new Set(),\n\t};\n}\n\n/**\n * Extract file operations from tool calls in an assistant message, or from the nested calls\n * recorded on a tool result.\n */\nexport function extractFileOpsFromMessage(message: AgentMessage, fileOps: FileOperations): void {\n\tif (message.role === \"toolResult\") {\n\t\t// Calls made from codemode scripts are recorded on the script's result.\n\t\tfor (const call of message.nestedCalls?.calls ?? []) addFileOp(call.name, call.arguments, fileOps);\n\t\treturn;\n\t}\n\tif (message.role !== \"assistant\") return;\n\tif (!(\"content\" in message) || !Array.isArray(message.content)) return;\n\n\tfor (const block of message.content) {\n\t\tif (typeof block !== \"object\" || block === null) continue;\n\t\tif (!(\"type\" in block) || block.type !== \"toolCall\") continue;\n\t\tif (!(\"arguments\" in block) || !(\"name\" in block)) continue;\n\t\taddFileOp(block.name, block.arguments as Record<string, unknown> | undefined, fileOps);\n\t}\n}\n\nfunction addFileOp(toolName: string, args: Record<string, unknown> | undefined, fileOps: FileOperations): void {\n\tconst path = typeof args?.path === \"string\" ? args.path : undefined;\n\tif (!path) return;\n\tswitch (toolName) {\n\t\tcase \"read\":\n\t\t\tfileOps.read.add(path);\n\t\t\tbreak;\n\t\tcase \"write\":\n\t\t\tfileOps.written.add(path);\n\t\t\tbreak;\n\t\tcase \"edit\":\n\t\t\tfileOps.edited.add(path);\n\t\t\tbreak;\n\t}\n}\n\n/**\n * Compute final file lists from file operations.\n * Returns readFiles (files only read, not modified) and modifiedFiles.\n */\nexport function computeFileLists(fileOps: FileOperations): { readFiles: string[]; modifiedFiles: string[] } {\n\tconst modified = new Set([...fileOps.edited, ...fileOps.written]);\n\tconst readOnly = [...fileOps.read].filter((f) => !modified.has(f)).sort();\n\tconst modifiedFiles = [...modified].sort();\n\treturn { readFiles: readOnly, modifiedFiles };\n}\n\n/**\n * Format file operations as XML tags for summary.\n */\nexport function formatFileOperations(readFiles: string[], modifiedFiles: string[]): string {\n\tconst sections: string[] = [];\n\tif (readFiles.length > 0) {\n\t\tsections.push(`<read-files>\\n${readFiles.join(\"\\n\")}\\n</read-files>`);\n\t}\n\tif (modifiedFiles.length > 0) {\n\t\tsections.push(`<modified-files>\\n${modifiedFiles.join(\"\\n\")}\\n</modified-files>`);\n\t}\n\tif (sections.length === 0) return \"\";\n\treturn `\\n\\n${sections.join(\"\\n\\n\")}`;\n}\n\n// ============================================================================\n// Message Serialization\n// ============================================================================\n\n/** Maximum characters for a tool result in serialized summaries. */\nconst TOOL_RESULT_MAX_CHARS = 2000;\n\n/**\n * Truncate text to a maximum character length for summarization.\n * Keeps the beginning and appends a truncation marker.\n */\nfunction truncateForSummary(text: string, maxChars: number): string {\n\tif (text.length <= maxChars) return text;\n\tconst truncatedChars = text.length - maxChars;\n\treturn `${text.slice(0, maxChars)}\\n\\n[... ${truncatedChars} more characters truncated]`;\n}\n\n/**\n * Serialize LLM messages to text for summarization.\n * This prevents the model from treating it as a conversation to continue.\n * Call convertToLlm() first to handle custom message types.\n *\n * Tool results are truncated to keep the summarization request within\n * reasonable token budgets. Full content is not needed for summarization.\n */\nexport function serializeConversation(messages: Message[]): string {\n\tconst parts: string[] = [];\n\n\tfor (const msg of messages) {\n\t\tif (msg.role === \"user\") {\n\t\t\tconst content = contentText(msg.content, \"\");\n\t\t\tif (content) parts.push(`[User]: ${content}`);\n\t\t} else if (msg.role === \"assistant\") {\n\t\t\tconst thinkingParts: string[] = [];\n\t\t\tconst toolCalls: string[] = [];\n\n\t\t\tfor (const block of msg.content) {\n\t\t\t\tif (block.type === \"thinking\") {\n\t\t\t\t\tthinkingParts.push(block.thinking);\n\t\t\t\t} else if (block.type === \"toolCall\") {\n\t\t\t\t\tconst args = block.arguments as Record<string, unknown>;\n\t\t\t\t\tconst argsStr = Object.entries(args)\n\t\t\t\t\t\t.map(([k, v]) => `${k}=${JSON.stringify(v)}`)\n\t\t\t\t\t\t.join(\", \");\n\t\t\t\t\ttoolCalls.push(`${block.name}(${argsStr})`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (thinkingParts.length > 0) {\n\t\t\t\tparts.push(`[Assistant thinking]: ${thinkingParts.join(\"\\n\")}`);\n\t\t\t}\n\t\t\tif (msg.content.some((block) => block.type === \"text\")) {\n\t\t\t\tparts.push(`[Assistant]: ${contentText(msg.content)}`);\n\t\t\t}\n\t\t\tif (toolCalls.length > 0) {\n\t\t\t\tparts.push(`[Assistant tool calls]: ${toolCalls.join(\"; \")}`);\n\t\t\t}\n\t\t} else if (msg.role === \"toolResult\") {\n\t\t\tconst content = contentText(msg.content, \"\");\n\t\t\tif (content) {\n\t\t\t\tparts.push(`[Tool result]: ${truncateForSummary(content, TOOL_RESULT_MAX_CHARS)}`);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn parts.join(\"\\n\\n\");\n}\n\n// ============================================================================\n// Summarization System Prompt\n// ============================================================================\n\nexport const SUMMARIZATION_SYSTEM_PROMPT = `You are a context summarization assistant. Your task is to read a conversation between a user and an AI assistant, then produce a structured summary following the exact format specified.\n\nDo NOT continue the conversation. Do NOT respond to any questions in the conversation. ONLY output the structured summary.`;\n"]}
|
|
@@ -20,27 +20,40 @@ export interface ContextSnapshot {
|
|
|
20
20
|
/** Includes provider hooks and header transforms, but never the main run's abort signal. */
|
|
21
21
|
streamOptions: ModelsSimpleStreamOptions;
|
|
22
22
|
}
|
|
23
|
+
/** What a session needs from the SDK to describe the request it would send next. */
|
|
24
|
+
export interface ContextSnapshotSource {
|
|
25
|
+
/** Prepare `messages` exactly as the next request would, reusing the recorded main prefix. */
|
|
26
|
+
prepareMessages(messages: AgentMessage[]): Promise<Message[]>;
|
|
27
|
+
/** The stream options the SDK would send for `model`, including provider hooks and header transforms. */
|
|
28
|
+
resolveStreamOptions(model: Model<Api>, options: ModelsSimpleStreamOptions): ModelsSimpleStreamOptions;
|
|
29
|
+
}
|
|
23
30
|
/**
|
|
24
31
|
* Records the actual pre-provider message prefix, after context hooks, the session's request
|
|
25
32
|
* projections, and image policy. A snapshot can reuse it and convert only newly settled
|
|
26
33
|
* messages. In particular, a time-dependent context hook is not rerun over an already
|
|
27
34
|
* prepared cache prefix.
|
|
35
|
+
*
|
|
36
|
+
* The SDK's own `convertToLlm` and request-option builder stay where upstream defines them;
|
|
37
|
+
* this class wraps the former and borrows the latter, so it never keeps a second copy of
|
|
38
|
+
* either.
|
|
28
39
|
*/
|
|
29
|
-
export declare class ContextSnapshotCapture {
|
|
40
|
+
export declare class ContextSnapshotCapture implements ContextSnapshotSource {
|
|
30
41
|
private readonly settings;
|
|
31
42
|
private readonly runnerRef;
|
|
43
|
+
private readonly buildRequestOptions;
|
|
32
44
|
private readonly pending;
|
|
33
45
|
private prepared;
|
|
46
|
+
private agent;
|
|
34
47
|
constructor(settings: SettingsManager, runnerRef: {
|
|
35
48
|
current?: ExtensionRunner;
|
|
36
|
-
});
|
|
49
|
+
}, buildRequestOptions: ContextSnapshotSource["resolveStreamOptions"]);
|
|
37
50
|
/**
|
|
38
51
|
* Record the source of every request context. Install after all other `transformContext`
|
|
39
52
|
* wrappers so the recorded prefix is exactly the array the request converts; a wrapper
|
|
40
53
|
* installed later would return a different array and the prefix would never be reused.
|
|
41
54
|
*/
|
|
42
55
|
install(agent: Agent): void;
|
|
43
|
-
|
|
44
|
-
|
|
56
|
+
resolveStreamOptions(model: Model<Api>, options: ModelsSimpleStreamOptions): ModelsSimpleStreamOptions;
|
|
57
|
+
prepareMessages(messages: AgentMessage[]): Promise<Message[]>;
|
|
45
58
|
}
|
|
46
59
|
//# sourceMappingURL=context-snapshot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-snapshot.d.ts","sourceRoot":"","sources":["../../src/core/context-snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACxF,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,yBAAyB,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"context-snapshot.d.ts","sourceRoot":"","sources":["../../src/core/context-snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACxF,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,yBAAyB,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,oGAAoG;AACpG,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,aAAa,EAAE,aAAa,CAAC;IAC7B;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,4FAA4F;IAC5F,aAAa,EAAE,yBAAyB,CAAC;CACzC;AAED,oFAAoF;AACpF,MAAM,WAAW,qBAAqB;IACrC,8FAA8F;IAC9F,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,yGAAyG;IACzG,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,yBAAyB,GAAG,yBAAyB,CAAC;CACvG;AAOD;;;;;;;;;GASG;AACH,qBAAa,sBAAuB,YAAW,qBAAqB;IACnE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;IAC1D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAgD;IACpF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiD;IACzE,OAAO,CAAC,QAAQ,CAAoF;IACpG,OAAO,CAAC,KAAK,CAAoB;gBAGhC,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE;QAAE,OAAO,CAAC,EAAE,eAAe,CAAA;KAAE,EACxC,mBAAmB,EAAE,qBAAqB,CAAC,sBAAsB,CAAC;IAOnE;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IA6B3B,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,yBAAyB,GAAG,yBAAyB;IAIhG,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAsBnE"}
|
|
@@ -1,63 +1,20 @@
|
|
|
1
1
|
import { isDeepStrictEqual } from "node:util";
|
|
2
|
-
import { convertToLlm } from "./messages.js";
|
|
3
|
-
function convertWithImagePolicy(messages, blockImages) {
|
|
4
|
-
const converted = convertToLlm(messages);
|
|
5
|
-
if (!blockImages)
|
|
6
|
-
return converted;
|
|
7
|
-
return converted.map((message) => {
|
|
8
|
-
if (message.role !== "user" && message.role !== "toolResult")
|
|
9
|
-
return message;
|
|
10
|
-
if (!Array.isArray(message.content) || !message.content.some((part) => part.type === "image"))
|
|
11
|
-
return message;
|
|
12
|
-
const content = message.content
|
|
13
|
-
.map((part) => (part.type === "image" ? { type: "text", text: "Image reading is disabled." } : part))
|
|
14
|
-
.filter((part, i, all) => !(part.type === "text" &&
|
|
15
|
-
part.text === "Image reading is disabled." &&
|
|
16
|
-
i > 0 &&
|
|
17
|
-
all[i - 1].type === "text" &&
|
|
18
|
-
all[i - 1].text === part.text));
|
|
19
|
-
return { ...message, content };
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
2
|
/**
|
|
23
3
|
* Records the actual pre-provider message prefix, after context hooks, the session's request
|
|
24
4
|
* projections, and image policy. A snapshot can reuse it and convert only newly settled
|
|
25
5
|
* messages. In particular, a time-dependent context hook is not rerun over an already
|
|
26
6
|
* prepared cache prefix.
|
|
7
|
+
*
|
|
8
|
+
* The SDK's own `convertToLlm` and request-option builder stay where upstream defines them;
|
|
9
|
+
* this class wraps the former and borrows the latter, so it never keeps a second copy of
|
|
10
|
+
* either.
|
|
27
11
|
*/
|
|
28
12
|
export class ContextSnapshotCapture {
|
|
29
|
-
constructor(settings, runnerRef) {
|
|
13
|
+
constructor(settings, runnerRef, buildRequestOptions) {
|
|
30
14
|
this.pending = new WeakMap();
|
|
31
|
-
this.convertToLlm = (messages) => {
|
|
32
|
-
const blockImages = this.settings.getBlockImages();
|
|
33
|
-
const converted = convertWithImagePolicy(messages, blockImages);
|
|
34
|
-
const source = this.pending.get(messages);
|
|
35
|
-
if (source) {
|
|
36
|
-
this.pending.delete(messages);
|
|
37
|
-
this.prepared = { source, messages: structuredClone(converted), blockImages };
|
|
38
|
-
}
|
|
39
|
-
return converted;
|
|
40
|
-
};
|
|
41
|
-
this.capture = async (messages) => {
|
|
42
|
-
const runner = this.runnerRef.current;
|
|
43
|
-
const blockImages = this.settings.getBlockImages();
|
|
44
|
-
const prepared = this.prepared;
|
|
45
|
-
if (prepared &&
|
|
46
|
-
prepared.source.runner === runner &&
|
|
47
|
-
prepared.blockImages === blockImages &&
|
|
48
|
-
isDeepStrictEqual(messages.slice(0, prepared.source.messages.length), prepared.source.messages)) {
|
|
49
|
-
return [
|
|
50
|
-
...structuredClone(prepared.messages),
|
|
51
|
-
...convertWithImagePolicy(messages.slice(prepared.source.messages.length), blockImages),
|
|
52
|
-
];
|
|
53
|
-
}
|
|
54
|
-
// No request yet, or the branch/context policy changed. Prepare this detached
|
|
55
|
-
// snapshot once; it never replaces the prefix recorded from the main request.
|
|
56
|
-
const transformed = runner ? await runner.emitContext(messages) : messages;
|
|
57
|
-
return structuredClone(convertWithImagePolicy(transformed, blockImages));
|
|
58
|
-
};
|
|
59
15
|
this.settings = settings;
|
|
60
16
|
this.runnerRef = runnerRef;
|
|
17
|
+
this.buildRequestOptions = buildRequestOptions;
|
|
61
18
|
}
|
|
62
19
|
/**
|
|
63
20
|
* Record the source of every request context. Install after all other `transformContext`
|
|
@@ -65,6 +22,7 @@ export class ContextSnapshotCapture {
|
|
|
65
22
|
* installed later would return a different array and the prefix would never be reused.
|
|
66
23
|
*/
|
|
67
24
|
install(agent) {
|
|
25
|
+
this.agent = agent;
|
|
68
26
|
const transform = agent.transformContext;
|
|
69
27
|
agent.transformContext = async (messages, signal) => {
|
|
70
28
|
const runner = this.runnerRef.current;
|
|
@@ -73,7 +31,47 @@ export class ContextSnapshotCapture {
|
|
|
73
31
|
this.pending.set(transformed, source);
|
|
74
32
|
return transformed;
|
|
75
33
|
};
|
|
76
|
-
|
|
34
|
+
const convert = agent.convertToLlm;
|
|
35
|
+
const record = (messages, converted) => {
|
|
36
|
+
const source = this.pending.get(messages);
|
|
37
|
+
if (source) {
|
|
38
|
+
this.pending.delete(messages);
|
|
39
|
+
this.prepared = {
|
|
40
|
+
source,
|
|
41
|
+
messages: structuredClone(converted),
|
|
42
|
+
blockImages: this.settings.getBlockImages(),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return converted;
|
|
46
|
+
};
|
|
47
|
+
agent.convertToLlm = (messages) => {
|
|
48
|
+
const converted = convert(messages);
|
|
49
|
+
return Array.isArray(converted) ? record(messages, converted) : converted.then((all) => record(messages, all));
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
resolveStreamOptions(model, options) {
|
|
53
|
+
return this.buildRequestOptions(model, options);
|
|
54
|
+
}
|
|
55
|
+
async prepareMessages(messages) {
|
|
56
|
+
const agent = this.agent;
|
|
57
|
+
if (!agent)
|
|
58
|
+
throw new Error("Context snapshot capture is not installed");
|
|
59
|
+
const runner = this.runnerRef.current;
|
|
60
|
+
const blockImages = this.settings.getBlockImages();
|
|
61
|
+
const prepared = this.prepared;
|
|
62
|
+
if (prepared &&
|
|
63
|
+
prepared.source.runner === runner &&
|
|
64
|
+
prepared.blockImages === blockImages &&
|
|
65
|
+
isDeepStrictEqual(messages.slice(0, prepared.source.messages.length), prepared.source.messages)) {
|
|
66
|
+
return [
|
|
67
|
+
...structuredClone(prepared.messages),
|
|
68
|
+
...(await agent.convertToLlm(messages.slice(prepared.source.messages.length))),
|
|
69
|
+
];
|
|
70
|
+
}
|
|
71
|
+
// No request yet, or the branch/context policy changed. Prepare this detached
|
|
72
|
+
// snapshot once; it never replaces the prefix recorded from the main request.
|
|
73
|
+
const transformed = runner ? await runner.emitContext(messages) : messages;
|
|
74
|
+
return structuredClone(await agent.convertToLlm(transformed));
|
|
77
75
|
}
|
|
78
76
|
}
|
|
79
77
|
//# sourceMappingURL=context-snapshot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-snapshot.js","sourceRoot":"","sources":["../../src/core/context-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"context-snapshot.js","sourceRoot":"","sources":["../../src/core/context-snapshot.ts"],"names":[],"mappings":"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","sourcesContent":["import { isDeepStrictEqual } from \"node:util\";\nimport type { Agent, AgentMessage, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { Api, Message, Model, ModelsSimpleStreamOptions, Tool } from \"@earendil-works/pi-ai\";\nimport type { ExtensionRunner } from \"./extensions/runner.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\n\n/** Detached model input and request configuration. Contains no tool executors or session writer. */\nexport interface ContextSnapshot {\n\tcapturedAt: number;\n\tsessionId: string;\n\tleafId: string | null;\n\tmodel: Model<Api>;\n\tthinkingLevel: ThinkingLevel;\n\t/**\n\t * The prompt replayed from the prepared transcript, which is the text the provider received.\n\t * Before the first request it is the session's current prompt, which a consumer's Agent\n\t * declares itself when `messages` carry no system message.\n\t */\n\tsystemPrompt: string;\n\tmessages: Message[];\n\ttools: Tool[];\n\t/** Includes provider hooks and header transforms, but never the main run's abort signal. */\n\tstreamOptions: ModelsSimpleStreamOptions;\n}\n\n/** What a session needs from the SDK to describe the request it would send next. */\nexport interface ContextSnapshotSource {\n\t/** Prepare `messages` exactly as the next request would, reusing the recorded main prefix. */\n\tprepareMessages(messages: AgentMessage[]): Promise<Message[]>;\n\t/** The stream options the SDK would send for `model`, including provider hooks and header transforms. */\n\tresolveStreamOptions(model: Model<Api>, options: ModelsSimpleStreamOptions): ModelsSimpleStreamOptions;\n}\n\ninterface PreparedSource {\n\tmessages: AgentMessage[];\n\trunner: ExtensionRunner | undefined;\n}\n\n/**\n * Records the actual pre-provider message prefix, after context hooks, the session's request\n * projections, and image policy. A snapshot can reuse it and convert only newly settled\n * messages. In particular, a time-dependent context hook is not rerun over an already\n * prepared cache prefix.\n *\n * The SDK's own `convertToLlm` and request-option builder stay where upstream defines them;\n * this class wraps the former and borrows the latter, so it never keeps a second copy of\n * either.\n */\nexport class ContextSnapshotCapture implements ContextSnapshotSource {\n\tprivate readonly settings: SettingsManager;\n\tprivate readonly runnerRef: { current?: ExtensionRunner };\n\tprivate readonly buildRequestOptions: ContextSnapshotSource[\"resolveStreamOptions\"];\n\tprivate readonly pending = new WeakMap<AgentMessage[], PreparedSource>();\n\tprivate prepared: { source: PreparedSource; messages: Message[]; blockImages: boolean } | undefined;\n\tprivate agent: Agent | undefined;\n\n\tconstructor(\n\t\tsettings: SettingsManager,\n\t\trunnerRef: { current?: ExtensionRunner },\n\t\tbuildRequestOptions: ContextSnapshotSource[\"resolveStreamOptions\"],\n\t) {\n\t\tthis.settings = settings;\n\t\tthis.runnerRef = runnerRef;\n\t\tthis.buildRequestOptions = buildRequestOptions;\n\t}\n\n\t/**\n\t * Record the source of every request context. Install after all other `transformContext`\n\t * wrappers so the recorded prefix is exactly the array the request converts; a wrapper\n\t * installed later would return a different array and the prefix would never be reused.\n\t */\n\tinstall(agent: Agent): void {\n\t\tthis.agent = agent;\n\t\tconst transform = agent.transformContext;\n\t\tagent.transformContext = async (messages, signal) => {\n\t\t\tconst runner = this.runnerRef.current;\n\t\t\tconst source = { messages: structuredClone(messages), runner };\n\t\t\tconst transformed = transform ? await transform(messages, signal) : messages;\n\t\t\tthis.pending.set(transformed, source);\n\t\t\treturn transformed;\n\t\t};\n\t\tconst convert = agent.convertToLlm;\n\t\tconst record = (messages: AgentMessage[], converted: Message[]): Message[] => {\n\t\t\tconst source = this.pending.get(messages);\n\t\t\tif (source) {\n\t\t\t\tthis.pending.delete(messages);\n\t\t\t\tthis.prepared = {\n\t\t\t\t\tsource,\n\t\t\t\t\tmessages: structuredClone(converted),\n\t\t\t\t\tblockImages: this.settings.getBlockImages(),\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn converted;\n\t\t};\n\t\tagent.convertToLlm = (messages) => {\n\t\t\tconst converted = convert(messages);\n\t\t\treturn Array.isArray(converted) ? record(messages, converted) : converted.then((all) => record(messages, all));\n\t\t};\n\t}\n\n\tresolveStreamOptions(model: Model<Api>, options: ModelsSimpleStreamOptions): ModelsSimpleStreamOptions {\n\t\treturn this.buildRequestOptions(model, options);\n\t}\n\n\tasync prepareMessages(messages: AgentMessage[]): Promise<Message[]> {\n\t\tconst agent = this.agent;\n\t\tif (!agent) throw new Error(\"Context snapshot capture is not installed\");\n\t\tconst runner = this.runnerRef.current;\n\t\tconst blockImages = this.settings.getBlockImages();\n\t\tconst prepared = this.prepared;\n\t\tif (\n\t\t\tprepared &&\n\t\t\tprepared.source.runner === runner &&\n\t\t\tprepared.blockImages === blockImages &&\n\t\t\tisDeepStrictEqual(messages.slice(0, prepared.source.messages.length), prepared.source.messages)\n\t\t) {\n\t\t\treturn [\n\t\t\t\t...structuredClone(prepared.messages),\n\t\t\t\t...(await agent.convertToLlm(messages.slice(prepared.source.messages.length))),\n\t\t\t];\n\t\t}\n\t\t// No request yet, or the branch/context policy changed. Prepare this detached\n\t\t// snapshot once; it never replaces the prefix recorded from the main request.\n\t\tconst transformed = runner ? await runner.emitContext(messages) : messages;\n\t\treturn structuredClone(await agent.convertToLlm(transformed));\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crash-log.d.ts","sourceRoot":"","sources":["../../src/core/crash-log.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"crash-log.d.ts","sourceRoot":"","sources":["../../src/core/crash-log.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGvD,MAAM,WAAW,WAAW;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,oBAAoB,GAAG,aAAa,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AASD,wBAAgB,YAAY,CAAC,IAAI,SAAiB,GAAG,WAAW,EAAE,CAejE;AAOD,KAAK,sBAAsB,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,YAAY,CAAC,CAAC;AAuBtF,iEAAiE;AACjE,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,UAAU,EAAE,SAAS,sBAAsB,EAAE,GAC3C,MAAM,EAAE,CA+CV;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAC1B,KAAK,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACvF,IAAI,SAAiB,GACnB,WAAW,GAAG,SAAS,CAiBzB;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,IAAI,SAAiB,EAAE,GAAG,SAAa,GAAG,WAAW,GAAG,SAAS,CAepG;AAED,wBAAgB,aAAa,CAAC,IAAI,SAAiB,GAAG,IAAI,CAMzD"}
|
package/dist/core/crash-log.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { getAgentDir, VERSION } from "../config.js";
|
|
4
|
+
import { isSyntheticPath } from "./source-info.js";
|
|
4
5
|
const MAX_CRASH_RECORDS = 5;
|
|
5
6
|
const MAX_AGE = 7 * 24 * 60 * 60 * 1000;
|
|
6
7
|
function crashLogPath(agentDir = getAgentDir()) {
|
|
@@ -29,7 +30,7 @@ function normalizeStackPath(value) {
|
|
|
29
30
|
}
|
|
30
31
|
function stackContainsPath(stack, targetPath, includeDescendants) {
|
|
31
32
|
const target = normalizeStackPath(targetPath);
|
|
32
|
-
if (!target || target
|
|
33
|
+
if (!target || isSyntheticPath(target))
|
|
33
34
|
return false;
|
|
34
35
|
const caseInsensitive = /^[a-z]:\//iu.test(target);
|
|
35
36
|
const haystack = caseInsensitive ? stack.toLowerCase() : stack;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crash-log.js","sourceRoot":"","sources":["../../src/core/crash-log.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { getAgentDir, VERSION } from \"../config.ts\";\nimport type { Extension } from \"./extensions/types.ts\";\n\nexport interface CrashRecord {\n\ttimestamp: string;\n\tversion: string;\n\tkind: \"uncaught_exception\" | \"fatal_error\";\n\tmessage: string;\n\tstack: string | null;\n\tsessionFile: string | null;\n\tcwd: string;\n\tnotified?: boolean;\n}\n\nconst MAX_CRASH_RECORDS = 5;\nconst MAX_AGE = 7 * 24 * 60 * 60 * 1000;\n\nfunction crashLogPath(agentDir = getAgentDir()): string {\n\treturn join(agentDir, \"crashes.json\");\n}\n\nexport function readCrashLog(path = crashLogPath()): CrashRecord[] {\n\ttry {\n\t\tconst records: unknown = JSON.parse(readFileSync(path, \"utf8\"));\n\t\treturn Array.isArray(records)\n\t\t\t? records.filter(\n\t\t\t\t\t(record): record is CrashRecord =>\n\t\t\t\t\t\ttypeof record === \"object\" &&\n\t\t\t\t\t\trecord !== null &&\n\t\t\t\t\t\ttypeof (record as CrashRecord).timestamp === \"string\" &&\n\t\t\t\t\t\ttypeof (record as CrashRecord).message === \"string\",\n\t\t\t\t)\n\t\t\t: [];\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nfunction writeCrashLog(records: readonly CrashRecord[], path: string): void {\n\tmkdirSync(dirname(path), { recursive: true });\n\twriteFileSync(path, `${JSON.stringify(records, null, 2)}\\n`);\n}\n\ntype ExtensionStackMetadata = Pick<Extension, \"path\" | \"resolvedPath\" | \"sourceInfo\">;\n\nfunction normalizeStackPath(value: string): string {\n\treturn value.replace(/\\\\/g, \"/\").replace(/\\/+$/u, \"\");\n}\n\nfunction stackContainsPath(stack: string, targetPath: string, includeDescendants: boolean): boolean {\n\tconst target = normalizeStackPath(targetPath);\n\tif (!target || target.startsWith(\"<\")) return false;\n\tconst caseInsensitive = /^[a-z]:\\//iu.test(target);\n\tconst haystack = caseInsensitive ? stack.toLowerCase() : stack;\n\tconst needle = caseInsensitive ? target.toLowerCase() : target;\n\tif (includeDescendants) return haystack.includes(`${needle}/`);\n\n\tlet index = haystack.indexOf(needle);\n\twhile (index !== -1) {\n\t\tconst next = haystack[index + needle.length];\n\t\tif (next === undefined || next === \":\" || next === \")\" || /\\s/u.test(next)) return true;\n\t\tindex = haystack.indexOf(needle, index + needle.length);\n\t}\n\treturn false;\n}\n\n/** Find loaded extensions with source files in a stack trace. */\nexport function findExtensionStackMatches(\n\tstack: string | undefined,\n\textensions: readonly ExtensionStackMetadata[],\n): string[] {\n\tif (!stack) return [];\n\tconst normalizedStack = stack\n\t\t.split(\"\\n\")\n\t\t.slice(1)\n\t\t.filter((line) => /^\\s+at\\s/u.test(line))\n\t\t.map((line) => {\n\t\t\ttry {\n\t\t\t\treturn decodeURI(line);\n\t\t\t} catch {\n\t\t\t\treturn line;\n\t\t\t}\n\t\t})\n\t\t.join(\"\\n\")\n\t\t.replace(/\\\\/g, \"/\");\n\tconst matches: string[] = [];\n\tconst seen = new Set<string>();\n\n\tfor (const extension of extensions) {\n\t\tconst resolvedPath = normalizeStackPath(extension.resolvedPath);\n\t\tconst singleFilePackage =\n\t\t\textension.sourceInfo.origin === \"package\" &&\n\t\t\t!/^(?:npm:|git:|https?:\\/\\/|ssh:\\/\\/)/u.test(extension.sourceInfo.source) &&\n\t\t\t/\\.[cm]?[jt]s$/u.test(extension.sourceInfo.source);\n\t\tconst packageRoot =\n\t\t\textension.sourceInfo.origin === \"package\" && !singleFilePackage && extension.sourceInfo.baseDir\n\t\t\t\t? extension.sourceInfo.baseDir\n\t\t\t\t: undefined;\n\t\tconst slashIndex = resolvedPath.lastIndexOf(\"/\");\n\t\tconst directoryEntry = /\\/index\\.[cm]?[jt]s$/u.test(resolvedPath);\n\t\tconst matched = packageRoot\n\t\t\t? stackContainsPath(normalizedStack, packageRoot, true)\n\t\t\t: directoryEntry && slashIndex !== -1\n\t\t\t\t? stackContainsPath(normalizedStack, resolvedPath.slice(0, slashIndex), true)\n\t\t\t\t: stackContainsPath(normalizedStack, resolvedPath, false);\n\t\tif (!matched) continue;\n\n\t\tconst label =\n\t\t\textension.sourceInfo.origin === \"package\" && extension.sourceInfo.source\n\t\t\t\t? extension.sourceInfo.source\n\t\t\t\t: extension.path;\n\t\tif (!seen.has(label)) {\n\t\t\tseen.add(label);\n\t\t\tmatches.push(label);\n\t\t}\n\t}\n\treturn matches;\n}\n\n/** Best-effort persistence for callers that are already crashing. */\nexport function recordCrash(\n\tcrash: { kind: CrashRecord[\"kind\"]; error: unknown; sessionFile?: string; cwd: string },\n\tpath = crashLogPath(),\n): CrashRecord | undefined {\n\ttry {\n\t\tconst { error } = crash;\n\t\tconst record: CrashRecord = {\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tversion: VERSION,\n\t\t\tkind: crash.kind,\n\t\t\tmessage: error instanceof Error ? error.message || error.name : String(error),\n\t\t\tstack: error instanceof Error && error.stack ? error.stack : null,\n\t\t\tsessionFile: crash.sessionFile ?? null,\n\t\t\tcwd: crash.cwd,\n\t\t};\n\t\twriteCrashLog([...readCrashLog(path), record].slice(-MAX_CRASH_RECORDS), path);\n\t\treturn record;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Return the newest recent crash, marking pending records as announced. */\nexport function takeUnnotifiedCrash(path = crashLogPath(), now = Date.now()): CrashRecord | undefined {\n\tconst records = readCrashLog(path);\n\tconst crash = [...records]\n\t\t.reverse()\n\t\t.find((record) => !record.notified && now - Date.parse(record.timestamp) <= MAX_AGE);\n\tif (!crash) return undefined;\n\ttry {\n\t\twriteCrashLog(\n\t\t\trecords.map((record) => (record.notified ? record : { ...record, notified: true })),\n\t\t\tpath,\n\t\t);\n\t} catch {\n\t\t// Showing the notice again is harmless.\n\t}\n\treturn crash;\n}\n\nexport function clearCrashLog(path = crashLogPath()): void {\n\ttry {\n\t\trmSync(path, { force: true });\n\t} catch {\n\t\t// The records can be attached again if cleanup fails.\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"crash-log.js","sourceRoot":"","sources":["../../src/core/crash-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAanD,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAExC,SAAS,YAAY,CAAC,QAAQ,GAAG,WAAW,EAAE;IAC7C,OAAO,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAI,GAAG,YAAY,EAAE;IACjD,IAAI,CAAC;QACJ,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAChE,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAC5B,CAAC,CAAC,OAAO,CAAC,MAAM,CACd,CAAC,MAAM,EAAyB,EAAE,CACjC,OAAO,MAAM,KAAK,QAAQ;gBAC1B,MAAM,KAAK,IAAI;gBACf,OAAQ,MAAsB,CAAC,SAAS,KAAK,QAAQ;gBACrD,OAAQ,MAAsB,CAAC,OAAO,KAAK,QAAQ,CACpD;YACF,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC;AAED,SAAS,aAAa,CAAC,OAA+B,EAAE,IAAY;IACnE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC;AAID,SAAS,kBAAkB,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa,EAAE,UAAkB,EAAE,kBAA2B;IACxF,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,MAAM,eAAe,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/D,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/D,IAAI,kBAAkB;QAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IAE/D,IAAI,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACxF,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,yBAAyB,CACxC,KAAyB,EACzB,UAA6C;IAE7C,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,eAAe,GAAG,KAAK;SAC3B,KAAK,CAAC,IAAI,CAAC;SACX,KAAK,CAAC,CAAC,CAAC;SACR,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACJ,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACtB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,kBAAkB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAChE,MAAM,iBAAiB,GACtB,SAAS,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS;YACzC,CAAC,sCAAsC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;YACzE,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,WAAW,GAChB,SAAS,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,iBAAiB,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO;YAC9F,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO;YAC9B,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,UAAU,GAAG,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,WAAW;YAC1B,CAAC,CAAC,iBAAiB,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC;YACvD,CAAC,CAAC,cAAc,IAAI,UAAU,KAAK,CAAC,CAAC;gBACpC,CAAC,CAAC,iBAAiB,CAAC,eAAe,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC;gBAC7E,CAAC,CAAC,iBAAiB,CAAC,eAAe,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,MAAM,KAAK,GACV,SAAS,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM;YACvE,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM;YAC7B,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACF,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,WAAW,CAC1B,KAAuF,EACvF,IAAI,GAAG,YAAY,EAAE;IAErB,IAAI,CAAC;QACJ,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;QACxB,MAAM,MAAM,GAAgB;YAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAC7E,KAAK,EAAE,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YACjE,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;YACtC,GAAG,EAAE,KAAK,CAAC,GAAG;SACd,CAAC;QACF,aAAa,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/E,OAAO,MAAM,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,mBAAmB,CAAC,IAAI,GAAG,YAAY,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAC1E,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC;SACxB,OAAO,EAAE;SACT,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,CAAC;IACtF,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,IAAI,CAAC;QACJ,aAAa,CACZ,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EACnF,IAAI,CACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACR,wCAAwC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAI,GAAG,YAAY,EAAE;IAClD,IAAI,CAAC;QACJ,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACR,sDAAsD;IACvD,CAAC;AACF,CAAC","sourcesContent":["import { mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { getAgentDir, VERSION } from \"../config.ts\";\nimport type { Extension } from \"./extensions/types.ts\";\nimport { isSyntheticPath } from \"./source-info.ts\";\n\nexport interface CrashRecord {\n\ttimestamp: string;\n\tversion: string;\n\tkind: \"uncaught_exception\" | \"fatal_error\";\n\tmessage: string;\n\tstack: string | null;\n\tsessionFile: string | null;\n\tcwd: string;\n\tnotified?: boolean;\n}\n\nconst MAX_CRASH_RECORDS = 5;\nconst MAX_AGE = 7 * 24 * 60 * 60 * 1000;\n\nfunction crashLogPath(agentDir = getAgentDir()): string {\n\treturn join(agentDir, \"crashes.json\");\n}\n\nexport function readCrashLog(path = crashLogPath()): CrashRecord[] {\n\ttry {\n\t\tconst records: unknown = JSON.parse(readFileSync(path, \"utf8\"));\n\t\treturn Array.isArray(records)\n\t\t\t? records.filter(\n\t\t\t\t\t(record): record is CrashRecord =>\n\t\t\t\t\t\ttypeof record === \"object\" &&\n\t\t\t\t\t\trecord !== null &&\n\t\t\t\t\t\ttypeof (record as CrashRecord).timestamp === \"string\" &&\n\t\t\t\t\t\ttypeof (record as CrashRecord).message === \"string\",\n\t\t\t\t)\n\t\t\t: [];\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nfunction writeCrashLog(records: readonly CrashRecord[], path: string): void {\n\tmkdirSync(dirname(path), { recursive: true });\n\twriteFileSync(path, `${JSON.stringify(records, null, 2)}\\n`);\n}\n\ntype ExtensionStackMetadata = Pick<Extension, \"path\" | \"resolvedPath\" | \"sourceInfo\">;\n\nfunction normalizeStackPath(value: string): string {\n\treturn value.replace(/\\\\/g, \"/\").replace(/\\/+$/u, \"\");\n}\n\nfunction stackContainsPath(stack: string, targetPath: string, includeDescendants: boolean): boolean {\n\tconst target = normalizeStackPath(targetPath);\n\tif (!target || isSyntheticPath(target)) return false;\n\tconst caseInsensitive = /^[a-z]:\\//iu.test(target);\n\tconst haystack = caseInsensitive ? stack.toLowerCase() : stack;\n\tconst needle = caseInsensitive ? target.toLowerCase() : target;\n\tif (includeDescendants) return haystack.includes(`${needle}/`);\n\n\tlet index = haystack.indexOf(needle);\n\twhile (index !== -1) {\n\t\tconst next = haystack[index + needle.length];\n\t\tif (next === undefined || next === \":\" || next === \")\" || /\\s/u.test(next)) return true;\n\t\tindex = haystack.indexOf(needle, index + needle.length);\n\t}\n\treturn false;\n}\n\n/** Find loaded extensions with source files in a stack trace. */\nexport function findExtensionStackMatches(\n\tstack: string | undefined,\n\textensions: readonly ExtensionStackMetadata[],\n): string[] {\n\tif (!stack) return [];\n\tconst normalizedStack = stack\n\t\t.split(\"\\n\")\n\t\t.slice(1)\n\t\t.filter((line) => /^\\s+at\\s/u.test(line))\n\t\t.map((line) => {\n\t\t\ttry {\n\t\t\t\treturn decodeURI(line);\n\t\t\t} catch {\n\t\t\t\treturn line;\n\t\t\t}\n\t\t})\n\t\t.join(\"\\n\")\n\t\t.replace(/\\\\/g, \"/\");\n\tconst matches: string[] = [];\n\tconst seen = new Set<string>();\n\n\tfor (const extension of extensions) {\n\t\tconst resolvedPath = normalizeStackPath(extension.resolvedPath);\n\t\tconst singleFilePackage =\n\t\t\textension.sourceInfo.origin === \"package\" &&\n\t\t\t!/^(?:npm:|git:|https?:\\/\\/|ssh:\\/\\/)/u.test(extension.sourceInfo.source) &&\n\t\t\t/\\.[cm]?[jt]s$/u.test(extension.sourceInfo.source);\n\t\tconst packageRoot =\n\t\t\textension.sourceInfo.origin === \"package\" && !singleFilePackage && extension.sourceInfo.baseDir\n\t\t\t\t? extension.sourceInfo.baseDir\n\t\t\t\t: undefined;\n\t\tconst slashIndex = resolvedPath.lastIndexOf(\"/\");\n\t\tconst directoryEntry = /\\/index\\.[cm]?[jt]s$/u.test(resolvedPath);\n\t\tconst matched = packageRoot\n\t\t\t? stackContainsPath(normalizedStack, packageRoot, true)\n\t\t\t: directoryEntry && slashIndex !== -1\n\t\t\t\t? stackContainsPath(normalizedStack, resolvedPath.slice(0, slashIndex), true)\n\t\t\t\t: stackContainsPath(normalizedStack, resolvedPath, false);\n\t\tif (!matched) continue;\n\n\t\tconst label =\n\t\t\textension.sourceInfo.origin === \"package\" && extension.sourceInfo.source\n\t\t\t\t? extension.sourceInfo.source\n\t\t\t\t: extension.path;\n\t\tif (!seen.has(label)) {\n\t\t\tseen.add(label);\n\t\t\tmatches.push(label);\n\t\t}\n\t}\n\treturn matches;\n}\n\n/** Best-effort persistence for callers that are already crashing. */\nexport function recordCrash(\n\tcrash: { kind: CrashRecord[\"kind\"]; error: unknown; sessionFile?: string; cwd: string },\n\tpath = crashLogPath(),\n): CrashRecord | undefined {\n\ttry {\n\t\tconst { error } = crash;\n\t\tconst record: CrashRecord = {\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tversion: VERSION,\n\t\t\tkind: crash.kind,\n\t\t\tmessage: error instanceof Error ? error.message || error.name : String(error),\n\t\t\tstack: error instanceof Error && error.stack ? error.stack : null,\n\t\t\tsessionFile: crash.sessionFile ?? null,\n\t\t\tcwd: crash.cwd,\n\t\t};\n\t\twriteCrashLog([...readCrashLog(path), record].slice(-MAX_CRASH_RECORDS), path);\n\t\treturn record;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Return the newest recent crash, marking pending records as announced. */\nexport function takeUnnotifiedCrash(path = crashLogPath(), now = Date.now()): CrashRecord | undefined {\n\tconst records = readCrashLog(path);\n\tconst crash = [...records]\n\t\t.reverse()\n\t\t.find((record) => !record.notified && now - Date.parse(record.timestamp) <= MAX_AGE);\n\tif (!crash) return undefined;\n\ttry {\n\t\twriteCrashLog(\n\t\t\trecords.map((record) => (record.notified ? record : { ...record, notified: true })),\n\t\t\tpath,\n\t\t);\n\t} catch {\n\t\t// Showing the notice again is harmless.\n\t}\n\treturn crash;\n}\n\nexport function clearCrashLog(path = crashLogPath()): void {\n\ttry {\n\t\trmSync(path, { force: true });\n\t} catch {\n\t\t// The records can be attached again if cleanup fails.\n\t}\n}\n"]}
|
|
@@ -300,6 +300,12 @@
|
|
|
300
300
|
border-color: var(--borderAccent);
|
|
301
301
|
}
|
|
302
302
|
|
|
303
|
+
.header-toggle-btn[aria-pressed="true"] {
|
|
304
|
+
color: var(--accent);
|
|
305
|
+
border-color: var(--accent);
|
|
306
|
+
font-weight: bold;
|
|
307
|
+
}
|
|
308
|
+
|
|
303
309
|
/* Header */
|
|
304
310
|
.header {
|
|
305
311
|
background: var(--container-bg);
|
|
@@ -786,6 +792,10 @@
|
|
|
786
792
|
border-radius: 4px;
|
|
787
793
|
}
|
|
788
794
|
|
|
795
|
+
body:not(.show-hidden-messages) .hook-message-hidden {
|
|
796
|
+
display: none;
|
|
797
|
+
}
|
|
798
|
+
|
|
789
799
|
.hook-type {
|
|
790
800
|
color: var(--customMessageLabel);
|
|
791
801
|
font-weight: bold;
|
|
@@ -930,6 +930,21 @@
|
|
|
930
930
|
'</div>';
|
|
931
931
|
};
|
|
932
932
|
|
|
933
|
+
// Calls this tool made to other tools (for example from a codemode script), recorded without results.
|
|
934
|
+
const renderNestedCalls = () => {
|
|
935
|
+
const nested = result?.nestedCalls;
|
|
936
|
+
if (!nested || !Array.isArray(nested.calls) || nested.calls.length === 0) return '';
|
|
937
|
+
const icons = { ok: '✓', error: '✗', unfinished: '…' };
|
|
938
|
+
const lines = nested.calls.map(c => {
|
|
939
|
+
const args = c.arguments ? JSON.stringify(c.arguments) : `[arguments omitted, ${c.argumentsBytes} bytes]`;
|
|
940
|
+
const duration = c.durationMs !== undefined ? ` ${c.durationMs}ms` : '';
|
|
941
|
+
const error = c.error ? `\n ${c.error.split('\n').join('\n ')}` : '';
|
|
942
|
+
return `${icons[c.status] || '?'} ${c.name} ${args}${duration}${error}`;
|
|
943
|
+
});
|
|
944
|
+
const title = `Nested calls: ${nested.calls.length}${nested.complete ? '' : ' (incomplete record)'}`;
|
|
945
|
+
return formatExpandableOutput([title, ...lines].join('\n'), 1);
|
|
946
|
+
};
|
|
947
|
+
|
|
933
948
|
const toolDomId = `tool-call-${escapeHtml(call.id)}`;
|
|
934
949
|
let html = `<div class="tool-execution ${statusClass}" id="${toolDomId}">`;
|
|
935
950
|
const args = call.arguments || {};
|
|
@@ -1063,6 +1078,7 @@
|
|
|
1063
1078
|
}
|
|
1064
1079
|
}
|
|
1065
1080
|
|
|
1081
|
+
html += renderNestedCalls();
|
|
1066
1082
|
html += '</div>';
|
|
1067
1083
|
return html;
|
|
1068
1084
|
}
|
|
@@ -1311,9 +1327,10 @@
|
|
|
1311
1327
|
</div>`;
|
|
1312
1328
|
}
|
|
1313
1329
|
|
|
1314
|
-
if (entry.type === 'custom_message'
|
|
1315
|
-
|
|
1316
|
-
|
|
1330
|
+
if (entry.type === 'custom_message') {
|
|
1331
|
+
const hidden = entry.display === false;
|
|
1332
|
+
return `<div class="hook-message${hidden ? ' hook-message-hidden' : ''}" id="${entryDomId}">${tsHtml}
|
|
1333
|
+
<div class="hook-type">[${escapeHtml(entry.customType)}]${hidden ? ' · Hidden in terminal' : ''}</div>
|
|
1317
1334
|
<div class="markdown-content">${safeMarkedParse(typeof entry.content === 'string' ? entry.content : JSON.stringify(entry.content))}</div>
|
|
1318
1335
|
</div>`;
|
|
1319
1336
|
}
|
|
@@ -1389,10 +1406,11 @@
|
|
|
1389
1406
|
<div class="header">
|
|
1390
1407
|
<h1>Session: ${escapeHtml(header?.id || 'unknown')}</h1>
|
|
1391
1408
|
<div class="help-bar">
|
|
1392
|
-
<span class="help-hint">T toggle thinking · O toggle tools</span>
|
|
1409
|
+
<span class="help-hint">T toggle thinking · O toggle tools · H toggle hidden messages</span>
|
|
1393
1410
|
<div class="help-actions">
|
|
1394
|
-
<button type="button" class="header-toggle-btn" data-action="toggle-thinking" title="Toggle thinking (T)">Toggle thinking</button>
|
|
1395
|
-
<button type="button" class="header-toggle-btn" data-action="toggle-tools" title="Toggle tools (O)">Toggle tools</button>
|
|
1411
|
+
<button type="button" class="header-toggle-btn" data-action="toggle-thinking" aria-pressed="${thinkingExpanded}" title="Toggle thinking (T)">Toggle thinking</button>
|
|
1412
|
+
<button type="button" class="header-toggle-btn" data-action="toggle-tools" aria-pressed="${toolOutputsExpanded}" title="Toggle tools (O)">Toggle tools</button>
|
|
1413
|
+
<button type="button" class="header-toggle-btn" data-action="toggle-hidden-messages" aria-pressed="${showHiddenMessages}" title="Show custom messages marked as hidden in the terminal (H).">${showHiddenMessages ? 'Hide hidden messages' : 'Show hidden messages'}</button>
|
|
1396
1414
|
<button type="button" class="download-json-btn" onclick="downloadSessionJson()" title="Download session as JSONL">↓ JSONL</button>
|
|
1397
1415
|
</div>
|
|
1398
1416
|
</div>
|
|
@@ -1500,6 +1518,10 @@
|
|
|
1500
1518
|
function navigateTo(targetId, scrollMode = 'target', scrollToEntryId = null) {
|
|
1501
1519
|
currentLeafId = targetId;
|
|
1502
1520
|
currentTargetId = scrollToEntryId || targetId;
|
|
1521
|
+
const targetEntry = byId.get(currentTargetId);
|
|
1522
|
+
if (scrollMode === 'target' && targetEntry?.type === 'custom_message' && targetEntry.display === false) {
|
|
1523
|
+
setHiddenMessagesVisible(true);
|
|
1524
|
+
}
|
|
1503
1525
|
const path = getPath(targetId);
|
|
1504
1526
|
|
|
1505
1527
|
renderTree();
|
|
@@ -1521,6 +1543,10 @@
|
|
|
1521
1543
|
messagesEl.innerHTML = '';
|
|
1522
1544
|
messagesEl.appendChild(fragment);
|
|
1523
1545
|
|
|
1546
|
+
// Cached nodes contain their initial presentation; reapply the viewer's toggle states.
|
|
1547
|
+
setThinkingExpanded(thinkingExpanded);
|
|
1548
|
+
setToolOutputsExpanded(toolOutputsExpanded);
|
|
1549
|
+
|
|
1524
1550
|
// Attach click handlers for copy-link buttons
|
|
1525
1551
|
messagesEl.querySelectorAll('.copy-link-btn').forEach(btn => {
|
|
1526
1552
|
btn.addEventListener('click', (e) => {
|
|
@@ -1793,19 +1819,32 @@
|
|
|
1793
1819
|
// Toggle states
|
|
1794
1820
|
let thinkingExpanded = true;
|
|
1795
1821
|
let toolOutputsExpanded = false;
|
|
1822
|
+
let showHiddenMessages = false;
|
|
1823
|
+
|
|
1824
|
+
function setHiddenMessagesVisible(visible) {
|
|
1825
|
+
showHiddenMessages = visible;
|
|
1826
|
+
document.body.classList.toggle('show-hidden-messages', visible);
|
|
1827
|
+
const button = document.querySelector('[data-action="toggle-hidden-messages"]');
|
|
1828
|
+
if (button) {
|
|
1829
|
+
button.setAttribute('aria-pressed', String(visible));
|
|
1830
|
+
button.textContent = visible ? 'Hide hidden messages' : 'Show hidden messages';
|
|
1831
|
+
}
|
|
1832
|
+
}
|
|
1796
1833
|
|
|
1797
|
-
|
|
1798
|
-
thinkingExpanded =
|
|
1834
|
+
function setThinkingExpanded(expanded) {
|
|
1835
|
+
thinkingExpanded = expanded;
|
|
1836
|
+
document.querySelector('[data-action="toggle-thinking"]')?.setAttribute('aria-pressed', String(expanded));
|
|
1799
1837
|
document.querySelectorAll('.thinking-text').forEach(el => {
|
|
1800
1838
|
el.style.display = thinkingExpanded ? '' : 'none';
|
|
1801
1839
|
});
|
|
1802
1840
|
document.querySelectorAll('.thinking-collapsed').forEach(el => {
|
|
1803
1841
|
el.style.display = thinkingExpanded ? 'none' : 'block';
|
|
1804
1842
|
});
|
|
1805
|
-
}
|
|
1843
|
+
}
|
|
1806
1844
|
|
|
1807
|
-
|
|
1808
|
-
toolOutputsExpanded =
|
|
1845
|
+
function setToolOutputsExpanded(expanded) {
|
|
1846
|
+
toolOutputsExpanded = expanded;
|
|
1847
|
+
document.querySelector('[data-action="toggle-tools"]')?.setAttribute('aria-pressed', String(expanded));
|
|
1809
1848
|
document.querySelectorAll('.tool-output.expandable').forEach(el => {
|
|
1810
1849
|
el.classList.toggle('expanded', toolOutputsExpanded);
|
|
1811
1850
|
});
|
|
@@ -1815,11 +1854,18 @@
|
|
|
1815
1854
|
document.querySelectorAll('.skill-invocation').forEach(el => {
|
|
1816
1855
|
el.classList.toggle('expanded', toolOutputsExpanded);
|
|
1817
1856
|
});
|
|
1818
|
-
}
|
|
1857
|
+
}
|
|
1819
1858
|
|
|
1820
1859
|
const attachHeaderHandlers = () => {
|
|
1821
|
-
document.querySelector('[data-action="toggle-thinking"]')?.addEventListener('click',
|
|
1822
|
-
|
|
1860
|
+
document.querySelector('[data-action="toggle-thinking"]')?.addEventListener('click', () => {
|
|
1861
|
+
setThinkingExpanded(!thinkingExpanded);
|
|
1862
|
+
});
|
|
1863
|
+
document.querySelector('[data-action="toggle-tools"]')?.addEventListener('click', () => {
|
|
1864
|
+
setToolOutputsExpanded(!toolOutputsExpanded);
|
|
1865
|
+
});
|
|
1866
|
+
document.querySelector('[data-action="toggle-hidden-messages"]')?.addEventListener('click', () => {
|
|
1867
|
+
setHiddenMessagesVisible(!showHiddenMessages);
|
|
1868
|
+
});
|
|
1823
1869
|
};
|
|
1824
1870
|
|
|
1825
1871
|
const isEditableTarget = (element) => {
|
|
@@ -1839,17 +1885,20 @@
|
|
|
1839
1885
|
navigateTo(leafId, 'bottom');
|
|
1840
1886
|
}
|
|
1841
1887
|
|
|
1842
|
-
if (isEditableTarget(document.activeElement)) {
|
|
1888
|
+
if (e.ctrlKey || e.metaKey || e.altKey || isEditableTarget(document.activeElement)) {
|
|
1843
1889
|
return;
|
|
1844
1890
|
}
|
|
1845
1891
|
|
|
1846
1892
|
const key = e.key.toLowerCase();
|
|
1847
1893
|
if (key === 't') {
|
|
1848
1894
|
e.preventDefault();
|
|
1849
|
-
|
|
1895
|
+
setThinkingExpanded(!thinkingExpanded);
|
|
1850
1896
|
} else if (key === 'o') {
|
|
1851
1897
|
e.preventDefault();
|
|
1852
|
-
|
|
1898
|
+
setToolOutputsExpanded(!toolOutputsExpanded);
|
|
1899
|
+
} else if (key === 'h') {
|
|
1900
|
+
e.preventDefault();
|
|
1901
|
+
setHiddenMessagesVisible(!showHiddenMessages);
|
|
1853
1902
|
}
|
|
1854
1903
|
});
|
|
1855
1904
|
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* extensions import them from the same place as the upstream API.
|
|
4
4
|
*/
|
|
5
5
|
import type { TerminalInputHandler } from "./types.ts";
|
|
6
|
-
export type { BackgroundContext } from "../background/types.ts";
|
|
7
6
|
export type { ContextSnapshot } from "../context-snapshot.ts";
|
|
8
7
|
export type { ModelRuntime } from "../model-runtime.ts";
|
|
8
|
+
export type { TasksContext } from "../tasks/types.ts";
|
|
9
9
|
export interface EditorSubmitEvent {
|
|
10
10
|
/** Expanded, trimmed editor text, before history, command dispatch, or any main-agent queue. */
|
|
11
11
|
text: string;
|
|
@@ -29,13 +29,6 @@ export interface EditorHost {
|
|
|
29
29
|
/** Raw input only while the main editor has focus, without overlays or autocomplete. */
|
|
30
30
|
onInput(handler: TerminalInputHandler): () => void;
|
|
31
31
|
}
|
|
32
|
-
/**
|
|
33
|
-
* Message thrown when a captured extension ctx/pi is used after the owning
|
|
34
|
-
* session was replaced (newSession/fork/switchSession/reload). Single source of
|
|
35
|
-
* truth so extensions can detect the condition with
|
|
36
|
-
* isStaleExtensionContextError instead of matching message text.
|
|
37
|
-
*/
|
|
38
|
-
export declare const STALE_EXTENSION_CONTEXT_MESSAGE = "This extension ctx is stale after session replacement or reload. Do not use a captured pi or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().";
|
|
39
32
|
/** True when an error came from using a stale extension ctx/pi after session replacement. */
|
|
40
33
|
export declare function isStaleExtensionContextError(error: unknown): boolean;
|
|
41
34
|
//# sourceMappingURL=distribution-api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"distribution-api.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/distribution-api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"distribution-api.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/distribution-api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IACjC,gGAAgG;IAChG,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IACpC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;CAC3B;AAED,0FAA0F;AAC1F,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC;AAEnH,0FAA0F;AAC1F,MAAM,WAAW,UAAU;IAC1B,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,IAAI,CAAC;IACnD,kFAAkF;IAClF,SAAS,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACvD,wFAAwF;IACxF,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAAC;CACnD;AAUD,6FAA6F;AAC7F,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEpE"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* session was replaced (newSession/fork/switchSession/reload).
|
|
4
|
-
*
|
|
5
|
-
* isStaleExtensionContextError instead of matching
|
|
2
|
+
* Upstream words the error it throws when a captured extension ctx/pi is used after the owning
|
|
3
|
+
* session was replaced (newSession/fork/switchSession/reload) in three places. Recognize it by
|
|
4
|
+
* its stable opening rather than copying the whole message, so extensions can detect the
|
|
5
|
+
* condition with isStaleExtensionContextError instead of matching text themselves.
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
const STALE_EXTENSION_CONTEXT_PREFIX = "This extension ctx is stale";
|
|
8
8
|
/** True when an error came from using a stale extension ctx/pi after session replacement. */
|
|
9
9
|
export function isStaleExtensionContextError(error) {
|
|
10
|
-
return error instanceof Error && error.message
|
|
10
|
+
return error instanceof Error && error.message.startsWith(STALE_EXTENSION_CONTEXT_PREFIX);
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=distribution-api.js.map
|