@astralyn/pi 0.99.0 → 1.0.1
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 +58 -3
- package/dist/bundle/chunks/anthropic-messages-YET4T7BO.js +6 -0
- package/dist/bundle/chunks/anthropic.js +2 -2
- package/dist/bundle/chunks/azure-openai-responses-SBLL5YN3.js +2 -0
- package/dist/bundle/chunks/bedrock-converse-stream.js +3 -3
- package/dist/bundle/chunks/chunk-4TT2QGFL.js +2 -0
- package/dist/bundle/chunks/chunk-GIG5IHES.js +2 -0
- package/dist/bundle/chunks/{chunk-VW2P3X6P.js → chunk-H2N2THAO.js} +436 -668
- package/dist/bundle/chunks/{chunk-A576H74Y.js → chunk-IZ3S3GDX.js} +1 -1
- package/dist/bundle/chunks/{chunk-ABVRAYXT.js → chunk-NY3CWK44.js} +2 -2
- package/dist/bundle/chunks/chunk-SVJ7OGEB.js +2 -0
- package/dist/bundle/chunks/chunk-TRHTWM3C.js +2 -0
- package/dist/bundle/chunks/{chunk-DEWXBB6W.js → chunk-V66VGGOM.js} +1 -1
- package/dist/bundle/chunks/chunk-XDYM2567.js +20 -0
- package/dist/bundle/chunks/{cloudflare-workers-ai-system-one-ZYSAFXXL.js → cloudflare-workers-ai-system-one-QI46LUZ6.js} +1 -1
- package/dist/bundle/chunks/codemode-worker.js +90 -10
- package/dist/bundle/chunks/github-copilot.js +1 -1
- package/dist/bundle/chunks/{google-generative-ai-SDNQVVXA.js → google-generative-ai-YTZCSHQN.js} +1 -1
- package/dist/bundle/chunks/{google-vertex-LZXOLBIO.js → google-vertex-OTFZJJXQ.js} +1 -1
- package/dist/bundle/chunks/{llama-cpp-classify-7IYGGPND.js → llama-cpp-classify-R7DQLTQN.js} +1 -1
- package/dist/bundle/chunks/{mistral-conversations-VYKPSSAM.js → mistral-conversations-ELH4V4TY.js} +1 -1
- package/dist/bundle/chunks/node-USQQ7C6M.js +16 -0
- package/dist/bundle/chunks/openai-chatgpt.js +2 -2
- package/dist/bundle/chunks/{openai-codex-responses-HZ4VUDXD.js → openai-codex-responses-OLVTU4UA.js} +1 -1
- package/dist/bundle/chunks/openai-codex.js +1 -1
- package/dist/bundle/chunks/openai-completions-53M2KJ67.js +7 -0
- package/dist/bundle/chunks/openai-responses-4ABDEL4Z.js +3 -0
- package/dist/bundle/chunks/{openrouter-images-5524IQHX.js → openrouter-images-YP3YVB54.js} +1 -1
- package/dist/bundle/chunks/openrouter.js +1 -1
- package/dist/bundle/chunks/radius.js +1 -1
- package/dist/bundle/chunks/{typesafe-system-one-Z2CDLKEY.js → typesafe-system-one-RREJAKWB.js} +1 -1
- package/dist/bundle/chunks/virtual-modules-YFKU7JZF.js +2 -0
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +5 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/config.d.ts +5 -8
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +19 -13
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +21 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +65 -12
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts +3 -3
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js +3 -3
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/index.d.ts +2 -2
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +18 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +3 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +6 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +15 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/keybindings.d.ts +51 -11
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +11 -3
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/mcp-servers.d.ts +40 -7
- package/dist/core/mcp-servers.d.ts.map +1 -1
- package/dist/core/mcp-servers.js +63 -11
- package/dist/core/mcp-servers.js.map +1 -1
- package/dist/core/model-config.d.ts +36 -0
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +14 -2
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-registry.d.ts +3 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +4 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.js +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +6 -0
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +22 -18
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/provider-composer.d.ts +2 -1
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +13 -0
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/radius.d.ts +2 -0
- package/dist/core/radius.d.ts.map +1 -1
- package/dist/core/radius.js +2 -0
- package/dist/core/radius.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +4 -9
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +1 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager.d.ts +7 -5
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +2 -1
- package/dist/core/settings-manager.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/format.d.ts +7 -0
- package/dist/core/tasks/format.d.ts.map +1 -0
- package/dist/core/tasks/format.js +14 -0
- package/dist/core/tasks/format.js.map +1 -0
- package/dist/core/tasks/history.d.ts.map +1 -1
- package/dist/core/tasks/history.js +0 -19
- package/dist/core/tasks/history.js.map +1 -1
- package/dist/core/tasks/output.d.ts +8 -0
- package/dist/core/tasks/output.d.ts.map +1 -1
- package/dist/core/tasks/output.js +19 -0
- package/dist/core/tasks/output.js.map +1 -1
- package/dist/core/tasks/presentation.d.ts +1 -3
- package/dist/core/tasks/presentation.d.ts.map +1 -1
- package/dist/core/tasks/presentation.js +79 -166
- package/dist/core/tasks/presentation.js.map +1 -1
- package/dist/core/tasks/runtime.d.ts +16 -9
- package/dist/core/tasks/runtime.d.ts.map +1 -1
- package/dist/core/tasks/runtime.js +89 -106
- package/dist/core/tasks/runtime.js.map +1 -1
- package/dist/core/tasks/session.d.ts.map +1 -1
- package/dist/core/tasks/session.js +13 -4
- package/dist/core/tasks/session.js.map +1 -1
- package/dist/core/tasks/store.d.ts +20 -6
- package/dist/core/tasks/store.d.ts.map +1 -1
- package/dist/core/tasks/store.js +45 -18
- package/dist/core/tasks/store.js.map +1 -1
- package/dist/core/tasks/types.d.ts +14 -54
- package/dist/core/tasks/types.d.ts.map +1 -1
- package/dist/core/tasks/types.js +1 -5
- package/dist/core/tasks/types.js.map +1 -1
- package/dist/core/tools/renderers/bash.d.ts.map +1 -1
- package/dist/core/tools/renderers/bash.js +11 -34
- package/dist/core/tools/renderers/bash.js.map +1 -1
- package/dist/core/tools/renderers/index.d.ts +2 -2
- package/dist/core/tools/renderers/index.d.ts.map +1 -1
- package/dist/core/tools/renderers/index.js.map +1 -1
- package/dist/core/tools/shell-execution.d.ts +0 -1
- package/dist/core/tools/shell-execution.d.ts.map +1 -1
- package/dist/core/tools/shell-execution.js +3 -10
- package/dist/core/tools/shell-execution.js.map +1 -1
- package/dist/core/tools/shell-tool.d.ts.map +1 -1
- package/dist/core/tools/shell-tool.js +2 -4
- package/dist/core/tools/shell-tool.js.map +1 -1
- package/dist/core/tools/tasks/actions.d.ts +1 -1
- package/dist/core/tools/tasks/actions.d.ts.map +1 -1
- package/dist/core/tools/tasks/actions.js +26 -12
- package/dist/core/tools/tasks/actions.js.map +1 -1
- package/dist/core/tools/tasks/constants.d.ts +2 -6
- package/dist/core/tools/tasks/constants.d.ts.map +1 -1
- package/dist/core/tools/tasks/constants.js +2 -6
- package/dist/core/tools/tasks/constants.js.map +1 -1
- package/dist/core/tools/tasks/schema.d.ts +1 -1
- package/dist/core/tools/tasks/schema.d.ts.map +1 -1
- package/dist/core/tools/tasks/schema.js +8 -7
- package/dist/core/tools/tasks/schema.js.map +1 -1
- package/dist/core/tools/tasks/types.d.ts +8 -38
- package/dist/core/tools/tasks/types.d.ts.map +1 -1
- package/dist/core/tools/tasks/types.js +6 -11
- package/dist/core/tools/tasks/types.js.map +1 -1
- package/dist/core/virtual-models.d.ts +2 -0
- package/dist/core/virtual-models.d.ts.map +1 -1
- package/dist/core/virtual-models.js +19 -12
- package/dist/core/virtual-models.js.map +1 -1
- package/dist/extensions/btw/agent.d.ts +17 -8
- package/dist/extensions/btw/agent.d.ts.map +1 -1
- package/dist/extensions/btw/agent.js +74 -76
- package/dist/extensions/btw/agent.js.map +1 -1
- package/dist/extensions/btw/controller.d.ts +0 -1
- package/dist/extensions/btw/controller.d.ts.map +1 -1
- package/dist/extensions/btw/controller.js +26 -33
- package/dist/extensions/btw/controller.js.map +1 -1
- package/dist/extensions/btw/panel.d.ts +13 -14
- package/dist/extensions/btw/panel.d.ts.map +1 -1
- package/dist/extensions/btw/panel.js +38 -29
- package/dist/extensions/btw/panel.js.map +1 -1
- package/dist/extensions/codemode/execute.d.ts.map +1 -1
- package/dist/extensions/codemode/execute.js +197 -51
- package/dist/extensions/codemode/execute.js.map +1 -1
- package/dist/extensions/codemode/renderer.d.ts.map +1 -1
- package/dist/extensions/codemode/renderer.js +43 -25
- package/dist/extensions/codemode/renderer.js.map +1 -1
- package/dist/extensions/codemode/tool.d.ts +12 -11
- package/dist/extensions/codemode/tool.d.ts.map +1 -1
- package/dist/extensions/codemode/tool.js +73 -129
- package/dist/extensions/codemode/tool.js.map +1 -1
- package/dist/extensions/codemode/worker.d.ts +1 -1
- package/dist/extensions/codemode/worker.js +1 -1
- package/dist/extensions/codemode/worker.js.map +1 -1
- package/dist/extensions/deepwiki/schema.d.ts +1 -1
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +0 -2
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/mcp/cli.d.ts.map +1 -1
- package/dist/extensions/mcp/cli.js +23 -5
- package/dist/extensions/mcp/cli.js.map +1 -1
- package/dist/extensions/mcp/config.d.ts +19 -5
- package/dist/extensions/mcp/config.d.ts.map +1 -1
- package/dist/extensions/mcp/config.js +60 -12
- package/dist/extensions/mcp/config.js.map +1 -1
- package/dist/extensions/mcp/index.d.ts +36 -9
- package/dist/extensions/mcp/index.d.ts.map +1 -1
- package/dist/extensions/mcp/index.js +309 -100
- package/dist/extensions/mcp/index.js.map +1 -1
- package/dist/extensions/mcp/oauth.d.ts +14 -8
- package/dist/extensions/mcp/oauth.d.ts.map +1 -1
- package/dist/extensions/mcp/oauth.js +105 -36
- package/dist/extensions/mcp/oauth.js.map +1 -1
- package/dist/extensions/mcp/runtime.d.ts +2 -0
- package/dist/extensions/mcp/runtime.d.ts.map +1 -1
- package/dist/extensions/mcp/runtime.js +17 -9
- package/dist/extensions/mcp/runtime.js.map +1 -1
- package/dist/extensions/mcp/tools.d.ts +8 -5
- package/dist/extensions/mcp/tools.d.ts.map +1 -1
- package/dist/extensions/mcp/tools.js +50 -26
- package/dist/extensions/mcp/tools.js.map +1 -1
- package/dist/extensions/mcp/ui.d.ts.map +1 -1
- package/dist/extensions/mcp/ui.js +7 -1
- package/dist/extensions/mcp/ui.js.map +1 -1
- package/dist/extensions/provider/catalog.d.ts +8 -1
- package/dist/extensions/provider/catalog.d.ts.map +1 -1
- package/dist/extensions/provider/catalog.js +31 -0
- package/dist/extensions/provider/catalog.js.map +1 -1
- package/dist/extensions/provider/connection.d.ts +4 -1
- package/dist/extensions/provider/connection.d.ts.map +1 -1
- package/dist/extensions/provider/connection.js +1 -5
- package/dist/extensions/provider/connection.js.map +1 -1
- package/dist/extensions/provider/editing.d.ts +36 -0
- package/dist/extensions/provider/editing.d.ts.map +1 -0
- package/dist/extensions/provider/editing.js +99 -0
- package/dist/extensions/provider/editing.js.map +1 -0
- package/dist/extensions/provider/json-fields.d.ts +5 -0
- package/dist/extensions/provider/json-fields.d.ts.map +1 -0
- package/dist/extensions/provider/json-fields.js +31 -0
- package/dist/extensions/provider/json-fields.js.map +1 -0
- package/dist/extensions/provider/store.d.ts +1 -4
- package/dist/extensions/provider/store.d.ts.map +1 -1
- package/dist/extensions/provider/store.js +2 -30
- package/dist/extensions/provider/store.js.map +1 -1
- package/dist/extensions/provider/ui/builtin-data.d.ts +0 -2
- package/dist/extensions/provider/ui/builtin-data.d.ts.map +1 -1
- package/dist/extensions/provider/ui/builtin-data.js +14 -79
- package/dist/extensions/provider/ui/builtin-data.js.map +1 -1
- package/dist/extensions/provider/ui/compat.d.ts.map +1 -1
- package/dist/extensions/provider/ui/compat.js +6 -9
- package/dist/extensions/provider/ui/compat.js.map +1 -1
- package/dist/extensions/provider/ui/controls.d.ts +48 -0
- package/dist/extensions/provider/ui/controls.d.ts.map +1 -0
- package/dist/extensions/provider/ui/controls.js +108 -0
- package/dist/extensions/provider/ui/controls.js.map +1 -0
- package/dist/extensions/provider/ui/dictionary.d.ts.map +1 -1
- package/dist/extensions/provider/ui/dictionary.js +6 -9
- package/dist/extensions/provider/ui/dictionary.js.map +1 -1
- package/dist/extensions/provider/ui/editor.d.ts +3 -3
- package/dist/extensions/provider/ui/editor.d.ts.map +1 -1
- package/dist/extensions/provider/ui/editor.js +35 -140
- package/dist/extensions/provider/ui/editor.js.map +1 -1
- package/dist/extensions/provider/ui/fetch-models.d.ts +0 -3
- package/dist/extensions/provider/ui/fetch-models.d.ts.map +1 -1
- package/dist/extensions/provider/ui/fetch-models.js +49 -44
- package/dist/extensions/provider/ui/fetch-models.js.map +1 -1
- package/dist/extensions/provider/ui/model-fields.d.ts.map +1 -1
- package/dist/extensions/provider/ui/model-fields.js +11 -14
- package/dist/extensions/provider/ui/model-fields.js.map +1 -1
- package/dist/extensions/provider/ui/model-options.d.ts +4 -34
- package/dist/extensions/provider/ui/model-options.d.ts.map +1 -1
- package/dist/extensions/provider/ui/model-options.js +90 -271
- package/dist/extensions/provider/ui/model-options.js.map +1 -1
- package/dist/extensions/provider/ui/pane.d.ts +4 -18
- package/dist/extensions/provider/ui/pane.d.ts.map +1 -1
- package/dist/extensions/provider/ui/pane.js.map +1 -1
- package/dist/extensions/provider/ui/provider-fields.d.ts +2 -19
- package/dist/extensions/provider/ui/provider-fields.d.ts.map +1 -1
- package/dist/extensions/provider/ui/provider-fields.js +58 -171
- package/dist/extensions/provider/ui/provider-fields.js.map +1 -1
- package/dist/extensions/provider/ui/thinking-map.d.ts.map +1 -1
- package/dist/extensions/provider/ui/thinking-map.js +6 -9
- package/dist/extensions/provider/ui/thinking-map.js.map +1 -1
- package/dist/extensions/question/detail-pane.d.ts +7 -2
- package/dist/extensions/question/detail-pane.d.ts.map +1 -1
- package/dist/extensions/question/detail-pane.js +16 -5
- package/dist/extensions/question/detail-pane.js.map +1 -1
- package/dist/extensions/question/dialog-view.d.ts +41 -0
- package/dist/extensions/question/dialog-view.d.ts.map +1 -0
- package/dist/extensions/question/dialog-view.js +329 -0
- package/dist/extensions/question/dialog-view.js.map +1 -0
- package/dist/extensions/question/dialog.d.ts +3 -3
- package/dist/extensions/question/dialog.d.ts.map +1 -1
- package/dist/extensions/question/dialog.js +220 -634
- package/dist/extensions/question/dialog.js.map +1 -1
- package/dist/extensions/question/index.d.ts.map +1 -1
- package/dist/extensions/question/index.js +2 -3
- package/dist/extensions/question/index.js.map +1 -1
- package/dist/extensions/question/render.d.ts.map +1 -1
- package/dist/extensions/question/render.js +22 -32
- package/dist/extensions/question/render.js.map +1 -1
- package/dist/extensions/question/results.d.ts.map +1 -1
- package/dist/extensions/question/results.js +56 -12
- package/dist/extensions/question/results.js.map +1 -1
- package/dist/extensions/question/schema.d.ts +21 -6
- package/dist/extensions/question/schema.d.ts.map +1 -1
- package/dist/extensions/question/schema.js.map +1 -1
- package/dist/extensions/question/state.d.ts +9 -7
- package/dist/extensions/question/state.d.ts.map +1 -1
- package/dist/extensions/question/state.js +63 -54
- package/dist/extensions/question/state.js.map +1 -1
- package/dist/extensions/question/types.d.ts +41 -18
- package/dist/extensions/question/types.d.ts.map +1 -1
- package/dist/extensions/question/types.js.map +1 -1
- package/dist/extensions/statusline/index.d.ts +4 -0
- package/dist/extensions/statusline/index.d.ts.map +1 -1
- package/dist/extensions/statusline/index.js +18 -355
- package/dist/extensions/statusline/index.js.map +1 -1
- package/dist/extensions/statusline/render.d.ts +19 -0
- package/dist/extensions/statusline/render.d.ts.map +1 -0
- package/dist/extensions/statusline/render.js +163 -0
- package/dist/extensions/statusline/render.js.map +1 -0
- package/dist/extensions/statusline/usage.d.ts +12 -0
- package/dist/extensions/statusline/usage.d.ts.map +1 -0
- package/dist/extensions/statusline/usage.js +36 -0
- package/dist/extensions/statusline/usage.js.map +1 -0
- package/dist/extensions/tool-search/tool.d.ts +5 -4
- package/dist/extensions/tool-search/tool.d.ts.map +1 -1
- package/dist/extensions/tool-search/tool.js +7 -28
- package/dist/extensions/tool-search/tool.js.map +1 -1
- package/dist/extensions/web-search/execute.d.ts +1 -5
- package/dist/extensions/web-search/execute.d.ts.map +1 -1
- package/dist/extensions/web-search/execute.js +4 -9
- package/dist/extensions/web-search/execute.js.map +1 -1
- package/dist/extensions/web-search/format.d.ts +12 -3
- package/dist/extensions/web-search/format.d.ts.map +1 -1
- package/dist/extensions/web-search/format.js +33 -25
- package/dist/extensions/web-search/format.js.map +1 -1
- package/dist/extensions/web-search/index.d.ts.map +1 -1
- package/dist/extensions/web-search/index.js +6 -29
- package/dist/extensions/web-search/index.js.map +1 -1
- package/dist/extensions/web-search/providers/deepseek.d.ts.map +1 -1
- package/dist/extensions/web-search/providers/deepseek.js +0 -1
- package/dist/extensions/web-search/providers/deepseek.js.map +1 -1
- package/dist/extensions/web-search/providers/http.d.ts +1 -1
- package/dist/extensions/web-search/providers/http.d.ts.map +1 -1
- package/dist/extensions/web-search/providers/http.js.map +1 -1
- package/dist/extensions/web-search/providers/minimax.d.ts.map +1 -1
- package/dist/extensions/web-search/providers/minimax.js +0 -1
- package/dist/extensions/web-search/providers/minimax.js.map +1 -1
- package/dist/extensions/web-search/render.d.ts +7 -2
- package/dist/extensions/web-search/render.d.ts.map +1 -1
- package/dist/extensions/web-search/render.js +32 -4
- package/dist/extensions/web-search/render.js.map +1 -1
- package/dist/extensions/web-search/results.d.ts.map +1 -1
- package/dist/extensions/web-search/results.js +3 -8
- package/dist/extensions/web-search/results.js.map +1 -1
- package/dist/extensions/web-search/types.d.ts +4 -2
- package/dist/extensions/web-search/types.d.ts.map +1 -1
- package/dist/extensions/web-search/types.js.map +1 -1
- package/dist/index.d.ts +3 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +6 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts +3 -0
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js +7 -5
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/auth-url.d.ts +14 -0
- package/dist/modes/interactive/components/auth-url.d.ts.map +1 -0
- package/dist/modes/interactive/components/auth-url.js +34 -0
- package/dist/modes/interactive/components/auth-url.js.map +1 -0
- package/dist/modes/interactive/components/easter-egg-3d.d.ts +104 -0
- package/dist/modes/interactive/components/easter-egg-3d.d.ts.map +1 -0
- package/dist/modes/interactive/components/easter-egg-3d.js +1123 -0
- package/dist/modes/interactive/components/easter-egg-3d.js.map +1 -0
- package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts +6 -0
- package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts.map +1 -0
- package/dist/modes/interactive/components/easter-egg-3d.lazy.js +24 -0
- package/dist/modes/interactive/components/easter-egg-3d.lazy.js.map +1 -0
- package/dist/modes/interactive/components/index.d.ts +0 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +0 -1
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +2 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +9 -5
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +8 -2
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +24 -21
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/pi-logo.d.ts +7 -0
- package/dist/modes/interactive/components/pi-logo.d.ts.map +1 -1
- package/dist/modes/interactive/components/pi-logo.js +13 -1
- package/dist/modes/interactive/components/pi-logo.js.map +1 -1
- package/dist/modes/interactive/components/radius-login-selector.d.ts +15 -0
- package/dist/modes/interactive/components/radius-login-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/radius-login-selector.js +83 -0
- package/dist/modes/interactive/components/radius-login-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -3
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +5 -5
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/status-marker.d.ts +0 -2
- package/dist/modes/interactive/components/status-marker.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-marker.js +0 -4
- package/dist/modes/interactive/components/status-marker.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +5 -4
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts +27 -3
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js +36 -6
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +12 -2
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +180 -55
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/tasks/completion-render.d.ts +1 -1
- package/dist/modes/interactive/tasks/completion-render.d.ts.map +1 -1
- package/dist/modes/interactive/tasks/completion-render.js +28 -82
- package/dist/modes/interactive/tasks/completion-render.js.map +1 -1
- package/dist/modes/interactive/tasks/index.d.ts.map +1 -1
- package/dist/modes/interactive/tasks/index.js +18 -13
- package/dist/modes/interactive/tasks/index.js.map +1 -1
- package/dist/modes/interactive/tasks/inspector.d.ts +35 -0
- package/dist/modes/interactive/tasks/inspector.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/inspector.js +93 -0
- package/dist/modes/interactive/tasks/inspector.js.map +1 -0
- package/dist/modes/interactive/tasks/layout.d.ts +40 -0
- package/dist/modes/interactive/tasks/layout.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/layout.js +212 -0
- package/dist/modes/interactive/tasks/layout.js.map +1 -0
- package/dist/modes/interactive/tasks/list.d.ts +21 -0
- package/dist/modes/interactive/tasks/list.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/list.js +96 -0
- package/dist/modes/interactive/tasks/list.js.map +1 -0
- package/dist/modes/interactive/tasks/manager.d.ts +29 -36
- package/dist/modes/interactive/tasks/manager.d.ts.map +1 -1
- package/dist/modes/interactive/tasks/manager.js +315 -315
- package/dist/modes/interactive/tasks/manager.js.map +1 -1
- package/dist/modes/interactive/tasks/model.d.ts +21 -0
- package/dist/modes/interactive/tasks/model.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/model.js +41 -0
- package/dist/modes/interactive/tasks/model.js.map +1 -0
- package/dist/modes/interactive/tasks/render.d.ts +5 -19
- package/dist/modes/interactive/tasks/render.d.ts.map +1 -1
- package/dist/modes/interactive/tasks/render.js +18 -102
- package/dist/modes/interactive/tasks/render.js.map +1 -1
- package/dist/modes/interactive/tasks/task-view.d.ts +8 -48
- package/dist/modes/interactive/tasks/task-view.d.ts.map +1 -1
- package/dist/modes/interactive/tasks/task-view.js +11 -51
- package/dist/modes/interactive/tasks/task-view.js.map +1 -1
- package/dist/modes/interactive/tasks/text.d.ts +1 -7
- package/dist/modes/interactive/tasks/text.d.ts.map +1 -1
- package/dist/modes/interactive/tasks/text.js +6 -29
- package/dist/modes/interactive/tasks/text.js.map +1 -1
- package/dist/modes/interactive/tasks/viewport.d.ts +2 -0
- package/dist/modes/interactive/tasks/viewport.d.ts.map +1 -1
- package/dist/modes/interactive/tasks/viewport.js +17 -7
- package/dist/modes/interactive/tasks/viewport.js.map +1 -1
- package/dist/modes/interactive/tasks/views.d.ts +9 -0
- package/dist/modes/interactive/tasks/views.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/views.js +42 -0
- package/dist/modes/interactive/tasks/views.js.map +1 -0
- package/dist/modes/interactive/theme/system-theme.d.ts +2 -1
- package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/system-theme.js +16 -5
- package/dist/modes/interactive/theme/system-theme.js.map +1 -1
- package/dist/modes/interactive/tool-view/tool-execution.d.ts +4 -19
- package/dist/modes/interactive/tool-view/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/tool-view/tool-execution.js +23 -67
- package/dist/modes/interactive/tool-view/tool-execution.js.map +1 -1
- package/dist/utils/image-convert.d.ts +12 -0
- package/dist/utils/image-convert.d.ts.map +1 -1
- package/dist/utils/image-convert.js +45 -6
- package/dist/utils/image-convert.js.map +1 -1
- package/docs/bundled/README.md +0 -1
- package/docs/bundled/extensions/question.md +2 -2
- package/docs/bundled/extensions/statusline.md +24 -15
- package/docs/bundled/tasks.md +34 -48
- package/docs/codemode.md +207 -0
- package/docs/docs.json +4 -4
- package/docs/environment-variables.md +1 -1
- package/docs/extensions.md +11 -9
- package/docs/keybindings.md +14 -7
- package/docs/mcp.md +164 -82
- package/docs/models.md +51 -3
- package/docs/providers.md +8 -0
- package/docs/sdk.md +2 -2
- package/docs/session-format.md +12 -22
- package/docs/settings.md +4 -2
- package/docs/tui.md +1 -1
- package/docs/usage.md +6 -16
- package/examples/README.md +1 -1
- package/examples/extensions/README.md +1 -2
- package/examples/extensions/built-in-tool-renderer.ts +16 -40
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/minimal-mode.ts +24 -96
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/sdk/14-codemode-mcp.ts +2 -2
- package/npm-shrinkwrap.json +73 -62
- package/package.json +11 -10
- package/dist/bundle/chunks/anthropic-messages-KIXY7EDT.js +0 -6
- package/dist/bundle/chunks/azure-openai-responses-RPBERDXD.js +0 -2
- package/dist/bundle/chunks/chunk-CLLDCO64.js +0 -2
- package/dist/bundle/chunks/chunk-PJVFYVHE.js +0 -42
- package/dist/bundle/chunks/chunk-UUSTLCVC.js +0 -2
- package/dist/bundle/chunks/chunk-VWCWZD6E.js +0 -2
- package/dist/bundle/chunks/node-CXWYTK2I.js +0 -16
- package/dist/bundle/chunks/openai-completions-SKDGF6OE.js +0 -7
- package/dist/bundle/chunks/openai-responses-FPML4SSG.js +0 -3
- package/dist/bundle/chunks/virtual-modules-TQRORWJQ.js +0 -2
- package/dist/core/tasks/view-data.d.ts +0 -8
- package/dist/core/tasks/view-data.d.ts.map +0 -1
- package/dist/core/tasks/view-data.js +0 -61
- package/dist/core/tasks/view-data.js.map +0 -1
- package/dist/core/tasks/view.d.ts +0 -30
- package/dist/core/tasks/view.d.ts.map +0 -1
- package/dist/core/tasks/view.js +0 -50
- package/dist/core/tasks/view.js.map +0 -1
- package/dist/core/tools/renderers/shell-task.d.ts +0 -4
- package/dist/core/tools/renderers/shell-task.d.ts.map +0 -1
- package/dist/core/tools/renderers/shell-task.js +0 -35
- package/dist/core/tools/renderers/shell-task.js.map +0 -1
- package/dist/extensions/todo/constants.d.ts +0 -16
- package/dist/extensions/todo/constants.d.ts.map +0 -1
- package/dist/extensions/todo/constants.js +0 -30
- package/dist/extensions/todo/constants.js.map +0 -1
- package/dist/extensions/todo/index.d.ts +0 -3
- package/dist/extensions/todo/index.d.ts.map +0 -1
- package/dist/extensions/todo/index.js +0 -98
- package/dist/extensions/todo/index.js.map +0 -1
- package/dist/extensions/todo/schema.d.ts +0 -60
- package/dist/extensions/todo/schema.d.ts.map +0 -1
- package/dist/extensions/todo/schema.js +0 -56
- package/dist/extensions/todo/schema.js.map +0 -1
- package/dist/extensions/todo/state.d.ts +0 -34
- package/dist/extensions/todo/state.d.ts.map +0 -1
- package/dist/extensions/todo/state.js +0 -425
- package/dist/extensions/todo/state.js.map +0 -1
- package/dist/extensions/todo/view.d.ts +0 -36
- package/dist/extensions/todo/view.d.ts.map +0 -1
- package/dist/extensions/todo/view.js +0 -580
- package/dist/extensions/todo/view.js.map +0 -1
- package/dist/extensions/todo/widget.d.ts +0 -15
- package/dist/extensions/todo/widget.d.ts.map +0 -1
- package/dist/extensions/todo/widget.js +0 -50
- package/dist/extensions/todo/widget.js.map +0 -1
- package/dist/modes/interactive/components/daxnuts.d.ts +0 -23
- package/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
- package/dist/modes/interactive/components/daxnuts.js +0 -138
- package/dist/modes/interactive/components/daxnuts.js.map +0 -1
- package/dist/modes/interactive/tasks/fallback-view.d.ts +0 -4
- package/dist/modes/interactive/tasks/fallback-view.d.ts.map +0 -1
- package/dist/modes/interactive/tasks/fallback-view.js +0 -27
- package/dist/modes/interactive/tasks/fallback-view.js.map +0 -1
- package/docs/bundled/extensions/todo.md +0 -104
- package/examples/extensions/todo.ts +0 -297
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { truncateHead } from "../tools/truncate.js";
|
|
2
|
-
import { boundText, TASK_DETAILS_BYTES, TASK_RESULT_BYTES, TASK_TITLE_BYTES } from "./output.js";
|
|
1
|
+
import { truncateHead, truncateTail } from "../tools/truncate.js";
|
|
2
|
+
import { boundTail, boundText, TASK_DETAILS_BYTES, TASK_RESULT_BYTES, TASK_TITLE_BYTES } from "./output.js";
|
|
3
3
|
const OUTPUT_BYTES = 40 * 1024;
|
|
4
|
-
const REPORT_BYTES = 4 * 1024;
|
|
5
|
-
const MAX_ITEMS = 8;
|
|
6
4
|
const MODEL_LINES = 2000;
|
|
7
5
|
/** Read data properties only, including at the persisted-message boundary. */
|
|
8
6
|
function object(value) {
|
|
@@ -37,6 +35,22 @@ function string(value, bytes) {
|
|
|
37
35
|
}
|
|
38
36
|
return boundText(prefix, low);
|
|
39
37
|
}
|
|
38
|
+
/** The end of a text whose escaped JSON fits `bytes`: a command's outcome is at its end. */
|
|
39
|
+
function tail(value, bytes) {
|
|
40
|
+
const fits = (size) => Buffer.byteLength(JSON.stringify(boundTail(value, size).text)) <= bytes;
|
|
41
|
+
let low = 0;
|
|
42
|
+
let high = Buffer.byteLength(value);
|
|
43
|
+
if (fits(high))
|
|
44
|
+
return { text: value, truncated: false };
|
|
45
|
+
while (low < high) {
|
|
46
|
+
const middle = Math.ceil((low + high) / 2);
|
|
47
|
+
if (fits(middle))
|
|
48
|
+
low = middle;
|
|
49
|
+
else
|
|
50
|
+
high = middle - 1;
|
|
51
|
+
}
|
|
52
|
+
return boundTail(value, low);
|
|
53
|
+
}
|
|
40
54
|
function optionalString(source, key, bytes) {
|
|
41
55
|
const value = field(source, key);
|
|
42
56
|
return value === undefined ? undefined : string(value, bytes);
|
|
@@ -50,53 +64,6 @@ function text(value, bytes) {
|
|
|
50
64
|
const bounded = string(original, bytes);
|
|
51
65
|
return { text: bounded, truncated: truncated || bounded !== original };
|
|
52
66
|
}
|
|
53
|
-
function itemReport(value) {
|
|
54
|
-
const source = object(value);
|
|
55
|
-
return {
|
|
56
|
-
id: string(field(source, "id"), 256),
|
|
57
|
-
label: string(field(source, "label"), 512),
|
|
58
|
-
category: string(field(source, "category"), 128),
|
|
59
|
-
description: string(field(source, "description"), 512),
|
|
60
|
-
status: string(field(source, "status"), 128),
|
|
61
|
-
report: text(field(source, "report"), REPORT_BYTES),
|
|
62
|
-
error: optionalString(source, "error", 1024),
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
function items(value, read) {
|
|
66
|
-
if (!Array.isArray(value))
|
|
67
|
-
throw new Error("Expected items");
|
|
68
|
-
return Array.from({ length: Math.min(value.length, MAX_ITEMS) }, (_, index) => read(field(value, String(index))));
|
|
69
|
-
}
|
|
70
|
-
/** Shared by live publication and history restoration; never imports an executor's private details. */
|
|
71
|
-
export function readTaskProjection(value) {
|
|
72
|
-
const source = object(value);
|
|
73
|
-
const projection = {
|
|
74
|
-
nextStep: optionalString(source, "nextStep", 2048),
|
|
75
|
-
text: optionalString(source, "text", 16 * 1024),
|
|
76
|
-
};
|
|
77
|
-
const shell = field(source, "shell");
|
|
78
|
-
if (shell !== undefined) {
|
|
79
|
-
const fields = object(shell);
|
|
80
|
-
projection.shell = {
|
|
81
|
-
name: string(field(fields, "name"), 128),
|
|
82
|
-
output: text(field(fields, "output"), OUTPUT_BYTES),
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
const reports = field(source, "items");
|
|
86
|
-
if (reports !== undefined) {
|
|
87
|
-
projection.items = items(reports, (value) => {
|
|
88
|
-
const fields = object(value);
|
|
89
|
-
return {
|
|
90
|
-
...itemReport(value),
|
|
91
|
-
input: string(field(fields, "input"), 4096),
|
|
92
|
-
activity: string(field(fields, "activity"), 1024),
|
|
93
|
-
context: optionalString(fields, "context", 256),
|
|
94
|
-
usage: optionalString(fields, "usage", 256),
|
|
95
|
-
};
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
return projection;
|
|
99
|
-
}
|
|
100
67
|
function terminalStatus(value) {
|
|
101
68
|
if (value === "completed" ||
|
|
102
69
|
value === "partial" ||
|
|
@@ -110,15 +77,12 @@ function terminalStatus(value) {
|
|
|
110
77
|
export function readTaskCompletion(value) {
|
|
111
78
|
try {
|
|
112
79
|
const source = object(value);
|
|
113
|
-
if (field(source, "version") !==
|
|
80
|
+
if (field(source, "version") !== 2)
|
|
114
81
|
return undefined;
|
|
115
82
|
const taskId = field(source, "taskId");
|
|
116
83
|
const kind = field(source, "kind");
|
|
117
84
|
if (typeof kind !== "string" || !/^[a-z][a-z0-9-]{0,63}$/.test(kind))
|
|
118
85
|
return undefined;
|
|
119
|
-
const format = field(source, "format");
|
|
120
|
-
if (format !== "log" && format !== "report")
|
|
121
|
-
return undefined;
|
|
122
86
|
if (typeof taskId !== "string" ||
|
|
123
87
|
!taskId.startsWith(`${kind}-`) ||
|
|
124
88
|
taskId.length <= kind.length + 1 ||
|
|
@@ -135,55 +99,36 @@ export function readTaskCompletion(value) {
|
|
|
135
99
|
!Number.isSafeInteger(endedAt) ||
|
|
136
100
|
endedAt < startedAt)
|
|
137
101
|
return undefined;
|
|
138
|
-
const
|
|
139
|
-
|
|
102
|
+
const command = field(source, "command");
|
|
103
|
+
const outputPath = field(source, "outputPath");
|
|
104
|
+
const exitCode = field(source, "exitCode");
|
|
105
|
+
if (exitCode !== undefined &&
|
|
106
|
+
exitCode !== null &&
|
|
107
|
+
(typeof exitCode !== "number" || !Number.isSafeInteger(exitCode)))
|
|
108
|
+
return undefined;
|
|
109
|
+
// A clipped path would name a different file. Omit oversized paths intact.
|
|
110
|
+
if (outputPath !== undefined && typeof outputPath !== "string")
|
|
111
|
+
return undefined;
|
|
112
|
+
const snapshot = {
|
|
113
|
+
version: 2,
|
|
114
|
+
kind,
|
|
140
115
|
taskId,
|
|
141
116
|
title: string(field(source, "title"), TASK_TITLE_BYTES),
|
|
142
117
|
status: terminalStatus(field(source, "status")),
|
|
143
118
|
startedAt,
|
|
144
119
|
endedAt,
|
|
145
120
|
error: optionalString(source, "error", 4096),
|
|
146
|
-
|
|
121
|
+
command: command === undefined ? undefined : text(command, 8192),
|
|
122
|
+
cwd: optionalString(source, "cwd", 4096),
|
|
123
|
+
outputPath: outputPath &&
|
|
124
|
+
!outputPath.includes("\0") &&
|
|
125
|
+
outputPath.length <= 8192 &&
|
|
126
|
+
Buffer.byteLength(JSON.stringify(outputPath)) <= 8192
|
|
127
|
+
? outputPath
|
|
128
|
+
: undefined,
|
|
129
|
+
...(exitCode !== undefined ? { exitCode } : {}),
|
|
130
|
+
output: text(field(source, "output"), OUTPUT_BYTES),
|
|
147
131
|
};
|
|
148
|
-
let snapshot;
|
|
149
|
-
if (format === "log") {
|
|
150
|
-
const command = field(source, "command");
|
|
151
|
-
const outputPath = field(source, "outputPath");
|
|
152
|
-
const exitCode = field(source, "exitCode");
|
|
153
|
-
if (exitCode !== undefined &&
|
|
154
|
-
exitCode !== null &&
|
|
155
|
-
(typeof exitCode !== "number" || !Number.isSafeInteger(exitCode)))
|
|
156
|
-
return undefined;
|
|
157
|
-
// A clipped path would name a different file. Omit oversized paths intact.
|
|
158
|
-
if (outputPath !== undefined && typeof outputPath !== "string")
|
|
159
|
-
return undefined;
|
|
160
|
-
snapshot = {
|
|
161
|
-
...common,
|
|
162
|
-
kind,
|
|
163
|
-
format,
|
|
164
|
-
shell: optionalString(source, "shell", 128),
|
|
165
|
-
command: command === undefined ? undefined : text(command, 8192),
|
|
166
|
-
cwd: optionalString(source, "cwd", 4096),
|
|
167
|
-
...(exitCode !== undefined ? { exitCode } : {}),
|
|
168
|
-
outputPath: outputPath &&
|
|
169
|
-
!outputPath.includes("\0") &&
|
|
170
|
-
outputPath.length <= 8192 &&
|
|
171
|
-
Buffer.byteLength(JSON.stringify(outputPath)) <= 8192
|
|
172
|
-
? outputPath
|
|
173
|
-
: undefined,
|
|
174
|
-
output: text(field(source, "output"), OUTPUT_BYTES),
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
else {
|
|
178
|
-
const output = field(source, "output");
|
|
179
|
-
snapshot = {
|
|
180
|
-
...common,
|
|
181
|
-
kind,
|
|
182
|
-
format,
|
|
183
|
-
items: items(field(source, "items"), itemReport),
|
|
184
|
-
output: output === undefined ? undefined : text(output, OUTPUT_BYTES),
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
132
|
return Buffer.byteLength(JSON.stringify(snapshot)) <= TASK_DETAILS_BYTES ? snapshot : undefined;
|
|
188
133
|
}
|
|
189
134
|
catch {
|
|
@@ -191,48 +136,28 @@ export function readTaskCompletion(value) {
|
|
|
191
136
|
}
|
|
192
137
|
}
|
|
193
138
|
export function taskCompletionSnapshot(task) {
|
|
194
|
-
const
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
};
|
|
203
|
-
const common = {
|
|
204
|
-
version: 1,
|
|
139
|
+
const result = task.result?.content
|
|
140
|
+
.filter((block) => block.type === "text")
|
|
141
|
+
.map((block) => block.text)
|
|
142
|
+
.join("\n") ?? "";
|
|
143
|
+
const output = tail(result, OUTPUT_BYTES);
|
|
144
|
+
const snapshot = readTaskCompletion({
|
|
145
|
+
version: 2,
|
|
146
|
+
kind: task.kind,
|
|
205
147
|
taskId: task.id,
|
|
206
148
|
title: task.title,
|
|
207
149
|
status: task.status,
|
|
208
150
|
startedAt: task.startedAt,
|
|
209
151
|
endedAt: task.endedAt,
|
|
210
152
|
error: task.error,
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
? {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
format: "log",
|
|
218
|
-
shell: task.projection?.shell?.name,
|
|
219
|
-
command: task.command === undefined
|
|
220
|
-
? undefined
|
|
221
|
-
: { text: task.command, truncated: task.commandTruncated ?? false },
|
|
222
|
-
cwd: task.cwd,
|
|
223
|
-
outputPath: task.outputPath,
|
|
224
|
-
...(task.exitCode !== undefined ? { exitCode: task.exitCode } : {}),
|
|
225
|
-
output: task.projection?.shell?.output ?? output,
|
|
226
|
-
}
|
|
227
|
-
: {
|
|
228
|
-
...common,
|
|
229
|
-
kind: task.kind,
|
|
230
|
-
format: "report",
|
|
231
|
-
items: task.projection?.items ?? [],
|
|
232
|
-
output: task.projection?.items?.length ? undefined : output,
|
|
233
|
-
});
|
|
153
|
+
command: task.command === undefined ? undefined : { text: task.command, truncated: task.commandTruncated ?? false },
|
|
154
|
+
cwd: task.cwd,
|
|
155
|
+
outputPath: task.outputPath,
|
|
156
|
+
...(task.exitCode !== undefined ? { exitCode: task.exitCode } : {}),
|
|
157
|
+
output: { text: output.text, truncated: output.truncated || (task.resultTruncated ?? false) },
|
|
158
|
+
});
|
|
234
159
|
if (!snapshot)
|
|
235
|
-
throw new Error("Invalid
|
|
160
|
+
throw new Error("Invalid task completion snapshot");
|
|
236
161
|
return snapshot;
|
|
237
162
|
}
|
|
238
163
|
const singleLine = (value) => value.replace(/\s+/gu, " ").trim();
|
|
@@ -244,19 +169,25 @@ function modelText(value, bytes, lines) {
|
|
|
244
169
|
});
|
|
245
170
|
return result.content + (value.truncated || result.truncated ? OMISSION : "");
|
|
246
171
|
}
|
|
172
|
+
const EARLIER_OMISSION = "[Earlier output truncated; use tasks read for retained task details.]\n";
|
|
173
|
+
/** Output keeps its end, where the outcome is. */
|
|
174
|
+
function modelTail(value, bytes, lines) {
|
|
175
|
+
const result = truncateTail(value.text, {
|
|
176
|
+
maxBytes: Math.max(0, bytes - Buffer.byteLength(EARLIER_OMISSION)),
|
|
177
|
+
maxLines: Math.max(1, lines - 1),
|
|
178
|
+
});
|
|
179
|
+
return (value.truncated || result.truncated ? EARLIER_OMISSION : "") + result.content;
|
|
180
|
+
}
|
|
247
181
|
/** One bounded action hint per terminal outcome; completed work needs none. */
|
|
248
|
-
function nextStepLine(
|
|
249
|
-
switch (
|
|
182
|
+
function nextStepLine(status) {
|
|
183
|
+
switch (status) {
|
|
250
184
|
case "cancelled":
|
|
251
185
|
return "Next step: the task was cancelled — do not restart it unless the user asks.";
|
|
252
186
|
case "timeout":
|
|
253
187
|
return "Next step: the task hit its timeout; inspect the partial output above, then rerun with a longer timeout or in smaller pieces if still needed.";
|
|
254
188
|
case "failed":
|
|
255
|
-
case "partial":
|
|
256
|
-
if (snapshot.nextStep)
|
|
257
|
-
return snapshot.nextStep;
|
|
189
|
+
case "partial":
|
|
258
190
|
return "Next step: diagnose from the output above before retrying; rerun only what is still needed.";
|
|
259
|
-
}
|
|
260
191
|
default:
|
|
261
192
|
return "";
|
|
262
193
|
}
|
|
@@ -264,40 +195,22 @@ function nextStepLine(snapshot) {
|
|
|
264
195
|
/** The context and the card share facts; only the context receives this prose projection. */
|
|
265
196
|
function notificationText(snapshot) {
|
|
266
197
|
const header = [
|
|
267
|
-
`Background ${snapshot.kind} ${snapshot.taskId}: ${snapshot.status} — ${singleLine(snapshot.title)}`,
|
|
198
|
+
`Background ${snapshot.kind} ${snapshot.taskId}: ${snapshot.status}${snapshot.command ? "" : ` — ${singleLine(snapshot.title)}`}`,
|
|
268
199
|
snapshot.error ? `Error: ${singleLine(snapshot.error)}` : "",
|
|
269
200
|
].filter(Boolean);
|
|
270
|
-
if (snapshot.
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
header.push(`Output: ${singleLine(snapshot.outputPath)}`);
|
|
277
|
-
}
|
|
201
|
+
if (snapshot.command)
|
|
202
|
+
header.push(`Command:\n${modelText(snapshot.command, 8192, 128)}`);
|
|
203
|
+
if (snapshot.cwd)
|
|
204
|
+
header.push(`cwd: ${singleLine(snapshot.cwd)}`);
|
|
205
|
+
if (snapshot.outputPath)
|
|
206
|
+
header.push(`Output: ${singleLine(snapshot.outputPath)}`);
|
|
278
207
|
const prefix = `${header.join("\n")}\n\n`;
|
|
279
|
-
const guidance = nextStepLine(snapshot);
|
|
208
|
+
const guidance = nextStepLine(snapshot.status);
|
|
280
209
|
const suffix = guidance ? `\n\n${guidance}` : "";
|
|
281
210
|
const remaining = TASK_RESULT_BYTES - Buffer.byteLength(prefix) - Buffer.byteLength(suffix);
|
|
282
211
|
const lines = MODEL_LINES - prefix.split("\n").length - (guidance ? 3 : 0);
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
const budget = Math.floor((remaining - 8 * snapshot.items.length) / snapshot.items.length);
|
|
286
|
-
const lineBudget = Math.floor((lines - 4 * snapshot.items.length) / snapshot.items.length);
|
|
287
|
-
return (prefix +
|
|
288
|
-
snapshot.items
|
|
289
|
-
.map((worker, index) => {
|
|
290
|
-
const heading = `### ${index + 1}. ${singleLine(worker.description)} (${singleLine(worker.category)}) — ${singleLine(worker.status)}\n\n`;
|
|
291
|
-
const reason = worker.error ? `Error: ${singleLine(worker.error)}\n\n` : "";
|
|
292
|
-
const body = worker.report.text
|
|
293
|
-
? worker.report
|
|
294
|
-
: { text: "No report returned.", truncated: worker.report.truncated };
|
|
295
|
-
return heading + reason + modelText(body, budget - Buffer.byteLength(heading + reason), lineBudget);
|
|
296
|
-
})
|
|
297
|
-
.join("\n\n---\n\n") +
|
|
298
|
-
suffix);
|
|
299
|
-
}
|
|
300
|
-
return (prefix + modelText(snapshot.output ?? { text: "No text result.", truncated: false }, remaining, lines) + suffix);
|
|
212
|
+
const output = snapshot.output.text ? snapshot.output : { text: "No text result.", truncated: false };
|
|
213
|
+
return prefix + modelTail(output, remaining, lines) + suffix;
|
|
301
214
|
}
|
|
302
215
|
export function taskCompletionMessage(task) {
|
|
303
216
|
const details = taskCompletionSnapshot(task);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presentation.js","sourceRoot":"","sources":["../../../src/core/tasks/presentation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CustomMessage } from \"../messages.ts\";\nimport { truncateHead } from \"../tools/truncate.ts\";\nimport { boundText, TASK_DETAILS_BYTES, TASK_RESULT_BYTES, TASK_TITLE_BYTES } from \"./output.ts\";\nimport type {\n\tTaskCompletionSnapshot,\n\tTaskItem,\n\tTaskItemReport,\n\tTaskProjection,\n\tTaskSnapshot,\n\tTaskTerminalStatus,\n\tTaskText,\n} from \"./types.ts\";\n\nconst OUTPUT_BYTES = 40 * 1024;\nconst REPORT_BYTES = 4 * 1024;\nconst MAX_ITEMS = 8;\nconst MODEL_LINES = 2000;\n\n/** Read data properties only, including at the persisted-message boundary. */\nfunction object(value: unknown): object {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error(\"Expected snapshot object\");\n\tconst prototype = Object.getPrototypeOf(value);\n\tif (prototype !== Object.prototype && prototype !== null) throw new Error(\"Expected plain snapshot\");\n\treturn value;\n}\n\nfunction field(value: object, key: string): unknown {\n\tconst descriptor = Object.getOwnPropertyDescriptor(value, key);\n\tif (descriptor && !(\"value\" in descriptor)) throw new Error(\"Unexpected snapshot accessor\");\n\treturn descriptor?.value;\n}\n\n/** Bound escaped JSON as well as UTF-8, without serializing an unbounded source. */\nfunction string(value: unknown, bytes: number): string {\n\tif (typeof value !== \"string\") throw new Error(\"Expected snapshot text\");\n\tconst prefix = boundText(value, bytes - 2);\n\tif (Buffer.byteLength(JSON.stringify(prefix)) <= bytes) return prefix;\n\tlet low = 0;\n\tlet high = Buffer.byteLength(prefix);\n\twhile (low < high) {\n\t\tconst middle = Math.ceil((low + high) / 2);\n\t\tif (Buffer.byteLength(JSON.stringify(boundText(prefix, middle))) <= bytes) low = middle;\n\t\telse high = middle - 1;\n\t}\n\treturn boundText(prefix, low);\n}\n\nfunction optionalString(source: object, key: string, bytes: number): string | undefined {\n\tconst value = field(source, key);\n\treturn value === undefined ? undefined : string(value, bytes);\n}\n\nfunction text(value: unknown, bytes: number): TaskText {\n\tconst source = object(value);\n\tconst original = field(source, \"text\");\n\tconst truncated = field(source, \"truncated\");\n\tif (typeof truncated !== \"boolean\") throw new Error(\"Expected truncation flag\");\n\tconst bounded = string(original, bytes);\n\treturn { text: bounded, truncated: truncated || bounded !== original };\n}\n\nfunction itemReport(value: unknown): TaskItemReport {\n\tconst source = object(value);\n\treturn {\n\t\tid: string(field(source, \"id\"), 256),\n\t\tlabel: string(field(source, \"label\"), 512),\n\t\tcategory: string(field(source, \"category\"), 128),\n\t\tdescription: string(field(source, \"description\"), 512),\n\t\tstatus: string(field(source, \"status\"), 128),\n\t\treport: text(field(source, \"report\"), REPORT_BYTES),\n\t\terror: optionalString(source, \"error\", 1024),\n\t};\n}\n\nfunction items<T>(value: unknown, read: (value: unknown) => T): T[] {\n\tif (!Array.isArray(value)) throw new Error(\"Expected items\");\n\treturn Array.from({ length: Math.min(value.length, MAX_ITEMS) }, (_, index) => read(field(value, String(index))));\n}\n\n/** Shared by live publication and history restoration; never imports an executor's private details. */\nexport function readTaskProjection(value: unknown): TaskProjection {\n\tconst source = object(value);\n\tconst projection: TaskProjection = {\n\t\tnextStep: optionalString(source, \"nextStep\", 2048),\n\t\ttext: optionalString(source, \"text\", 16 * 1024),\n\t};\n\tconst shell = field(source, \"shell\");\n\tif (shell !== undefined) {\n\t\tconst fields = object(shell);\n\t\tprojection.shell = {\n\t\t\tname: string(field(fields, \"name\"), 128),\n\t\t\toutput: text(field(fields, \"output\"), OUTPUT_BYTES),\n\t\t};\n\t}\n\tconst reports = field(source, \"items\");\n\tif (reports !== undefined) {\n\t\tprojection.items = items(reports, (value): TaskItem => {\n\t\t\tconst fields = object(value);\n\t\t\treturn {\n\t\t\t\t...itemReport(value),\n\t\t\t\tinput: string(field(fields, \"input\"), 4096),\n\t\t\t\tactivity: string(field(fields, \"activity\"), 1024),\n\t\t\t\tcontext: optionalString(fields, \"context\", 256),\n\t\t\t\tusage: optionalString(fields, \"usage\", 256),\n\t\t\t};\n\t\t});\n\t}\n\treturn projection;\n}\n\nfunction terminalStatus(value: unknown): TaskTerminalStatus {\n\tif (\n\t\tvalue === \"completed\" ||\n\t\tvalue === \"partial\" ||\n\t\tvalue === \"failed\" ||\n\t\tvalue === \"cancelled\" ||\n\t\tvalue === \"timeout\"\n\t)\n\t\treturn value;\n\tthrow new Error(\"Expected terminal status\");\n}\n\n/** Only this format is understood. Invalid/older details receive the renderer's bounded plain-text fallback. */\nexport function readTaskCompletion(value: unknown): TaskCompletionSnapshot | undefined {\n\ttry {\n\t\tconst source = object(value);\n\t\tif (field(source, \"version\") !== 1) return undefined;\n\t\tconst taskId = field(source, \"taskId\");\n\t\tconst kind = field(source, \"kind\");\n\t\tif (typeof kind !== \"string\" || !/^[a-z][a-z0-9-]{0,63}$/.test(kind)) return undefined;\n\t\tconst format = field(source, \"format\");\n\t\tif (format !== \"log\" && format !== \"report\") return undefined;\n\t\tif (\n\t\t\ttypeof taskId !== \"string\" ||\n\t\t\t!taskId.startsWith(`${kind}-`) ||\n\t\t\ttaskId.length <= kind.length + 1 ||\n\t\t\ttaskId.length > 512 ||\n\t\t\tBuffer.byteLength(taskId) > 512 ||\n\t\t\ttaskId.includes(\"\\0\")\n\t\t)\n\t\t\treturn undefined;\n\t\tconst startedAt = field(source, \"startedAt\");\n\t\tconst endedAt = field(source, \"endedAt\");\n\t\tif (\n\t\t\ttypeof startedAt !== \"number\" ||\n\t\t\t!Number.isSafeInteger(startedAt) ||\n\t\t\tstartedAt < 0 ||\n\t\t\ttypeof endedAt !== \"number\" ||\n\t\t\t!Number.isSafeInteger(endedAt) ||\n\t\t\tendedAt < startedAt\n\t\t)\n\t\t\treturn undefined;\n\t\tconst common = {\n\t\t\tversion: 1 as const,\n\t\t\ttaskId,\n\t\t\ttitle: string(field(source, \"title\"), TASK_TITLE_BYTES),\n\t\t\tstatus: terminalStatus(field(source, \"status\")),\n\t\t\tstartedAt,\n\t\t\tendedAt,\n\t\t\terror: optionalString(source, \"error\", 4096),\n\t\t\tnextStep: optionalString(source, \"nextStep\", 2048),\n\t\t};\n\t\tlet snapshot: TaskCompletionSnapshot;\n\t\tif (format === \"log\") {\n\t\t\tconst command = field(source, \"command\");\n\t\t\tconst outputPath = field(source, \"outputPath\");\n\t\t\tconst exitCode = field(source, \"exitCode\");\n\t\t\tif (\n\t\t\t\texitCode !== undefined &&\n\t\t\t\texitCode !== null &&\n\t\t\t\t(typeof exitCode !== \"number\" || !Number.isSafeInteger(exitCode))\n\t\t\t)\n\t\t\t\treturn undefined;\n\t\t\t// A clipped path would name a different file. Omit oversized paths intact.\n\t\t\tif (outputPath !== undefined && typeof outputPath !== \"string\") return undefined;\n\t\t\tsnapshot = {\n\t\t\t\t...common,\n\t\t\t\tkind,\n\t\t\t\tformat,\n\t\t\t\tshell: optionalString(source, \"shell\", 128),\n\t\t\t\tcommand: command === undefined ? undefined : text(command, 8192),\n\t\t\t\tcwd: optionalString(source, \"cwd\", 4096),\n\t\t\t\t...(exitCode !== undefined ? { exitCode } : {}),\n\t\t\t\toutputPath:\n\t\t\t\t\toutputPath &&\n\t\t\t\t\t!outputPath.includes(\"\\0\") &&\n\t\t\t\t\toutputPath.length <= 8192 &&\n\t\t\t\t\tBuffer.byteLength(JSON.stringify(outputPath)) <= 8192\n\t\t\t\t\t\t? outputPath\n\t\t\t\t\t\t: undefined,\n\t\t\t\toutput: text(field(source, \"output\"), OUTPUT_BYTES),\n\t\t\t};\n\t\t} else {\n\t\t\tconst output = field(source, \"output\");\n\t\t\tsnapshot = {\n\t\t\t\t...common,\n\t\t\t\tkind,\n\t\t\t\tformat,\n\t\t\t\titems: items(field(source, \"items\"), itemReport),\n\t\t\t\toutput: output === undefined ? undefined : text(output, OUTPUT_BYTES),\n\t\t\t};\n\t\t}\n\t\treturn Buffer.byteLength(JSON.stringify(snapshot)) <= TASK_DETAILS_BYTES ? snapshot : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function taskCompletionSnapshot(task: TaskSnapshot): TaskCompletionSnapshot {\n\tconst output: TaskText = {\n\t\ttext:\n\t\t\ttask.result?.content\n\t\t\t\t.filter((block) => block.type === \"text\")\n\t\t\t\t.map((block) => block.text)\n\t\t\t\t.join(\"\\n\") ||\n\t\t\ttask.projection?.text ||\n\t\t\t\"\",\n\t\ttruncated: task.resultTruncated ?? false,\n\t};\n\tconst common = {\n\t\tversion: 1,\n\t\ttaskId: task.id,\n\t\ttitle: task.title,\n\t\tstatus: task.status,\n\t\tstartedAt: task.startedAt,\n\t\tendedAt: task.endedAt,\n\t\terror: task.error,\n\t\tnextStep: task.projection?.nextStep,\n\t};\n\tconst snapshot = readTaskCompletion(\n\t\ttask.format === \"log\"\n\t\t\t? {\n\t\t\t\t\t...common,\n\t\t\t\t\tkind: task.kind,\n\t\t\t\t\tformat: \"log\",\n\t\t\t\t\tshell: task.projection?.shell?.name,\n\t\t\t\t\tcommand:\n\t\t\t\t\t\ttask.command === undefined\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: { text: task.command, truncated: task.commandTruncated ?? false },\n\t\t\t\t\tcwd: task.cwd,\n\t\t\t\t\toutputPath: task.outputPath,\n\t\t\t\t\t...(task.exitCode !== undefined ? { exitCode: task.exitCode } : {}),\n\t\t\t\t\toutput: task.projection?.shell?.output ?? output,\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\t...common,\n\t\t\t\t\tkind: task.kind,\n\t\t\t\t\tformat: \"report\",\n\t\t\t\t\titems: task.projection?.items ?? [],\n\t\t\t\t\toutput: task.projection?.items?.length ? undefined : output,\n\t\t\t\t},\n\t);\n\tif (!snapshot) throw new Error(\"Invalid background completion snapshot\");\n\treturn snapshot;\n}\n\nconst singleLine = (value: string) => value.replace(/\\s+/gu, \" \").trim();\nconst OMISSION = \"\\n[Saved output truncated; use tasks read for retained task details.]\";\n\nfunction modelText(value: TaskText, bytes: number, lines: number): string {\n\tconst result = truncateHead(value.text, {\n\t\tmaxBytes: Math.max(0, bytes - Buffer.byteLength(OMISSION)),\n\t\tmaxLines: Math.max(1, lines - 1),\n\t});\n\treturn result.content + (value.truncated || result.truncated ? OMISSION : \"\");\n}\n\n/** One bounded action hint per terminal outcome; completed work needs none. */\nfunction nextStepLine(snapshot: TaskCompletionSnapshot): string {\n\tswitch (snapshot.status) {\n\t\tcase \"cancelled\":\n\t\t\treturn \"Next step: the task was cancelled — do not restart it unless the user asks.\";\n\t\tcase \"timeout\":\n\t\t\treturn \"Next step: the task hit its timeout; inspect the partial output above, then rerun with a longer timeout or in smaller pieces if still needed.\";\n\t\tcase \"failed\":\n\t\tcase \"partial\": {\n\t\t\tif (snapshot.nextStep) return snapshot.nextStep;\n\t\t\treturn \"Next step: diagnose from the output above before retrying; rerun only what is still needed.\";\n\t\t}\n\t\tdefault:\n\t\t\treturn \"\";\n\t}\n}\n\n/** The context and the card share facts; only the context receives this prose projection. */\nfunction notificationText(snapshot: TaskCompletionSnapshot): string {\n\tconst header = [\n\t\t`Background ${snapshot.kind} ${snapshot.taskId}: ${snapshot.status} — ${singleLine(snapshot.title)}`,\n\t\tsnapshot.error ? `Error: ${singleLine(snapshot.error)}` : \"\",\n\t].filter(Boolean);\n\tif (snapshot.format === \"log\") {\n\t\tif (snapshot.command) header.push(`Command:\\n${modelText(snapshot.command, 8192, 128)}`);\n\t\tif (snapshot.cwd) header.push(`cwd: ${singleLine(snapshot.cwd)}`);\n\t\tif (snapshot.outputPath) header.push(`Output: ${singleLine(snapshot.outputPath)}`);\n\t}\n\tconst prefix = `${header.join(\"\\n\")}\\n\\n`;\n\tconst guidance = nextStepLine(snapshot);\n\tconst suffix = guidance ? `\\n\\n${guidance}` : \"\";\n\tconst remaining = TASK_RESULT_BYTES - Buffer.byteLength(prefix) - Buffer.byteLength(suffix);\n\tconst lines = MODEL_LINES - prefix.split(\"\\n\").length - (guidance ? 3 : 0);\n\tif (snapshot.format === \"report\" && snapshot.items.length) {\n\t\t// Allocate before formatting, so one verbose report cannot erase later items.\n\t\tconst budget = Math.floor((remaining - 8 * snapshot.items.length) / snapshot.items.length);\n\t\tconst lineBudget = Math.floor((lines - 4 * snapshot.items.length) / snapshot.items.length);\n\t\treturn (\n\t\t\tprefix +\n\t\t\tsnapshot.items\n\t\t\t\t.map((worker, index) => {\n\t\t\t\t\tconst heading = `### ${index + 1}. ${singleLine(worker.description)} (${singleLine(worker.category)}) — ${singleLine(worker.status)}\\n\\n`;\n\t\t\t\t\tconst reason = worker.error ? `Error: ${singleLine(worker.error)}\\n\\n` : \"\";\n\t\t\t\t\tconst body = worker.report.text\n\t\t\t\t\t\t? worker.report\n\t\t\t\t\t\t: { text: \"No report returned.\", truncated: worker.report.truncated };\n\t\t\t\t\treturn heading + reason + modelText(body, budget - Buffer.byteLength(heading + reason), lineBudget);\n\t\t\t\t})\n\t\t\t\t.join(\"\\n\\n---\\n\\n\") +\n\t\t\tsuffix\n\t\t);\n\t}\n\treturn (\n\t\tprefix + modelText(snapshot.output ?? { text: \"No text result.\", truncated: false }, remaining, lines) + suffix\n\t);\n}\n\nexport function taskCompletionMessage(task: TaskSnapshot): CustomMessage<TaskCompletionSnapshot> {\n\tconst details = taskCompletionSnapshot(task);\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType: \"task-completion\",\n\t\tdisplay: true,\n\t\tcontent: notificationText(details),\n\t\tdetails,\n\t\ttimestamp: Date.now(),\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"presentation.js","sourceRoot":"","sources":["../../../src/core/tasks/presentation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CustomMessage } from \"../messages.ts\";\nimport { truncateHead, truncateTail } from \"../tools/truncate.ts\";\nimport { boundTail, boundText, TASK_DETAILS_BYTES, TASK_RESULT_BYTES, TASK_TITLE_BYTES } from \"./output.ts\";\nimport type { TaskCompletionSnapshot, TaskSnapshot, TaskTerminalStatus, TaskText } from \"./types.ts\";\n\nconst OUTPUT_BYTES = 40 * 1024;\nconst MODEL_LINES = 2000;\n\n/** Read data properties only, including at the persisted-message boundary. */\nfunction object(value: unknown): object {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error(\"Expected snapshot object\");\n\tconst prototype = Object.getPrototypeOf(value);\n\tif (prototype !== Object.prototype && prototype !== null) throw new Error(\"Expected plain snapshot\");\n\treturn value;\n}\n\nfunction field(value: object, key: string): unknown {\n\tconst descriptor = Object.getOwnPropertyDescriptor(value, key);\n\tif (descriptor && !(\"value\" in descriptor)) throw new Error(\"Unexpected snapshot accessor\");\n\treturn descriptor?.value;\n}\n\n/** Bound escaped JSON as well as UTF-8, without serializing an unbounded source. */\nfunction string(value: unknown, bytes: number): string {\n\tif (typeof value !== \"string\") throw new Error(\"Expected snapshot text\");\n\tconst prefix = boundText(value, bytes - 2);\n\tif (Buffer.byteLength(JSON.stringify(prefix)) <= bytes) return prefix;\n\tlet low = 0;\n\tlet high = Buffer.byteLength(prefix);\n\twhile (low < high) {\n\t\tconst middle = Math.ceil((low + high) / 2);\n\t\tif (Buffer.byteLength(JSON.stringify(boundText(prefix, middle))) <= bytes) low = middle;\n\t\telse high = middle - 1;\n\t}\n\treturn boundText(prefix, low);\n}\n\n/** The end of a text whose escaped JSON fits `bytes`: a command's outcome is at its end. */\nfunction tail(value: string, bytes: number): TaskText {\n\tconst fits = (size: number) => Buffer.byteLength(JSON.stringify(boundTail(value, size).text)) <= bytes;\n\tlet low = 0;\n\tlet high = Buffer.byteLength(value);\n\tif (fits(high)) return { text: value, truncated: false };\n\twhile (low < high) {\n\t\tconst middle = Math.ceil((low + high) / 2);\n\t\tif (fits(middle)) low = middle;\n\t\telse high = middle - 1;\n\t}\n\treturn boundTail(value, low);\n}\n\nfunction optionalString(source: object, key: string, bytes: number): string | undefined {\n\tconst value = field(source, key);\n\treturn value === undefined ? undefined : string(value, bytes);\n}\n\nfunction text(value: unknown, bytes: number): TaskText {\n\tconst source = object(value);\n\tconst original = field(source, \"text\");\n\tconst truncated = field(source, \"truncated\");\n\tif (typeof truncated !== \"boolean\") throw new Error(\"Expected truncation flag\");\n\tconst bounded = string(original, bytes);\n\treturn { text: bounded, truncated: truncated || bounded !== original };\n}\n\nfunction terminalStatus(value: unknown): TaskTerminalStatus {\n\tif (\n\t\tvalue === \"completed\" ||\n\t\tvalue === \"partial\" ||\n\t\tvalue === \"failed\" ||\n\t\tvalue === \"cancelled\" ||\n\t\tvalue === \"timeout\"\n\t)\n\t\treturn value;\n\tthrow new Error(\"Expected terminal status\");\n}\n\n/** Only this format is understood. Invalid/older details receive the renderer's bounded plain-text fallback. */\nexport function readTaskCompletion(value: unknown): TaskCompletionSnapshot | undefined {\n\ttry {\n\t\tconst source = object(value);\n\t\tif (field(source, \"version\") !== 2) return undefined;\n\t\tconst taskId = field(source, \"taskId\");\n\t\tconst kind = field(source, \"kind\");\n\t\tif (typeof kind !== \"string\" || !/^[a-z][a-z0-9-]{0,63}$/.test(kind)) return undefined;\n\t\tif (\n\t\t\ttypeof taskId !== \"string\" ||\n\t\t\t!taskId.startsWith(`${kind}-`) ||\n\t\t\ttaskId.length <= kind.length + 1 ||\n\t\t\ttaskId.length > 512 ||\n\t\t\tBuffer.byteLength(taskId) > 512 ||\n\t\t\ttaskId.includes(\"\\0\")\n\t\t)\n\t\t\treturn undefined;\n\t\tconst startedAt = field(source, \"startedAt\");\n\t\tconst endedAt = field(source, \"endedAt\");\n\t\tif (\n\t\t\ttypeof startedAt !== \"number\" ||\n\t\t\t!Number.isSafeInteger(startedAt) ||\n\t\t\tstartedAt < 0 ||\n\t\t\ttypeof endedAt !== \"number\" ||\n\t\t\t!Number.isSafeInteger(endedAt) ||\n\t\t\tendedAt < startedAt\n\t\t)\n\t\t\treturn undefined;\n\t\tconst command = field(source, \"command\");\n\t\tconst outputPath = field(source, \"outputPath\");\n\t\tconst exitCode = field(source, \"exitCode\");\n\t\tif (\n\t\t\texitCode !== undefined &&\n\t\t\texitCode !== null &&\n\t\t\t(typeof exitCode !== \"number\" || !Number.isSafeInteger(exitCode))\n\t\t)\n\t\t\treturn undefined;\n\t\t// A clipped path would name a different file. Omit oversized paths intact.\n\t\tif (outputPath !== undefined && typeof outputPath !== \"string\") return undefined;\n\t\tconst snapshot: TaskCompletionSnapshot = {\n\t\t\tversion: 2,\n\t\t\tkind,\n\t\t\ttaskId,\n\t\t\ttitle: string(field(source, \"title\"), TASK_TITLE_BYTES),\n\t\t\tstatus: terminalStatus(field(source, \"status\")),\n\t\t\tstartedAt,\n\t\t\tendedAt,\n\t\t\terror: optionalString(source, \"error\", 4096),\n\t\t\tcommand: command === undefined ? undefined : text(command, 8192),\n\t\t\tcwd: optionalString(source, \"cwd\", 4096),\n\t\t\toutputPath:\n\t\t\t\toutputPath &&\n\t\t\t\t!outputPath.includes(\"\\0\") &&\n\t\t\t\toutputPath.length <= 8192 &&\n\t\t\t\tBuffer.byteLength(JSON.stringify(outputPath)) <= 8192\n\t\t\t\t\t? outputPath\n\t\t\t\t\t: undefined,\n\t\t\t...(exitCode !== undefined ? { exitCode } : {}),\n\t\t\toutput: text(field(source, \"output\"), OUTPUT_BYTES),\n\t\t};\n\t\treturn Buffer.byteLength(JSON.stringify(snapshot)) <= TASK_DETAILS_BYTES ? snapshot : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function taskCompletionSnapshot(task: TaskSnapshot): TaskCompletionSnapshot {\n\tconst result =\n\t\ttask.result?.content\n\t\t\t.filter((block) => block.type === \"text\")\n\t\t\t.map((block) => block.text)\n\t\t\t.join(\"\\n\") ?? \"\";\n\tconst output = tail(result, OUTPUT_BYTES);\n\tconst snapshot = readTaskCompletion({\n\t\tversion: 2,\n\t\tkind: task.kind,\n\t\ttaskId: task.id,\n\t\ttitle: task.title,\n\t\tstatus: task.status,\n\t\tstartedAt: task.startedAt,\n\t\tendedAt: task.endedAt,\n\t\terror: task.error,\n\t\tcommand:\n\t\t\ttask.command === undefined ? undefined : { text: task.command, truncated: task.commandTruncated ?? false },\n\t\tcwd: task.cwd,\n\t\toutputPath: task.outputPath,\n\t\t...(task.exitCode !== undefined ? { exitCode: task.exitCode } : {}),\n\t\toutput: { text: output.text, truncated: output.truncated || (task.resultTruncated ?? false) },\n\t});\n\tif (!snapshot) throw new Error(\"Invalid task completion snapshot\");\n\treturn snapshot;\n}\n\nconst singleLine = (value: string) => value.replace(/\\s+/gu, \" \").trim();\nconst OMISSION = \"\\n[Saved output truncated; use tasks read for retained task details.]\";\n\nfunction modelText(value: TaskText, bytes: number, lines: number): string {\n\tconst result = truncateHead(value.text, {\n\t\tmaxBytes: Math.max(0, bytes - Buffer.byteLength(OMISSION)),\n\t\tmaxLines: Math.max(1, lines - 1),\n\t});\n\treturn result.content + (value.truncated || result.truncated ? OMISSION : \"\");\n}\n\nconst EARLIER_OMISSION = \"[Earlier output truncated; use tasks read for retained task details.]\\n\";\n\n/** Output keeps its end, where the outcome is. */\nfunction modelTail(value: TaskText, bytes: number, lines: number): string {\n\tconst result = truncateTail(value.text, {\n\t\tmaxBytes: Math.max(0, bytes - Buffer.byteLength(EARLIER_OMISSION)),\n\t\tmaxLines: Math.max(1, lines - 1),\n\t});\n\treturn (value.truncated || result.truncated ? EARLIER_OMISSION : \"\") + result.content;\n}\n\n/** One bounded action hint per terminal outcome; completed work needs none. */\nfunction nextStepLine(status: TaskTerminalStatus): string {\n\tswitch (status) {\n\t\tcase \"cancelled\":\n\t\t\treturn \"Next step: the task was cancelled — do not restart it unless the user asks.\";\n\t\tcase \"timeout\":\n\t\t\treturn \"Next step: the task hit its timeout; inspect the partial output above, then rerun with a longer timeout or in smaller pieces if still needed.\";\n\t\tcase \"failed\":\n\t\tcase \"partial\":\n\t\t\treturn \"Next step: diagnose from the output above before retrying; rerun only what is still needed.\";\n\t\tdefault:\n\t\t\treturn \"\";\n\t}\n}\n\n/** The context and the card share facts; only the context receives this prose projection. */\nfunction notificationText(snapshot: TaskCompletionSnapshot): string {\n\tconst header = [\n\t\t`Background ${snapshot.kind} ${snapshot.taskId}: ${snapshot.status}${snapshot.command ? \"\" : ` — ${singleLine(snapshot.title)}`}`,\n\t\tsnapshot.error ? `Error: ${singleLine(snapshot.error)}` : \"\",\n\t].filter(Boolean);\n\tif (snapshot.command) header.push(`Command:\\n${modelText(snapshot.command, 8192, 128)}`);\n\tif (snapshot.cwd) header.push(`cwd: ${singleLine(snapshot.cwd)}`);\n\tif (snapshot.outputPath) header.push(`Output: ${singleLine(snapshot.outputPath)}`);\n\tconst prefix = `${header.join(\"\\n\")}\\n\\n`;\n\tconst guidance = nextStepLine(snapshot.status);\n\tconst suffix = guidance ? `\\n\\n${guidance}` : \"\";\n\tconst remaining = TASK_RESULT_BYTES - Buffer.byteLength(prefix) - Buffer.byteLength(suffix);\n\tconst lines = MODEL_LINES - prefix.split(\"\\n\").length - (guidance ? 3 : 0);\n\tconst output = snapshot.output.text ? snapshot.output : { text: \"No text result.\", truncated: false };\n\treturn prefix + modelTail(output, remaining, lines) + suffix;\n}\n\nexport function taskCompletionMessage(task: TaskSnapshot): CustomMessage<TaskCompletionSnapshot> {\n\tconst details = taskCompletionSnapshot(task);\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType: \"task-completion\",\n\t\tdisplay: true,\n\t\tcontent: notificationText(details),\n\t\tdetails,\n\t\ttimestamp: Date.now(),\n\t};\n}\n"]}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
+
import type { AgentToolResult } from "@earendil-works/pi-agent-core";
|
|
1
2
|
import { type TaskExecution, type TaskRead, type TaskRuntimeOptions, type TaskSnapshot, type TasksContext, type TaskToolOutcome } from "./types.ts";
|
|
2
|
-
import { TaskViewRegistry } from "./view.ts";
|
|
3
3
|
/** Session-local supervision. Executors own their processes, items and output files. */
|
|
4
4
|
export declare class TaskRuntime implements TasksContext {
|
|
5
|
-
readonly views: TaskViewRegistry;
|
|
6
5
|
private readonly store;
|
|
7
6
|
private readonly executions;
|
|
8
7
|
private readonly listeners;
|
|
@@ -18,13 +17,18 @@ export declare class TaskRuntime implements TasksContext {
|
|
|
18
17
|
/**
|
|
19
18
|
* Rehydrate terminal version-2 custom data only, newest endedAt in each history
|
|
20
19
|
* (later input wins ties). Existing runtime records win ID collisions. No execution, accounting,
|
|
21
|
-
* notification, or deletion ownership is restored
|
|
22
|
-
* The host supplies the current branch; closed services
|
|
20
|
+
* notification, or deletion ownership is restored. Foreground records take their output
|
|
21
|
+
* from the branch's tool results. The host supplies the current branch; closed services
|
|
22
|
+
* ignore restoration.
|
|
23
23
|
*/
|
|
24
|
-
restoreHistory(records: readonly unknown[]): void;
|
|
24
|
+
restoreHistory(records: readonly unknown[], toolResults?: ReadonlyMap<string, AgentToolResult<unknown>["content"]>): void;
|
|
25
25
|
get enabled(): boolean;
|
|
26
26
|
setEnabled(enabled: boolean): void;
|
|
27
|
+
/** Foreground work is bounded by its caller; only background work holds a slot. */
|
|
28
|
+
private backgroundActive;
|
|
29
|
+
private limitError;
|
|
27
30
|
execute<T>(execution: TaskExecution<T>): Promise<TaskToolOutcome<T>>;
|
|
31
|
+
private detachable;
|
|
28
32
|
detachForeground(): number;
|
|
29
33
|
detach(id: string): boolean;
|
|
30
34
|
private prepareDetach;
|
|
@@ -50,18 +54,21 @@ export declare class TaskRuntime implements TasksContext {
|
|
|
50
54
|
holdDelivery(id: string): () => void;
|
|
51
55
|
pause(): () => void;
|
|
52
56
|
pendingNotifications(): TaskSnapshot[];
|
|
53
|
-
/**
|
|
54
|
-
* Only explicit result-delivery holds delay an automatic completion.
|
|
55
|
-
*/
|
|
57
|
+
/** Only explicit result-delivery holds delay an automatic completion. */
|
|
56
58
|
private candidate;
|
|
57
59
|
claimNotification(id: string): boolean;
|
|
58
60
|
markDelivered(id: string): void;
|
|
59
61
|
releaseNotification(id: string): void;
|
|
60
62
|
close(): void;
|
|
61
63
|
shutdown(graceMs?: number): Promise<void>;
|
|
64
|
+
/** Running tasks whose launch anchor is outside the branch made of `ancestors`. */
|
|
65
|
+
activeOutsideBranch(ancestors: ReadonlySet<string>): TaskSnapshot[];
|
|
66
|
+
/**
|
|
67
|
+
* Hidden results stay pending: returning to their branch delivers them again.
|
|
68
|
+
* Restored history is already delivered.
|
|
69
|
+
*/
|
|
62
70
|
cancelOutsideBranch(ancestors: ReadonlySet<string>): Promise<void>;
|
|
63
71
|
private drain;
|
|
64
|
-
private snapshot;
|
|
65
72
|
private emit;
|
|
66
73
|
}
|
|
67
74
|
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/core/tasks/runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/core/tasks/runtime.ts"],"names":[],"mappings":"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"}
|