@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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/extensions/todo/view.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * todo/view.ts — v3 presentation: the one-line above-editor widget renderer,\n * tool call/group renderers, the /todos list formatter, and model-facing\n * result text. Wire input (args, details, snapshots) is read defensively and\n * bounded so partial or hostile input cannot grow output without limit.\n */\n\nimport { truncateToWidth, visibleWidth } from \"@earendil-works/pi-tui\";\nimport type { AgentToolResult } from \"../../core/extensions/types.ts\";\nimport type { Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport {\n\tTODO_MAX_BATCH_ITEMS,\n\tTODO_MAX_DESCRIPTION_LENGTH,\n\tTODO_MAX_ITEMS,\n\tTODO_MAX_SUBJECT_LENGTH,\n} from \"./constants.ts\";\nimport {\n\tTODO_DETAILS_SCHEMA_VERSION,\n\ttype TodoChange,\n\ttype TodoItem,\n\ttype TodoParams,\n\ttype TodoState,\n\ttype TodoStatus,\n} from \"./schema.ts\";\n\nexport const STATUS_MARK: Record<TodoStatus, string> = {\n\tpending: \"[ ]\",\n\tin_progress: \"[>]\",\n\tcompleted: \"[x]\",\n};\n\nconst STATUS_COLOR: Record<TodoStatus, \"dim\" | \"warning\" | \"success\"> = {\n\tpending: \"dim\",\n\tin_progress: \"warning\",\n\tcompleted: \"success\",\n};\n\nconst STATUS_RANK: Record<TodoStatus, number> = {\n\tin_progress: 0,\n\tpending: 1,\n\tcompleted: 2,\n};\n\n// --- One-line widget --------------------------------------------------------\n\nconst WIDGET_HEADER_SEPARATOR = \" · \";\nconst WIDGET_ITEM_SEPARATOR = \" \";\n\n/** True while any open task exists; the widget is registered only in that case. */\nexport function hasOpenTodos(state: TodoState): boolean {\n\treturn state.items.some((item) => item.status === \"pending\" || item.status === \"in_progress\");\n}\n\n/** Status counts across the whole list. */\nfunction widgetCounts(state: TodoState): { active: number; pending: number; completed: number } {\n\tconst counts = { active: 0, pending: 0, completed: 0 };\n\tfor (const item of state.items) {\n\t\tif (item.status === \"in_progress\") counts.active++;\n\t\telse if (item.status === \"pending\") counts.pending++;\n\t\telse counts.completed++;\n\t}\n\treturn counts;\n}\n\nfunction widgetSegment(item: TodoItem, subject: string, theme: Theme): string {\n\treturn `${theme.fg(STATUS_COLOR[item.status], STATUS_MARK[item.status])} ${theme.fg(\"accent\", `#${item.id}`)} ${theme.fg(\"text\", subject)}`;\n}\n\nfunction widgetLine(header: string, segments: string[], overflow: string): string {\n\tconst body = [...segments, ...(overflow ? [overflow] : [])].join(WIDGET_ITEM_SEPARATOR);\n\treturn body ? `${header}${WIDGET_HEADER_SEPARATOR}${body}` : header;\n}\n\n/** One-line widget: `Todos 2/6 · [>] #4 s [ ] #5 s +N more`; only hidden open tasks count in the overflow. */\nexport function renderWidgetLine(state: TodoState, theme: Theme, width: number): string[] {\n\tconst safeWidth = Math.max(1, width);\n\tconst items = state.items;\n\tconst candidates = items\n\t\t.filter((item) => item.status !== \"completed\")\n\t\t.sort((first, second) => STATUS_RANK[first.status] - STATUS_RANK[second.status] || first.id - second.id);\n\tif (candidates.length === 0) return [];\n\n\tconst total = items.length;\n\tconst completed = items.filter((item) => item.status === \"completed\").length;\n\tconst header = `${theme.fg(\"accent\", \"Todos\")} ${theme.fg(\"dim\", `${completed}/${total}`)}`;\n\tconst shown: Array<{ item: TodoItem; subject: string }> = [];\n\tlet overflow = \"\";\n\n\t// Count only open tasks not shown by the trial segments.\n\tconst bestOverflow = (trial: Array<{ item: TodoItem; subject: string }>): string | undefined => {\n\t\tconst remaining = candidates.length - trial.length;\n\t\tconst segments = trial.map((entry) => widgetSegment(entry.item, entry.subject, theme));\n\t\tif (remaining <= 0) return visibleWidth(widgetLine(header, segments, \"\")) <= safeWidth ? \"\" : undefined;\n\t\tconst short = theme.fg(\"dim\", `+${remaining} more`);\n\t\treturn visibleWidth(widgetLine(header, segments, short)) <= safeWidth ? short : undefined;\n\t};\n\n\t// Extreme narrow widths: the best summary that fits, then the bare header.\n\tconst fallback = (): string[] => {\n\t\tconst best = bestOverflow([]);\n\t\tif (best !== undefined) return [widgetLine(header, [], best)];\n\t\tif (visibleWidth(header) <= safeWidth) return [header];\n\t\treturn [truncateToWidth(header, safeWidth, \"…\")];\n\t};\n\n\t// Segments are added whole, active first then pending by id, while the\n\t// line keeps fitting; only the active subject may be truncated.\n\tfor (const candidate of candidates) {\n\t\tconst best = bestOverflow([...shown, { item: candidate, subject: candidate.subject }]);\n\t\tif (best !== undefined) {\n\t\t\tshown.push({ item: candidate, subject: candidate.subject });\n\t\t\toverflow = best;\n\t\t\tcontinue;\n\t\t}\n\t\tif (candidate.status !== \"in_progress\") break;\n\t\tconst remaining = candidates.length - shown.length - 1;\n\t\tconst suffix = remaining > 0 ? `${WIDGET_ITEM_SEPARATOR}+${remaining} more` : \"\";\n\t\tconst prefix = `${header}${WIDGET_HEADER_SEPARATOR}${widgetSegment(candidate, \"\", theme)}${suffix}`;\n\t\tconst available = safeWidth - visibleWidth(prefix);\n\t\tif (available < 1) return fallback();\n\t\tshown.push({ item: candidate, subject: truncateToWidth(candidate.subject, available, \"…\") });\n\t\toverflow = bestOverflow(shown) ?? \"\";\n\t}\n\n\tif (shown.length === 0) return fallback();\n\n\tconst segments = shown.map((entry) => widgetSegment(entry.item, entry.subject, theme));\n\tconst line = widgetLine(header, segments, overflow);\n\t// Safety net: the visible width always stays within the terminal width.\n\treturn [visibleWidth(line) <= safeWidth ? line : truncateToWidth(line, safeWidth, \"…\")];\n}\n\n// --- Full list (used by /todos and the model-facing list result) ------------\n\n/** `Todos: X in progress, Y pending, Z completed` header plus two-line tasks. */\nfunction formatTodoList(state: TodoState): string {\n\tif (state.items.length === 0) return \"No todos.\";\n\tconst counts = widgetCounts(state);\n\tconst lines = [`Todos: ${counts.active} in progress, ${counts.pending} pending, ${counts.completed} completed`];\n\tconst items = [...state.items].sort(\n\t\t(first, second) => STATUS_RANK[first.status] - STATUS_RANK[second.status] || first.id - second.id,\n\t);\n\tfor (const item of items) {\n\t\tlines.push(`${STATUS_MARK[item.status]} #${item.id} ${item.subject}`);\n\t\tlines.push(` ${item.description}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\n/** /todos command output: full list, subject line plus indented description per task. */\nexport const formatCommandList = formatTodoList;\n\n// --- Model-facing result text ------------------------------------------------\n\n/** `#1–#3` for a consecutive run, `#1, #2` otherwise. */\nfunction formatIdRange(ids: number[]): string {\n\tconst consecutive = ids.length > 1 && ids.every((id, index) => id === ids[0] + index);\n\treturn consecutive ? `#${ids[0]}–#${ids[ids.length - 1]}` : ids.map((id) => `#${id}`).join(\", \");\n}\n\n/**\n * One-line change summary for a completed call, e.g.\n * `Created 1 task: #7: Wire parser (in_progress); Updated #1 (pending -> completed): S; demoted #5 to pending; auto-removed completed #1–#3 to stay within 20`.\n * A call that changed nothing (including `{}`) returns the full list.\n */\nexport function formatTodoContent(change: TodoChange, state: TodoState): string {\n\tconst parts: string[] = [];\n\tif (change.created.length > 0) {\n\t\tconst labels = change.created.map((id) => {\n\t\t\tconst item = state.items.find((entry) => entry.id === id);\n\t\t\tif (!item) return `#${id}`;\n\t\t\tconst suffix = item.status === \"pending\" ? \"\" : ` (${item.status})`;\n\t\t\treturn `#${id}: ${item.subject}${suffix}`;\n\t\t});\n\t\tconst noun = change.created.length === 1 ? \"task\" : \"tasks\";\n\t\tparts.push(`Created ${change.created.length} ${noun}: ${labels.join(\"; \")}`);\n\t}\n\tfor (const entry of change.updated) {\n\t\tconst item = state.items.find((candidate) => candidate.id === entry.id);\n\t\tconst subject = item ? `: ${item.subject}` : \"\";\n\t\tconst transition = entry.from === entry.to ? \"\" : ` (${entry.from} -> ${entry.to})`;\n\t\tparts.push(`Updated #${entry.id}${transition}${subject}`);\n\t}\n\tif (change.demotedId !== undefined) parts.push(`demoted #${change.demotedId} to pending`);\n\tif (change.deleted.length > 0) {\n\t\tconst noun = change.deleted.length === 1 ? \"task\" : \"tasks\";\n\t\tconst labels = change.deleted.map((entry) => `#${entry.id}: ${entry.subject}`);\n\t\tparts.push(`Deleted ${change.deleted.length} ${noun}: ${labels.join(\"; \")}`);\n\t}\n\tfor (const id of change.absent) parts.push(`#${id} already absent`);\n\tif (change.evicted.length > 0) {\n\t\tconst ids = change.evicted.map((entry) => entry.id);\n\t\tparts.push(`auto-removed completed ${formatIdRange(ids)} to stay within ${TODO_MAX_ITEMS}`);\n\t}\n\tif (parts.length === 0) return formatTodoList(state);\n\treturn parts.join(\"; \");\n}\n\n// --- Tool calls and collapsed group summaries -------------------------------\n\n// Collapsed todo calls join the `todo` group as one headline per row. Args can\n// be partial or hostile and details may come from any source, so one defensive\n// reading family (record/field/text/id/status/array) serves both renderers.\n// Output stays bounded: batches at 20, subjects at 160, descriptions at 500.\n\ntype TodoCallArgs = Partial<Record<keyof TodoParams, unknown>>;\n\nconst CALL_ITEMS_MAX = TODO_MAX_BATCH_ITEMS;\nconst CALL_SUBJECT_PREVIEW_COUNT = 2;\nconst CALL_SUBJECT_PREVIEW_WIDTH = 72;\nconst CALL_DESCRIPTION_PREVIEW_LENGTH = 120;\nconst SUMMARY_FAILURE_MAX_LENGTH = 120;\n\n/** Record-like read; proxies that throw on inspection are treated as absent. */\nfunction safeRecord(value: unknown): Record<string, unknown> | undefined {\n\ttry {\n\t\treturn value !== null && typeof value === \"object\" && !Array.isArray(value)\n\t\t\t? (value as Record<string, unknown>)\n\t\t\t: undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Field read that never throws, even for exotic objects with throwing getters. */\nfunction safeValue(record: Record<string, unknown> | undefined, key: string): unknown {\n\ttry {\n\t\treturn record?.[key];\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction safeString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\n/** Trimmed, whitespace-collapsed, length-clipped text (empty when absent). */\nfunction clipText(value: unknown, max: number): string {\n\treturn safeString(value)?.trim().replace(/\\s+/g, \" \").slice(0, max) ?? \"\";\n}\n\nconst safeSubject = (value: unknown): string => clipText(value, TODO_MAX_SUBJECT_LENGTH);\nconst safeDescription = (value: unknown): string => clipText(value, TODO_MAX_DESCRIPTION_LENGTH);\n\nfunction safeId(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isSafeInteger(value) && value >= 1 ? value : undefined;\n}\n\nfunction safeStatus(value: unknown): TodoStatus | undefined {\n\tconst status = safeString(value);\n\tif (status === \"pending\" || status === \"in_progress\" || status === \"completed\") return status;\n\treturn undefined;\n}\n\nfunction readArray(value: unknown, limit = CALL_ITEMS_MAX): { values: unknown[]; length: number } | undefined {\n\ttry {\n\t\tif (!Array.isArray(value)) return undefined;\n\t\tconst length = value.length;\n\t\tconst values: unknown[] = [];\n\t\tfor (let index = 0; index < Math.min(length, limit); index++) {\n\t\t\ttry {\n\t\t\t\tvalues.push(value[index]);\n\t\t\t} catch {\n\t\t\t\tvalues.push(undefined);\n\t\t\t}\n\t\t}\n\t\treturn { values, length };\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Id lists: invalid entries drop (rendering never rejects the whole call). */\nfunction readIds(value: unknown): number[] | undefined {\n\tconst array = readArray(value);\n\tif (!array) return undefined;\n\tconst ids: number[] = [];\n\tfor (const entry of array.values) {\n\t\tconst id = safeId(entry);\n\t\tif (id !== undefined) ids.push(id);\n\t}\n\treturn ids;\n}\n\ninterface CreateCallItem {\n\tsubject: string;\n\tdescription: string;\n\tstatus?: TodoStatus;\n}\n\n/** Create args: sparse or invalid entries drop; the batch caps at the maximum. */\nfunction batchCreateItems(value: unknown): CreateCallItem[] {\n\tconst result: CreateCallItem[] = [];\n\tfor (const raw of readArray(value)?.values ?? []) {\n\t\tconst item = safeRecord(raw);\n\t\tif (!item) continue;\n\t\tconst entry: CreateCallItem = {\n\t\t\tsubject: safeSubject(safeValue(item, \"subject\")),\n\t\t\tdescription: safeDescription(safeValue(item, \"description\")),\n\t\t};\n\t\tconst status = safeStatus(safeValue(item, \"status\"));\n\t\tif (status) entry.status = status;\n\t\tresult.push(entry);\n\t}\n\treturn result;\n}\n\ninterface UpdateCallItem {\n\tid?: number;\n\tsubject: string;\n\tdescription: string;\n\tstatus?: TodoStatus;\n}\n\n/** Update args: sparse or invalid entries drop; the batch caps at the maximum. */\nfunction batchUpdateItems(value: unknown): UpdateCallItem[] {\n\tconst result: UpdateCallItem[] = [];\n\tfor (const raw of readArray(value)?.values ?? []) {\n\t\tconst item = safeRecord(raw);\n\t\tif (!item) continue;\n\t\tconst entry: UpdateCallItem = {\n\t\t\tsubject: safeSubject(safeValue(item, \"subject\")),\n\t\t\tdescription: safeDescription(safeValue(item, \"description\")),\n\t\t};\n\t\tconst id = safeId(safeValue(item, \"id\"));\n\t\tif (id !== undefined) entry.id = id;\n\t\tconst status = safeStatus(safeValue(item, \"status\"));\n\t\tif (status) entry.status = status;\n\t\tresult.push(entry);\n\t}\n\treturn result;\n}\n\nfunction descriptionPreview(value: string): string {\n\tconst text = value.replace(/\\s+/g, \" \");\n\treturn text.length > CALL_DESCRIPTION_PREVIEW_LENGTH\n\t\t? `${text.slice(0, CALL_DESCRIPTION_PREVIEW_LENGTH - 1)}…`\n\t\t: text;\n}\n\n/** At most two subjects, each truncated to the preview width, plus `+N more`. */\nfunction formatSubjectPreview(subjects: string[], total: number): string {\n\t// Filter before slicing so an empty subject (streaming args) does not consume\n\t// a preview slot.\n\tconst shown = subjects\n\t\t.filter(Boolean)\n\t\t.slice(0, CALL_SUBJECT_PREVIEW_COUNT)\n\t\t.map((subject) => truncateToWidth(subject, CALL_SUBJECT_PREVIEW_WIDTH, \"…\"));\n\tif (!shown.length) return \"\";\n\tconst hidden = Math.max(0, total - shown.length);\n\treturn `${shown.join(\", \")}${hidden ? `, +${hidden} more` : \"\"}`;\n}\n\n/** v3 details guard shared by the call and group renderers. */\nfunction todoDetails(value: unknown): { change: Record<string, unknown>; state: Record<string, unknown> } | undefined {\n\tconst details = safeRecord(value);\n\tif (!details || safeValue(details, \"schemaVersion\") !== TODO_DETAILS_SCHEMA_VERSION) return undefined;\n\tconst change = safeRecord(safeValue(details, \"change\"));\n\tconst state = safeRecord(safeValue(details, \"state\"));\n\tif (!change || !state) return undefined;\n\treturn { change, state };\n}\n\n/** Result ids for an expanded create, only when they match the shown items. */\nfunction createResultIds(result: AgentToolResult<unknown> | undefined, count: number): number[] | undefined {\n\tconst details = todoDetails(result?.details);\n\tif (!details) return undefined;\n\tconst ids = readIds(safeValue(details.change, \"created\"));\n\treturn ids && ids.length === count && count > 0 ? ids : undefined;\n}\n\n/** Removed entries from a settled result, for the expanded delete detail lines. */\nfunction deleteResultRemoved(result: AgentToolResult<unknown> | undefined): Array<{ id: number; subject: string }> {\n\tconst details = todoDetails(result?.details);\n\tif (!details) return [];\n\treturn idSubjectEntries(safeValue(details.change, \"deleted\"));\n}\n\n/** Absent ids from a settled delete, for the expanded delete detail lines. */\nfunction deleteResultAbsent(result: AgentToolResult<unknown> | undefined): number[] {\n\tconst details = todoDetails(result?.details);\n\tif (!details) return [];\n\treturn readIds(safeValue(details.change, \"absent\")) ?? [];\n}\n\n/** Headline plus the parameters the result never echoes as detail lines. */\nfunction formatCallParts(\n\targs: TodoCallArgs | undefined,\n\ttheme: Theme,\n\tresult?: AgentToolResult<unknown>,\n): { headline: string; details: string[] } {\n\tconst details: string[] = [];\n\tconst segments: string[] = [];\n\tconst pushSegment = (verb: string, body: string): void => {\n\t\tconst title = segments.length === 0 ? `todo ${verb}` : verb;\n\t\tsegments.push(\n\t\t\tbody ? `${theme.fg(\"toolTitle\", theme.bold(title))} ${body}` : theme.fg(\"toolTitle\", theme.bold(title)),\n\t\t);\n\t};\n\n\tconst hasCreate = args?.create !== undefined;\n\tconst hasUpdate = args?.update !== undefined;\n\tconst hasDelete = args?.delete !== undefined;\n\n\tif (hasCreate) {\n\t\tconst items = batchCreateItems(args?.create);\n\t\tconst rawCount = readArray(args?.create)?.length;\n\t\t// An empty array is strict-mode filler: the call lists the tasks, so the\n\t\t// group earns no segment of its own.\n\t\tif (rawCount !== 0) {\n\t\t\tconst body: string[] = [];\n\t\t\tif (rawCount !== undefined) {\n\t\t\t\tconst count = Math.min(rawCount, CALL_ITEMS_MAX);\n\t\t\t\tbody.push(theme.fg(\"dim\", `${count} ${count === 1 ? \"task\" : \"tasks\"}`));\n\t\t\t\tconst preview = formatSubjectPreview(\n\t\t\t\t\titems.map((item) => item.subject),\n\t\t\t\t\tcount,\n\t\t\t\t);\n\t\t\t\tif (preview) body.push(theme.fg(\"dim\", \"·\"), theme.fg(\"text\", preview));\n\t\t\t}\n\t\t\tpushSegment(\"create\", body.join(\" \"));\n\t\t}\n\t\tconst ids = createResultIds(result, items.length);\n\t\tfor (const [index, item] of items.entries()) {\n\t\t\tconst marker = ids ? theme.fg(\"accent\", `#${ids[index]}`) : theme.fg(\"accent\", `${index + 1}.`);\n\t\t\tconst status =\n\t\t\t\titem.status && item.status !== \"pending\"\n\t\t\t\t\t? ` ${theme.fg(STATUS_COLOR[item.status], `(${item.status})`)}`\n\t\t\t\t\t: \"\";\n\t\t\tdetails.push(item.subject ? `${marker} ${theme.fg(\"text\", item.subject)}${status}` : marker);\n\t\t\tif (item.description) details.push(` ${theme.fg(\"dim\", descriptionPreview(item.description))}`);\n\t\t}\n\t}\n\n\tif (hasUpdate) {\n\t\tconst items = batchUpdateItems(args?.update);\n\t\tconst rawCount = readArray(args?.update)?.length;\n\t\tif (rawCount !== 0) {\n\t\t\tconst entries: string[] = [];\n\t\t\tfor (const item of items) {\n\t\t\t\tconst parts: string[] = [];\n\t\t\t\tif (item.id !== undefined) parts.push(theme.fg(\"accent\", `#${item.id}`));\n\t\t\t\tif (item.status) parts.push(theme.fg(STATUS_COLOR[item.status], item.status));\n\t\t\t\tif (item.subject)\n\t\t\t\t\tparts.push(theme.fg(\"text\", truncateToWidth(item.subject, CALL_SUBJECT_PREVIEW_WIDTH, \"…\")));\n\t\t\t\tif (parts.length > 0) entries.push(parts.join(\" \"));\n\t\t\t}\n\t\t\tpushSegment(\"update\", entries.join(theme.fg(\"dim\", \", \")));\n\t\t}\n\t\tfor (const item of items) {\n\t\t\tif (item.description) details.push(` ${theme.fg(\"dim\", descriptionPreview(item.description))}`);\n\t\t}\n\t}\n\n\tif (hasDelete) {\n\t\tconst rawCount = readArray(args?.delete)?.length;\n\t\tif (rawCount !== 0) {\n\t\t\tconst ids = readIds(args?.delete) ?? [];\n\t\t\tpushSegment(\"delete\", ids.length > 0 ? theme.fg(\"accent\", ids.map((id) => `#${id}`).join(\", \")) : \"\");\n\t\t}\n\t\t// The headline already carries the ids, so details only earn their lines\n\t\t// once the result names what was actually removed or already absent.\n\t\tfor (const entry of deleteResultRemoved(result)) {\n\t\t\tdetails.push(`${theme.fg(\"accent\", `#${entry.id}`)} ${theme.fg(\"text\", entry.subject)}`);\n\t\t}\n\t\tfor (const id of deleteResultAbsent(result)) {\n\t\t\tdetails.push(theme.fg(\"dim\", `#${id} already absent`));\n\t\t}\n\t}\n\n\tif (segments.length === 0) {\n\t\t// No group fields at all: the call lists the tasks.\n\t\tsegments.push(theme.fg(\"toolTitle\", theme.bold(\"todo list\")));\n\t}\n\n\treturn { headline: segments.join(theme.fg(\"dim\", \" ; \")), details };\n}\n\n/** One-line call summary when collapsed; headline plus details when expanded. */\nexport function formatTodoCall(\n\targs: TodoCallArgs | undefined,\n\ttheme: Theme,\n\texpanded: boolean,\n\tresult?: AgentToolResult<unknown>,\n): string {\n\tconst { headline, details } = formatCallParts(args, theme, result);\n\treturn !expanded || details.length === 0 ? headline : [headline, ...details].join(\"\\n\");\n}\n\n/** Id -> item index plus status counts over the v3 snapshot (one defensive walk). */\nfunction stateIndex(state: Record<string, unknown>):\n\t| {\n\t\t\tbyId: Map<number, Record<string, unknown>>;\n\t\t\tcounts: { inProgress: number; pending: number; completed: number };\n\t }\n\t| undefined {\n\tconst array = readArray(safeValue(state, \"items\"), TODO_MAX_ITEMS);\n\tif (!array || array.length > TODO_MAX_ITEMS) return undefined;\n\tconst byId = new Map<number, Record<string, unknown>>();\n\tconst counts = { inProgress: 0, pending: 0, completed: 0 };\n\tfor (const raw of array.values) {\n\t\tconst item = safeRecord(raw);\n\t\tif (!item) continue;\n\t\tconst id = safeId(safeValue(item, \"id\"));\n\t\tif (id !== undefined && !byId.has(id)) byId.set(id, item);\n\t\tconst status = safeStatus(safeValue(item, \"status\"));\n\t\tif (status === \"in_progress\") counts.inProgress++;\n\t\telse if (status === \"pending\") counts.pending++;\n\t\telse if (status === \"completed\") counts.completed++;\n\t}\n\treturn { byId, counts };\n}\n\nfunction stateSubject(map: Map<number, Record<string, unknown>>, id: number): string {\n\tconst item = map.get(id);\n\treturn item ? safeSubject(safeValue(item, \"subject\")) : \"\";\n}\n\n/** Id+subject entries (deleted, evicted): invalid entries drop. */\nfunction idSubjectEntries(value: unknown): Array<{ id: number; subject: string }> {\n\tconst entries: Array<{ id: number; subject: string }> = [];\n\tfor (const raw of readArray(value)?.values ?? []) {\n\t\tconst item = safeRecord(raw);\n\t\tconst id = safeId(safeValue(item, \"id\"));\n\t\tconst subject = safeSubject(safeValue(item, \"subject\"));\n\t\tif (id === undefined || !subject) continue;\n\t\tentries.push({ id, subject });\n\t}\n\treturn entries;\n}\n\n/** Updated entries: {id, from, to} records, invalid entries drop. */\nfunction updatedEntries(value: unknown): Array<{ id: number; from?: TodoStatus; to?: TodoStatus }> {\n\tconst entries: Array<{ id: number; from?: TodoStatus; to?: TodoStatus }> = [];\n\tfor (const raw of readArray(value)?.values ?? []) {\n\t\tconst item = safeRecord(raw);\n\t\tconst id = safeId(safeValue(item, \"id\"));\n\t\tif (id === undefined) continue;\n\t\tconst entry: { id: number; from?: TodoStatus; to?: TodoStatus } = { id };\n\t\tconst from = safeStatus(safeValue(item, \"from\"));\n\t\tif (from) entry.from = from;\n\t\tconst to = safeStatus(safeValue(item, \"to\"));\n\t\tif (to) entry.to = to;\n\t\tentries.push(entry);\n\t}\n\treturn entries;\n}\n\nfunction formatTodoSuccessSummary(\n\targs: TodoCallArgs | undefined,\n\ttheme: Theme,\n\tresult: AgentToolResult<unknown>,\n): string | undefined {\n\tconst parsed = todoDetails(result.details);\n\tif (!parsed) return undefined;\n\tconst { change, state } = parsed;\n\tconst index = stateIndex(state);\n\tconst segments: string[] = [];\n\tconst pushVerb = (word: string, body: string): void => {\n\t\tconst title = segments.length === 0 ? `todo ${word}` : word;\n\t\tsegments.push(body ? `${theme.fg(\"toolTitle\", title)} ${body}` : theme.fg(\"toolTitle\", title));\n\t};\n\tconst withPreview = (word: string, ids: number[], subjects: string[]): void => {\n\t\tconst text = formatSubjectPreview(subjects, subjects.length);\n\t\tconst base = theme.fg(\"accent\", formatIdRange(ids));\n\t\tpushVerb(word, text ? `${base}${theme.fg(\"dim\", \" · \")}${theme.fg(\"text\", text)}` : base);\n\t};\n\n\tconst created = readIds(safeValue(change, \"created\")) ?? [];\n\tif (created.length > 0 && index) {\n\t\twithPreview(\n\t\t\t\"created\",\n\t\t\tcreated,\n\t\t\tcreated.map((id) => stateSubject(index.byId, id)),\n\t\t);\n\t}\n\tfor (const entry of updatedEntries(safeValue(change, \"updated\"))) {\n\t\tconst parts = [theme.fg(\"accent\", `#${entry.id}`)];\n\t\tif (entry.to) parts.push(theme.fg(STATUS_COLOR[entry.to], entry.to));\n\t\tconst subject = index ? stateSubject(index.byId, entry.id) : \"\";\n\t\tif (subject) parts.push(theme.fg(\"text\", truncateToWidth(subject, CALL_SUBJECT_PREVIEW_WIDTH, \"…\")));\n\t\tpushVerb(\"updated\", parts.join(\" \"));\n\t}\n\tconst demotedId = safeId(safeValue(change, \"demotedId\"));\n\tif (demotedId !== undefined) segments.push(theme.fg(\"dim\", `demoted #${demotedId}`));\n\tconst deleted = idSubjectEntries(safeValue(change, \"deleted\"));\n\tif (deleted.length > 0) {\n\t\twithPreview(\n\t\t\t\"deleted\",\n\t\t\tdeleted.map((entry) => entry.id),\n\t\t\tdeleted.map((entry) => entry.subject),\n\t\t);\n\t}\n\tfor (const id of readIds(safeValue(change, \"absent\")) ?? []) {\n\t\tsegments.push(theme.fg(\"dim\", `#${id} already absent`));\n\t}\n\tconst evicted = idSubjectEntries(safeValue(change, \"evicted\"));\n\tif (evicted.length > 0) {\n\t\tsegments.push(theme.fg(\"dim\", `auto-removed ${evicted.map((entry) => `#${entry.id}`).join(\", \")}`));\n\t}\n\n\tif (segments.length === 0) {\n\t\t// Empty change: the call listed the tasks.\n\t\tif (!index) return undefined;\n\t\tconst parts: string[] = [];\n\t\tif (index.counts.inProgress > 0) parts.push(`${index.counts.inProgress} in progress`);\n\t\tif (index.counts.pending > 0) parts.push(`${index.counts.pending} pending`);\n\t\tif (index.counts.completed > 0) parts.push(`${index.counts.completed} completed`);\n\t\treturn `${theme.fg(\"toolTitle\", \"todo list\")}: ${theme.fg(\"dim\", parts.length ? parts.join(\", \") : \"no tasks\")}`;\n\t}\n\t// The update segment can still pick up the requested subject when the state\n\t// no longer holds it (e.g. the task was deleted by a hostile snapshot).\n\tvoid args;\n\treturn segments.join(theme.fg(\"dim\", \" ; \"));\n}\n\nexport interface TodoSummaryContext {\n\tisError: boolean;\n\tisPartial: boolean;\n\tresult?: AgentToolResult<unknown>;\n}\n\n/** Compact result-aware one-line summary of a collapsed todo row. */\nexport function formatTodoSummary(args: TodoCallArgs | undefined, theme: Theme, context: TodoSummaryContext): string {\n\tif (context.isError) {\n\t\tlet reason = \"tool failed\";\n\t\ttry {\n\t\t\tfor (const block of context.result?.content.slice(0, 8) ?? []) {\n\t\t\t\tif (block.type !== \"text\" || typeof block.text !== \"string\") continue;\n\t\t\t\tconst text = block.text\n\t\t\t\t\t.replace(/[\\u0000-\\u001f\\u007f-\\u009f]/g, \" \")\n\t\t\t\t\t.replace(/\\s+/g, \" \")\n\t\t\t\t\t.trim();\n\t\t\t\tif (!text) continue;\n\t\t\t\treason =\n\t\t\t\t\ttext.length > SUMMARY_FAILURE_MAX_LENGTH ? `${text.slice(0, SUMMARY_FAILURE_MAX_LENGTH - 1)}…` : text;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Tool results can come from historical or third-party sources.\n\t\t}\n\t\treturn `${formatTodoCall(args, theme, false)} ${theme.fg(\"error\", `failed: ${reason}`)}`;\n\t}\n\tif (!context.isPartial && context.result) {\n\t\tconst summary = formatTodoSuccessSummary(args, theme, context.result);\n\t\tif (summary) return summary;\n\t}\n\treturn formatTodoCall(args, theme, false);\n}\n"]}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { ExtensionUIContext } from "../../core/extensions/types.ts";
|
|
2
|
-
import type { TodoState } from "./schema.ts";
|
|
3
|
-
export declare class TodoWidget {
|
|
4
|
-
private ui;
|
|
5
|
-
private tui;
|
|
6
|
-
private registered;
|
|
7
|
-
private readonly getState;
|
|
8
|
-
constructor(getState: () => TodoState);
|
|
9
|
-
setUI(ui: ExtensionUIContext): void;
|
|
10
|
-
/** Re-evaluate registration against the current state and redraw. */
|
|
11
|
-
update(): void;
|
|
12
|
-
private unregister;
|
|
13
|
-
dispose(): void;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=widget.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../../../src/extensions/todo/widget.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAK7C,qBAAa,UAAU;IACtB,OAAO,CAAC,EAAE,CAAiC;IAC3C,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;gBAE/B,QAAQ,EAAE,MAAM,SAAS;IAIrC,KAAK,CAAC,EAAE,EAAE,kBAAkB,GAAG,IAAI;IAMnC,qEAAqE;IACrE,MAAM,IAAI,IAAI;IA2Bd,OAAO,CAAC,UAAU;IAOlB,OAAO,IAAI,IAAI;CAIf"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { hasOpenTodos, renderWidgetLine } from "./view.js";
|
|
2
|
-
const WIDGET_KEY = "todos";
|
|
3
|
-
export class TodoWidget {
|
|
4
|
-
constructor(getState) {
|
|
5
|
-
this.registered = false;
|
|
6
|
-
this.getState = getState;
|
|
7
|
-
}
|
|
8
|
-
setUI(ui) {
|
|
9
|
-
if (this.ui === ui)
|
|
10
|
-
return;
|
|
11
|
-
this.dispose();
|
|
12
|
-
this.ui = ui;
|
|
13
|
-
}
|
|
14
|
-
/** Re-evaluate registration against the current state and redraw. */
|
|
15
|
-
update() {
|
|
16
|
-
if (!this.ui)
|
|
17
|
-
return;
|
|
18
|
-
if (!hasOpenTodos(this.getState())) {
|
|
19
|
-
this.unregister();
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
if (this.registered) {
|
|
23
|
-
this.tui?.requestRender();
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
this.ui.setWidget(WIDGET_KEY, (tui, theme) => {
|
|
27
|
-
this.tui = tui;
|
|
28
|
-
return {
|
|
29
|
-
render: (width) => renderWidgetLine(this.getState(), theme, width),
|
|
30
|
-
invalidate: () => {
|
|
31
|
-
// Rendering is uncached and styled at render time, so there is
|
|
32
|
-
// nothing to clear; registration state is intentionally untouched.
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
}, { placement: "aboveEditor" });
|
|
36
|
-
this.registered = true;
|
|
37
|
-
}
|
|
38
|
-
unregister() {
|
|
39
|
-
if (!this.registered)
|
|
40
|
-
return;
|
|
41
|
-
this.ui?.setWidget(WIDGET_KEY, undefined);
|
|
42
|
-
this.registered = false;
|
|
43
|
-
this.tui = undefined;
|
|
44
|
-
}
|
|
45
|
-
dispose() {
|
|
46
|
-
this.unregister();
|
|
47
|
-
this.ui = undefined;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=widget.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"widget.js","sourceRoot":"","sources":["../../../src/extensions/todo/widget.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE3D,MAAM,UAAU,GAAG,OAAO,CAAC;AAE3B,MAAM,OAAO,UAAU;IAMtB,YAAY,QAAyB;QAH7B,eAAU,GAAG,KAAK,CAAC;QAI1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,EAAsB;QAC3B,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE;YAAE,OAAO;QAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,CAAC;IAED,qEAAqE;IACrE,MAAM;QACL,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;QACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO;QACR,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC;YAC1B,OAAO;QACR,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,SAAS,CAChB,UAAU,EACV,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACd,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YACf,OAAO;gBACN,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC;gBAC1E,UAAU,EAAE,GAAG,EAAE;oBAChB,+DAA+D;oBAC/D,mEAAmE;gBACpE,CAAC;aACD,CAAC;QACH,CAAC,EACD,EAAE,SAAS,EAAE,aAAa,EAAE,CAC5B,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACxB,CAAC;IAEO,UAAU;QACjB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAC7B,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;IACtB,CAAC;IAED,OAAO;QACN,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;IACrB,CAAC;CACD","sourcesContent":["/**\n * todo/widget.ts — above-editor widget for the v2 todo extension.\n *\n * The widget mirrors the closure store through a `getState` callback: it\n * registers only while at least one open task exists, renders exactly one\n * (or zero) line, and keeps no timers, completion tracking, hidden sets,\n * caches, or completion-visibility state. Rendering is uncached and styled\n * at render time; `invalidate` never touches registration state.\n */\nimport type { TUI } from \"@earendil-works/pi-tui\";\nimport type { ExtensionUIContext } from \"../../core/extensions/types.ts\";\nimport type { TodoState } from \"./schema.ts\";\nimport { hasOpenTodos, renderWidgetLine } from \"./view.ts\";\n\nconst WIDGET_KEY = \"todos\";\n\nexport class TodoWidget {\n\tprivate ui: ExtensionUIContext | undefined;\n\tprivate tui: TUI | undefined;\n\tprivate registered = false;\n\tprivate readonly getState: () => TodoState;\n\n\tconstructor(getState: () => TodoState) {\n\t\tthis.getState = getState;\n\t}\n\n\tsetUI(ui: ExtensionUIContext): void {\n\t\tif (this.ui === ui) return;\n\t\tthis.dispose();\n\t\tthis.ui = ui;\n\t}\n\n\t/** Re-evaluate registration against the current state and redraw. */\n\tupdate(): void {\n\t\tif (!this.ui) return;\n\t\tif (!hasOpenTodos(this.getState())) {\n\t\t\tthis.unregister();\n\t\t\treturn;\n\t\t}\n\t\tif (this.registered) {\n\t\t\tthis.tui?.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tthis.ui.setWidget(\n\t\t\tWIDGET_KEY,\n\t\t\t(tui, theme) => {\n\t\t\t\tthis.tui = tui;\n\t\t\t\treturn {\n\t\t\t\t\trender: (width: number) => renderWidgetLine(this.getState(), theme, width),\n\t\t\t\t\tinvalidate: () => {\n\t\t\t\t\t\t// Rendering is uncached and styled at render time, so there is\n\t\t\t\t\t\t// nothing to clear; registration state is intentionally untouched.\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\t{ placement: \"aboveEditor\" },\n\t\t);\n\t\tthis.registered = true;\n\t}\n\n\tprivate unregister(): void {\n\t\tif (!this.registered) return;\n\t\tthis.ui?.setWidget(WIDGET_KEY, undefined);\n\t\tthis.registered = false;\n\t\tthis.tui = undefined;\n\t}\n\n\tdispose(): void {\n\t\tthis.unregister();\n\t\tthis.ui = undefined;\n\t}\n}\n"]}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* POWERED BY DAXNUTS - Easter egg for OpenCode + Kimi K2.5
|
|
3
|
-
*
|
|
4
|
-
* A heartfelt tribute to dax (@thdxr) for providing free Kimi K2.5 access via OpenCode.
|
|
5
|
-
*/
|
|
6
|
-
import type { Component, TUI } from "@earendil-works/pi-tui";
|
|
7
|
-
export declare class DaxnutsComponent implements Component {
|
|
8
|
-
private ui;
|
|
9
|
-
private image;
|
|
10
|
-
private interval;
|
|
11
|
-
private tick;
|
|
12
|
-
private maxTicks;
|
|
13
|
-
private cachedLines;
|
|
14
|
-
private cachedWidth;
|
|
15
|
-
private cachedTick;
|
|
16
|
-
constructor(ui: TUI);
|
|
17
|
-
invalidate(): void;
|
|
18
|
-
private startAnimation;
|
|
19
|
-
private stopAnimation;
|
|
20
|
-
render(width: number): string[];
|
|
21
|
-
dispose(): void;
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=daxnuts.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daxnuts.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/daxnuts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAkD7D,qBAAa,gBAAiB,YAAW,SAAS;IACjD,OAAO,CAAC,EAAE,CAAM;IAChB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,QAAQ,CAA+C;IAC/D,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,UAAU,CAAM;gBAEZ,EAAE,EAAE,GAAG;IAMnB,UAAU,IAAI,IAAI;IAIlB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,aAAa;IAOrB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAkE/B,OAAO,IAAI,IAAI;CAGf"}
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* POWERED BY DAXNUTS - Easter egg for OpenCode + Kimi K2.5
|
|
3
|
-
*
|
|
4
|
-
* A heartfelt tribute to dax (@thdxr) for providing free Kimi K2.5 access via OpenCode.
|
|
5
|
-
*/
|
|
6
|
-
import { theme } from "../theme/theme.js";
|
|
7
|
-
// 32x32 RGB image of dax, hex encoded (3 bytes per pixel)
|
|
8
|
-
const DAX_HEX = "bbbab8b9b9b6b9b8b5bcbbb8b8b7b4b7b5b2b6b5b2b8b7b4b7b6b3b6b4b1bdbcb8bab8b6bbb8b5b8b5b1bbb8b4c2bebbc1bebac0bdbabfbcb9c1bebabfbebbc0bfbcc0bdbabbb8b5c1bfbcbfbcb8bbb9b6bfbcb8c2bfbcc1bfbcbfbbb8bdb9b6b8b7b5b9b8b5b8b8b5b5b5b2b6b5b2b8b7b4b9b8b5b9b8b5b6b5b3bab8b5bcbab7bbb9b6bbb8b5bfb9b5bdb2abbcb0a8beb2aabeb5afbfbab6bebab7c0bfbcbebdbabebbb8c0bdbabfbebbc2bebbbdbab7c3c0bdc3c0bdc1bebbc2bebabfbcb8bab9b6b7b6b3b2b1aeb6b5b2b5b4b1b5b4b2b6b5b2b7b6b4b9b8b6b7b6b3bbbab7b2afaba5988fb49e90b09481b79a88b39683b09583b7a395bfb6b0c0bdbabdbbb8bebcb9c1bfbcc0bebbbdbab7bebbb8c2bfbcc0bdbac0bcb9bdb9b6c0bcb8b5b4b2b4b3b0bab9b6b9b9b6b5b4b1b5b4b1b6b5b3b9b8b5b9b8b6b9b8b6b2aeaa968174a6836eaa856eab846eaf8973ac8973b08f79b18f7ab39786b7a89dbbb3aebfbab6c2c0bdbebcb9bfbdbac3c1bdc2bebbc0bcb9bdb9b6c1bdbabfbbb8b4b3b0b9b8b5b8b7b5b4b3b1b5b4b1b8b7b4b8b7b5bab9b6bbbab7b1afad8c7a719d735ca47860a87d65a98069ae8972ae8c75af8d77aa826ba98067aa8974b39e90b6a79dbbb2adc0bdbac1bfbdbfbbb8c1bdb9bebab6c0bdb9bfbbb8c1bdbab4b2b0b7b6b4b7b6b3b4b2b0bab9b7b6b5b2b6b5b2bab9b6bab9b6958c87977663aa836bac8772b08f7aad8c77b2917db0917db0907cac8971a77d64a87f67ac8972b29887b8a89dbfbab5bfbdbac1bebac0bcb9c0bcb9c0bcb9c1bebabebab7b8b7b4b7b6b4b5b4b1b5b4b2b7b6b3b5b4b2bab9b7bab9b6b4b1ada88f7fad8973ae8d78b19684b19685b29786b69a89b29582b1917daa856ea87e66a97e66ad866ea9826baf9280b8ada6bdbbb8bebab7bfbbb8c1bdbabfbbb8bcb8b4bcb8b5b6b4b2b7b5b3b6b5b2b8b7b4b3b2afb8b7b4b6b5b2b3b2b0b3a59aab856fad8d78b0917eb19886b49b8bb49a89b39785b0917eaf8f7cab866fa77d65a77a61a87d64a9816ab08f79b5a296c1bcb8c3bfbcc2bebbbebab7bfbbb7bdbab6c2bebab8b7b4b7b6b4b6b5b3b7b6b3b6b5b2b9b8b6b4b3b1b6b1acac8f7ca9826bae8f7aaf9583b49c8cb49c8bb79d8cb59987b19380ad8e79ae8c77af8e78ac8771a3775faa826bae8972b39888bbb6b2bebbb8bfbbb8bfbbb8c0bdb9bebbb7c0bdb9b6b5b2b9b8b5b4b3b1b8b7b5b4b3b0b7b6b4b6b5b3b1a7a0aa8772a77d65a88570b49887b19b8d9c887c907a6d987f71aa907faf917daf8e7aad8c78ac8b77a8836ca9836cac8770b49b8abdb6b2c0bcb9c0bdb9bfbbb8bebab7bfbcb9bebab7b9b8b6b5b4b2b9b8b5b8b7b5b8b7b4b7b6b4b5b4b2b3a9a2ad8973a1755da9856fb398858c776a65544b776358725d526e594d9c7f6eb1907ba68672ad8e7aab8771ac856db18f79b3a092beb9b5c1bdbabdb9b5bebab7bfbbb7bebab7bcb9b6b7b6b4b6b6b3b8b7b4b5b4b2b8b6b4b7b6b3b4b3b0b4aba4a6826ba3775fb08e79b19584a88e7daa8e7db29481ad8f7c997e6da38674ac8d79ac8e7aae917f9a7c6a896a599a7c6ab3a398c1bdbabdb9b6bcb8b5bebab6bebab7bdb9b5bdb9b6b5b4b1b7b5b3b5b4b2b7b6b3b7b6b4b3b3b0b3b2b0b4aca5a7846fa97f68ae8f7bae9383b59c8bb2937fae8e79ac8b76af927eaf927eb29683b39885b2988891786a72594c6e594d978d86bdbab7bab7b3c0bcb9c0bcb9bebab7bebbb7bdb9b6b3b2b0b4b3b0b5b4b2b4b4b1b4b3b1b4b3b1b4b3b0b6ada5aa8670a57a62ad8e7ab29b8cb69d8dab856fa9826aa88069ab8771af907db49987b19684b29886b59987b39480b09787b5a9a1bcb8b5bebab7bdb9b5bebab7bfbbb8bfbbb7bbb7b4b3b2afb8b7b5b8b7b5b3b2b0b5b4b2b6b5b3b6b4b1afa299a98975a9826baf907cb39988b49a89af8e7aac8973aa856eaf8c74b1917dae907dac907db39988b29785b49785b7a090b9aca3bfbab7bcb8b5bdb9b6bcb8b4bcb8b5bdb9b5bcb8b4b5b4b2b6b5b3b4b3b0b4b3b0b9b8b5b8b6b4908b88887467aa8f7ea78976ad8973b08b74b59885b69e8eb29888b1917cb1917db1937fae907cb19686b39a8ab29886b59b8ab8a192b6aaa3b7b2afbcb8b4bcb8b5bbb7b4c0bcb9bebab7c0bcb9b6b5b2b6b5b3b4b3b0bab9b7b7b6b4b1b0ae7b716ba083709b806f716158967764b08870b29481b69b8ab69f8fb39a89b69f90b49d8db39a89b29988b49c8cb6a090b8a496baa49593867f8f8986bfbbb7bdb9b5bcb7b4bab6b3b9b5b2bab6b2b4b3b1b3b3b0b6b5b3b8b7b5b4b2b0a7a5a38f837dae917ea084725a504c63544da28370b39784b59e8db2a093a698909b918b998e8790857e95877dad998bb39c8cb5a091b9a2938d827c95908dbebab6bbb7b3bdbab7bbb7b4bdb9b6bbb7b4b4b3b0b5b4b1b8b7b5b6b5b3b8b8b5b4b2af968f8ab29a8bab9485544b483a323073655d96887f70655f61595547403e453e3c453f3d57504f655e5b90847db39c8db7a090b6a09189807aaba6a3bdb9b6c0bcb9bebab7bcb7b4bebab7bbb7b4b3b2b0b6b5b3b2b1afb7b6b4b8b7b4b5b4b1aeaba8b5a89fac998d4d44412d25244d46444e4744322b293a3230423937433a37352d2a59504c534b48524a48988a81b59f8fb19c8d827974b2afacbdb9b5bcb8b4bdb9b5bcb8b5bdb9b6bab6b2b8b7b5b5b4b2b6b6b3b9b8b5b7b6b3b6b5b2b8b6b3b9b4b1b2a9a26c64612d25242d2625312a28352d2c453d3a78675c8d7a6ea09792aea6a0615854332b29524a479f8e82b09d90a49b96c1bdb9bebab7bfbbb8bbb8b4b9b5b1b8b4b0b9b4b0b7b6b4b8b7b5b8b7b4b6b5b3b8b6b3bab9b6b9b8b5b4b3b0b7b5b2a5a29f453d3b261e1d261f1e2e2625413936857268977865b19482b5a69caca5a07c7572453d3b746963a0948cc5bfbbc0bbb8beb9b6bbb7b3bbb6b3b7b3afb8b4b0b9b5b1b7b6b3b6b5b3b5b4b2b5b4b2b7b6b3b7b6b3b8b6b3b4b2afb7b6b3b3b1ae6d6765251f1e1e18172a22212d2523443b3971625ab19888b09482a89182877e792c25243e3634766d6abeb9b5bfbbb7bebab6bcb7b3bbb6b3b9b5b1b7b3afb8b4b0b4b3b0b5b4b1b5b4b1b4b3b1b5b4b2b8b6b4b5b3b0b9b6b4b5b4b1b6b4b27f79762a2322221c1b2d2524221b1a443e3c47413f6f676281766f867971675e5a3e37352a222166605dbab7b3bdb9b5beb9b5bcb7b3bcb7b3b9b4b0bab6b2bab6b2b5b3b0b6b4b2b3b2afb7b6b3b4b4b1b4b3b0b6b4b1b5b4b1b4b3b0b9b6b29a8c8252474230292828201f181212322c2c231e1d1c16162c26252923222d26252d2523332b2a8e8885bcb8b5bcb7b3bbb6b2bcb7b3b9b4b1b9b5b1b7b2afb7b2ae7a838e9b9b9caeadacb3b2b0b3b2afb7b7b4b6b5b3b6b6b3b7b6b3b9ada4a991808e7b6f50453f2b24231a14142923221f19181d17161f18182620201d17162a22215d5654b7b3b0bbb7b3bbb6b2b8b4b0bab5b1bbb6b2bab5b1b8b4b0bab6b22c496b4c5d735f68766e727a828285929090adaba8b7b2aeb6a59ab39682a28470a387748e76674e403a1a14141d1716181211221c1c1f1918221c1b2f2827342d2c8d8884bab6b3b9b5b2bab5b1bab5b1b9b4b0bab6b2b8b4b0b9b4b0b7b2ae325e8b365f8a3a5d833f5b7a545f70646469706b6aa08f84b08e78b18e769f7e689e7f6b9e816d907766584940362d2a1c1615201b1a1a1413201a1a251e1d393331a39e9bbab5b1bcb7b3bab6b2b8b3afb8b4b0b9b4b0b9b4b1bab5b2b5b0ac3d6c9843729d44719c426e98415f805a64716f6a699d8677b1927eb3947faa89749d7a649f7f6ba487749e837186716454463f2c25231e181837302e3a33317a7471beb9b6bcb8b4bbb6b2b6b2aebab5b1b9b5b1b8b3afbab6b2b6b1adb5aeaa4877a14c7aa44e7ba345719a3a5d80586b7f767475927b6eb1927faf8e79b08e78a78169a07861a17f6aa58570a688749b83738270666f66618a8480a49e99b7b2aebab6b2bcb8b4b9b5b1b7b2aebab5b1b9b4b0b6b1aeb6b1adb2aca8b2aca84876a04a78a2517fa74771973a5d80405c7a6161677c695fac8a75b08d77b4917aaf8971ad876fa5816aa6846ea78670a98a76ac9484ab9f96b2aca8bdb8b4bcb7b3bcb8b4bcb8b4b8b3afb7b2aeb9b4b0b8b3afb8b2aeb6afabb3aeaab2aeaa4878a14b7aa34c7ba44a759b3d63873b5f825b67766f5f569c7e6caf8c77b18f79b28f78b5927caf8e78a98872aa8a76a98a76ac917fada199b7b0acb9b3afbfb9b5c1bab6bdb6b2b8b3afbab5b1b9b4b0b6afabb7b1adb3ada9b3aeaab0aba8";
|
|
9
|
-
const WIDTH = 32;
|
|
10
|
-
const HEIGHT = 32;
|
|
11
|
-
function parseImage() {
|
|
12
|
-
const pixels = [];
|
|
13
|
-
for (let y = 0; y < HEIGHT; y++) {
|
|
14
|
-
const row = [];
|
|
15
|
-
for (let x = 0; x < WIDTH; x++) {
|
|
16
|
-
const idx = (y * WIDTH + x) * 6;
|
|
17
|
-
const r = parseInt(DAX_HEX.slice(idx, idx + 2), 16);
|
|
18
|
-
const g = parseInt(DAX_HEX.slice(idx + 2, idx + 4), 16);
|
|
19
|
-
const b = parseInt(DAX_HEX.slice(idx + 4, idx + 6), 16);
|
|
20
|
-
row.push([r, g, b]);
|
|
21
|
-
}
|
|
22
|
-
pixels.push(row);
|
|
23
|
-
}
|
|
24
|
-
return pixels;
|
|
25
|
-
}
|
|
26
|
-
function rgb(r, g, b, bg = false) {
|
|
27
|
-
return `\x1b[${bg ? 48 : 38};2;${r};${g};${b}m`;
|
|
28
|
-
}
|
|
29
|
-
const RESET = "\x1b[0m";
|
|
30
|
-
function buildImage() {
|
|
31
|
-
const pixels = parseImage();
|
|
32
|
-
const lines = [];
|
|
33
|
-
// Use half-block chars: ▄ with bg=top pixel, fg=bottom pixel
|
|
34
|
-
for (let row = 0; row < HEIGHT; row += 2) {
|
|
35
|
-
let line = "";
|
|
36
|
-
for (let x = 0; x < WIDTH; x++) {
|
|
37
|
-
const top = pixels[row][x];
|
|
38
|
-
const bottom = pixels[row + 1]?.[x] ?? top;
|
|
39
|
-
line += `${rgb(bottom[0], bottom[1], bottom[2])}${rgb(top[0], top[1], top[2], true)}▄`;
|
|
40
|
-
}
|
|
41
|
-
line += RESET;
|
|
42
|
-
lines.push(line);
|
|
43
|
-
}
|
|
44
|
-
return lines;
|
|
45
|
-
}
|
|
46
|
-
export class DaxnutsComponent {
|
|
47
|
-
constructor(ui) {
|
|
48
|
-
this.interval = null;
|
|
49
|
-
this.tick = 0;
|
|
50
|
-
this.maxTicks = 25; // ~2 seconds at 80ms
|
|
51
|
-
this.cachedLines = [];
|
|
52
|
-
this.cachedWidth = 0;
|
|
53
|
-
this.cachedTick = -1;
|
|
54
|
-
this.ui = ui;
|
|
55
|
-
this.image = buildImage();
|
|
56
|
-
this.startAnimation();
|
|
57
|
-
}
|
|
58
|
-
invalidate() {
|
|
59
|
-
this.cachedWidth = 0;
|
|
60
|
-
}
|
|
61
|
-
startAnimation() {
|
|
62
|
-
this.interval = setInterval(() => {
|
|
63
|
-
this.tick++;
|
|
64
|
-
if (this.tick >= this.maxTicks) {
|
|
65
|
-
this.stopAnimation();
|
|
66
|
-
}
|
|
67
|
-
this.cachedWidth = 0;
|
|
68
|
-
this.ui.requestRender();
|
|
69
|
-
}, 80);
|
|
70
|
-
}
|
|
71
|
-
stopAnimation() {
|
|
72
|
-
if (this.interval) {
|
|
73
|
-
clearInterval(this.interval);
|
|
74
|
-
this.interval = null;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
render(width) {
|
|
78
|
-
if (width === this.cachedWidth && this.cachedTick === this.tick) {
|
|
79
|
-
return this.cachedLines;
|
|
80
|
-
}
|
|
81
|
-
const t = theme;
|
|
82
|
-
const lines = [];
|
|
83
|
-
const center = (s) => {
|
|
84
|
-
const visible = s.replace(/\x1b\[[0-9;]*m/g, "").length;
|
|
85
|
-
const left = Math.max(0, Math.floor((width - visible) / 2));
|
|
86
|
-
return " ".repeat(left) + s;
|
|
87
|
-
};
|
|
88
|
-
lines.push("");
|
|
89
|
-
// Scanline reveal effect: show rows progressively
|
|
90
|
-
const revealedRows = Math.min(this.image.length, Math.floor((this.tick / this.maxTicks) * (this.image.length + 3)));
|
|
91
|
-
for (let i = 0; i < this.image.length; i++) {
|
|
92
|
-
if (i < revealedRows) {
|
|
93
|
-
lines.push(center(this.image[i]));
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
// Show scan line
|
|
97
|
-
if (i === revealedRows) {
|
|
98
|
-
const scanline = "▓".repeat(WIDTH);
|
|
99
|
-
lines.push(center(rgb(100, 200, 255) + scanline + RESET));
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
lines.push(center(" ".repeat(WIDTH)));
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
lines.push("");
|
|
107
|
-
// Fade in text after image is revealed
|
|
108
|
-
const textPhase = Math.max(0, this.tick - this.maxTicks * 0.6);
|
|
109
|
-
if (textPhase > 0 || this.tick >= this.maxTicks) {
|
|
110
|
-
lines.push(center(t.fg("accent", "Free Kimi K2.5 via OpenCode Zen")));
|
|
111
|
-
lines.push(center(t.fg("success", '"Powered by daxnuts"')));
|
|
112
|
-
lines.push(center(t.fg("muted", "— @thdxr")));
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
lines.push("");
|
|
116
|
-
lines.push("");
|
|
117
|
-
lines.push("");
|
|
118
|
-
}
|
|
119
|
-
lines.push("");
|
|
120
|
-
if (textPhase > 2 || this.tick >= this.maxTicks) {
|
|
121
|
-
lines.push(center(t.fg("dim", "Try OpenCode")));
|
|
122
|
-
lines.push(center(t.fg("mdLink", "https://mistral.ai/news/mistral-vibe-2-0")));
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
lines.push("");
|
|
126
|
-
lines.push("");
|
|
127
|
-
}
|
|
128
|
-
lines.push("");
|
|
129
|
-
this.cachedLines = lines;
|
|
130
|
-
this.cachedWidth = width;
|
|
131
|
-
this.cachedTick = this.tick;
|
|
132
|
-
return lines;
|
|
133
|
-
}
|
|
134
|
-
dispose() {
|
|
135
|
-
this.stopAnimation();
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
//# sourceMappingURL=daxnuts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daxnuts.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/daxnuts.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * POWERED BY DAXNUTS - Easter egg for OpenCode + Kimi K2.5\n *\n * A heartfelt tribute to dax (@thdxr) for providing free Kimi K2.5 access via OpenCode.\n */\n\nimport type { Component, TUI } from \"@earendil-works/pi-tui\";\nimport { theme } from \"../theme/theme.ts\";\n\n// 32x32 RGB image of dax, hex encoded (3 bytes per pixel)\nconst DAX_HEX =\n\t\"bbbab8b9b9b6b9b8b5bcbbb8b8b7b4b7b5b2b6b5b2b8b7b4b7b6b3b6b4b1bdbcb8bab8b6bbb8b5b8b5b1bbb8b4c2bebbc1bebac0bdbabfbcb9c1bebabfbebbc0bfbcc0bdbabbb8b5c1bfbcbfbcb8bbb9b6bfbcb8c2bfbcc1bfbcbfbbb8bdb9b6b8b7b5b9b8b5b8b8b5b5b5b2b6b5b2b8b7b4b9b8b5b9b8b5b6b5b3bab8b5bcbab7bbb9b6bbb8b5bfb9b5bdb2abbcb0a8beb2aabeb5afbfbab6bebab7c0bfbcbebdbabebbb8c0bdbabfbebbc2bebbbdbab7c3c0bdc3c0bdc1bebbc2bebabfbcb8bab9b6b7b6b3b2b1aeb6b5b2b5b4b1b5b4b2b6b5b2b7b6b4b9b8b6b7b6b3bbbab7b2afaba5988fb49e90b09481b79a88b39683b09583b7a395bfb6b0c0bdbabdbbb8bebcb9c1bfbcc0bebbbdbab7bebbb8c2bfbcc0bdbac0bcb9bdb9b6c0bcb8b5b4b2b4b3b0bab9b6b9b9b6b5b4b1b5b4b1b6b5b3b9b8b5b9b8b6b9b8b6b2aeaa968174a6836eaa856eab846eaf8973ac8973b08f79b18f7ab39786b7a89dbbb3aebfbab6c2c0bdbebcb9bfbdbac3c1bdc2bebbc0bcb9bdb9b6c1bdbabfbbb8b4b3b0b9b8b5b8b7b5b4b3b1b5b4b1b8b7b4b8b7b5bab9b6bbbab7b1afad8c7a719d735ca47860a87d65a98069ae8972ae8c75af8d77aa826ba98067aa8974b39e90b6a79dbbb2adc0bdbac1bfbdbfbbb8c1bdb9bebab6c0bdb9bfbbb8c1bdbab4b2b0b7b6b4b7b6b3b4b2b0bab9b7b6b5b2b6b5b2bab9b6bab9b6958c87977663aa836bac8772b08f7aad8c77b2917db0917db0907cac8971a77d64a87f67ac8972b29887b8a89dbfbab5bfbdbac1bebac0bcb9c0bcb9c0bcb9c1bebabebab7b8b7b4b7b6b4b5b4b1b5b4b2b7b6b3b5b4b2bab9b7bab9b6b4b1ada88f7fad8973ae8d78b19684b19685b29786b69a89b29582b1917daa856ea87e66a97e66ad866ea9826baf9280b8ada6bdbbb8bebab7bfbbb8c1bdbabfbbb8bcb8b4bcb8b5b6b4b2b7b5b3b6b5b2b8b7b4b3b2afb8b7b4b6b5b2b3b2b0b3a59aab856fad8d78b0917eb19886b49b8bb49a89b39785b0917eaf8f7cab866fa77d65a77a61a87d64a9816ab08f79b5a296c1bcb8c3bfbcc2bebbbebab7bfbbb7bdbab6c2bebab8b7b4b7b6b4b6b5b3b7b6b3b6b5b2b9b8b6b4b3b1b6b1acac8f7ca9826bae8f7aaf9583b49c8cb49c8bb79d8cb59987b19380ad8e79ae8c77af8e78ac8771a3775faa826bae8972b39888bbb6b2bebbb8bfbbb8bfbbb8c0bdb9bebbb7c0bdb9b6b5b2b9b8b5b4b3b1b8b7b5b4b3b0b7b6b4b6b5b3b1a7a0aa8772a77d65a88570b49887b19b8d9c887c907a6d987f71aa907faf917daf8e7aad8c78ac8b77a8836ca9836cac8770b49b8abdb6b2c0bcb9c0bdb9bfbbb8bebab7bfbcb9bebab7b9b8b6b5b4b2b9b8b5b8b7b5b8b7b4b7b6b4b5b4b2b3a9a2ad8973a1755da9856fb398858c776a65544b776358725d526e594d9c7f6eb1907ba68672ad8e7aab8771ac856db18f79b3a092beb9b5c1bdbabdb9b5bebab7bfbbb7bebab7bcb9b6b7b6b4b6b6b3b8b7b4b5b4b2b8b6b4b7b6b3b4b3b0b4aba4a6826ba3775fb08e79b19584a88e7daa8e7db29481ad8f7c997e6da38674ac8d79ac8e7aae917f9a7c6a896a599a7c6ab3a398c1bdbabdb9b6bcb8b5bebab6bebab7bdb9b5bdb9b6b5b4b1b7b5b3b5b4b2b7b6b3b7b6b4b3b3b0b3b2b0b4aca5a7846fa97f68ae8f7bae9383b59c8bb2937fae8e79ac8b76af927eaf927eb29683b39885b2988891786a72594c6e594d978d86bdbab7bab7b3c0bcb9c0bcb9bebab7bebbb7bdb9b6b3b2b0b4b3b0b5b4b2b4b4b1b4b3b1b4b3b1b4b3b0b6ada5aa8670a57a62ad8e7ab29b8cb69d8dab856fa9826aa88069ab8771af907db49987b19684b29886b59987b39480b09787b5a9a1bcb8b5bebab7bdb9b5bebab7bfbbb8bfbbb7bbb7b4b3b2afb8b7b5b8b7b5b3b2b0b5b4b2b6b5b3b6b4b1afa299a98975a9826baf907cb39988b49a89af8e7aac8973aa856eaf8c74b1917dae907dac907db39988b29785b49785b7a090b9aca3bfbab7bcb8b5bdb9b6bcb8b4bcb8b5bdb9b5bcb8b4b5b4b2b6b5b3b4b3b0b4b3b0b9b8b5b8b6b4908b88887467aa8f7ea78976ad8973b08b74b59885b69e8eb29888b1917cb1917db1937fae907cb19686b39a8ab29886b59b8ab8a192b6aaa3b7b2afbcb8b4bcb8b5bbb7b4c0bcb9bebab7c0bcb9b6b5b2b6b5b3b4b3b0bab9b7b7b6b4b1b0ae7b716ba083709b806f716158967764b08870b29481b69b8ab69f8fb39a89b69f90b49d8db39a89b29988b49c8cb6a090b8a496baa49593867f8f8986bfbbb7bdb9b5bcb7b4bab6b3b9b5b2bab6b2b4b3b1b3b3b0b6b5b3b8b7b5b4b2b0a7a5a38f837dae917ea084725a504c63544da28370b39784b59e8db2a093a698909b918b998e8790857e95877dad998bb39c8cb5a091b9a2938d827c95908dbebab6bbb7b3bdbab7bbb7b4bdb9b6bbb7b4b4b3b0b5b4b1b8b7b5b6b5b3b8b8b5b4b2af968f8ab29a8bab9485544b483a323073655d96887f70655f61595547403e453e3c453f3d57504f655e5b90847db39c8db7a090b6a09189807aaba6a3bdb9b6c0bcb9bebab7bcb7b4bebab7bbb7b4b3b2b0b6b5b3b2b1afb7b6b4b8b7b4b5b4b1aeaba8b5a89fac998d4d44412d25244d46444e4744322b293a3230423937433a37352d2a59504c534b48524a48988a81b59f8fb19c8d827974b2afacbdb9b5bcb8b4bdb9b5bcb8b5bdb9b6bab6b2b8b7b5b5b4b2b6b6b3b9b8b5b7b6b3b6b5b2b8b6b3b9b4b1b2a9a26c64612d25242d2625312a28352d2c453d3a78675c8d7a6ea09792aea6a0615854332b29524a479f8e82b09d90a49b96c1bdb9bebab7bfbbb8bbb8b4b9b5b1b8b4b0b9b4b0b7b6b4b8b7b5b8b7b4b6b5b3b8b6b3bab9b6b9b8b5b4b3b0b7b5b2a5a29f453d3b261e1d261f1e2e2625413936857268977865b19482b5a69caca5a07c7572453d3b746963a0948cc5bfbbc0bbb8beb9b6bbb7b3bbb6b3b7b3afb8b4b0b9b5b1b7b6b3b6b5b3b5b4b2b5b4b2b7b6b3b7b6b3b8b6b3b4b2afb7b6b3b3b1ae6d6765251f1e1e18172a22212d2523443b3971625ab19888b09482a89182877e792c25243e3634766d6abeb9b5bfbbb7bebab6bcb7b3bbb6b3b9b5b1b7b3afb8b4b0b4b3b0b5b4b1b5b4b1b4b3b1b5b4b2b8b6b4b5b3b0b9b6b4b5b4b1b6b4b27f79762a2322221c1b2d2524221b1a443e3c47413f6f676281766f867971675e5a3e37352a222166605dbab7b3bdb9b5beb9b5bcb7b3bcb7b3b9b4b0bab6b2bab6b2b5b3b0b6b4b2b3b2afb7b6b3b4b4b1b4b3b0b6b4b1b5b4b1b4b3b0b9b6b29a8c8252474230292828201f181212322c2c231e1d1c16162c26252923222d26252d2523332b2a8e8885bcb8b5bcb7b3bbb6b2bcb7b3b9b4b1b9b5b1b7b2afb7b2ae7a838e9b9b9caeadacb3b2b0b3b2afb7b7b4b6b5b3b6b6b3b7b6b3b9ada4a991808e7b6f50453f2b24231a14142923221f19181d17161f18182620201d17162a22215d5654b7b3b0bbb7b3bbb6b2b8b4b0bab5b1bbb6b2bab5b1b8b4b0bab6b22c496b4c5d735f68766e727a828285929090adaba8b7b2aeb6a59ab39682a28470a387748e76674e403a1a14141d1716181211221c1c1f1918221c1b2f2827342d2c8d8884bab6b3b9b5b2bab5b1bab5b1b9b4b0bab6b2b8b4b0b9b4b0b7b2ae325e8b365f8a3a5d833f5b7a545f70646469706b6aa08f84b08e78b18e769f7e689e7f6b9e816d907766584940362d2a1c1615201b1a1a1413201a1a251e1d393331a39e9bbab5b1bcb7b3bab6b2b8b3afb8b4b0b9b4b0b9b4b1bab5b2b5b0ac3d6c9843729d44719c426e98415f805a64716f6a699d8677b1927eb3947faa89749d7a649f7f6ba487749e837186716454463f2c25231e181837302e3a33317a7471beb9b6bcb8b4bbb6b2b6b2aebab5b1b9b5b1b8b3afbab6b2b6b1adb5aeaa4877a14c7aa44e7ba345719a3a5d80586b7f767475927b6eb1927faf8e79b08e78a78169a07861a17f6aa58570a688749b83738270666f66618a8480a49e99b7b2aebab6b2bcb8b4b9b5b1b7b2aebab5b1b9b4b0b6b1aeb6b1adb2aca8b2aca84876a04a78a2517fa74771973a5d80405c7a6161677c695fac8a75b08d77b4917aaf8971ad876fa5816aa6846ea78670a98a76ac9484ab9f96b2aca8bdb8b4bcb7b3bcb8b4bcb8b4b8b3afb7b2aeb9b4b0b8b3afb8b2aeb6afabb3aeaab2aeaa4878a14b7aa34c7ba44a759b3d63873b5f825b67766f5f569c7e6caf8c77b18f79b28f78b5927caf8e78a98872aa8a76a98a76ac917fada199b7b0acb9b3afbfb9b5c1bab6bdb6b2b8b3afbab5b1b9b4b0b6afabb7b1adb3ada9b3aeaab0aba8\";\n\nconst WIDTH = 32;\nconst HEIGHT = 32;\n\nfunction parseImage(): number[][][] {\n\tconst pixels: number[][][] = [];\n\tfor (let y = 0; y < HEIGHT; y++) {\n\t\tconst row: number[][] = [];\n\t\tfor (let x = 0; x < WIDTH; x++) {\n\t\t\tconst idx = (y * WIDTH + x) * 6;\n\t\t\tconst r = parseInt(DAX_HEX.slice(idx, idx + 2), 16);\n\t\t\tconst g = parseInt(DAX_HEX.slice(idx + 2, idx + 4), 16);\n\t\t\tconst b = parseInt(DAX_HEX.slice(idx + 4, idx + 6), 16);\n\t\t\trow.push([r, g, b]);\n\t\t}\n\t\tpixels.push(row);\n\t}\n\treturn pixels;\n}\n\nfunction rgb(r: number, g: number, b: number, bg = false): string {\n\treturn `\\x1b[${bg ? 48 : 38};2;${r};${g};${b}m`;\n}\n\nconst RESET = \"\\x1b[0m\";\n\nfunction buildImage(): string[] {\n\tconst pixels = parseImage();\n\tconst lines: string[] = [];\n\n\t// Use half-block chars: ▄ with bg=top pixel, fg=bottom pixel\n\tfor (let row = 0; row < HEIGHT; row += 2) {\n\t\tlet line = \"\";\n\t\tfor (let x = 0; x < WIDTH; x++) {\n\t\t\tconst top = pixels[row][x];\n\t\t\tconst bottom = pixels[row + 1]?.[x] ?? top;\n\t\t\tline += `${rgb(bottom[0], bottom[1], bottom[2])}${rgb(top[0], top[1], top[2], true)}▄`;\n\t\t}\n\t\tline += RESET;\n\t\tlines.push(line);\n\t}\n\treturn lines;\n}\n\nexport class DaxnutsComponent implements Component {\n\tprivate ui: TUI;\n\tprivate image: string[];\n\tprivate interval: ReturnType<typeof setInterval> | null = null;\n\tprivate tick = 0;\n\tprivate maxTicks = 25; // ~2 seconds at 80ms\n\tprivate cachedLines: string[] = [];\n\tprivate cachedWidth = 0;\n\tprivate cachedTick = -1;\n\n\tconstructor(ui: TUI) {\n\t\tthis.ui = ui;\n\t\tthis.image = buildImage();\n\t\tthis.startAnimation();\n\t}\n\n\tinvalidate(): void {\n\t\tthis.cachedWidth = 0;\n\t}\n\n\tprivate startAnimation(): void {\n\t\tthis.interval = setInterval(() => {\n\t\t\tthis.tick++;\n\t\t\tif (this.tick >= this.maxTicks) {\n\t\t\t\tthis.stopAnimation();\n\t\t\t}\n\t\t\tthis.cachedWidth = 0;\n\t\t\tthis.ui.requestRender();\n\t\t}, 80);\n\t}\n\n\tprivate stopAnimation(): void {\n\t\tif (this.interval) {\n\t\t\tclearInterval(this.interval);\n\t\t\tthis.interval = null;\n\t\t}\n\t}\n\n\trender(width: number): string[] {\n\t\tif (width === this.cachedWidth && this.cachedTick === this.tick) {\n\t\t\treturn this.cachedLines;\n\t\t}\n\n\t\tconst t = theme;\n\t\tconst lines: string[] = [];\n\n\t\tconst center = (s: string) => {\n\t\t\tconst visible = s.replace(/\\x1b\\[[0-9;]*m/g, \"\").length;\n\t\t\tconst left = Math.max(0, Math.floor((width - visible) / 2));\n\t\t\treturn \" \".repeat(left) + s;\n\t\t};\n\n\t\tlines.push(\"\");\n\n\t\t// Scanline reveal effect: show rows progressively\n\t\tconst revealedRows = Math.min(\n\t\t\tthis.image.length,\n\t\t\tMath.floor((this.tick / this.maxTicks) * (this.image.length + 3)),\n\t\t);\n\n\t\tfor (let i = 0; i < this.image.length; i++) {\n\t\t\tif (i < revealedRows) {\n\t\t\t\tlines.push(center(this.image[i]));\n\t\t\t} else {\n\t\t\t\t// Show scan line\n\t\t\t\tif (i === revealedRows) {\n\t\t\t\t\tconst scanline = \"▓\".repeat(WIDTH);\n\t\t\t\t\tlines.push(center(rgb(100, 200, 255) + scanline + RESET));\n\t\t\t\t} else {\n\t\t\t\t\tlines.push(center(\" \".repeat(WIDTH)));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlines.push(\"\");\n\n\t\t// Fade in text after image is revealed\n\t\tconst textPhase = Math.max(0, this.tick - this.maxTicks * 0.6);\n\t\tif (textPhase > 0 || this.tick >= this.maxTicks) {\n\t\t\tlines.push(center(t.fg(\"accent\", \"Free Kimi K2.5 via OpenCode Zen\")));\n\t\t\tlines.push(center(t.fg(\"success\", '\"Powered by daxnuts\"')));\n\t\t\tlines.push(center(t.fg(\"muted\", \"— @thdxr\")));\n\t\t} else {\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tlines.push(\"\");\n\t\tif (textPhase > 2 || this.tick >= this.maxTicks) {\n\t\t\tlines.push(center(t.fg(\"dim\", \"Try OpenCode\")));\n\t\t\tlines.push(center(t.fg(\"mdLink\", \"https://mistral.ai/news/mistral-vibe-2-0\")));\n\t\t} else {\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"\");\n\t\t}\n\t\tlines.push(\"\");\n\n\t\tthis.cachedLines = lines;\n\t\tthis.cachedWidth = width;\n\t\tthis.cachedTick = this.tick;\n\t\treturn lines;\n\t}\n\n\tdispose(): void {\n\t\tthis.stopAnimation();\n\t}\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fallback-view.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/tasks/fallback-view.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAGpE,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,EAAE,gBAyB9B,CAAC"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { stripTerminalSequences, Text } from "@earendil-works/pi-tui";
|
|
2
|
-
import { sanitizeBinaryOutput } from "../../../utils/shell.js";
|
|
3
|
-
/** Saved text remains readable even when its renderer is unavailable. */
|
|
4
|
-
export const fallbackTaskView = {
|
|
5
|
-
outputMode: "snapshot",
|
|
6
|
-
create({ theme }) {
|
|
7
|
-
const info = new Text("", 0, 0);
|
|
8
|
-
const output = new Text("", 0, 0);
|
|
9
|
-
return {
|
|
10
|
-
info,
|
|
11
|
-
output,
|
|
12
|
-
update(task) {
|
|
13
|
-
info.setText(sanitizeBinaryOutput(stripTerminalSequences(`${task.kind}\n${task.command ?? task.title}`)));
|
|
14
|
-
const text = task.result?.content
|
|
15
|
-
.filter((block) => block.type === "text")
|
|
16
|
-
.map((block) => block.text)
|
|
17
|
-
.join("\n") ||
|
|
18
|
-
task.projection?.text ||
|
|
19
|
-
task.error ||
|
|
20
|
-
"No output yet.";
|
|
21
|
-
output.setText(theme.fg("toolOutput", sanitizeBinaryOutput(stripTerminalSequences(text))) +
|
|
22
|
-
(task.resultTruncated ? "\n[Saved result truncated.]" : ""));
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
|
-
},
|
|
26
|
-
};
|
|
27
|
-
//# sourceMappingURL=fallback-view.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fallback-view.js","sourceRoot":"","sources":["../../../../src/modes/interactive/tasks/fallback-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,yEAAyE;AACzE,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IACjD,UAAU,EAAE,UAAU;IACtB,MAAM,CAAC,EAAE,KAAK,EAAE;QACf,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,OAAO;YACN,IAAI;YACJ,MAAM;YACN,MAAM,CAAC,IAAI;gBACV,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1G,MAAM,IAAI,GACT,IAAI,CAAC,MAAM,EAAE,OAAO;qBAClB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;qBACxC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;qBAC1B,IAAI,CAAC,IAAI,CAAC;oBACZ,IAAI,CAAC,UAAU,EAAE,IAAI;oBACrB,IAAI,CAAC,KAAK;oBACV,gBAAgB,CAAC;gBAClB,MAAM,CAAC,OAAO,CACb,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;oBACzE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE,CAAC,CAC5D,CAAC;YACH,CAAC;SACD,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["import { stripTerminalSequences, Text } from \"@earendil-works/pi-tui\";\nimport type { TaskViewProvider } from \"../../../core/tasks/view.ts\";\nimport { sanitizeBinaryOutput } from \"../../../utils/shell.ts\";\n\n/** Saved text remains readable even when its renderer is unavailable. */\nexport const fallbackTaskView: TaskViewProvider = {\n\toutputMode: \"snapshot\",\n\tcreate({ theme }) {\n\t\tconst info = new Text(\"\", 0, 0);\n\t\tconst output = new Text(\"\", 0, 0);\n\t\treturn {\n\t\t\tinfo,\n\t\t\toutput,\n\t\t\tupdate(task) {\n\t\t\t\tinfo.setText(sanitizeBinaryOutput(stripTerminalSequences(`${task.kind}\\n${task.command ?? task.title}`)));\n\t\t\t\tconst text =\n\t\t\t\t\ttask.result?.content\n\t\t\t\t\t\t.filter((block) => block.type === \"text\")\n\t\t\t\t\t\t.map((block) => block.text)\n\t\t\t\t\t\t.join(\"\\n\") ||\n\t\t\t\t\ttask.projection?.text ||\n\t\t\t\t\ttask.error ||\n\t\t\t\t\t\"No output yet.\";\n\t\t\t\toutput.setText(\n\t\t\t\t\ttheme.fg(\"toolOutput\", sanitizeBinaryOutput(stripTerminalSequences(text))) +\n\t\t\t\t\t\t(task.resultTruncated ? \"\\n[Saved result truncated.]\" : \"\"),\n\t\t\t\t);\n\t\t\t},\n\t\t};\n\t},\n};\n"]}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
# todo — compact task list
|
|
2
|
-
|
|
3
|
-
Adds a `todo` tool and `/todos` command for multi-step work. While unfinished tasks exist, a width-aware one-line widget stays above the editor; `/todos` shows the complete list on demand.
|
|
4
|
-
|
|
5
|
-
## Tool patches
|
|
6
|
-
|
|
7
|
-
One call applies one patch built from three optional groups:
|
|
8
|
-
|
|
9
|
-
- `create` atomically adds one or more tasks in input order. Each item requires a concise `subject` and a `description` of what done means; `status` defaults to `pending` and may be set explicitly, including `in_progress`.
|
|
10
|
-
- `update` edits one or more tasks by `id`. Blank or omitted `subject`/`description` fields keep the current values, so a status-only edit is `{"update": [{"id": 2, "status": "completed"}]}`.
|
|
11
|
-
- `delete` removes one or more task IDs. Deleting an ID that is already absent is a recorded no-op, not an error.
|
|
12
|
-
|
|
13
|
-
Omit or leave empty any group the call does not need; calling with `{}` lists every task with its full description:
|
|
14
|
-
|
|
15
|
-
```json
|
|
16
|
-
{
|
|
17
|
-
"create": [
|
|
18
|
-
{
|
|
19
|
-
"subject": "Implement config parsing",
|
|
20
|
-
"description": "Valid config is parsed and invalid config is rejected",
|
|
21
|
-
"status": "in_progress"
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
"subject": "Verify config parsing",
|
|
25
|
-
"description": "Focused parser tests pass"
|
|
26
|
-
}
|
|
27
|
-
]
|
|
28
|
-
}
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
```json
|
|
32
|
-
{ "update": [{ "id": 1, "status": "completed" }, { "id": 2, "status": "in_progress" }] }
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
```json
|
|
36
|
-
{ "delete": [3] }
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
Tasks have three statuses: `pending`, `in_progress`, and `completed`. At most one task may be `in_progress`; one activation per call returns every other active task to `pending` and reports that side effect, while a call that tries to activate two tasks is rejected. Zero active tasks is valid when waiting, before work starts, or after everything is done. Any status can be reopened or corrected. Listing includes every task, ordered as active, pending by ID, then completed by ID.
|
|
40
|
-
|
|
41
|
-
Todo intentionally has no action discriminator, dependency graph, owner, metadata, active-form label, tombstone, filtering, pagination, `get`, or `clear`. Keep tasks in intended execution order. When work is blocked, return it to `pending`, create a task that resolves the blocker, and activate that task instead.
|
|
42
|
-
|
|
43
|
-
The whole patch is validated before anything is applied: invalid input leaves the list unchanged. Within one call, `delete` applies before `update` and `create`, so a same-call deletion frees capacity for the creation. A task cannot be edited twice or be both edited and deleted in one call. Deletion removes an item from the current snapshot without reusing its ID. Older conversation branches still contain their earlier snapshots.
|
|
44
|
-
|
|
45
|
-
## Presentation
|
|
46
|
-
|
|
47
|
-
The persistent widget displays only subjects:
|
|
48
|
-
|
|
49
|
-
```text
|
|
50
|
-
Todos 2/6 · [>] #4 Fix login redirect [ ] #5 Add regression tests +2 more
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
`2/6` means completed tasks over total tasks. The active task is shown first, followed by pending tasks in ID order. `+N more` counts only unfinished tasks that do not fit; it disappears when all unfinished tasks are visible. Completed tasks appear only in the header count. As width shrinks, whole pending segments move into `+N more`; only the active subject may be truncated. The renderer always returns at most one terminal-width-safe line.
|
|
54
|
-
|
|
55
|
-
The widget is registered only while a `pending` or `in_progress` task exists. It disappears immediately for an empty or fully completed list; there is no completion timer or visibility cache.
|
|
56
|
-
|
|
57
|
-
`/todos` shows every task with its description on an indented second line:
|
|
58
|
-
|
|
59
|
-
```text
|
|
60
|
-
Todos: 1 in progress, 3 pending, 2 completed
|
|
61
|
-
[>] #4 Fix login redirect
|
|
62
|
-
Login reaches the dashboard and focused tests pass
|
|
63
|
-
[ ] #5 Add regression tests
|
|
64
|
-
Cover invalid redirects and session restoration
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
Consecutive tool calls collapse into the native `todo` transcript group. Collapsed settled rows use result-aware details to show actual created IDs and subjects, update status and automatic demotion, list counts, deleted IDs, and auto-removed completed tasks. Expanding restores the complete call and native result: a created batch lists each task's ID, subject, and indented description, and a settled deletion names every removed task's ID and subject plus any IDs that were already absent. Malformed or older details fall back to a bounded call summary.
|
|
68
|
-
|
|
69
|
-
## Limits
|
|
70
|
-
|
|
71
|
-
- At most 20 current tasks. When a call would push the list past 20, the oldest completed tasks are removed automatically to make room, except tasks that same call created or updated. If too few tasks can be reclaimed, the call is rejected without changes. The error lists previously completed IDs: retry with those IDs in `delete` instead of `update` to free space in the same patch, or complete tasks in a separate call before creating more.
|
|
72
|
-
- At most 20 items in one `create`, `update`, or `delete` group.
|
|
73
|
-
- Subjects are limited to 160 characters.
|
|
74
|
-
- Descriptions are limited to 500 characters.
|
|
75
|
-
- Subject and description whitespace is normalized to one line.
|
|
76
|
-
- Model-facing list output is bounded by those limits; no pagination is needed.
|
|
77
|
-
|
|
78
|
-
## Storage and replay
|
|
79
|
-
|
|
80
|
-
Todo state is conversation-backed rather than stored in a separate database. Every successful tool result carries a full snapshot:
|
|
81
|
-
|
|
82
|
-
```ts
|
|
83
|
-
{
|
|
84
|
-
schemaVersion: 3,
|
|
85
|
-
change: {
|
|
86
|
-
created: [/* new task ids */],
|
|
87
|
-
updated: [/* { id, from, to } status transitions */],
|
|
88
|
-
deleted: [/* { id, subject } */],
|
|
89
|
-
absent: [/* delete ids already gone */],
|
|
90
|
-
evicted: [/* completed tasks auto-removed for capacity */],
|
|
91
|
-
demotedId: 5 /* only when an activation demoted another task */
|
|
92
|
-
},
|
|
93
|
-
state: {
|
|
94
|
-
items: [/* complete current list */],
|
|
95
|
-
nextId: 7
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
For explicitly updated tasks, `from` is the status before the call and `to` is the final snapshot status, including any automatic demotion. The assistant tool call already stores the arguments, so result details do not duplicate the patch parameters. The extension keeps one closure-scoped store for its runtime and replays the latest valid v3 snapshot from the current conversation branch on session start and `/tree` navigation. `/reload`, resume, and session replacement create a fresh extension runtime and replay that branch. Compaction does not require a separate replay handler because it does not change the live branch state.
|
|
101
|
-
|
|
102
|
-
Replay scans tail to head, validates the bounded state, and can fall back past a malformed v3 snapshot. Snapshots from older schema versions (v1/v2) are intentionally ignored and are not migrated: restoring a conversation written before v3 starts with an empty list, while the historical tool-result text remains in the session transcript.
|
|
103
|
-
|
|
104
|
-
Tool execution is sequential, so concurrent calls cannot race on the closure store. Validation failures throw before commit, allowing Pi to mark the result as an error while the previous snapshot remains authoritative.
|