@bastani/atomic 0.9.18 → 0.9.19-alpha.2
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 +100 -0
- package/dist/builtin/intercom/CHANGELOG.md +16 -0
- package/dist/builtin/intercom/README.md +21 -11
- package/dist/builtin/intercom/broker/broker.ts +73 -9
- package/dist/builtin/intercom/broker/client.ts +4 -0
- package/dist/builtin/intercom/broker/framing.ts +5 -2
- package/dist/builtin/intercom/broker/group-membership.ts +4 -2
- package/dist/builtin/intercom/broker/presence-handler.ts +14 -0
- package/dist/builtin/intercom/broker/send-handler.ts +34 -5
- package/dist/builtin/intercom/broker/terminal-questions.ts +29 -0
- package/dist/builtin/intercom/index.bundle.mjs +936 -740
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/intercom/recipient-purpose.ts +9 -0
- package/dist/builtin/intercom/recoverable-disconnect.ts +2 -3
- package/dist/builtin/intercom/retry-policy.ts +4 -2
- package/dist/builtin/intercom/skills/intercom/SKILL.md +5 -4
- package/dist/builtin/intercom/types.ts +16 -2
- package/dist/builtin/mcp/CHANGELOG.md +6 -0
- package/dist/builtin/mcp/README.md +2 -0
- package/dist/builtin/mcp/index.bundle.mjs +2201 -12000
- package/dist/builtin/mcp/package.json +2 -2
- package/dist/builtin/subagents/CHANGELOG.md +27 -0
- package/dist/builtin/subagents/README.md +33 -12
- package/dist/builtin/subagents/agents/code-simplifier.md +1 -1
- package/dist/builtin/subagents/agents/codebase-analyzer.md +1 -1
- package/dist/builtin/subagents/agents/codebase-locator.md +2 -2
- package/dist/builtin/subagents/agents/codebase-online-researcher.md +1 -1
- package/dist/builtin/subagents/agents/codebase-pattern-finder.md +2 -2
- package/dist/builtin/subagents/agents/codebase-research-analyzer.md +1 -1
- package/dist/builtin/subagents/agents/codebase-research-locator.md +2 -2
- package/dist/builtin/subagents/agents/debugger.md +1 -1
- package/dist/builtin/subagents/agents/worker.md +1 -1
- package/dist/builtin/subagents/package.json +2 -2
- package/dist/builtin/subagents/skills/herdr/LICENSE +201 -0
- package/dist/builtin/subagents/skills/herdr/SKILL.md +202 -0
- package/dist/builtin/subagents/skills/subagent/SKILL.md +14 -10
- package/dist/builtin/subagents/skills/tmux/SKILL.md +1 -1
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +1284 -609
- package/dist/builtin/web-access/index.bundle.mjs +26280 -26274
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/workflows/CHANGELOG.md +48 -0
- package/dist/builtin/workflows/README.md +1 -1
- package/dist/builtin/workflows/builtin/adversarial-verification.js +5 -7
- package/dist/builtin/workflows/builtin/{chunk-reqr3sr3.js → chunk-1kx4aggw.js} +22 -22
- package/dist/builtin/workflows/builtin/{chunk-42s7sw0b.js → chunk-62v3gg9f.js} +9 -9
- package/dist/builtin/workflows/builtin/{chunk-wgccch41.js → chunk-6w6cvk6b.js} +16 -16
- package/dist/builtin/workflows/builtin/{chunk-zbekjqew.js → chunk-a2kdsqn8.js} +4 -4
- package/dist/builtin/workflows/builtin/{chunk-ze5x3d1r.js → chunk-fg9esgkj.js} +7 -7
- package/dist/builtin/workflows/builtin/{chunk-n8h4yyew.js → chunk-g0csgs7w.js} +11 -11
- package/dist/builtin/workflows/builtin/{chunk-79fjkcvh.js → chunk-hbnwv56f.js} +17 -17
- package/dist/builtin/workflows/builtin/{chunk-ed4jfn5t.js → chunk-mygmtz6e.js} +43 -43
- package/dist/builtin/workflows/builtin/{chunk-7430zyas.js → chunk-p8jjwfg6.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-hqpe2cyx.js → chunk-r9qq7xfj.js} +49 -49
- package/dist/builtin/workflows/builtin/{chunk-k3w87x8y.js → chunk-t6x2d78s.js} +10 -10
- package/dist/builtin/workflows/builtin/{chunk-6fqs7c01.js → chunk-z0d03ktm.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-b0v2xab1.js → chunk-zggjyg5z.js} +221 -23
- package/dist/builtin/workflows/builtin/classify-and-act.js +5 -6
- package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +3 -4
- package/dist/builtin/workflows/builtin/generate-and-filter.js +5 -6
- package/dist/builtin/workflows/builtin/goal.js +7 -8
- package/dist/builtin/workflows/builtin/index.js +20 -22
- package/dist/builtin/workflows/builtin/loop-until-done.js +5 -6
- package/dist/builtin/workflows/builtin/open-claude-design.js +3 -3
- package/dist/builtin/workflows/builtin/ralph.js +7 -8
- package/dist/builtin/workflows/builtin/steering-context.js +3 -3
- package/dist/builtin/workflows/builtin/tournament.js +5 -7
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +56236 -25199
- package/dist/builtin/workflows/src/index.js +1217 -547
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/startup-ui.d.ts +1 -1
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-auto-compaction.js +5 -4
- package/dist/core/agent-session-auto-compaction.js.map +1 -1
- package/dist/core/agent-session-bash.d.ts +1 -1
- package/dist/core/agent-session-bash.d.ts.map +1 -1
- package/dist/core/agent-session-bash.js +5 -1
- package/dist/core/agent-session-bash.js.map +1 -1
- package/dist/core/agent-session-compaction.d.ts +1 -1
- package/dist/core/agent-session-compaction.js.map +1 -1
- package/dist/core/agent-session-custom-message-commit.d.ts +1 -1
- package/dist/core/agent-session-custom-message-commit.js.map +1 -1
- package/dist/core/agent-session-delivery-forwarding.d.ts +1 -1
- package/dist/core/agent-session-delivery-forwarding.js.map +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +5 -0
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-export.d.ts +1 -1
- package/dist/core/agent-session-export.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts +8 -1
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +45 -3
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-message-queue.d.ts +1 -1
- package/dist/core/agent-session-message-queue.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +14 -7
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts +2 -2
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +22 -18
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-runtime-auth.d.ts +1 -1
- package/dist/core/agent-session-runtime-auth.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +13 -4
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +27 -4
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +5 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +44 -34
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-state.d.ts +1 -1
- package/dist/core/agent-session-state.js.map +1 -1
- package/dist/core/agent-session-tasks.d.ts +9 -0
- package/dist/core/agent-session-tasks.d.ts.map +1 -0
- package/dist/core/agent-session-tasks.js +113 -0
- package/dist/core/agent-session-tasks.js.map +1 -0
- package/dist/core/agent-session-tool-registry.d.ts +1 -0
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +30 -5
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/agent-session-tree.d.ts.map +1 -1
- package/dist/core/agent-session-tree.js +3 -0
- package/dist/core/agent-session-tree.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +2 -2
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +4 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +7 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bash-executor.d.ts +1 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts +1 -1
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extension-session-state.js.map +1 -1
- package/dist/core/extensions/agent-events.d.ts +4 -4
- package/dist/core/extensions/agent-events.d.ts.map +1 -1
- package/dist/core/extensions/agent-events.js.map +1 -1
- package/dist/core/extensions/api-types.d.ts +8 -2
- package/dist/core/extensions/api-types.d.ts.map +1 -1
- package/dist/core/extensions/api-types.js.map +1 -1
- package/dist/core/extensions/context-types.d.ts +9 -0
- package/dist/core/extensions/context-types.d.ts.map +1 -1
- package/dist/core/extensions/context-types.js.map +1 -1
- package/dist/core/extensions/event-results.d.ts +1 -1
- package/dist/core/extensions/event-results.js.map +1 -1
- package/dist/core/extensions/event-types.d.ts +2 -1
- package/dist/core/extensions/event-types.d.ts.map +1 -1
- package/dist/core/extensions/event-types.js.map +1 -1
- package/dist/core/extensions/index.d.ts +2 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader-api.d.ts +1 -1
- package/dist/core/extensions/loader-api.d.ts.map +1 -1
- package/dist/core/extensions/loader-api.js +7 -0
- package/dist/core/extensions/loader-api.js.map +1 -1
- package/dist/core/extensions/loader-core.d.ts +1 -1
- package/dist/core/extensions/loader-core.js.map +1 -1
- package/dist/core/extensions/loader-discovery.d.ts +1 -1
- package/dist/core/extensions/loader-discovery.js.map +1 -1
- package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
- package/dist/core/extensions/loader-runtime.js +3 -0
- package/dist/core/extensions/loader-runtime.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +1 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/message-types.d.ts +1 -1
- package/dist/core/extensions/message-types.js.map +1 -1
- package/dist/core/extensions/runner-context.d.ts +11 -1
- package/dist/core/extensions/runner-context.d.ts.map +1 -1
- package/dist/core/extensions/runner-context.js +41 -2
- package/dist/core/extensions/runner-context.js.map +1 -1
- package/dist/core/extensions/runner-events.d.ts +1 -1
- package/dist/core/extensions/runner-events.d.ts.map +1 -1
- package/dist/core/extensions/runner-events.js +17 -2
- package/dist/core/extensions/runner-events.js.map +1 -1
- package/dist/core/extensions/runner-ui.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +17 -2
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +68 -18
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/runtime-types.d.ts +4 -1
- package/dist/core/extensions/runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/runtime-types.js.map +1 -1
- package/dist/core/extensions/tool-types.d.ts +1 -1
- package/dist/core/extensions/tool-types.js.map +1 -1
- package/dist/core/extensions/types.d.ts +1 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/ui-types.d.ts +5 -1
- package/dist/core/extensions/ui-types.d.ts.map +1 -1
- package/dist/core/extensions/ui-types.js.map +1 -1
- package/dist/core/extensions/workflow-activity-hub.d.ts +25 -0
- package/dist/core/extensions/workflow-activity-hub.d.ts.map +1 -0
- package/dist/core/extensions/workflow-activity-hub.js +183 -0
- package/dist/core/extensions/workflow-activity-hub.js.map +1 -0
- package/dist/core/extensions/workflow-events.d.ts +118 -0
- package/dist/core/extensions/workflow-events.d.ts.map +1 -0
- package/dist/core/extensions/workflow-events.js +2 -0
- package/dist/core/extensions/workflow-events.js.map +1 -0
- package/dist/core/footer-data-provider.d.ts +8 -4
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +97 -11
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/keybindings.d.ts +27 -2
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +7 -2
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/mandatory-runtime-tools.d.ts +1 -1
- package/dist/core/mandatory-runtime-tools.js.map +1 -1
- package/dist/core/model-fallback-failures.js +2 -2
- package/dist/core/model-fallback-failures.js.map +1 -1
- package/dist/core/model-registry.d.ts +5 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +8 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver-defaults.js +1 -1
- package/dist/core/model-resolver-defaults.js.map +1 -1
- package/dist/core/resource-loader-assets.js.map +1 -1
- package/dist/core/resource-loader-core.d.ts +1 -1
- package/dist/core/resource-loader-core.js.map +1 -1
- package/dist/core/resource-loader-internals.d.ts +2 -2
- package/dist/core/resource-loader-internals.js.map +1 -1
- package/dist/core/resource-loader-reload.d.ts +2 -0
- package/dist/core/resource-loader-reload.d.ts.map +1 -1
- package/dist/core/resource-loader-reload.js +231 -191
- package/dist/core/resource-loader-reload.js.map +1 -1
- package/dist/core/resource-loader-types.d.ts +4 -2
- package/dist/core/resource-loader-types.d.ts.map +1 -1
- package/dist/core/resource-loader-types.js.map +1 -1
- package/dist/core/sdk-exports.d.ts +2 -2
- package/dist/core/sdk-exports.js.map +1 -1
- package/dist/core/sdk-types.d.ts +2 -2
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager-core.d.ts.map +1 -1
- package/dist/core/settings-manager-core.js +10 -4
- package/dist/core/settings-manager-core.js.map +1 -1
- package/dist/core/settings-storage.d.ts +1 -0
- package/dist/core/settings-storage.d.ts.map +1 -1
- package/dist/core/settings-storage.js +18 -0
- package/dist/core/settings-storage.js.map +1 -1
- package/dist/core/settings-types.d.ts +11 -0
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +2 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +5 -6
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tasks/agent-adapter.d.ts +32 -0
- package/dist/core/tasks/agent-adapter.d.ts.map +1 -0
- package/dist/core/tasks/agent-adapter.js +71 -0
- package/dist/core/tasks/agent-adapter.js.map +1 -0
- package/dist/core/tasks/command-output.d.ts +15 -0
- package/dist/core/tasks/command-output.d.ts.map +1 -0
- package/dist/core/tasks/command-output.js +29 -0
- package/dist/core/tasks/command-output.js.map +1 -0
- package/dist/core/tasks/completion-ordering.d.ts +11 -0
- package/dist/core/tasks/completion-ordering.d.ts.map +1 -0
- package/dist/core/tasks/completion-ordering.js +19 -0
- package/dist/core/tasks/completion-ordering.js.map +1 -0
- package/dist/core/tasks/completion.d.ts +36 -0
- package/dist/core/tasks/completion.d.ts.map +1 -0
- package/dist/core/tasks/completion.js +115 -0
- package/dist/core/tasks/completion.js.map +1 -0
- package/dist/core/tasks/contracts.d.ts +404 -0
- package/dist/core/tasks/contracts.d.ts.map +1 -0
- package/dist/core/tasks/contracts.js +2 -0
- package/dist/core/tasks/contracts.js.map +1 -0
- package/dist/core/tasks/execution-scope.d.ts +10 -0
- package/dist/core/tasks/execution-scope.d.ts.map +1 -0
- package/dist/core/tasks/execution-scope.js +27 -0
- package/dist/core/tasks/execution-scope.js.map +1 -0
- package/dist/core/tasks/owner-store.d.ts +53 -0
- package/dist/core/tasks/owner-store.d.ts.map +1 -0
- package/dist/core/tasks/owner-store.js +155 -0
- package/dist/core/tasks/owner-store.js.map +1 -0
- package/dist/core/tasks/supervisor.d.ts +121 -0
- package/dist/core/tasks/supervisor.d.ts.map +1 -0
- package/dist/core/tasks/supervisor.js +916 -0
- package/dist/core/tasks/supervisor.js.map +1 -0
- package/dist/core/tasks/transcript.d.ts +23 -0
- package/dist/core/tasks/transcript.d.ts.map +1 -0
- package/dist/core/tasks/transcript.js +74 -0
- package/dist/core/tasks/transcript.js.map +1 -0
- package/dist/core/tools/ask-user-question/ask-user-question.d.ts +2 -2
- package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/ask-user-question.js +8 -4
- package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
- package/dist/core/tools/ask-user-question/state/build-questionnaire.d.ts +1 -1
- package/dist/core/tools/ask-user-question/state/build-questionnaire.js.map +1 -1
- package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts +1 -1
- package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/multi-select-view.d.ts +1 -1
- package/dist/core/tools/ask-user-question/view/components/multi-select-view.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.d.ts +1 -1
- package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.d.ts +1 -1
- package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/submit-picker.d.ts +1 -1
- package/dist/core/tools/ask-user-question/view/components/submit-picker.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/tab-bar.d.ts +1 -1
- package/dist/core/tools/ask-user-question/view/components/tab-bar.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/dialog-builder.d.ts +1 -1
- package/dist/core/tools/ask-user-question/view/dialog-builder.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/tab-content-strategy.d.ts +1 -1
- package/dist/core/tools/ask-user-question/view/tab-content-strategy.js.map +1 -1
- package/dist/core/tools/bash-pty-native.d.ts +18 -3
- package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
- package/dist/core/tools/bash-pty-native.js +116 -1
- package/dist/core/tools/bash-pty-native.js.map +1 -1
- package/dist/core/tools/bash.d.ts +11 -4
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +52 -8
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +1 -2
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +2 -2
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/powershell.d.ts +20 -10
- package/dist/core/tools/powershell.d.ts.map +1 -1
- package/dist/core/tools/powershell.js +32 -7
- package/dist/core/tools/powershell.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +1 -2
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/resource-selectors.d.ts.map +1 -1
- package/dist/core/tools/resource-selectors.js +15 -7
- package/dist/core/tools/resource-selectors.js.map +1 -1
- package/dist/core/tools/search.js.map +1 -1
- package/dist/core/tools/todos-render.d.ts +1 -1
- package/dist/core/tools/todos-render.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +1 -2
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/workflow-stage-admission.d.ts +10 -0
- package/dist/core/workflow-stage-admission.d.ts.map +1 -1
- package/dist/core/workflow-stage-admission.js +24 -0
- package/dist/core/workflow-stage-admission.js.map +1 -1
- package/dist/extensions/herdr/activity.d.ts +15 -0
- package/dist/extensions/herdr/activity.d.ts.map +1 -0
- package/dist/extensions/herdr/activity.js +24 -0
- package/dist/extensions/herdr/activity.js.map +1 -0
- package/dist/extensions/herdr/environment.d.ts +7 -0
- package/dist/extensions/herdr/environment.d.ts.map +1 -0
- package/dist/extensions/herdr/environment.js +6 -0
- package/dist/extensions/herdr/environment.js.map +1 -0
- package/dist/extensions/herdr/index.d.ts +9 -0
- package/dist/extensions/herdr/index.d.ts.map +1 -0
- package/dist/extensions/herdr/index.js +225 -0
- package/dist/extensions/herdr/index.js.map +1 -0
- package/dist/extensions/herdr/pane-owner.d.ts +30 -0
- package/dist/extensions/herdr/pane-owner.d.ts.map +1 -0
- package/dist/extensions/herdr/pane-owner.js +111 -0
- package/dist/extensions/herdr/pane-owner.js.map +1 -0
- package/dist/extensions/herdr/transport.d.ts +8 -0
- package/dist/extensions/herdr/transport.d.ts.map +1 -0
- package/dist/extensions/herdr/transport.js +28 -0
- package/dist/extensions/herdr/transport.js.map +1 -0
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +2 -0
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/llama/huggingface-ui.d.ts +1 -1
- package/dist/extensions/llama/huggingface-ui.js.map +1 -1
- package/dist/extensions/llama/ui.js.map +1 -1
- package/dist/index-extensions.d.ts +3 -2
- package/dist/index-extensions.d.ts.map +1 -1
- package/dist/index-extensions.js.map +1 -1
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/main-session.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +149 -69
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/atomic-banner.d.ts +1 -1
- package/dist/modes/interactive/components/atomic-banner.js.map +1 -1
- package/dist/modes/interactive/components/atomic-working-status.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts +12 -0
- package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.js +44 -0
- package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.d.ts +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.js +43 -8
- package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-editor.d.ts +1 -1
- package/dist/modes/interactive/components/chat-session-host-editor.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-events.d.ts +2 -2
- package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.d.ts +2 -2
- package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.js +12 -3
- package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-runtime.d.ts +4 -5
- package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-runtime.js +8 -6
- package/dist/modes/interactive/components/chat-session-host-runtime.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.d.ts +7 -2
- package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.js +1 -0
- package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.d.ts +1 -1
- package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-types.d.ts +8 -3
- package/dist/modes/interactive/components/chat-session-host-types.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-types.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-utils.d.ts +1 -1
- package/dist/modes/interactive/components/chat-session-host-utils.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-utils.js +2 -0
- package/dist/modes/interactive/components/chat-session-host-utils.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.d.ts +17 -2
- package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.js +97 -1
- package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
- package/dist/modes/interactive/components/chat-transcript.d.ts +1 -0
- package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-transcript.js +1 -1
- package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
- package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +12 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/diff.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +7 -6
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +27 -9
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/host-input-form-mount.js.map +1 -1
- package/dist/modes/interactive/components/host-input-form.d.ts +1 -1
- package/dist/modes/interactive/components/host-input-form.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +2 -2
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/mermaid.d.ts +1 -1
- package/dist/modes/interactive/components/mermaid.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/reserved-bottom-overlay.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-header.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-submenus.d.ts +1 -1
- package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts +1 -1
- package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/task-completion-message.d.ts +13 -0
- package/dist/modes/interactive/components/task-completion-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/task-completion-message.js +65 -0
- package/dist/modes/interactive/components/task-completion-message.js.map +1 -0
- package/dist/modes/interactive/components/task-detail.d.ts +27 -0
- package/dist/modes/interactive/components/task-detail.d.ts.map +1 -0
- package/dist/modes/interactive/components/task-detail.js +107 -0
- package/dist/modes/interactive/components/task-detail.js.map +1 -0
- package/dist/modes/interactive/components/task-inspector.d.ts +50 -0
- package/dist/modes/interactive/components/task-inspector.d.ts.map +1 -0
- package/dist/modes/interactive/components/task-inspector.js +599 -0
- package/dist/modes/interactive/components/task-inspector.js.map +1 -0
- package/dist/modes/interactive/components/task-list.d.ts +18 -0
- package/dist/modes/interactive/components/task-list.d.ts.map +1 -0
- package/dist/modes/interactive/components/task-list.js +59 -0
- package/dist/modes/interactive/components/task-list.js.map +1 -0
- package/dist/modes/interactive/components/task-live-transcript.d.ts +17 -0
- package/dist/modes/interactive/components/task-live-transcript.d.ts.map +1 -0
- package/dist/modes/interactive/components/task-live-transcript.js +33 -0
- package/dist/modes/interactive/components/task-live-transcript.js.map +1 -0
- package/dist/modes/interactive/components/task-navigation.d.ts +38 -0
- package/dist/modes/interactive/components/task-navigation.d.ts.map +1 -0
- package/dist/modes/interactive/components/task-navigation.js +93 -0
- package/dist/modes/interactive/components/task-navigation.js.map +1 -0
- package/dist/modes/interactive/components/task-row.d.ts +34 -0
- package/dist/modes/interactive/components/task-row.d.ts.map +1 -0
- package/dist/modes/interactive/components/task-row.js +158 -0
- package/dist/modes/interactive/components/task-row.js.map +1 -0
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/transcript-follow-indicator.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-component.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-content.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-help.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-label-input.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-list.js.map +1 -1
- package/dist/modes/interactive/components/trust-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/working-status.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +8 -2
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-login.js +3 -1
- package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.js +9 -30
- package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.js +2 -1
- package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-context.js +14 -4
- package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-custom-ui.js +52 -4
- package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-runtime.js +1 -0
- package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-widgets.js +9 -1
- package/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.js +19 -0
- package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +6 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +4 -1
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts +6 -6
- package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +2 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +3 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/interactive-process-lifecycle.js +4 -1
- package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +2 -0
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-session-routing.js +33 -23
- package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js +1 -0
- package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
- package/dist/modes/interactive/interactive-summarization-retry-events.js +2 -2
- package/dist/modes/interactive/interactive-summarization-retry-events.js.map +1 -1
- package/dist/modes/interactive/interactive-task-projection.d.ts +13 -0
- package/dist/modes/interactive/interactive-task-projection.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-task-projection.js +72 -0
- package/dist/modes/interactive/interactive-task-projection.js.map +1 -0
- package/dist/modes/interactive/interactive-tui.js.map +1 -1
- package/dist/modes/interactive/interactive-windows-subshell.d.ts +17 -0
- package/dist/modes/interactive/interactive-windows-subshell.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-windows-subshell.js +92 -0
- package/dist/modes/interactive/interactive-windows-subshell.js.map +1 -0
- package/dist/modes/interactive/skill-command-autocomplete.d.ts +12 -0
- package/dist/modes/interactive/skill-command-autocomplete.d.ts.map +1 -0
- package/dist/modes/interactive/skill-command-autocomplete.js +69 -0
- package/dist/modes/interactive/skill-command-autocomplete.js.map +1 -0
- package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-class.js +4 -1
- package/dist/modes/interactive/theme/theme-class.js.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts +1 -1
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive-engine/create-isolated-runtime.d.ts +1 -1
- package/dist/modes/interactive-engine/create-isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts +5 -9
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.js +14 -5
- package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
- package/dist/modes/interactive-engine/engine-dialog-host.d.ts +2 -2
- package/dist/modes/interactive-engine/engine-dialog-host.js.map +1 -1
- package/dist/modes/interactive-engine/engine-project-trust.d.ts +10 -0
- package/dist/modes/interactive-engine/engine-project-trust.d.ts.map +1 -0
- package/dist/modes/interactive-engine/engine-project-trust.js +28 -0
- package/dist/modes/interactive-engine/engine-project-trust.js.map +1 -0
- package/dist/modes/interactive-engine/engine-render-service.d.ts +1 -1
- package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +3 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.js +6 -0
- package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
- package/dist/modes/interactive-engine/input-form-host.d.ts +2 -2
- package/dist/modes/interactive-engine/input-form-host.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-auth.d.ts +1 -1
- package/dist/modes/interactive-engine/isolated-auth.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.d.ts +5 -2
- package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +40 -3
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/protocol.d.ts +9 -0
- package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
- package/dist/modes/interactive-engine/protocol.js +8 -0
- package/dist/modes/interactive-engine/protocol.js.map +1 -1
- package/dist/modes/interactive-engine/remote-component.d.ts +2 -2
- package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
- package/dist/modes/interactive-engine/remote-component.js +3 -2
- package/dist/modes/interactive-engine/remote-component.js.map +1 -1
- package/dist/modes/interactive-engine/remote-model-catalog.d.ts +1 -1
- package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
- package/dist/modes/interactive-engine/remote-renderer.d.ts +1 -1
- package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
- package/dist/modes/interactive-engine/session-picker-host.d.ts +2 -2
- package/dist/modes/interactive-engine/session-picker-host.js.map +1 -1
- package/dist/modes/json-event.d.ts +1 -1
- package/dist/modes/json-event.js.map +1 -1
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-bash-request-owners.d.ts +2 -2
- package/dist/modes/rpc/rpc-bash-request-owners.js.map +1 -1
- package/dist/modes/rpc/rpc-client-api.d.ts +2 -2
- package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-api.js +2 -2
- package/dist/modes/rpc/rpc-client-api.js.map +1 -1
- package/dist/modes/rpc/rpc-client-waits.d.ts +1 -1
- package/dist/modes/rpc/rpc-client-waits.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +3 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +20 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.d.ts +4 -2
- package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.js +12 -4
- package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
- package/dist/modes/rpc/rpc-extension-ui.d.ts +1 -1
- package/dist/modes/rpc/rpc-extension-ui.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +11 -2
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.d.ts +1 -1
- package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
- package/dist/modes/rpc/rpc-session-binding.d.ts +4 -1
- package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-session-binding.js +35 -1
- package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +13 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/rpc/task-ui-bridge.d.ts +9 -0
- package/dist/modes/rpc/task-ui-bridge.d.ts.map +1 -0
- package/dist/modes/rpc/task-ui-bridge.js +146 -0
- package/dist/modes/rpc/task-ui-bridge.js.map +1 -0
- package/dist/self-update-plan.js.map +1 -1
- package/docs/background-tasks.md +199 -0
- package/docs/compaction.md +2 -0
- package/docs/development.md +3 -1
- package/docs/docs.json +2 -0
- package/docs/environment-variables.md +1 -1
- package/docs/extensions.md +108 -6
- package/docs/herdr.md +106 -0
- package/docs/intercom.md +38 -35
- package/docs/keybindings.md +19 -2
- package/docs/models/evals.md +222 -147
- package/docs/models/model-selection.md +20 -14
- package/docs/models/pareto-efficiency.md +2 -2
- package/docs/providers.md +48 -46
- package/docs/quickstart.md +2 -2
- package/docs/sdk.md +244 -0
- package/docs/settings.md +15 -3
- package/docs/skills.md +23 -1
- package/docs/subagents.md +71 -9
- package/docs/themes.md +4 -0
- package/docs/tools.md +25 -0
- package/docs/tui.md +29 -2
- package/docs/usage.md +4 -0
- package/docs/windows.md +4 -4
- package/docs/workflows/api-reference.md +13 -4
- package/docs/workflows/operations.md +59 -5
- package/docs/workflows/reliable-design.md +35 -4
- package/docs/workflows/verification.md +21 -4
- package/docs/workflows.md +3 -1
- package/npm-shrinkwrap.json +781 -661
- package/package.json +10 -10
- /package/dist/builtin/workflows/builtin/{chunk-cg9tmks0.js → chunk-n1910xc4.js} +0 -0
- /package/dist/builtin/workflows/builtin/{chunk-wpckd35c.js → chunk-rc5ec5xx.js} +0 -0
- /package/dist/builtin/workflows/builtin/{chunk-7at6dnkr.js → chunk-tgt0s5e5.js} +0 -0
- /package/dist/builtin/workflows/builtin/{chunk-bfkmzv9h.js → chunk-xtxcq5tj.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-session-host-rendering.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-rendering.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Component, Spacer, Text, type TUI, truncateToWidth, visibleWidth } from \"@earendil-works/pi-tui\";\nimport {\n\ttype ChatMessageEntry,\n\ttype ChatMessageRenderOptions,\n\trenderChatMessageEntry,\n} from \"./chat-message-renderer.ts\";\nimport { setEditorBorderColor, setEditorFocused, setEditorPlaceholder } from \"./chat-session-host-editor.ts\";\nimport { isChatSessionStreaming } from \"./chat-session-host-runtime.ts\";\nimport type { ChatSessionHostState } from \"./chat-session-host-state.ts\";\nimport type { ChatSessionHostEntry } from \"./chat-session-host-types.ts\";\nimport { cacheKey, isChatMessageEntry, stripAnsi, tailStreamingText } from \"./chat-session-host-utils.ts\";\nimport type { ChatTranscriptEntryLike } from \"./chat-transcript.ts\";\nimport { FooterComponent, UsageMeterComponent } from \"./footer.ts\";\nimport { WorkingStatusComponent } from \"./working-status.ts\";\n\nexport function renderChatSessionBody<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\twidth: number,\n\tbudget: number,\n): string[] {\n\tconst components: Component[] = [];\n\tstate.transcriptRenderSettingsKey = chatRenderSettingsCacheKey(state);\n\tif (state.transcript.length > 0) {\n\t\tcomponents.push(state.transcriptComponent);\n\t}\n\tif (state.statusMessage && !state.compacting) {\n\t\tcomponents.push(new Spacer(1));\n\t\tcomponents.push(new Text(state.style.dim(state.statusMessage), 2, 0));\n\t}\n\tstate.bodyViewport.setVisibleRows(budget);\n\tstate.bodyViewport.setComponents(components);\n\treturn state.bodyViewport.render(width);\n}\n\nexport function renderChatSessionPendingMessages<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\twidth: number,\n): string[] {\n\tif (\n\t\tstate.pendingSteeringMessages.length === 0 &&\n\t\tstate.pendingFollowUpMessages.length === 0 &&\n\t\tstate.compactionQueuedMessages.length === 0\n\t) {\n\t\treturn [];\n\t}\n\tconst lines = [state.style.blank(width)];\n\tfor (const message of state.pendingSteeringMessages) {\n\t\tlines.push(...pendingMessageLine(state, width, \"Steering\", message));\n\t}\n\tfor (const message of state.pendingFollowUpMessages) {\n\t\tlines.push(...pendingMessageLine(state, width, \"Follow-up\", message));\n\t}\n\tfor (const message of state.compactionQueuedMessages) {\n\t\tlines.push(...pendingMessageLine(state, width, \"Queued\", message));\n\t}\n\tconst hint = state.getActionKeyDisplay?.(\"app.message.dequeue\") ?? \"alt+up\";\n\tlines.push(...new Text(state.style.dim(`↳ ${hint} to edit all queued messages`), 1, 0).render(width));\n\treturn lines;\n}\n\nexport function renderChatSessionWorkingStatus<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\twidth: number,\n): string[] {\n\tif (!isChatSessionStreaming(state)) return [];\n\tif (state.statusMessage && !state.compacting) return [];\n\tconst palette = state.style.workingIndicatorPalette;\n\tconst useCallerStyling =\n\t\t!palette && state.style.workingIndicatorUseGlobalTheme !== true && process.env.NO_COLOR === undefined;\n\tif (state.compacting) {\n\t\tconst cancelHint = `(${state.getActionKeyDisplay?.(\"app.interrupt\") ?? \"esc\"} Cancel)`;\n\t\treturn new WorkingStatusComponent({\n\t\t\tframe: state.workingFrame,\n\t\t\tmessage: `${state.statusMessage || \"Compacting context...\"} ${cancelHint}`,\n\t\t\tpalette,\n\t\t\tspinnerColor: useCallerStyling ? (text) => state.style.accent(text) : undefined,\n\t\t\tspinnerBoldColor: useCallerStyling ? (text) => state.style.accentBold(text) : undefined,\n\t\t\tmessageColor: (text) => state.style.textMuted(text),\n\t\t}).render(width);\n\t}\n\tif (!state.workingLifecycleActive) return [];\n\treturn new WorkingStatusComponent({\n\t\tframe: state.workingFrame,\n\t\tmessage: state.workingMessage ?? \"Working...\",\n\t\tpalette,\n\t\tspinnerColor: useCallerStyling ? (text) => state.style.accent(text) : undefined,\n\t\tspinnerBoldColor: useCallerStyling ? (text) => state.style.accentBold(text) : undefined,\n\t\tmessageColor: (text) => state.style.textMuted(text),\n\t}).render(width);\n}\n\nexport function renderChatSessionUsage<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\twidth: number,\n): string[] {\n\tconst agentSession = state.getAgentSession?.();\n\tif (!agentSession) return [];\n\treturn new UsageMeterComponent(agentSession).render(width);\n}\n\nexport function renderChatSessionEditor<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\twidth: number,\n\tfocused: boolean,\n): string[] {\n\tconst disabled = state.isDisabled?.() === true;\n\tconst agentSession = state.getAgentSession?.();\n\tconst ruleHex = state.style.editorRuleColor(disabled, agentSession, {\n\t\tisBashMode: state.isBashMode,\n\t});\n\tif (!disabled && state.editor) {\n\t\tsetEditorFocused(state.editor, focused);\n\t\tsetEditorPlaceholder(state.editor, undefined);\n\t\tsetEditorBorderColor(state.editor, (text) => state.style.rule(ruleHex, text));\n\t\treturn state.editor.render(width);\n\t}\n\tif (state.editor) setEditorFocused(state.editor, false);\n\tconst rule = state.style.rule(ruleHex, \"─\".repeat(width));\n\tconst available = Math.max(1, width - 3);\n\tconst value = state.inputBuffer\n\t\t? state.style.text(truncateToWidth(state.inputBuffer, available)) + state.style.cursor()\n\t\t: disabled\n\t\t\t? \"\"\n\t\t\t: state.style.cursor();\n\tconst left = `${state.style.accentBold(\"❯\")} ${value}`;\n\tconst gap = Math.max(0, width - visibleWidth(stripAnsi(left)));\n\tconst body = left + \" \".repeat(gap);\n\treturn [rule, body, rule];\n}\n\nexport function renderChatSessionFooter<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\twidth: number,\n): string[] {\n\tconst agentSession = state.getAgentSession?.();\n\tif (agentSession && state.footerData) {\n\t\treturn new FooterComponent(agentSession, state.footerData, {\n\t\t\tdim: (text) => state.style.dim(text),\n\t\t\tmuted: (text) => state.style.textMuted(text),\n\t\t\twarning: (text) => state.style.accent(text),\n\t\t}).render(width);\n\t}\n\treturn [];\n}\n\nexport function renderChatSessionEntry<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tentry: ChatSessionHostEntry<TExtraEntry>,\n): Component {\n\tif (state.extraEntries.includes(entry as TExtraEntry)) {\n\t\treturn state.renderExtraEntry?.(entry as TExtraEntry) ?? new Text(\"\", 0, 0);\n\t}\n\tif (isChatMessageEntry(entry)) {\n\t\tconst isStreaming = isChatSessionStreaming(state) && state.liveChat.isStreamingAssistantEntry(entry);\n\t\treturn renderChatMessageEntry(\n\t\t\tstreamingWindowedEntry(state, entry, isStreaming),\n\t\t\tchatMessageRenderOptions(state, isStreaming),\n\t\t);\n\t}\n\tif (!state.renderExtraEntry) {\n\t\treturn new Text(\"\", 0, 0);\n\t}\n\treturn state.renderExtraEntry(entry);\n}\n\nexport function transcriptCacheKey<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tentry: ChatSessionHostEntry<TExtraEntry>,\n\tindex: number,\n): string {\n\treturn cacheKey([\n\t\tstate.transcriptRenderSettingsKey,\n\t\tindex,\n\t\tentry.role,\n\t\trenderIdentityKey(state, entry),\n\t\tentryContentCacheKey(state, entry),\n\t]);\n}\n\nfunction streamingWindowedEntry<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tentry: ChatMessageEntry,\n\tisStreaming: boolean,\n): ChatMessageEntry {\n\tif (!isStreaming || !state.streamingTailWindowEnabled || state.bodyViewport.getScrollFromBottom() !== 0) {\n\t\treturn entry;\n\t}\n\tif (entry.kind !== \"assistant\") return entry;\n\tconst content = entry.message.content.map((item) => {\n\t\tif (item.type === \"text\") return { ...item, text: tailStreamingText(item.text) };\n\t\tif (item.type === \"thinking\") return { ...item, thinking: tailStreamingText(item.thinking) };\n\t\treturn item;\n\t});\n\treturn { ...entry, message: { ...entry.message, content } };\n}\n\nfunction chatMessageRenderOptions<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tisStreaming: boolean,\n): ChatMessageRenderOptions {\n\tconst inherited = state.getChatRenderSettings?.();\n\treturn {\n\t\t...inherited,\n\t\tui: toolTui(state),\n\t\tcwd: state.getCwd?.() ?? state.getAgentSession?.()?.sessionManager.getCwd() ?? process.cwd(),\n\t\tmarkdownTheme: inherited?.markdownTheme ?? state.getMarkdownTheme?.(),\n\t\tisStreaming,\n\t\tshowImages: inherited?.showImages ?? true,\n\t};\n}\n\nfunction toolTui<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): Pick<TUI, \"requestRender\"> {\n\treturn { requestRender: () => state.requestRender?.() };\n}\n\nfunction chatRenderSettingsCacheKey<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): string {\n\tconst inherited = state.getChatRenderSettings?.();\n\tconst markdownTransformersKey =\n\t\tinherited?.markdownTransformers?.map((transformer) => renderIdentityKey(state, transformer)).join(\",\") ?? \"\";\n\treturn cacheKey([\n\t\t\"settings\",\n\t\tinherited?.hideThinkingBlock === true,\n\t\tinherited?.hiddenThinkingLabel ?? \"\",\n\t\tinherited?.toolOutputExpanded === true,\n\t\tinherited?.showImages !== false,\n\t\tinherited?.imageWidthCells ?? null,\n\t\tinherited?.outputPad ?? null,\n\t\tinherited?.renderLatex !== false,\n\t\tmarkdownTransformersKey,\n\t\tstate.getCwd?.() ?? state.getAgentSession?.()?.sessionManager.getCwd() ?? process.cwd(),\n\t\tstate.bodyViewport.getScrollFromBottom() === 0,\n\t\tisChatSessionStreaming(state),\n\t]);\n}\n\nfunction entryContentCacheKey<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tentry: ChatSessionHostEntry<TExtraEntry>,\n): string {\n\tif (!isChatMessageEntry(entry)) return cacheKey([\"extra\"]);\n\tswitch (entry.kind) {\n\t\tcase \"assistant\":\n\t\t\treturn cacheKey([\"assistant\", renderIdentityKey(state, entry.message)]);\n\t\tcase \"tool\":\n\t\t\treturn cacheKey([\n\t\t\t\t\"tool\",\n\t\t\t\tentry.toolCallId,\n\t\t\t\tentry.toolName,\n\t\t\t\tentry.isPartial === true,\n\t\t\t\tentry.result === undefined ? null : renderIdentityKey(state, entry.result),\n\t\t\t]);\n\t\tcase \"bashExecution\":\n\t\t\treturn cacheKey([\n\t\t\t\t\"bashExecution\",\n\t\t\t\tentry.isPartial === true,\n\t\t\t\tentry.message.command,\n\t\t\t\tentry.message.output,\n\t\t\t\tentry.message.exitCode ?? null,\n\t\t\t\tentry.message.cancelled,\n\t\t\t\tentry.message.truncated,\n\t\t\t\tentry.message.fullOutputPath ?? null,\n\t\t\t]);\n\t\tcase \"user\":\n\t\t\treturn cacheKey([\"user\", entry.text]);\n\t\tcase \"custom\":\n\t\t\treturn cacheKey([\"custom\", renderIdentityKey(state, entry.message)]);\n\t\tcase \"branchSummary\":\n\t\t\treturn cacheKey([\"branchSummary\", renderIdentityKey(state, entry.message)]);\n\t\tcase \"system\":\n\t\t\treturn cacheKey([\"system\", entry.text]);\n\t}\n}\n\nfunction renderIdentityKey<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tvalue: object,\n): string {\n\tconst existing = state.renderIdentityIds.get(value);\n\tif (existing !== undefined) return String(existing);\n\tconst id = state.nextRenderIdentityId;\n\tstate.nextRenderIdentityId += 1;\n\tstate.renderIdentityIds.set(value, id);\n\treturn String(id);\n}\n\nfunction pendingMessageLine<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\twidth: number,\n\tlabel: \"Steering\" | \"Follow-up\" | \"Queued\",\n\tmessage: string,\n): string[] {\n\tconst text = `${label}: ${message}`;\n\treturn new Text(state.style.dim(truncateToWidth(text, Math.max(1, width - 2))), 1, 0).render(width);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"chat-session-host-rendering.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-rendering.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Component, Spacer, Text, type TUI, truncateToWidth, visibleWidth } from \"@earendil-works/pi-tui\";\nimport {\n\ttype ChatMessageEntry,\n\ttype ChatMessageRenderOptions,\n\trenderChatMessageEntry,\n} from \"./chat-message-renderer.ts\";\nimport { setEditorBorderColor, setEditorFocused, setEditorPlaceholder } from \"./chat-session-host-editor.ts\";\nimport { isChatSessionStreaming } from \"./chat-session-host-runtime.ts\";\nimport type { ChatSessionHostState } from \"./chat-session-host-state.ts\";\nimport type { ChatSessionHostEntry } from \"./chat-session-host-types.ts\";\nimport { cacheKey, isChatMessageEntry, stripAnsi, tailStreamingText } from \"./chat-session-host-utils.ts\";\nimport type { ChatTranscriptEntryLike } from \"./chat-transcript.js\";\nimport { FooterComponent, UsageMeterComponent } from \"./footer.ts\";\nimport { WorkingStatusComponent } from \"./working-status.ts\";\n\nexport function renderChatSessionBody<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\twidth: number,\n\tbudget: number,\n): string[] {\n\tconst components: Component[] = [];\n\tstate.transcriptRenderSettingsKey = chatRenderSettingsCacheKey(state);\n\tif (state.transcript.length > 0) {\n\t\tcomponents.push(state.transcriptComponent);\n\t}\n\tif (state.statusMessage && !state.compacting) {\n\t\tcomponents.push(new Spacer(1));\n\t\tcomponents.push(new Text(state.style.dim(state.statusMessage), 2, 0));\n\t}\n\tstate.bodyViewport.setVisibleRows(budget);\n\tstate.bodyViewport.setComponents(components);\n\treturn state.bodyViewport.render(width);\n}\n\nexport function renderChatSessionPendingMessages<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\twidth: number,\n): string[] {\n\tif (\n\t\tstate.pendingSteeringMessages.length === 0 &&\n\t\tstate.pendingFollowUpMessages.length === 0 &&\n\t\tstate.compactionQueuedMessages.length === 0\n\t) {\n\t\treturn [];\n\t}\n\tconst lines = [state.style.blank(width)];\n\tfor (const message of state.pendingSteeringMessages) {\n\t\tlines.push(...pendingMessageLine(state, width, \"Steering\", message));\n\t}\n\tfor (const message of state.pendingFollowUpMessages) {\n\t\tlines.push(...pendingMessageLine(state, width, \"Follow-up\", message));\n\t}\n\tfor (const message of state.compactionQueuedMessages) {\n\t\tlines.push(...pendingMessageLine(state, width, \"Queued\", message));\n\t}\n\tconst hint = state.getActionKeyDisplay?.(\"app.message.dequeue\") ?? \"alt+up\";\n\tlines.push(...new Text(state.style.dim(`↳ ${hint} to edit all queued messages`), 1, 0).render(width));\n\treturn lines;\n}\n\nexport function renderChatSessionWorkingStatus<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\twidth: number,\n): string[] {\n\tif (!isChatSessionStreaming(state)) return [];\n\tif (state.statusMessage && !state.compacting) return [];\n\tconst palette = state.style.workingIndicatorPalette;\n\tconst useCallerStyling =\n\t\t!palette && state.style.workingIndicatorUseGlobalTheme !== true && process.env.NO_COLOR === undefined;\n\tif (state.compacting) {\n\t\tconst cancelHint = `(${state.getActionKeyDisplay?.(\"app.interrupt\") ?? \"esc\"} Cancel)`;\n\t\treturn new WorkingStatusComponent({\n\t\t\tframe: state.workingFrame,\n\t\t\tmessage: `${state.statusMessage || \"Compacting context...\"} ${cancelHint}`,\n\t\t\tpalette,\n\t\t\tspinnerColor: useCallerStyling ? (text) => state.style.accent(text) : undefined,\n\t\t\tspinnerBoldColor: useCallerStyling ? (text) => state.style.accentBold(text) : undefined,\n\t\t\tmessageColor: (text) => state.style.textMuted(text),\n\t\t}).render(width);\n\t}\n\tif (!state.workingLifecycleActive) return [];\n\treturn new WorkingStatusComponent({\n\t\tframe: state.workingFrame,\n\t\tmessage: state.workingMessage ?? \"Working...\",\n\t\tpalette,\n\t\tspinnerColor: useCallerStyling ? (text) => state.style.accent(text) : undefined,\n\t\tspinnerBoldColor: useCallerStyling ? (text) => state.style.accentBold(text) : undefined,\n\t\tmessageColor: (text) => state.style.textMuted(text),\n\t}).render(width);\n}\n\nexport function renderChatSessionUsage<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\twidth: number,\n): string[] {\n\tconst agentSession = state.getAgentSession?.();\n\tif (!agentSession) return [];\n\treturn new UsageMeterComponent(agentSession).render(width);\n}\n\nexport function renderChatSessionEditor<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\twidth: number,\n\tfocused: boolean,\n): string[] {\n\tconst disabled = state.isDisabled?.() === true;\n\tconst agentSession = state.getAgentSession?.();\n\tconst ruleHex = state.style.editorRuleColor(disabled, agentSession, {\n\t\tisBashMode: state.isBashMode,\n\t});\n\tif (!disabled && state.editor) {\n\t\tsetEditorFocused(state.editor, focused);\n\t\tsetEditorPlaceholder(state.editor, undefined);\n\t\tsetEditorBorderColor(state.editor, (text) => state.style.rule(ruleHex, text));\n\t\treturn state.editor.render(width);\n\t}\n\tif (state.editor) setEditorFocused(state.editor, false);\n\tconst rule = state.style.rule(ruleHex, \"─\".repeat(width));\n\tconst available = Math.max(1, width - 3);\n\tconst value = state.inputBuffer\n\t\t? state.style.text(truncateToWidth(state.inputBuffer, available)) + state.style.cursor()\n\t\t: disabled\n\t\t\t? \"\"\n\t\t\t: state.style.cursor();\n\tconst left = `${state.style.accentBold(\"❯\")} ${value}`;\n\tconst gap = Math.max(0, width - visibleWidth(stripAnsi(left)));\n\tconst body = left + \" \".repeat(gap);\n\treturn [rule, body, rule];\n}\n\nexport function renderChatSessionFooter<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\twidth: number,\n\tnavigationActive = false,\n): string[] {\n\tif (state.disposed) return [];\n\tconst agentSession = state.getAgentSession?.();\n\tstate.footerNavigationActive = navigationActive;\n\tif (agentSession && state.footerData) {\n\t\tstate.footer ??= new FooterComponent(\n\t\t\tagentSession,\n\t\t\tstate.footerData,\n\t\t\t{\n\t\t\t\tdim: (text) => state.style.dim(text),\n\t\t\t\tmuted: (text) => state.style.textMuted(text),\n\t\t\t\twarning: (text) => state.style.accent(text),\n\t\t\t},\n\t\t\t() => state.footerNavigationActive,\n\t\t);\n\t\tstate.footer.setSession(agentSession);\n\t\treturn state.footer.render(width);\n\t}\n\tstate.footer?.dispose();\n\tstate.footer = undefined;\n\treturn [];\n}\n\nexport function renderChatSessionEntry<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tentry: ChatSessionHostEntry<TExtraEntry>,\n): Component {\n\tif (state.extraEntries.includes(entry as TExtraEntry)) {\n\t\treturn state.renderExtraEntry?.(entry as TExtraEntry) ?? new Text(\"\", 0, 0);\n\t}\n\tif (isChatMessageEntry(entry)) {\n\t\tconst isStreaming = isChatSessionStreaming(state) && state.liveChat.isStreamingAssistantEntry(entry);\n\t\treturn renderChatMessageEntry(\n\t\t\tstreamingWindowedEntry(state, entry, isStreaming),\n\t\t\tchatMessageRenderOptions(state, isStreaming),\n\t\t);\n\t}\n\tif (!state.renderExtraEntry) {\n\t\treturn new Text(\"\", 0, 0);\n\t}\n\treturn state.renderExtraEntry(entry);\n}\n\nexport function transcriptCacheKey<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tentry: ChatSessionHostEntry<TExtraEntry>,\n\tindex: number,\n): string {\n\treturn cacheKey([\n\t\tstate.transcriptRenderSettingsKey,\n\t\tindex,\n\t\tentry.role,\n\t\trenderIdentityKey(state, entry),\n\t\tentryContentCacheKey(state, entry),\n\t]);\n}\n\nfunction streamingWindowedEntry<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tentry: ChatMessageEntry,\n\tisStreaming: boolean,\n): ChatMessageEntry {\n\tif (!isStreaming || !state.streamingTailWindowEnabled || state.bodyViewport.getScrollFromBottom() !== 0) {\n\t\treturn entry;\n\t}\n\tif (entry.kind !== \"assistant\") return entry;\n\tconst content = entry.message.content.map((item) => {\n\t\tif (item.type === \"text\") return { ...item, text: tailStreamingText(item.text) };\n\t\tif (item.type === \"thinking\") return { ...item, thinking: tailStreamingText(item.thinking) };\n\t\treturn item;\n\t});\n\treturn { ...entry, message: { ...entry.message, content } };\n}\n\nfunction chatMessageRenderOptions<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tisStreaming: boolean,\n): ChatMessageRenderOptions {\n\tconst inherited = state.getChatRenderSettings?.();\n\treturn {\n\t\t...inherited,\n\t\tui: toolTui(state),\n\t\tcwd: state.getCwd?.() ?? state.getAgentSession?.()?.sessionManager.getCwd() ?? process.cwd(),\n\t\tmarkdownTheme: inherited?.markdownTheme ?? state.getMarkdownTheme?.(),\n\t\tisStreaming,\n\t\tshowImages: inherited?.showImages ?? true,\n\t};\n}\n\nfunction toolTui<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): Pick<TUI, \"requestRender\"> {\n\treturn { requestRender: () => state.requestRender?.() };\n}\n\nfunction chatRenderSettingsCacheKey<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): string {\n\tconst inherited = state.getChatRenderSettings?.();\n\tconst markdownTransformersKey =\n\t\tinherited?.markdownTransformers?.map((transformer) => renderIdentityKey(state, transformer)).join(\",\") ?? \"\";\n\treturn cacheKey([\n\t\t\"settings\",\n\t\tinherited?.hideThinkingBlock === true,\n\t\tinherited?.hiddenThinkingLabel ?? \"\",\n\t\tinherited?.toolOutputExpanded === true,\n\t\tinherited?.showImages !== false,\n\t\tinherited?.imageWidthCells ?? null,\n\t\tinherited?.outputPad ?? null,\n\t\tinherited?.renderLatex !== false,\n\t\tmarkdownTransformersKey,\n\t\tstate.getCwd?.() ?? state.getAgentSession?.()?.sessionManager.getCwd() ?? process.cwd(),\n\t\tstate.bodyViewport.getScrollFromBottom() === 0,\n\t\tisChatSessionStreaming(state),\n\t]);\n}\n\nfunction entryContentCacheKey<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tentry: ChatSessionHostEntry<TExtraEntry>,\n): string {\n\tif (!isChatMessageEntry(entry)) return cacheKey([\"extra\"]);\n\tswitch (entry.kind) {\n\t\tcase \"task\":\n\t\t\treturn cacheKey([\"task\", renderIdentityKey(state, entry.task), entry.duplicate]);\n\t\tcase \"assistant\":\n\t\t\treturn cacheKey([\"assistant\", renderIdentityKey(state, entry.message)]);\n\t\tcase \"tool\":\n\t\t\treturn cacheKey([\n\t\t\t\t\"tool\",\n\t\t\t\tentry.toolCallId,\n\t\t\t\tentry.toolName,\n\t\t\t\tentry.isPartial === true,\n\t\t\t\tentry.result === undefined ? null : renderIdentityKey(state, entry.result),\n\t\t\t]);\n\t\tcase \"bashExecution\":\n\t\t\treturn cacheKey([\n\t\t\t\t\"bashExecution\",\n\t\t\t\tentry.isPartial === true,\n\t\t\t\tentry.message.command,\n\t\t\t\tentry.message.output,\n\t\t\t\tentry.message.exitCode ?? null,\n\t\t\t\tentry.message.cancelled,\n\t\t\t\tentry.message.truncated,\n\t\t\t\tentry.message.fullOutputPath ?? null,\n\t\t\t]);\n\t\tcase \"user\":\n\t\t\treturn cacheKey([\"user\", entry.text]);\n\t\tcase \"custom\":\n\t\t\treturn cacheKey([\"custom\", renderIdentityKey(state, entry.message)]);\n\t\tcase \"branchSummary\":\n\t\t\treturn cacheKey([\"branchSummary\", renderIdentityKey(state, entry.message)]);\n\t\tcase \"system\":\n\t\t\treturn cacheKey([\"system\", entry.text]);\n\t}\n}\n\nfunction renderIdentityKey<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tvalue: object,\n): string {\n\tconst existing = state.renderIdentityIds.get(value);\n\tif (existing !== undefined) return String(existing);\n\tconst id = state.nextRenderIdentityId;\n\tstate.nextRenderIdentityId += 1;\n\tstate.renderIdentityIds.set(value, id);\n\treturn String(id);\n}\n\nfunction pendingMessageLine<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\twidth: number,\n\tlabel: \"Steering\" | \"Follow-up\" | \"Queued\",\n\tmessage: string,\n): string[] {\n\tconst text = `${label}: ${message}`;\n\treturn new Text(state.style.dim(truncateToWidth(text, Math.max(1, width - 2))), 1, 0).render(width);\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ChatSessionHostState } from "./chat-session-host-state.ts";
|
|
2
2
|
import type { ChatSessionSubmitMode } from "./chat-session-host-types.ts";
|
|
3
|
-
import type { ChatTranscriptEntryLike } from "./chat-transcript.
|
|
3
|
+
import type { ChatTranscriptEntryLike } from "./chat-transcript.js";
|
|
4
4
|
export declare function isChatSessionStreaming<TExtraEntry extends ChatTranscriptEntryLike>(state: ChatSessionHostState<TExtraEntry>): boolean;
|
|
5
5
|
export declare function isChatSessionBashRunning<TExtraEntry extends ChatTranscriptEntryLike>(state: ChatSessionHostState<TExtraEntry>): boolean;
|
|
6
6
|
export declare function incrementOptimisticUserSignature<TExtraEntry extends ChatTranscriptEntryLike>(state: ChatSessionHostState<TExtraEntry>, signature: string): void;
|
|
@@ -38,11 +38,10 @@ export declare function disposeChatSession<TExtraEntry extends ChatTranscriptEnt
|
|
|
38
38
|
export declare function notifyChatSessionWarning<TExtraEntry extends ChatTranscriptEntryLike>(state: ChatSessionHostState<TExtraEntry>, message: string): void;
|
|
39
39
|
export declare function notifyChatSessionStatus<TExtraEntry extends ChatTranscriptEntryLike>(state: ChatSessionHostState<TExtraEntry>, message: string): void;
|
|
40
40
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* drop it.
|
|
41
|
+
* Prompt requires the submitting key's mode; resume accepts it optionally for
|
|
42
|
+
* hosts that preserve submission intent across a pause.
|
|
44
43
|
*/
|
|
45
44
|
export declare function requiredChatSessionPromptCommand<TExtraEntry extends ChatTranscriptEntryLike>(state: ChatSessionHostState<TExtraEntry>): (text: string, mode: ChatSessionSubmitMode) => Promise<void>;
|
|
46
|
-
export declare function requiredChatSessionCommand<TExtraEntry extends ChatTranscriptEntryLike>(state: ChatSessionHostState<TExtraEntry>, name: "steer" | "followUp" | "resume"): (text?: string) => Promise<void>;
|
|
45
|
+
export declare function requiredChatSessionCommand<TExtraEntry extends ChatTranscriptEntryLike>(state: ChatSessionHostState<TExtraEntry>, name: "steer" | "followUp" | "resume"): (text?: string, mode?: ChatSessionSubmitMode) => Promise<void>;
|
|
47
46
|
export declare function afterChatSessionEvent<TExtraEntry extends ChatTranscriptEntryLike>(state: ChatSessionHostState<TExtraEntry>, changed: boolean): void;
|
|
48
47
|
//# sourceMappingURL=chat-session-host-runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-session-host-runtime.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAEpE,wBAAgB,sBAAsB,CAAC,WAAW,SAAS,uBAAuB,EACjF,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GACtC,OAAO,CAET;AAED,wBAAgB,wBAAwB,CAAC,WAAW,SAAS,uBAAuB,EACnF,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GACtC,OAAO,CAET;AAED,wBAAgB,gCAAgC,CAAC,WAAW,SAAS,uBAAuB,EAC3F,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,EACxC,SAAS,EAAE,MAAM,GACf,IAAI,CAEN;AAED,wBAAgB,gCAAgC,CAAC,WAAW,SAAS,uBAAuB,EAC3F,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,EACxC,SAAS,EAAE,MAAM,GACf,IAAI,CAIN;AAED,wBAAgB,gCAAgC,CAAC,WAAW,SAAS,uBAAuB,EAC3F,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GACtC,IAAI,CAQN;AAED,wBAAgB,+BAA+B,CAAC,WAAW,SAAS,uBAAuB,EAC1F,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,EACxC,oBAAoB,UAAO,GACzB,IAAI,CAKN;AAED;;;;;;;;;GASG;AACH,wBAAgB,uCAAuC,CAAC,WAAW,SAAS,uBAAuB,EAClG,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GACtC,MAAM,GAAG,SAAS,CAGpB;AAED;;;;;;;GAOG;AACH,wBAAgB,0CAA0C,CAAC,WAAW,SAAS,uBAAuB,EACrG,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GACtC,MAAM,GAAG,SAAS,CAEpB;AAeD;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,WAAW,SAAS,uBAAuB,EAC3F,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,EACxC,mBAAmB,EAAE,MAAM,GAAG,SAAS,GACrC,IAAI,CAWN;AAkBD,wBAAgB,4BAA4B,CAAC,WAAW,SAAS,uBAAuB,EACvF,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GACtC,IAAI,CAsBN;AAED,wBAAgB,4CAA4C,CAAC,WAAW,SAAS,uBAAuB,EACvG,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GACtC,IAAI,CAWN;AAED,wBAAgB,kBAAkB,CAAC,WAAW,SAAS,uBAAuB,EAC7E,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GACtC,IAAI,
|
|
1
|
+
{"version":3,"file":"chat-session-host-runtime.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -129,11 +129,14 @@ export function clearChatSessionBusyForTerminalWorkflowStage(state) {
|
|
|
129
129
|
state.transcriptComponent.invalidate();
|
|
130
130
|
}
|
|
131
131
|
state.liveChat.clearPendingTools();
|
|
132
|
-
state.statusMessage
|
|
132
|
+
if (state.statusMessage !== state.lastWarningMessage)
|
|
133
|
+
state.statusMessage = "";
|
|
133
134
|
syncChatSessionAnimationTick(state);
|
|
134
135
|
}
|
|
135
136
|
export function disposeChatSession(state) {
|
|
136
137
|
state.disposed = true;
|
|
138
|
+
state.footer?.dispose();
|
|
139
|
+
state.footer = undefined;
|
|
137
140
|
state.compacting = false;
|
|
138
141
|
stopChatSessionWorkingLifecycle(state, false);
|
|
139
142
|
state.transcriptComponent.invalidate();
|
|
@@ -150,9 +153,8 @@ export function notifyChatSessionStatus(state, message) {
|
|
|
150
153
|
state.requestRender?.();
|
|
151
154
|
}
|
|
152
155
|
/**
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
* drop it.
|
|
156
|
+
* Prompt requires the submitting key's mode; resume accepts it optionally for
|
|
157
|
+
* hosts that preserve submission intent across a pause.
|
|
156
158
|
*/
|
|
157
159
|
export function requiredChatSessionPromptCommand(state) {
|
|
158
160
|
return async (text, mode) => {
|
|
@@ -176,10 +178,10 @@ export function requiredChatSessionCommand(state, name) {
|
|
|
176
178
|
await state.commands.followUp(text ?? "");
|
|
177
179
|
};
|
|
178
180
|
case "resume":
|
|
179
|
-
return async (text) => {
|
|
181
|
+
return async (text, mode) => {
|
|
180
182
|
if (!state.commands.resume)
|
|
181
183
|
throw new Error("no resume command configured for this chat session");
|
|
182
|
-
await state.commands.resume(text);
|
|
184
|
+
await state.commands.resume(text, mode);
|
|
183
185
|
};
|
|
184
186
|
}
|
|
185
187
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-session-host-runtime.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { ATOMIC_WORKING_FRAME_MS, ATOMIC_WORKING_FRAMES } from \"./atomic-working-status.ts\";\nimport type { ChatSessionHostState } from \"./chat-session-host-state.ts\";\nimport { finalizeTerminalWorkflowToolEntries } from \"./chat-session-host-terminal-cleanup.ts\";\nimport type { ChatSessionSubmitMode } from \"./chat-session-host-types.ts\";\nimport { ANIMATION_FRAME_MS, STREAMING_RENDER_THROTTLE_MS } from \"./chat-session-host-utils.ts\";\nimport type { ChatTranscriptEntryLike } from \"./chat-transcript.ts\";\n\nexport function isChatSessionStreaming<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): boolean {\n\treturn !state.disposed && (state.sdkBusy || state.isStreamingOverride?.() === true);\n}\n\nexport function isChatSessionBashRunning<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): boolean {\n\treturn state.localBashRunning || state.isBashRunningOverride?.() === true;\n}\n\nexport function incrementOptimisticUserSignature<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tsignature: string,\n): void {\n\tstate.optimisticUserSignatureCounts.set(signature, (state.optimisticUserSignatureCounts.get(signature) ?? 0) + 1);\n}\n\nexport function decrementOptimisticUserSignature<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tsignature: string,\n): void {\n\tconst count = state.optimisticUserSignatureCounts.get(signature) ?? 0;\n\tif (count <= 1) state.optimisticUserSignatureCounts.delete(signature);\n\telse state.optimisticUserSignatureCounts.set(signature, count - 1);\n}\n\nexport function startChatSessionWorkingLifecycle<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): void {\n\tif (state.disposed) return;\n\tclearChatSessionAnimation(state);\n\tclearChatSessionEventRender(state);\n\tstate.immediateEventRenderPending = true;\n\tstate.workingLifecycleActive = true;\n\tstate.workingLifecycleGeneration += 1;\n\tstate.workingFrame = 0;\n}\n\nexport function stopChatSessionWorkingLifecycle<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\timmediateEventRender = true,\n): void {\n\tstate.workingLifecycleActive = false;\n\tclearChatSessionAnimation(state);\n\tclearChatSessionEventRender(state);\n\tstate.immediateEventRenderPending = !state.disposed && immediateEventRender;\n}\n\n/**\n * Begin a Working lifecycle for a prompt this host did not submit itself —\n * currently a workflow-authored `sendUserMessage()` accepted on an idle\n * retained stage. Mirrors the manual submit path so an accepted delivery paints\n * immediately and then hands the same visible period to the agent turn.\n *\n * Returns the lifecycle generation that identifies this delivery. Pass it back\n * to `settleChatSessionPromptLifecycle` so a stale settlement cannot clear a\n * newer turn.\n */\nexport function startChatSessionExternalPromptLifecycle<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): number | undefined {\n\t// Compaction status outranks ordinary Working and owns its own indicator.\n\treturn openChatSessionExternalPromptLifecycle(state, state.compacting);\n}\n\n/**\n * Reopen the Working lifecycle for a delivery that is still active after a\n * temporary overlay ended — a pre-turn compaction clears busy state and the\n * lifecycle even though the accepted delivery has not started its turn yet.\n *\n * Unlike the initial start, this preserves `statusMessage` verbatim, so a\n * compaction error stays visible and keeps outranking ordinary Working.\n */\nexport function reassertChatSessionExternalPromptLifecycle<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): number | undefined {\n\treturn openChatSessionExternalPromptLifecycle(state, true);\n}\n\nfunction openChatSessionExternalPromptLifecycle<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tpreserveStatusMessage: boolean,\n): number | undefined {\n\tif (state.disposed) return undefined;\n\tif (!preserveStatusMessage) state.statusMessage = \"\";\n\tstate.sdkBusy = true;\n\tstartChatSessionWorkingLifecycle(state);\n\tsyncChatSessionAnimationTick(state);\n\tstate.requestRender?.();\n\treturn state.workingLifecycleGeneration;\n}\n\n/**\n * Settle a prompt lifecycle started by this host. A replaced generation means a\n * newer turn owns the indicator, so only its own owner may clear busy state.\n */\nexport function settleChatSessionPromptLifecycle<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tsubmittedGeneration: number | undefined,\n): void {\n\tif (submittedGeneration === undefined) {\n\t\tstate.sdkBusy = false;\n\t\treturn;\n\t}\n\tconst lifecycleWasReplaced = state.workingLifecycleGeneration !== submittedGeneration;\n\tif (lifecycleWasReplaced && state.workingLifecycleActive) return;\n\tstate.sdkBusy = false;\n\tif (!lifecycleWasReplaced && !isChatSessionStreaming(state)) {\n\t\tstopChatSessionWorkingLifecycle(state);\n\t}\n}\n\nfunction clearChatSessionAnimation<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): void {\n\tif (!state.animationTimer) return;\n\tclearInterval(state.animationTimer);\n\tstate.animationTimer = undefined;\n}\n\nfunction clearChatSessionEventRender<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): void {\n\tif (!state.renderThrottleTimer) return;\n\tclearTimeout(state.renderThrottleTimer);\n\tstate.renderThrottleTimer = undefined;\n}\n\nexport function syncChatSessionAnimationTick<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): void {\n\tconst shouldAnimate =\n\t\t!state.disposed &&\n\t\tprocess.env.ATOMIC_REDUCED_MOTION !== \"1\" &&\n\t\t(state.workingLifecycleActive || state.compacting);\n\tif (shouldAnimate && !state.animationTimer) {\n\t\tconst intervalMs =\n\t\t\tstate.workingLifecycleActive || state.compacting ? ATOMIC_WORKING_FRAME_MS : ANIMATION_FRAME_MS;\n\t\tconst timer = setInterval(() => {\n\t\t\tif (state.disposed || state.animationTimer !== timer || (!state.workingLifecycleActive && !state.compacting)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (state.workingLifecycleActive || state.compacting) {\n\t\t\t\tstate.workingFrame = (state.workingFrame + 1) % ATOMIC_WORKING_FRAMES.length;\n\t\t\t}\n\t\t\tstate.requestRender?.();\n\t\t}, intervalMs);\n\t\tstate.animationTimer = timer;\n\t\tstate.animationTimer.unref?.();\n\t\treturn;\n\t}\n\tif (!shouldAnimate) clearChatSessionAnimation(state);\n}\n\nexport function clearChatSessionBusyForTerminalWorkflowStage<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): void {\n\tstate.sdkBusy = false;\n\tstate.workingMessage = undefined;\n\tstate.compacting = false;\n\tstopChatSessionWorkingLifecycle(state, false);\n\tif (finalizeTerminalWorkflowToolEntries(state.transcript)) {\n\t\tstate.transcriptComponent.invalidate();\n\t}\n\tstate.liveChat.clearPendingTools();\n\tstate.statusMessage = \"\";\n\tsyncChatSessionAnimationTick(state);\n}\n\nexport function disposeChatSession<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): void {\n\tstate.disposed = true;\n\tstate.compacting = false;\n\tstopChatSessionWorkingLifecycle(state, false);\n\tstate.transcriptComponent.invalidate();\n\tstate.editor = undefined;\n}\n\nexport function notifyChatSessionWarning<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tmessage: string,\n): void {\n\tstate.statusMessage = message;\n\tstate.showWarning?.(message);\n\tstate.requestRender?.();\n}\n\nexport function notifyChatSessionStatus<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tmessage: string,\n): void {\n\tstate.statusMessage = message;\n\tstate.showStatus?.(message);\n\tstate.requestRender?.();\n}\n\n/**\n * The prompt command is the one command that needs the submitting key's mode,\n * so it has its own accessor rather than a `text`-only signature that would\n * drop it.\n */\nexport function requiredChatSessionPromptCommand<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): (text: string, mode: ChatSessionSubmitMode) => Promise<void> {\n\treturn async (text, mode) => {\n\t\tif (!state.commands.prompt) throw new Error(\"no prompt command configured for this chat session\");\n\t\tawait state.commands.prompt(text, mode);\n\t};\n}\n\nexport function requiredChatSessionCommand<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tname: \"steer\" | \"followUp\" | \"resume\",\n): (text?: string) => Promise<void> {\n\tswitch (name) {\n\t\tcase \"steer\":\n\t\t\treturn async (text) => {\n\t\t\t\tif (!state.commands.steer) throw new Error(\"no steer command configured for this chat session\");\n\t\t\t\tawait state.commands.steer(text ?? \"\");\n\t\t\t};\n\t\tcase \"followUp\":\n\t\t\treturn async (text) => {\n\t\t\t\tif (!state.commands.followUp) throw new Error(\"no followUp command configured for this chat session\");\n\t\t\t\tawait state.commands.followUp(text ?? \"\");\n\t\t\t};\n\t\tcase \"resume\":\n\t\t\treturn async (text) => {\n\t\t\t\tif (!state.commands.resume) throw new Error(\"no resume command configured for this chat session\");\n\t\t\t\tawait state.commands.resume(text);\n\t\t\t};\n\t}\n}\n\nexport function afterChatSessionEvent<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tchanged: boolean,\n): void {\n\tif (state.disposed) return;\n\tsyncChatSessionAnimationTick(state);\n\tif (!changed) return;\n\tif (state.immediateEventRenderPending) {\n\t\tstate.immediateEventRenderPending = false;\n\t\tstate.requestRender?.();\n\t\treturn;\n\t}\n\trequestChatSessionEventRender(state);\n}\n\nfunction requestChatSessionEventRender<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): void {\n\tif (!isChatSessionStreaming(state)) {\n\t\tstate.requestRender?.();\n\t\treturn;\n\t}\n\tif (state.animationTimer) return;\n\tif (state.renderThrottleTimer) return;\n\tconst timer = setTimeout(() => {\n\t\tif (state.disposed || state.renderThrottleTimer !== timer) return;\n\t\tstate.renderThrottleTimer = undefined;\n\t\tstate.requestRender?.();\n\t}, STREAMING_RENDER_THROTTLE_MS);\n\tstate.renderThrottleTimer = timer;\n\tstate.renderThrottleTimer.unref?.();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"chat-session-host-runtime.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { ATOMIC_WORKING_FRAME_MS, ATOMIC_WORKING_FRAMES } from \"./atomic-working-status.ts\";\nimport type { ChatSessionHostState } from \"./chat-session-host-state.ts\";\nimport { finalizeTerminalWorkflowToolEntries } from \"./chat-session-host-terminal-cleanup.ts\";\nimport type { ChatSessionSubmitMode } from \"./chat-session-host-types.ts\";\nimport { ANIMATION_FRAME_MS, STREAMING_RENDER_THROTTLE_MS } from \"./chat-session-host-utils.ts\";\nimport type { ChatTranscriptEntryLike } from \"./chat-transcript.js\";\n\nexport function isChatSessionStreaming<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): boolean {\n\treturn !state.disposed && (state.sdkBusy || state.isStreamingOverride?.() === true);\n}\n\nexport function isChatSessionBashRunning<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): boolean {\n\treturn state.localBashRunning || state.isBashRunningOverride?.() === true;\n}\n\nexport function incrementOptimisticUserSignature<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tsignature: string,\n): void {\n\tstate.optimisticUserSignatureCounts.set(signature, (state.optimisticUserSignatureCounts.get(signature) ?? 0) + 1);\n}\n\nexport function decrementOptimisticUserSignature<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tsignature: string,\n): void {\n\tconst count = state.optimisticUserSignatureCounts.get(signature) ?? 0;\n\tif (count <= 1) state.optimisticUserSignatureCounts.delete(signature);\n\telse state.optimisticUserSignatureCounts.set(signature, count - 1);\n}\n\nexport function startChatSessionWorkingLifecycle<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): void {\n\tif (state.disposed) return;\n\tclearChatSessionAnimation(state);\n\tclearChatSessionEventRender(state);\n\tstate.immediateEventRenderPending = true;\n\tstate.workingLifecycleActive = true;\n\tstate.workingLifecycleGeneration += 1;\n\tstate.workingFrame = 0;\n}\n\nexport function stopChatSessionWorkingLifecycle<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\timmediateEventRender = true,\n): void {\n\tstate.workingLifecycleActive = false;\n\tclearChatSessionAnimation(state);\n\tclearChatSessionEventRender(state);\n\tstate.immediateEventRenderPending = !state.disposed && immediateEventRender;\n}\n\n/**\n * Begin a Working lifecycle for a prompt this host did not submit itself —\n * currently a workflow-authored `sendUserMessage()` accepted on an idle\n * retained stage. Mirrors the manual submit path so an accepted delivery paints\n * immediately and then hands the same visible period to the agent turn.\n *\n * Returns the lifecycle generation that identifies this delivery. Pass it back\n * to `settleChatSessionPromptLifecycle` so a stale settlement cannot clear a\n * newer turn.\n */\nexport function startChatSessionExternalPromptLifecycle<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): number | undefined {\n\t// Compaction status outranks ordinary Working and owns its own indicator.\n\treturn openChatSessionExternalPromptLifecycle(state, state.compacting);\n}\n\n/**\n * Reopen the Working lifecycle for a delivery that is still active after a\n * temporary overlay ended — a pre-turn compaction clears busy state and the\n * lifecycle even though the accepted delivery has not started its turn yet.\n *\n * Unlike the initial start, this preserves `statusMessage` verbatim, so a\n * compaction error stays visible and keeps outranking ordinary Working.\n */\nexport function reassertChatSessionExternalPromptLifecycle<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): number | undefined {\n\treturn openChatSessionExternalPromptLifecycle(state, true);\n}\n\nfunction openChatSessionExternalPromptLifecycle<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tpreserveStatusMessage: boolean,\n): number | undefined {\n\tif (state.disposed) return undefined;\n\tif (!preserveStatusMessage) state.statusMessage = \"\";\n\tstate.sdkBusy = true;\n\tstartChatSessionWorkingLifecycle(state);\n\tsyncChatSessionAnimationTick(state);\n\tstate.requestRender?.();\n\treturn state.workingLifecycleGeneration;\n}\n\n/**\n * Settle a prompt lifecycle started by this host. A replaced generation means a\n * newer turn owns the indicator, so only its own owner may clear busy state.\n */\nexport function settleChatSessionPromptLifecycle<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tsubmittedGeneration: number | undefined,\n): void {\n\tif (submittedGeneration === undefined) {\n\t\tstate.sdkBusy = false;\n\t\treturn;\n\t}\n\tconst lifecycleWasReplaced = state.workingLifecycleGeneration !== submittedGeneration;\n\tif (lifecycleWasReplaced && state.workingLifecycleActive) return;\n\tstate.sdkBusy = false;\n\tif (!lifecycleWasReplaced && !isChatSessionStreaming(state)) {\n\t\tstopChatSessionWorkingLifecycle(state);\n\t}\n}\n\nfunction clearChatSessionAnimation<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): void {\n\tif (!state.animationTimer) return;\n\tclearInterval(state.animationTimer);\n\tstate.animationTimer = undefined;\n}\n\nfunction clearChatSessionEventRender<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): void {\n\tif (!state.renderThrottleTimer) return;\n\tclearTimeout(state.renderThrottleTimer);\n\tstate.renderThrottleTimer = undefined;\n}\n\nexport function syncChatSessionAnimationTick<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): void {\n\tconst shouldAnimate =\n\t\t!state.disposed &&\n\t\tprocess.env.ATOMIC_REDUCED_MOTION !== \"1\" &&\n\t\t(state.workingLifecycleActive || state.compacting);\n\tif (shouldAnimate && !state.animationTimer) {\n\t\tconst intervalMs =\n\t\t\tstate.workingLifecycleActive || state.compacting ? ATOMIC_WORKING_FRAME_MS : ANIMATION_FRAME_MS;\n\t\tconst timer = setInterval(() => {\n\t\t\tif (state.disposed || state.animationTimer !== timer || (!state.workingLifecycleActive && !state.compacting)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (state.workingLifecycleActive || state.compacting) {\n\t\t\t\tstate.workingFrame = (state.workingFrame + 1) % ATOMIC_WORKING_FRAMES.length;\n\t\t\t}\n\t\t\tstate.requestRender?.();\n\t\t}, intervalMs);\n\t\tstate.animationTimer = timer;\n\t\tstate.animationTimer.unref?.();\n\t\treturn;\n\t}\n\tif (!shouldAnimate) clearChatSessionAnimation(state);\n}\n\nexport function clearChatSessionBusyForTerminalWorkflowStage<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): void {\n\tstate.sdkBusy = false;\n\tstate.workingMessage = undefined;\n\tstate.compacting = false;\n\tstopChatSessionWorkingLifecycle(state, false);\n\tif (finalizeTerminalWorkflowToolEntries(state.transcript)) {\n\t\tstate.transcriptComponent.invalidate();\n\t}\n\tstate.liveChat.clearPendingTools();\n\tif (state.statusMessage !== state.lastWarningMessage) state.statusMessage = \"\";\n\tsyncChatSessionAnimationTick(state);\n}\n\nexport function disposeChatSession<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): void {\n\tstate.disposed = true;\n\tstate.footer?.dispose();\n\tstate.footer = undefined;\n\tstate.compacting = false;\n\tstopChatSessionWorkingLifecycle(state, false);\n\tstate.transcriptComponent.invalidate();\n\tstate.editor = undefined;\n}\n\nexport function notifyChatSessionWarning<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tmessage: string,\n): void {\n\tstate.statusMessage = message;\n\tstate.showWarning?.(message);\n\tstate.requestRender?.();\n}\n\nexport function notifyChatSessionStatus<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tmessage: string,\n): void {\n\tstate.statusMessage = message;\n\tstate.showStatus?.(message);\n\tstate.requestRender?.();\n}\n\n/**\n * Prompt requires the submitting key's mode; resume accepts it optionally for\n * hosts that preserve submission intent across a pause.\n */\nexport function requiredChatSessionPromptCommand<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): (text: string, mode: ChatSessionSubmitMode) => Promise<void> {\n\treturn async (text, mode) => {\n\t\tif (!state.commands.prompt) throw new Error(\"no prompt command configured for this chat session\");\n\t\tawait state.commands.prompt(text, mode);\n\t};\n}\n\nexport function requiredChatSessionCommand<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tname: \"steer\" | \"followUp\" | \"resume\",\n): (text?: string, mode?: ChatSessionSubmitMode) => Promise<void> {\n\tswitch (name) {\n\t\tcase \"steer\":\n\t\t\treturn async (text) => {\n\t\t\t\tif (!state.commands.steer) throw new Error(\"no steer command configured for this chat session\");\n\t\t\t\tawait state.commands.steer(text ?? \"\");\n\t\t\t};\n\t\tcase \"followUp\":\n\t\t\treturn async (text) => {\n\t\t\t\tif (!state.commands.followUp) throw new Error(\"no followUp command configured for this chat session\");\n\t\t\t\tawait state.commands.followUp(text ?? \"\");\n\t\t\t};\n\t\tcase \"resume\":\n\t\t\treturn async (text, mode) => {\n\t\t\t\tif (!state.commands.resume) throw new Error(\"no resume command configured for this chat session\");\n\t\t\t\tawait state.commands.resume(text, mode);\n\t\t\t};\n\t}\n}\n\nexport function afterChatSessionEvent<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tchanged: boolean,\n): void {\n\tif (state.disposed) return;\n\tsyncChatSessionAnimationTick(state);\n\tif (!changed) return;\n\tif (state.immediateEventRenderPending) {\n\t\tstate.immediateEventRenderPending = false;\n\t\tstate.requestRender?.();\n\t\treturn;\n\t}\n\trequestChatSessionEventRender(state);\n}\n\nfunction requestChatSessionEventRender<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): void {\n\tif (!isChatSessionStreaming(state)) {\n\t\tstate.requestRender?.();\n\t\treturn;\n\t}\n\tif (state.animationTimer) return;\n\tif (state.renderThrottleTimer) return;\n\tconst timer = setTimeout(() => {\n\t\tif (state.disposed || state.renderThrottleTimer !== timer) return;\n\t\tstate.renderThrottleTimer = undefined;\n\t\tstate.requestRender?.();\n\t}, STREAMING_RENDER_THROTTLE_MS);\n\tstate.renderThrottleTimer = timer;\n\tstate.renderThrottleTimer.unref?.();\n}\n"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { Component, EditorComponent, MarkdownTheme, TUI } from "@earendil-works/pi-tui";
|
|
2
|
-
import type { AgentSession } from "../../../core/agent-session.
|
|
2
|
+
import type { AgentSession } from "../../../core/agent-session.js";
|
|
3
3
|
import type { ReadonlyFooterDataProvider } from "../../../core/footer-data-provider.ts";
|
|
4
4
|
import { LiveChatEntriesController } from "./chat-message-renderer.ts";
|
|
5
5
|
import type { ChatSessionHostCommands, ChatSessionHostEntry, ChatSessionHostOpts, ChatSessionHostStyle } from "./chat-session-host-types.ts";
|
|
6
|
-
import { ChatTranscriptComponent, type ChatTranscriptEntryLike, ScrollableComponentViewport } from "./chat-transcript.
|
|
6
|
+
import { ChatTranscriptComponent, type ChatTranscriptEntryLike, ScrollableComponentViewport } from "./chat-transcript.js";
|
|
7
|
+
import type { FooterComponent } from "./footer.ts";
|
|
7
8
|
export interface ChatSessionHostStateCallbacks<TExtraEntry extends ChatTranscriptEntryLike> {
|
|
8
9
|
renderEntry: (state: ChatSessionHostState<TExtraEntry>, entry: ChatSessionHostEntry<TExtraEntry>) => Component;
|
|
9
10
|
transcriptCacheKey: (state: ChatSessionHostState<TExtraEntry>, entry: ChatSessionHostEntry<TExtraEntry>, index: number) => string;
|
|
@@ -27,10 +28,14 @@ export declare class ChatSessionHostState<TExtraEntry extends ChatTranscriptEntr
|
|
|
27
28
|
readonly footerData: ReadonlyFooterDataProvider | undefined;
|
|
28
29
|
readonly renderExtraEntry: ((entry: TExtraEntry) => Component) | undefined;
|
|
29
30
|
readonly tui: TUI | undefined;
|
|
31
|
+
footer: FooterComponent | undefined;
|
|
32
|
+
footerNavigationActive: boolean;
|
|
30
33
|
inputBuffer: string;
|
|
31
34
|
transcript: ChatSessionHostEntry<TExtraEntry>[];
|
|
32
35
|
extraEntries: TExtraEntry[];
|
|
33
36
|
statusMessage: string;
|
|
37
|
+
/** Explicit diagnostics survive busy-state cleanup, but are not restored after later input. */
|
|
38
|
+
lastWarningMessage: string | undefined;
|
|
34
39
|
isBashMode: boolean;
|
|
35
40
|
localBashRunning: boolean;
|
|
36
41
|
sdkBusy: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-session-host-state.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AACxF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EACX,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,uBAAuB,EACvB,KAAK,uBAAuB,EAC5B,2BAA2B,EAC3B,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-session-host-state.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { LiveChatEntriesController } from "./chat-message-renderer.js";
|
|
|
2
2
|
import { ChatTranscriptComponent, ScrollableComponentViewport, } from "./chat-transcript.js";
|
|
3
3
|
export class ChatSessionHostState {
|
|
4
4
|
constructor(opts, callbacks) {
|
|
5
|
+
this.footerNavigationActive = false;
|
|
5
6
|
this.inputBuffer = "";
|
|
6
7
|
this.transcript = [];
|
|
7
8
|
this.extraEntries = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-session-host-state.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-state.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAOvE,OAAO,EACN,uBAAuB,EAEvB,2BAA2B,GAC3B,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-session-host-state.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-state.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Component, EditorComponent, MarkdownTheme, TUI } from \"@earendil-works/pi-tui\";\nimport type { AgentSession } from \"../../../core/agent-session.js\";\nimport type { ReadonlyFooterDataProvider } from \"../../../core/footer-data-provider.ts\";\nimport { LiveChatEntriesController } from \"./chat-message-renderer.ts\";\nimport type {\n\tChatSessionHostCommands,\n\tChatSessionHostEntry,\n\tChatSessionHostOpts,\n\tChatSessionHostStyle,\n} from \"./chat-session-host-types.ts\";\nimport {\n\tChatTranscriptComponent,\n\ttype ChatTranscriptEntryLike,\n\tScrollableComponentViewport,\n} from \"./chat-transcript.js\";\nimport type { FooterComponent } from \"./footer.ts\";\n\nexport interface ChatSessionHostStateCallbacks<TExtraEntry extends ChatTranscriptEntryLike> {\n\trenderEntry: (state: ChatSessionHostState<TExtraEntry>, entry: ChatSessionHostEntry<TExtraEntry>) => Component;\n\ttranscriptCacheKey: (\n\t\tstate: ChatSessionHostState<TExtraEntry>,\n\t\tentry: ChatSessionHostEntry<TExtraEntry>,\n\t\tindex: number,\n\t) => string;\n}\n\nexport class ChatSessionHostState<TExtraEntry extends ChatTranscriptEntryLike = never> {\n\treadonly style: ChatSessionHostStyle;\n\treadonly commands: ChatSessionHostCommands;\n\treadonly requestRender: (() => void) | undefined;\n\treadonly getAgentSession: (() => AgentSession | undefined) | undefined;\n\treadonly isStreamingOverride: (() => boolean) | undefined;\n\treadonly isPaused: (() => boolean) | undefined;\n\treadonly isDisabled: (() => boolean) | undefined;\n\treadonly isBashRunningOverride: (() => boolean) | undefined;\n\treadonly showWarning: ((message: string) => void) | undefined;\n\treadonly showStatus: ((message: string) => void) | undefined;\n\treadonly actions: Record<string, () => void | Promise<void>> | undefined;\n\treadonly getActionKeyDisplay: ((action: string) => string) | undefined;\n\treadonly getMarkdownTheme: (() => MarkdownTheme) | undefined;\n\treadonly getChatRenderSettings: ChatSessionHostOpts<TExtraEntry>[\"getChatRenderSettings\"];\n\treadonly getCwd: (() => string) | undefined;\n\treadonly footerData: ReadonlyFooterDataProvider | undefined;\n\treadonly renderExtraEntry: ((entry: TExtraEntry) => Component) | undefined;\n\treadonly tui: TUI | undefined;\n\n\tfooter: FooterComponent | undefined;\n\tfooterNavigationActive = false;\n\tinputBuffer = \"\";\n\ttranscript: ChatSessionHostEntry<TExtraEntry>[] = [];\n\textraEntries: TExtraEntry[] = [];\n\tstatusMessage = \"\";\n\t/** Explicit diagnostics survive busy-state cleanup, but are not restored after later input. */\n\tlastWarningMessage: string | undefined;\n\tisBashMode = false;\n\tlocalBashRunning = false;\n\tsdkBusy = false;\n\t/** Escape interrupt plus asynchronous workflow pause acknowledgement. */\n\tinterruptSettlement: Promise<void> | undefined;\n\t/** Recorded pause failure consumed by the first submit after settlement. */\n\tinterruptFailureMessage: string | undefined;\n\tworkingMessage: string | undefined;\n\tworkingFrame = 0;\n\tworkingLifecycleActive: boolean;\n\tworkingLifecycleGeneration = 0;\n\timmediateEventRenderPending = false;\n\tdisposed = false;\n\tpendingSteeringMessages: readonly string[] = [];\n\tpendingFollowUpMessages: readonly string[] = [];\n\tcompactionQueuedMessages: readonly string[] = [];\n\tcompacting = false;\n\t/** Keeps input queued while automatic compaction hands off to a manual request. */\n\tmanualCompactionTakeoverPending = false;\n\tanimationTimer: ReturnType<typeof setInterval> | undefined;\n\trenderThrottleTimer: ReturnType<typeof setTimeout> | undefined;\n\tbodyViewport = new ScrollableComponentViewport();\n\ttranscriptComponent: ChatTranscriptComponent<ChatSessionHostEntry<TExtraEntry>>;\n\ttranscriptRenderSettingsKey = \"\";\n\trenderIdentityIds = new WeakMap<object, number>();\n\tnextRenderIdentityId = 1;\n\tliveChat: LiveChatEntriesController;\n\teditor: EditorComponent | undefined;\n\toptimisticUserSignatureCounts = new Map<string, number>();\n\t/**\n\t * Whether an assistant entry still streaming into a sticky-bottom body is\n\t * rendered as its tail alone.\n\t *\n\t * On by default: while the reader is following a live stream, the rows far\n\t * above the cursor cost layout work nobody is reading.\n\t */\n\tstreamingTailWindowEnabled = true;\n\n\tconstructor(opts: ChatSessionHostOpts<TExtraEntry>, callbacks: ChatSessionHostStateCallbacks<TExtraEntry>) {\n\t\tthis.style = opts.style;\n\t\tthis.commands = opts.commands ?? {};\n\t\tthis.requestRender = opts.requestRender;\n\t\tthis.getAgentSession = opts.getAgentSession;\n\t\tthis.isStreamingOverride = opts.isStreaming;\n\t\tthis.workingLifecycleActive = opts.isStreaming?.() === true;\n\t\tthis.isPaused = opts.isPaused;\n\t\tthis.isDisabled = opts.isDisabled;\n\t\tthis.isBashRunningOverride = opts.isBashRunning;\n\t\tthis.showWarning = opts.showWarning;\n\t\tthis.showStatus = opts.showStatus;\n\t\tthis.actions = opts.actions;\n\t\tthis.getActionKeyDisplay = opts.getActionKeyDisplay;\n\t\tthis.getMarkdownTheme = opts.getMarkdownTheme;\n\t\tthis.getChatRenderSettings = opts.getChatRenderSettings;\n\t\tthis.getCwd = opts.getCwd;\n\t\tthis.footerData = opts.footerData;\n\t\tthis.renderExtraEntry = opts.renderExtraEntry;\n\t\tthis.tui = opts.tui;\n\t\tthis.liveChat = new LiveChatEntriesController(this.transcript);\n\t\tthis.transcriptComponent = new ChatTranscriptComponent(\n\t\t\tthis.transcript,\n\t\t\t(entry) => callbacks.renderEntry(this, entry),\n\t\t\t(entry, index) => callbacks.transcriptCacheKey(this, entry, index),\n\t\t);\n\t}\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { ChatSessionHostEntry } from "./chat-session-host-types.ts";
|
|
2
|
-
import type { ChatTranscriptEntryLike } from "./chat-transcript.
|
|
2
|
+
import type { ChatTranscriptEntryLike } from "./chat-transcript.js";
|
|
3
3
|
export declare function finalizeTerminalWorkflowToolEntries<TExtraEntry extends ChatTranscriptEntryLike>(entries: ChatSessionHostEntry<TExtraEntry>[]): boolean;
|
|
4
4
|
//# sourceMappingURL=chat-session-host-terminal-cleanup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-session-host-terminal-cleanup.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-terminal-cleanup.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChatSessionHostEntry } from \"./chat-session-host-types.ts\";\nimport type { ChatTranscriptEntryLike } from \"./chat-transcript.
|
|
1
|
+
{"version":3,"file":"chat-session-host-terminal-cleanup.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-terminal-cleanup.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChatSessionHostEntry } from \"./chat-session-host-types.ts\";\nimport type { ChatTranscriptEntryLike } from \"./chat-transcript.js\";\n\ntype ToolEntry = Extract<ChatSessionHostEntry<ChatTranscriptEntryLike>, { kind: \"tool\" }>;\ntype ToolResult = NonNullable<ToolEntry[\"result\"]>;\ntype ObjectRecord = Record<string, unknown>;\n\nexport function finalizeTerminalWorkflowToolEntries<TExtraEntry extends ChatTranscriptEntryLike>(\n\tentries: ChatSessionHostEntry<TExtraEntry>[],\n): boolean {\n\tlet changed = false;\n\tfor (let i = 0; i < entries.length; i++) {\n\t\tconst entry = entries[i];\n\t\tif (!isToolEntry(entry)) continue;\n\t\tconst finalized = finalizeToolEntry(entry);\n\t\tif (finalized !== entry) {\n\t\t\tentries[i] = finalized as ChatSessionHostEntry<TExtraEntry>;\n\t\t\tchanged = true;\n\t\t}\n\t}\n\treturn changed;\n}\n\nfunction finalizeToolEntry(entry: ToolEntry): ToolEntry {\n\tconst result = entry.result ? finalizeToolResult(entry.result) : undefined;\n\tconst resultChanged = result !== entry.result;\n\tif (entry.isPartial === false && !resultChanged) return entry;\n\treturn {\n\t\t...entry,\n\t\t...(result ? { result } : {}),\n\t\tisPartial: false,\n\t};\n}\n\nfunction finalizeToolResult(result: ToolResult): ToolResult {\n\tconst details = finalizeDetails(result.details);\n\tif (details === result.details) return result;\n\treturn { ...result, details };\n}\n\nfunction finalizeDetails(details: unknown): unknown {\n\tif (!isRecord(details)) return details;\n\tlet changed = false;\n\tconst next: ObjectRecord = { ...details };\n\tconst progress = finalizeProgressArray(next.progress);\n\tif (progress !== next.progress) {\n\t\tnext.progress = progress;\n\t\tchanged = true;\n\t}\n\tif (Array.isArray(next.results)) {\n\t\tconst results = next.results.map((item) => finalizeResultEntry(item));\n\t\tif (results.some((item, index) => item !== (next.results as unknown[])[index])) {\n\t\t\tnext.results = results;\n\t\t\tchanged = true;\n\t\t}\n\t}\n\tconst workflowGraph = finalizeWorkflowGraph(next.workflowGraph);\n\tif (workflowGraph !== next.workflowGraph) {\n\t\tnext.workflowGraph = workflowGraph;\n\t\tchanged = true;\n\t}\n\treturn changed ? next : details;\n}\n\nfunction finalizeResultEntry(entry: unknown): unknown {\n\tif (!isRecord(entry)) return entry;\n\tconst progress = finalizeProgress(entry.progress);\n\tif (progress === entry.progress) return entry;\n\treturn { ...entry, progress };\n}\n\nfunction finalizeProgressArray(progress: unknown): unknown {\n\tif (!Array.isArray(progress)) return progress;\n\tlet changed = false;\n\tconst next = progress.map((entry) => {\n\t\tconst finalized = finalizeProgress(entry);\n\t\tif (finalized !== entry) changed = true;\n\t\treturn finalized;\n\t});\n\treturn changed ? next : progress;\n}\n\nfunction finalizeProgress(progress: unknown): unknown {\n\tif (!isRecord(progress) || progress.status !== \"running\") return progress;\n\treturn {\n\t\t...progress,\n\t\tstatus: \"detached\",\n\t\tactivityState: undefined,\n\t\tcurrentTool: undefined,\n\t\tcurrentToolArgs: undefined,\n\t\tcurrentToolStartedAt: undefined,\n\t};\n}\n\nfunction finalizeWorkflowGraph(graph: unknown): unknown {\n\tif (!isRecord(graph)) return graph;\n\tconst nodes = finalizeWorkflowGraphNodes(graph.nodes);\n\tconst shouldClearCurrent = graph.currentNodeId !== undefined;\n\tif (nodes === graph.nodes && !shouldClearCurrent) return graph;\n\treturn { ...graph, nodes, currentNodeId: undefined };\n}\n\nfunction finalizeWorkflowGraphNodes(nodes: unknown): unknown {\n\tif (!Array.isArray(nodes)) return nodes;\n\tlet changed = false;\n\tconst next = nodes.map((node) => {\n\t\tconst finalized = finalizeWorkflowGraphNode(node);\n\t\tif (finalized !== node) changed = true;\n\t\treturn finalized;\n\t});\n\treturn changed ? next : nodes;\n}\n\nfunction finalizeWorkflowGraphNode(node: unknown): unknown {\n\tif (!isRecord(node)) return node;\n\tlet changed = false;\n\tconst next: ObjectRecord = { ...node };\n\tif (next.status === \"running\") {\n\t\tnext.status = \"detached\";\n\t\tchanged = true;\n\t}\n\tconst children = finalizeWorkflowGraphNodes(next.children);\n\tif (children !== next.children) {\n\t\tnext.children = children;\n\t\tchanged = true;\n\t}\n\treturn changed ? next : node;\n}\n\nfunction isToolEntry(entry: ChatSessionHostEntry<ChatTranscriptEntryLike>): entry is ToolEntry {\n\treturn entry.role === \"tool\" && \"kind\" in entry && entry.kind === \"tool\";\n}\n\nfunction isRecord(value: unknown): value is ObjectRecord {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Component, EditorComponent, EditorTheme, MarkdownTheme, TUI } from "@earendil-works/pi-tui";
|
|
2
|
-
import type { AgentSession } from "../../../core/agent-session.
|
|
2
|
+
import type { AgentSession } from "../../../core/agent-session.js";
|
|
3
3
|
import type { BashResult } from "../../../core/bash-executor.ts";
|
|
4
4
|
import type { ReadonlyFooterDataProvider } from "../../../core/footer-data-provider.ts";
|
|
5
5
|
import type { ChatMessageEntry, ChatMessageRenderOptions } from "./chat-message-renderer.ts";
|
|
6
|
-
import type { ChatTranscriptEntryLike } from "./chat-transcript.
|
|
6
|
+
import type { ChatTranscriptEntryLike } from "./chat-transcript.js";
|
|
7
7
|
export interface ChatSessionHostStyle {
|
|
8
8
|
dim(text: string): string;
|
|
9
9
|
text(text: string): string;
|
|
@@ -42,10 +42,12 @@ export type ChatSessionSubmitMode = "auto" | "followUp";
|
|
|
42
42
|
export interface ChatSessionHostCommands {
|
|
43
43
|
ensureAttached?: () => Promise<void>;
|
|
44
44
|
prompt?: (text: string, mode: ChatSessionSubmitMode) => Promise<void>;
|
|
45
|
+
/** Host-owned admission route, used instead of raw SDK streaming shortcuts. */
|
|
46
|
+
submitUserMessage?: (text: string, mode: ChatSessionSubmitMode) => Promise<void>;
|
|
45
47
|
steer?: (text: string) => Promise<void>;
|
|
46
48
|
followUp?: (text: string) => Promise<void>;
|
|
47
49
|
interrupt?: () => Promise<void>;
|
|
48
|
-
resume?: (message?: string) => Promise<void>;
|
|
50
|
+
resume?: (message?: string, mode?: ChatSessionSubmitMode) => Promise<void>;
|
|
49
51
|
runBash?: (request: ChatSessionHostBashRequest) => Promise<BashResult>;
|
|
50
52
|
abortBash?: () => void | Promise<void>;
|
|
51
53
|
abortCompaction?: () => void | Promise<void>;
|
|
@@ -56,6 +58,8 @@ export interface ChatSessionHostOpts<TExtraEntry extends ChatTranscriptEntryLike
|
|
|
56
58
|
commands?: ChatSessionHostCommands;
|
|
57
59
|
requestRender?: () => void;
|
|
58
60
|
getAgentSession?: () => AgentSession | undefined;
|
|
61
|
+
/** Custom hosts may retain live task rows; interactive stage chat uses footer-only status. */
|
|
62
|
+
taskRowsInChat?: boolean;
|
|
59
63
|
isStreaming?: () => boolean;
|
|
60
64
|
isPaused?: () => boolean;
|
|
61
65
|
isDisabled?: () => boolean;
|
|
@@ -68,6 +72,7 @@ export interface ChatSessionHostOpts<TExtraEntry extends ChatTranscriptEntryLike
|
|
|
68
72
|
tui?: TUI;
|
|
69
73
|
keybindings?: unknown;
|
|
70
74
|
editorFactory?: (tui: TUI, theme: EditorTheme, keybindings: unknown) => EditorComponent;
|
|
75
|
+
autocompleteProvider?: import("@earendil-works/pi-tui").AutocompleteProvider;
|
|
71
76
|
editorTheme: EditorTheme;
|
|
72
77
|
getChatRenderSettings?: () => Partial<Omit<ChatMessageRenderOptions, "ui" | "cwd">> | undefined;
|
|
73
78
|
getCwd?: () => string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-session-host-types.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAC1G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AACxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC7F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAEpE,MAAM,WAAW,oBAAoB;IACpC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,uBAAuB,CAAC,EAAE,MAAM;QAC/B,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACb,CAAC;IACF,uFAAuF;IACvF,8BAA8B,CAAC,EAAE,OAAO,CAAC;IACzC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACxC,MAAM,IAAI,MAAM,CAAC;IACjB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE;QAAE,UAAU,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM,CAAC;CACpH;AAED,MAAM,WAAW,0BAA0B;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,UAAU,CAAC;AAExD,MAAM,WAAW,uBAAuB;IACvC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-session-host-types.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-session-host-types.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Component, EditorComponent, EditorTheme, MarkdownTheme, TUI } from \"@earendil-works/pi-tui\";\nimport type { AgentSession } from \"../../../core/agent-session.
|
|
1
|
+
{"version":3,"file":"chat-session-host-types.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Component, EditorComponent, EditorTheme, MarkdownTheme, TUI } from \"@earendil-works/pi-tui\";\nimport type { AgentSession } from \"../../../core/agent-session.js\";\nimport type { BashResult } from \"../../../core/bash-executor.ts\";\nimport type { ReadonlyFooterDataProvider } from \"../../../core/footer-data-provider.ts\";\nimport type { ChatMessageEntry, ChatMessageRenderOptions } from \"./chat-message-renderer.ts\";\nimport type { ChatTranscriptEntryLike } from \"./chat-transcript.js\";\n\nexport interface ChatSessionHostStyle {\n\tdim(text: string): string;\n\ttext(text: string): string;\n\ttextMuted(text: string): string;\n\taccent(text: string): string;\n\taccentBold(text: string): string;\n\tworkingIndicatorPalette?: () => {\n\t\tdark: string;\n\t\tlift: string;\n\t\tmuted: string;\n\t\taccent: string;\n\t\tbright: string;\n\t\tpeak: string;\n\t};\n\t/** Use Atomic's live global theme when the host shares the interactive theme proxy. */\n\tworkingIndicatorUseGlobalTheme?: boolean;\n\trule(hex: string, text: string): string;\n\tcursor(): string;\n\tblank(width: number): string;\n\teditorRuleColor(disabled: boolean, agentSession: AgentSession | undefined, state?: { isBashMode: boolean }): string;\n}\n\nexport interface ChatSessionHostBashRequest {\n\tcommand: string;\n\texcludeFromContext: boolean;\n\tonChunk: (chunk: string) => void;\n}\n\n/**\n * Which key produced one submission. `auto` is Enter; `followUp` is the\n * explicit follow-up binding. The mode travels with the submission so a host\n * whose idle `prompt` command has to pick a delivery queue reads this\n * invocation's intent rather than shared state a concurrent submission owns.\n */\nexport type ChatSessionSubmitMode = \"auto\" | \"followUp\";\n\nexport interface ChatSessionHostCommands {\n\tensureAttached?: () => Promise<void>;\n\tprompt?: (text: string, mode: ChatSessionSubmitMode) => Promise<void>;\n\t/** Host-owned admission route, used instead of raw SDK streaming shortcuts. */\n\tsubmitUserMessage?: (text: string, mode: ChatSessionSubmitMode) => Promise<void>;\n\tsteer?: (text: string) => Promise<void>;\n\tfollowUp?: (text: string) => Promise<void>;\n\tinterrupt?: () => Promise<void>;\n\tresume?: (message?: string, mode?: ChatSessionSubmitMode) => Promise<void>;\n\trunBash?: (request: ChatSessionHostBashRequest) => Promise<BashResult>;\n\tabortBash?: () => void | Promise<void>;\n\tabortCompaction?: () => void | Promise<void>;\n\thandleSlashCommand?: (text: string) => Promise<boolean> | boolean;\n}\n\nexport interface ChatSessionHostOpts<TExtraEntry extends ChatTranscriptEntryLike = never> {\n\tstyle: ChatSessionHostStyle;\n\tcommands?: ChatSessionHostCommands;\n\trequestRender?: () => void;\n\tgetAgentSession?: () => AgentSession | undefined;\n\t/** Custom hosts may retain live task rows; interactive stage chat uses footer-only status. */\n\ttaskRowsInChat?: boolean;\n\tisStreaming?: () => boolean;\n\tisPaused?: () => boolean;\n\tisDisabled?: () => boolean;\n\tisBashRunning?: () => boolean;\n\tshowWarning?: (message: string) => void;\n\tshowStatus?: (message: string) => void;\n\tactions?: Record<string, () => void | Promise<void>>;\n\tgetActionKeyDisplay?: (action: string) => string;\n\tgetMarkdownTheme?: () => MarkdownTheme;\n\ttui?: TUI;\n\tkeybindings?: unknown;\n\teditorFactory?: (tui: TUI, theme: EditorTheme, keybindings: unknown) => EditorComponent;\n\tautocompleteProvider?: import(\"@earendil-works/pi-tui\").AutocompleteProvider;\n\teditorTheme: EditorTheme;\n\tgetChatRenderSettings?: () => Partial<Omit<ChatMessageRenderOptions, \"ui\" | \"cwd\">> | undefined;\n\tgetCwd?: () => string;\n\tfooterData?: ReadonlyFooterDataProvider;\n\trenderExtraEntry?: (entry: TExtraEntry) => Component;\n}\n\nexport type ChatSessionHostEntry<TExtraEntry extends ChatTranscriptEntryLike = never> = ChatMessageEntry | TExtraEntry;\n\nexport type AgentSnapshotMessage = AgentSession[\"messages\"][number];\nexport type CacheKeyPart = string | number | boolean | null;\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ChatMessageEntry } from "./chat-message-renderer.ts";
|
|
2
2
|
import type { CacheKeyPart, ChatSessionHostEntry } from "./chat-session-host-types.ts";
|
|
3
|
-
import type { ChatTranscriptEntryLike } from "./chat-transcript.
|
|
3
|
+
import type { ChatTranscriptEntryLike } from "./chat-transcript.js";
|
|
4
4
|
export declare const SPINNER_FRAMES: string[];
|
|
5
5
|
export declare const ANIMATION_FRAME_MS = 80;
|
|
6
6
|
export declare const STREAMING_RENDER_THROTTLE_MS = 80;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-session-host-utils.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAEpE,eAAO,MAAM,cAAc,UAAqD,CAAC;AACjF,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAI/C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAM7G;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAKzG;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CAE/D;AAED,wBAAgB,kBAAkB,CAAC,WAAW,SAAS,uBAAuB,EAC7E,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GACtC,KAAK,IAAI,gBAAgB,
|
|
1
|
+
{"version":3,"file":"chat-session-host-utils.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAEpE,eAAO,MAAM,cAAc,UAAqD,CAAC;AACjF,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAI/C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAM7G;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAKzG;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CAE/D;AAED,wBAAgB,kBAAkB,CAAC,WAAW,SAAS,uBAAuB,EAC7E,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,GACtC,KAAK,IAAI,gBAAgB,CAyB3B;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAEhG;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAElG;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAc3D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQtD;AAED,wBAAgB,YAAY,IAAI,MAAM,CAGrC;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnD"}
|
|
@@ -30,6 +30,8 @@ export function isChatMessageEntry(entry) {
|
|
|
30
30
|
return false;
|
|
31
31
|
const candidate = entry;
|
|
32
32
|
switch (candidate.kind) {
|
|
33
|
+
case "task":
|
|
34
|
+
return candidate.role === "tool" && "task" in candidate;
|
|
33
35
|
case "assistant":
|
|
34
36
|
return candidate.role === "assistant" && candidate.message !== undefined;
|
|
35
37
|
case "tool":
|