@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,5 +1,6 @@
|
|
|
1
|
-
import type { AgentSession } from "../../core/agent-session.
|
|
1
|
+
import type { AgentSession } from "../../core/agent-session.js";
|
|
2
2
|
import type { AgentSessionRuntime } from "../../core/agent-session-runtime.ts";
|
|
3
|
+
import type { ExtensionUIContext } from "../../core/extensions/index.js";
|
|
3
4
|
import { KeybindingsManager } from "../../core/keybindings.ts";
|
|
4
5
|
import type { RpcPendingExtensionRequests } from "./rpc-extension-ui.ts";
|
|
5
6
|
import type { KeybindingsReloadCoordinator } from "./rpc-keybindings-reload.ts";
|
|
@@ -16,6 +17,7 @@ interface RpcCommandHandlerOptions {
|
|
|
16
17
|
rebindSession: () => Promise<void>;
|
|
17
18
|
output: RpcOutput;
|
|
18
19
|
keybindings?: KeybindingsManager;
|
|
20
|
+
taskInspectorUi?: Pick<ExtensionUIContext, "custom">;
|
|
19
21
|
reloadCoordinator?: KeybindingsReloadCoordinator<AgentSession>;
|
|
20
22
|
inputForm?: ProviderLoginInput;
|
|
21
23
|
pendingExtensionRequests?: RpcPendingExtensionRequests;
|
|
@@ -23,6 +25,6 @@ interface RpcCommandHandlerOptions {
|
|
|
23
25
|
reloadResources?: () => Promise<void>;
|
|
24
26
|
shouldRetryResources?: () => boolean;
|
|
25
27
|
}
|
|
26
|
-
export declare function createRpcCommandHandler({ runtimeHost, getSession, rebindSession, output, keybindings, reloadCoordinator, inputForm, pendingExtensionRequests, waitForResources, reloadResources, shouldRetryResources, }: RpcCommandHandlerOptions): ManagedRpcCommandHandler;
|
|
28
|
+
export declare function createRpcCommandHandler({ runtimeHost, getSession, rebindSession, output, keybindings, taskInspectorUi, reloadCoordinator, inputForm, pendingExtensionRequests, waitForResources, reloadResources, shouldRetryResources, }: RpcCommandHandlerOptions): ManagedRpcCommandHandler;
|
|
27
29
|
export {};
|
|
28
30
|
//# sourceMappingURL=rpc-command-handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-command-handler.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-command-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAEhF,OAAO,EAAE,KAAK,kBAAkB,EAAmB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAIN,KAAK,SAAS,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAoC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"rpc-command-handler.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-command-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAEhF,OAAO,EAAE,KAAK,kBAAkB,EAAmB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAIN,KAAK,SAAS,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAoC,MAAM,gBAAgB,CAAC;AAGhG,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;AAC1F,MAAM,MAAM,wBAAwB,GAAG,iBAAiB,GAAG;IAAE,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC;AAElG,UAAU,wBAAwB;IACjC,WAAW,EAAE,mBAAmB,CAAC;IACjC,UAAU,EAAE,MAAM,YAAY,CAAC;IAC/B,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,eAAe,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IACrD,iBAAiB,CAAC,EAAE,4BAA4B,CAAC,YAAY,CAAC,CAAC;IAC/D,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,wBAAwB,CAAC,EAAE,2BAA2B,CAAC;IACvD,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IACnD,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,oBAAoB,CAAC,EAAE,MAAM,OAAO,CAAC;CACrC;AA0BD,wBAAgB,uBAAuB,CAAC,EACvC,WAAW,EACX,UAAU,EACV,aAAa,EACb,MAAM,EACN,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,wBAAwB,EACxB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,GACpB,EAAE,wBAAwB,GAAG,wBAAwB,CAggBrD"}
|
|
@@ -5,6 +5,7 @@ import { RpcBashRequestOwners } from "./rpc-bash-request-owners.js";
|
|
|
5
5
|
import { rejectUnsupportedProviderPrompt } from "./rpc-model-fallback-prompt.js";
|
|
6
6
|
import { RpcProviderAuth } from "./rpc-provider-auth.js";
|
|
7
7
|
import { createRpcErrorResponse, createRpcSuccessResponse, formatRpcErrorMessage, } from "./rpc-responses.js";
|
|
8
|
+
import { showEngineTaskInspector } from "./task-ui-bridge.js";
|
|
8
9
|
function canRunBeforeOptionalResources(command) {
|
|
9
10
|
switch (command.type) {
|
|
10
11
|
case "abort":
|
|
@@ -28,7 +29,7 @@ function canRunBeforeOptionalResources(command) {
|
|
|
28
29
|
return false;
|
|
29
30
|
}
|
|
30
31
|
}
|
|
31
|
-
export function createRpcCommandHandler({ runtimeHost, getSession, rebindSession, output, keybindings, reloadCoordinator, inputForm, pendingExtensionRequests, waitForResources, reloadResources, shouldRetryResources, }) {
|
|
32
|
+
export function createRpcCommandHandler({ runtimeHost, getSession, rebindSession, output, keybindings, taskInspectorUi, reloadCoordinator, inputForm, pendingExtensionRequests, waitForResources, reloadResources, shouldRetryResources, }) {
|
|
32
33
|
let fallbackShortcutKeybindings;
|
|
33
34
|
const providerAuth = new RpcProviderAuth(inputForm, {
|
|
34
35
|
output,
|
|
@@ -54,6 +55,12 @@ export function createRpcCommandHandler({ runtimeHost, getSession, rebindSession
|
|
|
54
55
|
}
|
|
55
56
|
const session = getSession();
|
|
56
57
|
switch (command.type) {
|
|
58
|
+
case "open_task_inspector": {
|
|
59
|
+
if (!keybindings || !taskInspectorUi)
|
|
60
|
+
return createRpcErrorResponse(id, command.type, "Task inspection requires an interactive host");
|
|
61
|
+
void showEngineTaskInspector(session, taskInspectorUi, command.taskId).catch((error) => session.extensionRunner.getUIContext().notify(error.message, "error"));
|
|
62
|
+
return createRpcSuccessResponse(id, command.type);
|
|
63
|
+
}
|
|
57
64
|
case "prompt": {
|
|
58
65
|
let preflightSucceeded = false;
|
|
59
66
|
void (async () => {
|
|
@@ -82,11 +89,11 @@ export function createRpcCommandHandler({ runtimeHost, getSession, rebindSession
|
|
|
82
89
|
return undefined;
|
|
83
90
|
}
|
|
84
91
|
case "steer": {
|
|
85
|
-
await session.steer(command.message, command.images);
|
|
92
|
+
await session.steer(command.message, command.images, { source: "rpc" });
|
|
86
93
|
return createRpcSuccessResponse(id, "steer");
|
|
87
94
|
}
|
|
88
95
|
case "follow_up": {
|
|
89
|
-
await session.followUp(command.message, command.images);
|
|
96
|
+
await session.followUp(command.message, command.images, { source: "rpc" });
|
|
90
97
|
return createRpcSuccessResponse(id, "follow_up");
|
|
91
98
|
}
|
|
92
99
|
case "abort": {
|
|
@@ -120,6 +127,7 @@ export function createRpcCommandHandler({ runtimeHost, getSession, rebindSession
|
|
|
120
127
|
messageCount: session.messages.length,
|
|
121
128
|
pendingMessageCount: session.pendingMessageCount,
|
|
122
129
|
queuedMessagesPaused: session.queuedMessagesPaused,
|
|
130
|
+
projectTrusted: session.settingsManager.isProjectTrusted?.() === true,
|
|
123
131
|
resourceOverlaps: extensionResult.overlaps ?? [],
|
|
124
132
|
resourceExtensions: extensionResult.extensions.map((extension) => ({
|
|
125
133
|
path: extension.path,
|
|
@@ -328,7 +336,7 @@ export function createRpcCommandHandler({ runtimeHost, getSession, rebindSession
|
|
|
328
336
|
return createRpcSuccessResponse(id, "export_html", { path });
|
|
329
337
|
}
|
|
330
338
|
case "switch_session": {
|
|
331
|
-
const result = await runtimeHost.switchSession(command.sessionPath);
|
|
339
|
+
const result = await runtimeHost.switchSession(command.sessionPath, { cwdOverride: command.cwdOverride });
|
|
332
340
|
if (!result.cancelled) {
|
|
333
341
|
await rebindSession();
|
|
334
342
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-command-handler.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-command-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import type { KeyId } from \"@earendil-works/pi-tui\";\nimport type { AgentSession } from \"../../core/agent-session.ts\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.ts\";\nimport { runCallback } from \"../../core/callback-activity.ts\";\nimport { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport { getSkillCatalog } from \"../../core/skill-catalog.ts\";\nimport { RpcBashRequestOwners } from \"./rpc-bash-request-owners.ts\";\nimport type { RpcPendingExtensionRequests } from \"./rpc-extension-ui.ts\";\nimport type { KeybindingsReloadCoordinator } from \"./rpc-keybindings-reload.ts\";\nimport { rejectUnsupportedProviderPrompt } from \"./rpc-model-fallback-prompt.ts\";\nimport { type ProviderLoginInput, RpcProviderAuth } from \"./rpc-provider-auth.ts\";\nimport {\n\tcreateRpcErrorResponse,\n\tcreateRpcSuccessResponse,\n\tformatRpcErrorMessage,\n\ttype RpcOutput,\n} from \"./rpc-responses.ts\";\nimport type { RpcCommand, RpcResponse, RpcSessionState, RpcSlashCommand } from \"./rpc-types.ts\";\n\nexport type RpcCommandHandler = (command: RpcCommand) => Promise<RpcResponse | undefined>;\nexport type ManagedRpcCommandHandler = RpcCommandHandler & { disposeActiveBash(): Promise<void> };\n\ninterface RpcCommandHandlerOptions {\n\truntimeHost: AgentSessionRuntime;\n\tgetSession: () => AgentSession;\n\trebindSession: () => Promise<void>;\n\toutput: RpcOutput;\n\tkeybindings?: KeybindingsManager;\n\treloadCoordinator?: KeybindingsReloadCoordinator<AgentSession>;\n\tinputForm?: ProviderLoginInput;\n\tpendingExtensionRequests?: RpcPendingExtensionRequests;\n\twaitForResources?: () => Promise<void> | undefined;\n\treloadResources?: () => Promise<void>;\n\tshouldRetryResources?: () => boolean;\n}\n\nfunction canRunBeforeOptionalResources(command: RpcCommand): boolean {\n\tswitch (command.type) {\n\t\tcase \"abort\":\n\t\tcase \"abort_bash\":\n\t\tcase \"abort_compaction\":\n\t\tcase \"abort_retry\":\n\t\tcase \"cancel_login_provider\":\n\t\tcase \"clear_queue\":\n\t\tcase \"get_messages\":\n\t\tcase \"get_state\":\n\t\tcase \"pause_queued_messages\":\n\t\tcase \"resume_queued_messages\":\n\t\tcase \"set_auto_compaction\":\n\t\tcase \"set_auto_retry\":\n\t\tcase \"set_follow_up_mode\":\n\t\tcase \"set_steering_mode\":\n\t\t\treturn true;\n\t\tcase \"get_available_models\":\n\t\t\treturn command.allowPartialResources === true;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nexport function createRpcCommandHandler({\n\truntimeHost,\n\tgetSession,\n\trebindSession,\n\toutput,\n\tkeybindings,\n\treloadCoordinator,\n\tinputForm,\n\tpendingExtensionRequests,\n\twaitForResources,\n\treloadResources,\n\tshouldRetryResources,\n}: RpcCommandHandlerOptions): ManagedRpcCommandHandler {\n\tlet fallbackShortcutKeybindings: KeybindingsManager | undefined;\n\tconst providerAuth = new RpcProviderAuth(inputForm, {\n\t\toutput,\n\t\tpending: pendingExtensionRequests ?? new Map(),\n\t});\n\tconst bashOwners = new RpcBashRequestOwners(output);\n\tconst getShortcutBindings = () => {\n\t\tif (keybindings) return keybindings.getEffectiveConfig();\n\t\tif (fallbackShortcutKeybindings) fallbackShortcutKeybindings.reload();\n\t\telse fallbackShortcutKeybindings = KeybindingsManager.create(runtimeHost.services.agentDir);\n\t\treturn fallbackShortcutKeybindings.getEffectiveConfig();\n\t};\n\tconst handleCommand = (async (command: RpcCommand): Promise<RpcResponse | undefined> => {\n\t\tconst id = command.id;\n\t\tconst retryFailedResources = command.type === \"reload\" && shouldRetryResources?.() === true;\n\t\tif (command.type !== \"prompt\" && !retryFailedResources && !canRunBeforeOptionalResources(command)) {\n\t\t\tconst pendingResources = waitForResources?.();\n\t\t\tif (pendingResources) await pendingResources;\n\t\t}\n\t\tconst session = getSession();\n\t\tswitch (command.type) {\n\t\t\tcase \"prompt\": {\n\t\t\t\tlet preflightSucceeded = false;\n\t\t\t\tvoid (async () => {\n\t\t\t\t\tconst pendingResources = waitForResources?.();\n\t\t\t\t\tif (pendingResources) await pendingResources;\n\t\t\t\t\tif (rejectUnsupportedProviderPrompt(runtimeHost, output, id)) return;\n\t\t\t\t\tconst promptSession = getSession();\n\t\t\t\t\tawait promptSession.prompt(command.message, {\n\t\t\t\t\t\timages: command.images,\n\t\t\t\t\t\tstreamingBehavior: command.streamingBehavior,\n\t\t\t\t\t\tsource: \"rpc\",\n\t\t\t\t\t\tpreflightResult: (didSucceed) => {\n\t\t\t\t\t\t\tif (didSucceed) {\n\t\t\t\t\t\t\t\tpreflightSucceeded = true;\n\t\t\t\t\t\t\t\toutput(createRpcSuccessResponse(id, \"prompt\"));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t})().catch((promptError: unknown) => {\n\t\t\t\t\tif (!preflightSucceeded) {\n\t\t\t\t\t\toutput(createRpcErrorResponse(id, \"prompt\", formatRpcErrorMessage(promptError), promptError));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tcase \"steer\": {\n\t\t\t\tawait session.steer(command.message, command.images);\n\t\t\t\treturn createRpcSuccessResponse(id, \"steer\");\n\t\t\t}\n\n\t\t\tcase \"follow_up\": {\n\t\t\t\tawait session.followUp(command.message, command.images);\n\t\t\t\treturn createRpcSuccessResponse(id, \"follow_up\");\n\t\t\t}\n\n\t\t\tcase \"abort\": {\n\t\t\t\tawait session.abort();\n\t\t\t\treturn createRpcSuccessResponse(id, \"abort\");\n\t\t\t}\n\t\t\tcase \"new_session\": {\n\t\t\t\tconst options = command.parentSession ? { parentSession: command.parentSession } : undefined;\n\t\t\t\tconst result = await runtimeHost.newSession(options);\n\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\tawait rebindSession();\n\t\t\t\t}\n\t\t\t\treturn createRpcSuccessResponse(id, \"new_session\", result);\n\t\t\t}\n\n\t\t\tcase \"get_state\": {\n\t\t\t\tconst extensionResult = session.resourceLoader.getExtensions();\n\t\t\t\tconst state: RpcSessionState = {\n\t\t\t\t\tmodel: session.model,\n\t\t\t\t\tmodelFallbackMessage: runtimeHost.modelFallbackMessage,\n\t\t\t\t\tmodelFallbackReason: runtimeHost.modelFallbackReason,\n\t\t\t\t\tthinkingLevel: session.thinkingLevel,\n\t\t\t\t\tisStreaming: session.isStreaming,\n\t\t\t\t\tisCompacting: session.isCompacting,\n\t\t\t\t\tcompactionReason: session.compactionReason,\n\t\t\t\t\tsteeringMode: session.steeringMode,\n\t\t\t\t\tfollowUpMode: session.followUpMode,\n\t\t\t\t\tsessionFile: session.sessionFile,\n\t\t\t\t\tsessionId: session.sessionId,\n\t\t\t\t\tsessionName: session.sessionName,\n\t\t\t\t\tautoCompactionEnabled: session.autoCompactionEnabled,\n\t\t\t\t\tmessageCount: session.messages.length,\n\t\t\t\t\tpendingMessageCount: session.pendingMessageCount,\n\t\t\t\t\tqueuedMessagesPaused: session.queuedMessagesPaused,\n\t\t\t\t\tresourceOverlaps: extensionResult.overlaps ?? [],\n\t\t\t\t\tresourceExtensions: extensionResult.extensions.map((extension) => ({\n\t\t\t\t\t\tpath: extension.path,\n\t\t\t\t\t\tsourceInfo: extension.sourceInfo,\n\t\t\t\t\t\thidden: extension.hidden === true,\n\t\t\t\t\t})),\n\t\t\t\t};\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_state\", state);\n\t\t\t}\n\t\t\tcase \"set_model\": {\n\t\t\t\tconst models = await session.modelRuntime.getAvailableSnapshot();\n\t\t\t\tconst model = models.find(\n\t\t\t\t\t(candidate) => candidate.provider === command.provider && candidate.id === command.modelId,\n\t\t\t\t);\n\t\t\t\tif (!model) {\n\t\t\t\t\treturn createRpcErrorResponse(\n\t\t\t\t\t\tid,\n\t\t\t\t\t\t\"set_model\",\n\t\t\t\t\t\t`Model not found: ${command.provider}/${command.modelId}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tawait session.setModel(model, command.persist === true ? { persist: true } : {});\n\t\t\t\truntimeHost.resolveModelFallback();\n\t\t\t\treturn createRpcSuccessResponse(id, \"set_model\", session.model ?? model);\n\t\t\t}\n\t\t\tcase \"cycle_model\": {\n\t\t\t\tconst previousModel = session.model;\n\t\t\t\tconst result = await session.cycleModel(\n\t\t\t\t\tcommand.direction,\n\t\t\t\t\tcommand.persist === true ? { persist: true } : {},\n\t\t\t\t);\n\t\t\t\truntimeHost.resolveModelFallbackAfterExplicitModelSelection(previousModel, result?.model);\n\t\t\t\treturn createRpcSuccessResponse(id, \"cycle_model\", result ?? null);\n\t\t\t}\n\t\t\tcase \"get_available_models\": {\n\t\t\t\tconst models = await session.modelRuntime.getAvailableSnapshot();\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_available_models\", {\n\t\t\t\t\tmodels,\n\t\t\t\t\tscopedModels: session.scopedModels,\n\t\t\t\t\tcustomAuthProviders: [],\n\t\t\t\t\toauthProviders: session.modelRuntime.getOAuthProviderMetadata(),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"login_provider\": {\n\t\t\t\tconst result =\n\t\t\t\t\tcommand.authType === \"oauth\"\n\t\t\t\t\t\t? await providerAuth.loginOAuth(session, command.provider, command.loginId)\n\t\t\t\t\t\t: await providerAuth.login(session, command.provider, command.loginId);\n\t\t\t\treturn createRpcSuccessResponse(id, \"login_provider\", result);\n\t\t\t}\n\n\t\t\tcase \"save_provider_credential\":\n\t\t\t\treturn createRpcSuccessResponse(\n\t\t\t\t\tid,\n\t\t\t\t\t\"save_provider_credential\",\n\t\t\t\t\tawait providerAuth.save(session, command.provider, command.credential),\n\t\t\t\t);\n\n\t\t\tcase \"cancel_login_provider\":\n\t\t\t\tproviderAuth.cancel(command.provider, command.loginId);\n\t\t\t\treturn createRpcSuccessResponse(id, \"cancel_login_provider\");\n\n\t\t\tcase \"logout_provider\": {\n\t\t\t\tconst result = await runtimeHost.logoutProvider(command.provider);\n\t\t\t\treturn createRpcSuccessResponse(id, \"logout_provider\", result);\n\t\t\t}\n\t\t\tcase \"refresh_models\": {\n\t\t\t\tconst controller = command.timeoutMs === undefined ? undefined : new AbortController();\n\t\t\t\tconst timedOut = Symbol(\"model refresh timed out\");\n\t\t\t\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\t\t\t\tconst timeoutResult =\n\t\t\t\t\tcontroller && command.timeoutMs !== undefined\n\t\t\t\t\t\t? new Promise<typeof timedOut>((resolve) => {\n\t\t\t\t\t\t\t\ttimeout = setTimeout(() => {\n\t\t\t\t\t\t\t\t\tcontroller.abort();\n\t\t\t\t\t\t\t\t\tresolve(timedOut);\n\t\t\t\t\t\t\t\t}, command.timeoutMs);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: undefined;\n\t\t\t\ttry {\n\t\t\t\t\tconst refresh = (async () => {\n\t\t\t\t\t\tawait session.modelRuntime.reloadCredentials({ refreshAvailability: false });\n\t\t\t\t\t\tif (controller?.signal.aborted) return { aborted: true, errors: new Map<string, Error>() };\n\t\t\t\t\t\treturn session.modelRuntime.refresh({\n\t\t\t\t\t\t\tallowNetwork: command.allowNetwork,\n\t\t\t\t\t\t\tforce: command.force,\n\t\t\t\t\t\t\tsignal: controller?.signal,\n\t\t\t\t\t\t});\n\t\t\t\t\t})();\n\t\t\t\t\tconst outcome = timeoutResult ? await Promise.race([refresh, timeoutResult]) : await refresh;\n\t\t\t\t\tconst result = outcome === timedOut ? { aborted: true, errors: new Map<string, Error>() } : outcome;\n\t\t\t\t\treturn createRpcSuccessResponse(id, \"refresh_models\", {\n\t\t\t\t\t\taborted: result.aborted,\n\t\t\t\t\t\terrors: [...result.errors].map(([provider, error]) => ({ provider, message: error.message })),\n\t\t\t\t\t\tmodels: session.modelRuntime.getAvailableSnapshot(),\n\t\t\t\t\t\tscopedModels: session.scopedModels,\n\t\t\t\t\t\tcustomAuthProviders: [],\n\t\t\t\t\t\toauthProviders: session.modelRuntime.getOAuthProviderMetadata(),\n\t\t\t\t\t});\n\t\t\t\t} finally {\n\t\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcase \"set_thinking_level\": {\n\t\t\t\tsession.setThinkingLevel(command.level, command.persist === true ? { persist: true } : {});\n\t\t\t\tconst model = session.model;\n\t\t\t\treturn createRpcSuccessResponse(id, \"set_thinking_level\", {\n\t\t\t\t\tlevel: session.thinkingLevel,\n\t\t\t\t\t...(model ? { provider: model.provider, modelId: model.id } : {}),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"cycle_thinking_level\": {\n\t\t\t\tconst level = session.cycleThinkingLevel();\n\t\t\t\treturn createRpcSuccessResponse(id, \"cycle_thinking_level\", level ? { level } : null);\n\t\t\t}\n\n\t\t\tcase \"get_available_thinking_levels\": {\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_available_thinking_levels\", {\n\t\t\t\t\tlevels: session.getAvailableThinkingLevels(),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"set_steering_mode\": {\n\t\t\t\tsession.setSteeringMode(command.mode);\n\t\t\t\treturn createRpcSuccessResponse(id, \"set_steering_mode\");\n\t\t\t}\n\n\t\t\tcase \"set_follow_up_mode\": {\n\t\t\t\tsession.setFollowUpMode(command.mode);\n\t\t\t\treturn createRpcSuccessResponse(id, \"set_follow_up_mode\");\n\t\t\t}\n\n\t\t\tcase \"compact\": {\n\t\t\t\tconst result = await session.compact();\n\t\t\t\treturn createRpcSuccessResponse(id, \"compact\", result);\n\t\t\t}\n\n\t\t\tcase \"set_auto_compaction\":\n\t\t\t\tsession.setAutoCompactionEnabled(command.enabled);\n\t\t\t\treturn createRpcSuccessResponse(id, \"set_auto_compaction\");\n\t\t\tcase \"abort_compaction\":\n\t\t\t\tsession.abortCompaction();\n\t\t\t\treturn createRpcSuccessResponse(id, \"abort_compaction\");\n\t\t\tcase \"set_auto_retry\":\n\t\t\t\tsession.setAutoRetryEnabled(command.enabled);\n\t\t\t\treturn createRpcSuccessResponse(id, \"set_auto_retry\");\n\t\t\tcase \"abort_retry\":\n\t\t\t\tsession.abortRetry();\n\t\t\t\treturn createRpcSuccessResponse(id, \"abort_retry\");\n\n\t\t\tcase \"clear_queue\": {\n\t\t\t\treturn createRpcSuccessResponse(id, \"clear_queue\", session.clearQueue());\n\t\t\t}\n\t\t\tcase \"pause_queued_messages\":\n\t\t\t\tsession.pauseQueuedMessages();\n\t\t\t\treturn createRpcSuccessResponse(id, \"pause_queued_messages\");\n\t\t\tcase \"resume_queued_messages\":\n\t\t\t\treturn createRpcSuccessResponse(id, \"resume_queued_messages\", {\n\t\t\t\t\treleased: await session.resumeQueuedMessages(),\n\t\t\t\t});\n\t\t\tcase \"bash\": {\n\t\t\t\tconst result = await bashOwners.run(\n\t\t\t\t\t{\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tsession,\n\t\t\t\t\t\tcommand: command.command,\n\t\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t\t\tisCurrent: () => getSession() === session,\n\t\t\t\t\t},\n\t\t\t\t\t// A `bash` command is still a user-initiated shell request, so it must\n\t\t\t\t\t// reach `user_bash` handlers (sandboxes, remote shells) exactly like the\n\t\t\t\t\t// `user_bash` command does. Ownership, streaming correlation, and result\n\t\t\t\t\t// recording stay with the owning request either way.\n\t\t\t\t\tasync (onUpdate) => {\n\t\t\t\t\t\tconst intercepted = await session.extensionRunner.emitUserBash({\n\t\t\t\t\t\t\ttype: \"user_bash\",\n\t\t\t\t\t\t\tcommand: command.command,\n\t\t\t\t\t\t\texcludeFromContext: command.excludeFromContext === true,\n\t\t\t\t\t\t\tcwd: session.sessionManager.getCwd(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (intercepted?.result) return intercepted.result;\n\t\t\t\t\t\treturn session.executeBash(command.command, onUpdate, {\n\t\t\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\toperations: intercepted?.operations,\n\t\t\t\t\t\t\temitEvent: false,\n\t\t\t\t\t\t\trecordResult: false,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\treturn createRpcSuccessResponse(id, \"bash\", result);\n\t\t\t}\n\t\t\tcase \"user_bash\": {\n\t\t\t\tconst result = await bashOwners.run(\n\t\t\t\t\t{\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tsession,\n\t\t\t\t\t\tcommand: command.command,\n\t\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t\t\tisCurrent: () => getSession() === session,\n\t\t\t\t\t},\n\t\t\t\t\tasync (onUpdate) => {\n\t\t\t\t\t\tconst intercepted = await session.extensionRunner.emitUserBash({\n\t\t\t\t\t\t\ttype: \"user_bash\",\n\t\t\t\t\t\t\tcommand: command.command,\n\t\t\t\t\t\t\texcludeFromContext: command.excludeFromContext === true,\n\t\t\t\t\t\t\tcwd: session.sessionManager.getCwd(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (intercepted?.result) return intercepted.result;\n\t\t\t\t\t\treturn session.executeBash(command.command, onUpdate, {\n\t\t\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\toperations: intercepted?.operations,\n\t\t\t\t\t\t\temitEvent: false,\n\t\t\t\t\t\t\trecordResult: false,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\treturn createRpcSuccessResponse(id, \"user_bash\", result);\n\t\t\t}\n\t\t\tcase \"abort_bash\":\n\t\t\t\tbashOwners.abort(command.requestId);\n\t\t\t\tsession.abortBash(command.requestId);\n\t\t\t\treturn createRpcSuccessResponse(id, \"abort_bash\");\n\n\t\t\tcase \"get_session_stats\": {\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_session_stats\", session.getSessionStats());\n\t\t\t}\n\n\t\t\tcase \"export_html\": {\n\t\t\t\tconst path = await session.exportToHtml(command.outputPath);\n\t\t\t\treturn createRpcSuccessResponse(id, \"export_html\", { path });\n\t\t\t}\n\n\t\t\tcase \"switch_session\": {\n\t\t\t\tconst result = await runtimeHost.switchSession(command.sessionPath);\n\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\tawait rebindSession();\n\t\t\t\t}\n\t\t\t\treturn createRpcSuccessResponse(id, \"switch_session\", result);\n\t\t\t}\n\n\t\t\tcase \"import_session\": {\n\t\t\t\tconst result = await runtimeHost.importFromJsonl(command.inputPath, command.cwdOverride);\n\t\t\t\tif (!result.cancelled) await rebindSession();\n\t\t\t\treturn createRpcSuccessResponse(id, \"import_session\", result);\n\t\t\t}\n\n\t\t\tcase \"fork\": {\n\t\t\t\tconst result = await runtimeHost.fork(command.entryId);\n\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\tawait rebindSession();\n\t\t\t\t}\n\t\t\t\treturn createRpcSuccessResponse(id, \"fork\", { text: result.selectedText, cancelled: result.cancelled });\n\t\t\t}\n\n\t\t\tcase \"clone\": {\n\t\t\t\tconst leafId = session.sessionManager.getLeafId();\n\t\t\t\tif (!leafId) {\n\t\t\t\t\treturn createRpcErrorResponse(id, \"clone\", \"Cannot clone session: no current entry selected\");\n\t\t\t\t}\n\t\t\t\tconst result = await runtimeHost.fork(leafId, { position: \"at\" });\n\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\tawait rebindSession();\n\t\t\t\t}\n\t\t\t\treturn createRpcSuccessResponse(id, \"clone\", { cancelled: result.cancelled });\n\t\t\t}\n\n\t\t\tcase \"get_fork_messages\": {\n\t\t\t\tconst messages = session.getUserMessagesForForking();\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_fork_messages\", { messages });\n\t\t\t}\n\n\t\t\tcase \"get_entries\": {\n\t\t\t\tconst sessionManager = session.sessionManager;\n\t\t\t\tlet entries = sessionManager.getEntries();\n\t\t\t\tif (command.since !== undefined) {\n\t\t\t\t\tconst sinceIndex = entries.findIndex((e) => e.id === command.since);\n\t\t\t\t\tif (sinceIndex === -1) {\n\t\t\t\t\t\treturn createRpcErrorResponse(id, \"get_entries\", `Entry not found: ${command.since}`);\n\t\t\t\t\t}\n\t\t\t\t\tentries = entries.slice(sinceIndex + 1);\n\t\t\t\t}\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_entries\", { entries, leafId: sessionManager.getLeafId() });\n\t\t\t}\n\n\t\t\tcase \"get_tree\": {\n\t\t\t\tconst sessionManager = session.sessionManager;\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_tree\", {\n\t\t\t\t\ttree: sessionManager.getTree(),\n\t\t\t\t\tleafId: sessionManager.getLeafId(),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"get_last_assistant_text\": {\n\t\t\t\tconst text = session.getLastAssistantText();\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_last_assistant_text\", { text });\n\t\t\t}\n\n\t\t\tcase \"set_session_name\": {\n\t\t\t\tconst name = command.name.trim();\n\t\t\t\tif (!name) {\n\t\t\t\t\treturn createRpcErrorResponse(id, \"set_session_name\", \"Session name cannot be empty\");\n\t\t\t\t}\n\t\t\t\tsession.setSessionName(name);\n\t\t\t\treturn createRpcSuccessResponse(id, \"set_session_name\");\n\t\t\t}\n\n\t\t\tcase \"navigate_tree\": {\n\t\t\t\tconst result = await session.navigateTree(command.targetId, command.options);\n\t\t\t\treturn createRpcSuccessResponse(id, \"navigate_tree\", {\n\t\t\t\t\tcancelled: result.cancelled,\n\t\t\t\t\teditorText: result.editorText,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"set_label\": {\n\t\t\t\tsession.sessionManager.appendLabelChange(command.entryId, command.label);\n\t\t\t\treturn createRpcSuccessResponse(id, \"set_label\");\n\t\t\t}\n\n\t\t\tcase \"reload\": {\n\t\t\t\tif (retryFailedResources && reloadResources) await reloadResources();\n\t\t\t\telse if (reloadCoordinator) await reloadCoordinator.reload(session);\n\t\t\t\telse await session.reload();\n\t\t\t\treturn createRpcSuccessResponse(id, \"reload\");\n\t\t\t}\n\n\t\t\tcase \"get_shortcuts\": {\n\t\t\t\tconst effectiveBindings = getShortcutBindings();\n\t\t\t\tconst shortcuts = session.extensionRunner.getShortcuts(effectiveBindings);\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_shortcuts\", {\n\t\t\t\t\tshortcuts: [...shortcuts].map(([key, shortcut]) => ({ key, description: shortcut.description })),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"invoke_shortcut\": {\n\t\t\t\tconst shortcut = session.extensionRunner.getShortcuts(getShortcutBindings()).get(command.key as KeyId);\n\t\t\t\tif (!shortcut) return createRpcErrorResponse(id, \"invoke_shortcut\", `Shortcut not found: ${command.key}`);\n\t\t\t\tawait runCallback(\n\t\t\t\t\t{ kind: \"extension.hook\", name: `shortcut:${command.key}`, sourcePath: shortcut.extensionPath },\n\t\t\t\t\t() => shortcut.handler(session.extensionRunner.createContext()),\n\t\t\t\t);\n\t\t\t\treturn createRpcSuccessResponse(id, \"invoke_shortcut\");\n\t\t\t}\n\n\t\t\tcase \"get_messages\": {\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_messages\", { messages: session.messages });\n\t\t\t}\n\n\t\t\tcase \"get_command_completions\": {\n\t\t\t\tconst registeredCommand = session.extensionRunner\n\t\t\t\t\t.getRegisteredCommands()\n\t\t\t\t\t.find((candidate) => candidate.invocationName === command.commandName);\n\t\t\t\tconst getArgumentCompletions = registeredCommand?.getArgumentCompletions;\n\t\t\t\tif (registeredCommand === undefined || getArgumentCompletions === undefined) {\n\t\t\t\t\treturn createRpcSuccessResponse(id, \"get_command_completions\", { completions: null });\n\t\t\t\t}\n\t\t\t\tconst completions = await runCallback(\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: \"extension.hook\",\n\t\t\t\t\t\tname: `command-completions:${command.commandName}`,\n\t\t\t\t\t\tsourcePath: registeredCommand.sourceInfo.path,\n\t\t\t\t\t},\n\t\t\t\t\t() => getArgumentCompletions(command.argumentPrefix),\n\t\t\t\t);\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_command_completions\", { completions });\n\t\t\t}\n\n\t\t\tcase \"get_commands\": {\n\t\t\t\tconst commands: RpcSlashCommand[] = [];\n\n\t\t\t\tfor (const registeredCommand of session.extensionRunner.getRegisteredCommands()) {\n\t\t\t\t\tcommands.push({\n\t\t\t\t\t\tname: registeredCommand.invocationName,\n\t\t\t\t\t\tdescription: registeredCommand.description,\n\t\t\t\t\t\t...(registeredCommand.getArgumentCompletions !== undefined ? { hasArgumentCompletions: true } : {}),\n\t\t\t\t\t\tsource: \"extension\",\n\t\t\t\t\t\tsourceInfo: registeredCommand.sourceInfo,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfor (const template of session.promptTemplates) {\n\t\t\t\t\tcommands.push({\n\t\t\t\t\t\tname: template.name,\n\t\t\t\t\t\tdescription: template.description,\n\t\t\t\t\t\tsource: \"prompt\",\n\t\t\t\t\t\tsourceInfo: template.sourceInfo,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfor (const skillCommand of getSkillCatalog(session.resourceLoader).commands) {\n\t\t\t\t\tcommands.push({\n\t\t\t\t\t\tname: `skill:${skillCommand.name}`,\n\t\t\t\t\t\tdescription: skillCommand.description,\n\t\t\t\t\t\tsource: \"skill\",\n\t\t\t\t\t\tsourceInfo: skillCommand.sourceInfo,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_commands\", { commands });\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconst unknownCommand = command as { type: string };\n\t\t\t\treturn createRpcErrorResponse(id, unknownCommand.type, `Unknown command: ${unknownCommand.type}`);\n\t\t\t}\n\t\t}\n\t}) as ManagedRpcCommandHandler;\n\thandleCommand.disposeActiveBash = () => bashOwners.dispose();\n\treturn handleCommand;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"rpc-command-handler.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-command-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import type { KeyId } from \"@earendil-works/pi-tui\";\nimport type { AgentSession } from \"../../core/agent-session.js\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.ts\";\nimport { runCallback } from \"../../core/callback-activity.ts\";\nimport type { ExtensionUIContext } from \"../../core/extensions/index.js\";\nimport { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport { getSkillCatalog } from \"../../core/skill-catalog.ts\";\nimport { RpcBashRequestOwners } from \"./rpc-bash-request-owners.ts\";\nimport type { RpcPendingExtensionRequests } from \"./rpc-extension-ui.ts\";\nimport type { KeybindingsReloadCoordinator } from \"./rpc-keybindings-reload.ts\";\nimport { rejectUnsupportedProviderPrompt } from \"./rpc-model-fallback-prompt.ts\";\nimport { type ProviderLoginInput, RpcProviderAuth } from \"./rpc-provider-auth.ts\";\nimport {\n\tcreateRpcErrorResponse,\n\tcreateRpcSuccessResponse,\n\tformatRpcErrorMessage,\n\ttype RpcOutput,\n} from \"./rpc-responses.ts\";\nimport type { RpcCommand, RpcResponse, RpcSessionState, RpcSlashCommand } from \"./rpc-types.ts\";\nimport { showEngineTaskInspector } from \"./task-ui-bridge.js\";\n\nexport type RpcCommandHandler = (command: RpcCommand) => Promise<RpcResponse | undefined>;\nexport type ManagedRpcCommandHandler = RpcCommandHandler & { disposeActiveBash(): Promise<void> };\n\ninterface RpcCommandHandlerOptions {\n\truntimeHost: AgentSessionRuntime;\n\tgetSession: () => AgentSession;\n\trebindSession: () => Promise<void>;\n\toutput: RpcOutput;\n\tkeybindings?: KeybindingsManager;\n\ttaskInspectorUi?: Pick<ExtensionUIContext, \"custom\">;\n\treloadCoordinator?: KeybindingsReloadCoordinator<AgentSession>;\n\tinputForm?: ProviderLoginInput;\n\tpendingExtensionRequests?: RpcPendingExtensionRequests;\n\twaitForResources?: () => Promise<void> | undefined;\n\treloadResources?: () => Promise<void>;\n\tshouldRetryResources?: () => boolean;\n}\n\nfunction canRunBeforeOptionalResources(command: RpcCommand): boolean {\n\tswitch (command.type) {\n\t\tcase \"abort\":\n\t\tcase \"abort_bash\":\n\t\tcase \"abort_compaction\":\n\t\tcase \"abort_retry\":\n\t\tcase \"cancel_login_provider\":\n\t\tcase \"clear_queue\":\n\t\tcase \"get_messages\":\n\t\tcase \"get_state\":\n\t\tcase \"pause_queued_messages\":\n\t\tcase \"resume_queued_messages\":\n\t\tcase \"set_auto_compaction\":\n\t\tcase \"set_auto_retry\":\n\t\tcase \"set_follow_up_mode\":\n\t\tcase \"set_steering_mode\":\n\t\t\treturn true;\n\t\tcase \"get_available_models\":\n\t\t\treturn command.allowPartialResources === true;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nexport function createRpcCommandHandler({\n\truntimeHost,\n\tgetSession,\n\trebindSession,\n\toutput,\n\tkeybindings,\n\ttaskInspectorUi,\n\treloadCoordinator,\n\tinputForm,\n\tpendingExtensionRequests,\n\twaitForResources,\n\treloadResources,\n\tshouldRetryResources,\n}: RpcCommandHandlerOptions): ManagedRpcCommandHandler {\n\tlet fallbackShortcutKeybindings: KeybindingsManager | undefined;\n\tconst providerAuth = new RpcProviderAuth(inputForm, {\n\t\toutput,\n\t\tpending: pendingExtensionRequests ?? new Map(),\n\t});\n\tconst bashOwners = new RpcBashRequestOwners(output);\n\tconst getShortcutBindings = () => {\n\t\tif (keybindings) return keybindings.getEffectiveConfig();\n\t\tif (fallbackShortcutKeybindings) fallbackShortcutKeybindings.reload();\n\t\telse fallbackShortcutKeybindings = KeybindingsManager.create(runtimeHost.services.agentDir);\n\t\treturn fallbackShortcutKeybindings.getEffectiveConfig();\n\t};\n\tconst handleCommand = (async (command: RpcCommand): Promise<RpcResponse | undefined> => {\n\t\tconst id = command.id;\n\t\tconst retryFailedResources = command.type === \"reload\" && shouldRetryResources?.() === true;\n\t\tif (command.type !== \"prompt\" && !retryFailedResources && !canRunBeforeOptionalResources(command)) {\n\t\t\tconst pendingResources = waitForResources?.();\n\t\t\tif (pendingResources) await pendingResources;\n\t\t}\n\t\tconst session = getSession();\n\t\tswitch (command.type) {\n\t\t\tcase \"open_task_inspector\": {\n\t\t\t\tif (!keybindings || !taskInspectorUi)\n\t\t\t\t\treturn createRpcErrorResponse(id, command.type, \"Task inspection requires an interactive host\");\n\t\t\t\tvoid showEngineTaskInspector(session, taskInspectorUi, command.taskId).catch((error: Error) =>\n\t\t\t\t\tsession.extensionRunner.getUIContext().notify(error.message, \"error\"),\n\t\t\t\t);\n\t\t\t\treturn createRpcSuccessResponse(id, command.type);\n\t\t\t}\n\t\t\tcase \"prompt\": {\n\t\t\t\tlet preflightSucceeded = false;\n\t\t\t\tvoid (async () => {\n\t\t\t\t\tconst pendingResources = waitForResources?.();\n\t\t\t\t\tif (pendingResources) await pendingResources;\n\t\t\t\t\tif (rejectUnsupportedProviderPrompt(runtimeHost, output, id)) return;\n\t\t\t\t\tconst promptSession = getSession();\n\t\t\t\t\tawait promptSession.prompt(command.message, {\n\t\t\t\t\t\timages: command.images,\n\t\t\t\t\t\tstreamingBehavior: command.streamingBehavior,\n\t\t\t\t\t\tsource: \"rpc\",\n\t\t\t\t\t\tpreflightResult: (didSucceed) => {\n\t\t\t\t\t\t\tif (didSucceed) {\n\t\t\t\t\t\t\t\tpreflightSucceeded = true;\n\t\t\t\t\t\t\t\toutput(createRpcSuccessResponse(id, \"prompt\"));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t})().catch((promptError: unknown) => {\n\t\t\t\t\tif (!preflightSucceeded) {\n\t\t\t\t\t\toutput(createRpcErrorResponse(id, \"prompt\", formatRpcErrorMessage(promptError), promptError));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tcase \"steer\": {\n\t\t\t\tawait session.steer(command.message, command.images, { source: \"rpc\" });\n\t\t\t\treturn createRpcSuccessResponse(id, \"steer\");\n\t\t\t}\n\n\t\t\tcase \"follow_up\": {\n\t\t\t\tawait session.followUp(command.message, command.images, { source: \"rpc\" });\n\t\t\t\treturn createRpcSuccessResponse(id, \"follow_up\");\n\t\t\t}\n\n\t\t\tcase \"abort\": {\n\t\t\t\tawait session.abort();\n\t\t\t\treturn createRpcSuccessResponse(id, \"abort\");\n\t\t\t}\n\t\t\tcase \"new_session\": {\n\t\t\t\tconst options = command.parentSession ? { parentSession: command.parentSession } : undefined;\n\t\t\t\tconst result = await runtimeHost.newSession(options);\n\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\tawait rebindSession();\n\t\t\t\t}\n\t\t\t\treturn createRpcSuccessResponse(id, \"new_session\", result);\n\t\t\t}\n\n\t\t\tcase \"get_state\": {\n\t\t\t\tconst extensionResult = session.resourceLoader.getExtensions();\n\t\t\t\tconst state: RpcSessionState = {\n\t\t\t\t\tmodel: session.model,\n\t\t\t\t\tmodelFallbackMessage: runtimeHost.modelFallbackMessage,\n\t\t\t\t\tmodelFallbackReason: runtimeHost.modelFallbackReason,\n\t\t\t\t\tthinkingLevel: session.thinkingLevel,\n\t\t\t\t\tisStreaming: session.isStreaming,\n\t\t\t\t\tisCompacting: session.isCompacting,\n\t\t\t\t\tcompactionReason: session.compactionReason,\n\t\t\t\t\tsteeringMode: session.steeringMode,\n\t\t\t\t\tfollowUpMode: session.followUpMode,\n\t\t\t\t\tsessionFile: session.sessionFile,\n\t\t\t\t\tsessionId: session.sessionId,\n\t\t\t\t\tsessionName: session.sessionName,\n\t\t\t\t\tautoCompactionEnabled: session.autoCompactionEnabled,\n\t\t\t\t\tmessageCount: session.messages.length,\n\t\t\t\t\tpendingMessageCount: session.pendingMessageCount,\n\t\t\t\t\tqueuedMessagesPaused: session.queuedMessagesPaused,\n\t\t\t\t\tprojectTrusted: session.settingsManager.isProjectTrusted?.() === true,\n\t\t\t\t\tresourceOverlaps: extensionResult.overlaps ?? [],\n\t\t\t\t\tresourceExtensions: extensionResult.extensions.map((extension) => ({\n\t\t\t\t\t\tpath: extension.path,\n\t\t\t\t\t\tsourceInfo: extension.sourceInfo,\n\t\t\t\t\t\thidden: extension.hidden === true,\n\t\t\t\t\t})),\n\t\t\t\t};\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_state\", state);\n\t\t\t}\n\t\t\tcase \"set_model\": {\n\t\t\t\tconst models = await session.modelRuntime.getAvailableSnapshot();\n\t\t\t\tconst model = models.find(\n\t\t\t\t\t(candidate) => candidate.provider === command.provider && candidate.id === command.modelId,\n\t\t\t\t);\n\t\t\t\tif (!model) {\n\t\t\t\t\treturn createRpcErrorResponse(\n\t\t\t\t\t\tid,\n\t\t\t\t\t\t\"set_model\",\n\t\t\t\t\t\t`Model not found: ${command.provider}/${command.modelId}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tawait session.setModel(model, command.persist === true ? { persist: true } : {});\n\t\t\t\truntimeHost.resolveModelFallback();\n\t\t\t\treturn createRpcSuccessResponse(id, \"set_model\", session.model ?? model);\n\t\t\t}\n\t\t\tcase \"cycle_model\": {\n\t\t\t\tconst previousModel = session.model;\n\t\t\t\tconst result = await session.cycleModel(\n\t\t\t\t\tcommand.direction,\n\t\t\t\t\tcommand.persist === true ? { persist: true } : {},\n\t\t\t\t);\n\t\t\t\truntimeHost.resolveModelFallbackAfterExplicitModelSelection(previousModel, result?.model);\n\t\t\t\treturn createRpcSuccessResponse(id, \"cycle_model\", result ?? null);\n\t\t\t}\n\t\t\tcase \"get_available_models\": {\n\t\t\t\tconst models = await session.modelRuntime.getAvailableSnapshot();\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_available_models\", {\n\t\t\t\t\tmodels,\n\t\t\t\t\tscopedModels: session.scopedModels,\n\t\t\t\t\tcustomAuthProviders: [],\n\t\t\t\t\toauthProviders: session.modelRuntime.getOAuthProviderMetadata(),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"login_provider\": {\n\t\t\t\tconst result =\n\t\t\t\t\tcommand.authType === \"oauth\"\n\t\t\t\t\t\t? await providerAuth.loginOAuth(session, command.provider, command.loginId)\n\t\t\t\t\t\t: await providerAuth.login(session, command.provider, command.loginId);\n\t\t\t\treturn createRpcSuccessResponse(id, \"login_provider\", result);\n\t\t\t}\n\n\t\t\tcase \"save_provider_credential\":\n\t\t\t\treturn createRpcSuccessResponse(\n\t\t\t\t\tid,\n\t\t\t\t\t\"save_provider_credential\",\n\t\t\t\t\tawait providerAuth.save(session, command.provider, command.credential),\n\t\t\t\t);\n\n\t\t\tcase \"cancel_login_provider\":\n\t\t\t\tproviderAuth.cancel(command.provider, command.loginId);\n\t\t\t\treturn createRpcSuccessResponse(id, \"cancel_login_provider\");\n\n\t\t\tcase \"logout_provider\": {\n\t\t\t\tconst result = await runtimeHost.logoutProvider(command.provider);\n\t\t\t\treturn createRpcSuccessResponse(id, \"logout_provider\", result);\n\t\t\t}\n\t\t\tcase \"refresh_models\": {\n\t\t\t\tconst controller = command.timeoutMs === undefined ? undefined : new AbortController();\n\t\t\t\tconst timedOut = Symbol(\"model refresh timed out\");\n\t\t\t\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\t\t\t\tconst timeoutResult =\n\t\t\t\t\tcontroller && command.timeoutMs !== undefined\n\t\t\t\t\t\t? new Promise<typeof timedOut>((resolve) => {\n\t\t\t\t\t\t\t\ttimeout = setTimeout(() => {\n\t\t\t\t\t\t\t\t\tcontroller.abort();\n\t\t\t\t\t\t\t\t\tresolve(timedOut);\n\t\t\t\t\t\t\t\t}, command.timeoutMs);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: undefined;\n\t\t\t\ttry {\n\t\t\t\t\tconst refresh = (async () => {\n\t\t\t\t\t\tawait session.modelRuntime.reloadCredentials({ refreshAvailability: false });\n\t\t\t\t\t\tif (controller?.signal.aborted) return { aborted: true, errors: new Map<string, Error>() };\n\t\t\t\t\t\treturn session.modelRuntime.refresh({\n\t\t\t\t\t\t\tallowNetwork: command.allowNetwork,\n\t\t\t\t\t\t\tforce: command.force,\n\t\t\t\t\t\t\tsignal: controller?.signal,\n\t\t\t\t\t\t});\n\t\t\t\t\t})();\n\t\t\t\t\tconst outcome = timeoutResult ? await Promise.race([refresh, timeoutResult]) : await refresh;\n\t\t\t\t\tconst result = outcome === timedOut ? { aborted: true, errors: new Map<string, Error>() } : outcome;\n\t\t\t\t\treturn createRpcSuccessResponse(id, \"refresh_models\", {\n\t\t\t\t\t\taborted: result.aborted,\n\t\t\t\t\t\terrors: [...result.errors].map(([provider, error]) => ({ provider, message: error.message })),\n\t\t\t\t\t\tmodels: session.modelRuntime.getAvailableSnapshot(),\n\t\t\t\t\t\tscopedModels: session.scopedModels,\n\t\t\t\t\t\tcustomAuthProviders: [],\n\t\t\t\t\t\toauthProviders: session.modelRuntime.getOAuthProviderMetadata(),\n\t\t\t\t\t});\n\t\t\t\t} finally {\n\t\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcase \"set_thinking_level\": {\n\t\t\t\tsession.setThinkingLevel(command.level, command.persist === true ? { persist: true } : {});\n\t\t\t\tconst model = session.model;\n\t\t\t\treturn createRpcSuccessResponse(id, \"set_thinking_level\", {\n\t\t\t\t\tlevel: session.thinkingLevel,\n\t\t\t\t\t...(model ? { provider: model.provider, modelId: model.id } : {}),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"cycle_thinking_level\": {\n\t\t\t\tconst level = session.cycleThinkingLevel();\n\t\t\t\treturn createRpcSuccessResponse(id, \"cycle_thinking_level\", level ? { level } : null);\n\t\t\t}\n\n\t\t\tcase \"get_available_thinking_levels\": {\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_available_thinking_levels\", {\n\t\t\t\t\tlevels: session.getAvailableThinkingLevels(),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"set_steering_mode\": {\n\t\t\t\tsession.setSteeringMode(command.mode);\n\t\t\t\treturn createRpcSuccessResponse(id, \"set_steering_mode\");\n\t\t\t}\n\n\t\t\tcase \"set_follow_up_mode\": {\n\t\t\t\tsession.setFollowUpMode(command.mode);\n\t\t\t\treturn createRpcSuccessResponse(id, \"set_follow_up_mode\");\n\t\t\t}\n\n\t\t\tcase \"compact\": {\n\t\t\t\tconst result = await session.compact();\n\t\t\t\treturn createRpcSuccessResponse(id, \"compact\", result);\n\t\t\t}\n\n\t\t\tcase \"set_auto_compaction\":\n\t\t\t\tsession.setAutoCompactionEnabled(command.enabled);\n\t\t\t\treturn createRpcSuccessResponse(id, \"set_auto_compaction\");\n\t\t\tcase \"abort_compaction\":\n\t\t\t\tsession.abortCompaction();\n\t\t\t\treturn createRpcSuccessResponse(id, \"abort_compaction\");\n\t\t\tcase \"set_auto_retry\":\n\t\t\t\tsession.setAutoRetryEnabled(command.enabled);\n\t\t\t\treturn createRpcSuccessResponse(id, \"set_auto_retry\");\n\t\t\tcase \"abort_retry\":\n\t\t\t\tsession.abortRetry();\n\t\t\t\treturn createRpcSuccessResponse(id, \"abort_retry\");\n\n\t\t\tcase \"clear_queue\": {\n\t\t\t\treturn createRpcSuccessResponse(id, \"clear_queue\", session.clearQueue());\n\t\t\t}\n\t\t\tcase \"pause_queued_messages\":\n\t\t\t\tsession.pauseQueuedMessages();\n\t\t\t\treturn createRpcSuccessResponse(id, \"pause_queued_messages\");\n\t\t\tcase \"resume_queued_messages\":\n\t\t\t\treturn createRpcSuccessResponse(id, \"resume_queued_messages\", {\n\t\t\t\t\treleased: await session.resumeQueuedMessages(),\n\t\t\t\t});\n\t\t\tcase \"bash\": {\n\t\t\t\tconst result = await bashOwners.run(\n\t\t\t\t\t{\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tsession,\n\t\t\t\t\t\tcommand: command.command,\n\t\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t\t\tisCurrent: () => getSession() === session,\n\t\t\t\t\t},\n\t\t\t\t\t// A `bash` command is still a user-initiated shell request, so it must\n\t\t\t\t\t// reach `user_bash` handlers (sandboxes, remote shells) exactly like the\n\t\t\t\t\t// `user_bash` command does. Ownership, streaming correlation, and result\n\t\t\t\t\t// recording stay with the owning request either way.\n\t\t\t\t\tasync (onUpdate) => {\n\t\t\t\t\t\tconst intercepted = await session.extensionRunner.emitUserBash({\n\t\t\t\t\t\t\ttype: \"user_bash\",\n\t\t\t\t\t\t\tcommand: command.command,\n\t\t\t\t\t\t\texcludeFromContext: command.excludeFromContext === true,\n\t\t\t\t\t\t\tcwd: session.sessionManager.getCwd(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (intercepted?.result) return intercepted.result;\n\t\t\t\t\t\treturn session.executeBash(command.command, onUpdate, {\n\t\t\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\toperations: intercepted?.operations,\n\t\t\t\t\t\t\temitEvent: false,\n\t\t\t\t\t\t\trecordResult: false,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\treturn createRpcSuccessResponse(id, \"bash\", result);\n\t\t\t}\n\t\t\tcase \"user_bash\": {\n\t\t\t\tconst result = await bashOwners.run(\n\t\t\t\t\t{\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tsession,\n\t\t\t\t\t\tcommand: command.command,\n\t\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t\t\tisCurrent: () => getSession() === session,\n\t\t\t\t\t},\n\t\t\t\t\tasync (onUpdate) => {\n\t\t\t\t\t\tconst intercepted = await session.extensionRunner.emitUserBash({\n\t\t\t\t\t\t\ttype: \"user_bash\",\n\t\t\t\t\t\t\tcommand: command.command,\n\t\t\t\t\t\t\texcludeFromContext: command.excludeFromContext === true,\n\t\t\t\t\t\t\tcwd: session.sessionManager.getCwd(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (intercepted?.result) return intercepted.result;\n\t\t\t\t\t\treturn session.executeBash(command.command, onUpdate, {\n\t\t\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\toperations: intercepted?.operations,\n\t\t\t\t\t\t\temitEvent: false,\n\t\t\t\t\t\t\trecordResult: false,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\treturn createRpcSuccessResponse(id, \"user_bash\", result);\n\t\t\t}\n\t\t\tcase \"abort_bash\":\n\t\t\t\tbashOwners.abort(command.requestId);\n\t\t\t\tsession.abortBash(command.requestId);\n\t\t\t\treturn createRpcSuccessResponse(id, \"abort_bash\");\n\n\t\t\tcase \"get_session_stats\": {\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_session_stats\", session.getSessionStats());\n\t\t\t}\n\n\t\t\tcase \"export_html\": {\n\t\t\t\tconst path = await session.exportToHtml(command.outputPath);\n\t\t\t\treturn createRpcSuccessResponse(id, \"export_html\", { path });\n\t\t\t}\n\n\t\t\tcase \"switch_session\": {\n\t\t\t\tconst result = await runtimeHost.switchSession(command.sessionPath, { cwdOverride: command.cwdOverride });\n\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\tawait rebindSession();\n\t\t\t\t}\n\t\t\t\treturn createRpcSuccessResponse(id, \"switch_session\", result);\n\t\t\t}\n\n\t\t\tcase \"import_session\": {\n\t\t\t\tconst result = await runtimeHost.importFromJsonl(command.inputPath, command.cwdOverride);\n\t\t\t\tif (!result.cancelled) await rebindSession();\n\t\t\t\treturn createRpcSuccessResponse(id, \"import_session\", result);\n\t\t\t}\n\n\t\t\tcase \"fork\": {\n\t\t\t\tconst result = await runtimeHost.fork(command.entryId);\n\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\tawait rebindSession();\n\t\t\t\t}\n\t\t\t\treturn createRpcSuccessResponse(id, \"fork\", { text: result.selectedText, cancelled: result.cancelled });\n\t\t\t}\n\n\t\t\tcase \"clone\": {\n\t\t\t\tconst leafId = session.sessionManager.getLeafId();\n\t\t\t\tif (!leafId) {\n\t\t\t\t\treturn createRpcErrorResponse(id, \"clone\", \"Cannot clone session: no current entry selected\");\n\t\t\t\t}\n\t\t\t\tconst result = await runtimeHost.fork(leafId, { position: \"at\" });\n\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\tawait rebindSession();\n\t\t\t\t}\n\t\t\t\treturn createRpcSuccessResponse(id, \"clone\", { cancelled: result.cancelled });\n\t\t\t}\n\n\t\t\tcase \"get_fork_messages\": {\n\t\t\t\tconst messages = session.getUserMessagesForForking();\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_fork_messages\", { messages });\n\t\t\t}\n\n\t\t\tcase \"get_entries\": {\n\t\t\t\tconst sessionManager = session.sessionManager;\n\t\t\t\tlet entries = sessionManager.getEntries();\n\t\t\t\tif (command.since !== undefined) {\n\t\t\t\t\tconst sinceIndex = entries.findIndex((e) => e.id === command.since);\n\t\t\t\t\tif (sinceIndex === -1) {\n\t\t\t\t\t\treturn createRpcErrorResponse(id, \"get_entries\", `Entry not found: ${command.since}`);\n\t\t\t\t\t}\n\t\t\t\t\tentries = entries.slice(sinceIndex + 1);\n\t\t\t\t}\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_entries\", { entries, leafId: sessionManager.getLeafId() });\n\t\t\t}\n\n\t\t\tcase \"get_tree\": {\n\t\t\t\tconst sessionManager = session.sessionManager;\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_tree\", {\n\t\t\t\t\ttree: sessionManager.getTree(),\n\t\t\t\t\tleafId: sessionManager.getLeafId(),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"get_last_assistant_text\": {\n\t\t\t\tconst text = session.getLastAssistantText();\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_last_assistant_text\", { text });\n\t\t\t}\n\n\t\t\tcase \"set_session_name\": {\n\t\t\t\tconst name = command.name.trim();\n\t\t\t\tif (!name) {\n\t\t\t\t\treturn createRpcErrorResponse(id, \"set_session_name\", \"Session name cannot be empty\");\n\t\t\t\t}\n\t\t\t\tsession.setSessionName(name);\n\t\t\t\treturn createRpcSuccessResponse(id, \"set_session_name\");\n\t\t\t}\n\n\t\t\tcase \"navigate_tree\": {\n\t\t\t\tconst result = await session.navigateTree(command.targetId, command.options);\n\t\t\t\treturn createRpcSuccessResponse(id, \"navigate_tree\", {\n\t\t\t\t\tcancelled: result.cancelled,\n\t\t\t\t\teditorText: result.editorText,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"set_label\": {\n\t\t\t\tsession.sessionManager.appendLabelChange(command.entryId, command.label);\n\t\t\t\treturn createRpcSuccessResponse(id, \"set_label\");\n\t\t\t}\n\n\t\t\tcase \"reload\": {\n\t\t\t\tif (retryFailedResources && reloadResources) await reloadResources();\n\t\t\t\telse if (reloadCoordinator) await reloadCoordinator.reload(session);\n\t\t\t\telse await session.reload();\n\t\t\t\treturn createRpcSuccessResponse(id, \"reload\");\n\t\t\t}\n\n\t\t\tcase \"get_shortcuts\": {\n\t\t\t\tconst effectiveBindings = getShortcutBindings();\n\t\t\t\tconst shortcuts = session.extensionRunner.getShortcuts(effectiveBindings);\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_shortcuts\", {\n\t\t\t\t\tshortcuts: [...shortcuts].map(([key, shortcut]) => ({ key, description: shortcut.description })),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcase \"invoke_shortcut\": {\n\t\t\t\tconst shortcut = session.extensionRunner.getShortcuts(getShortcutBindings()).get(command.key as KeyId);\n\t\t\t\tif (!shortcut) return createRpcErrorResponse(id, \"invoke_shortcut\", `Shortcut not found: ${command.key}`);\n\t\t\t\tawait runCallback(\n\t\t\t\t\t{ kind: \"extension.hook\", name: `shortcut:${command.key}`, sourcePath: shortcut.extensionPath },\n\t\t\t\t\t() => shortcut.handler(session.extensionRunner.createContext()),\n\t\t\t\t);\n\t\t\t\treturn createRpcSuccessResponse(id, \"invoke_shortcut\");\n\t\t\t}\n\n\t\t\tcase \"get_messages\": {\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_messages\", { messages: session.messages });\n\t\t\t}\n\n\t\t\tcase \"get_command_completions\": {\n\t\t\t\tconst registeredCommand = session.extensionRunner\n\t\t\t\t\t.getRegisteredCommands()\n\t\t\t\t\t.find((candidate) => candidate.invocationName === command.commandName);\n\t\t\t\tconst getArgumentCompletions = registeredCommand?.getArgumentCompletions;\n\t\t\t\tif (registeredCommand === undefined || getArgumentCompletions === undefined) {\n\t\t\t\t\treturn createRpcSuccessResponse(id, \"get_command_completions\", { completions: null });\n\t\t\t\t}\n\t\t\t\tconst completions = await runCallback(\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: \"extension.hook\",\n\t\t\t\t\t\tname: `command-completions:${command.commandName}`,\n\t\t\t\t\t\tsourcePath: registeredCommand.sourceInfo.path,\n\t\t\t\t\t},\n\t\t\t\t\t() => getArgumentCompletions(command.argumentPrefix),\n\t\t\t\t);\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_command_completions\", { completions });\n\t\t\t}\n\n\t\t\tcase \"get_commands\": {\n\t\t\t\tconst commands: RpcSlashCommand[] = [];\n\n\t\t\t\tfor (const registeredCommand of session.extensionRunner.getRegisteredCommands()) {\n\t\t\t\t\tcommands.push({\n\t\t\t\t\t\tname: registeredCommand.invocationName,\n\t\t\t\t\t\tdescription: registeredCommand.description,\n\t\t\t\t\t\t...(registeredCommand.getArgumentCompletions !== undefined ? { hasArgumentCompletions: true } : {}),\n\t\t\t\t\t\tsource: \"extension\",\n\t\t\t\t\t\tsourceInfo: registeredCommand.sourceInfo,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfor (const template of session.promptTemplates) {\n\t\t\t\t\tcommands.push({\n\t\t\t\t\t\tname: template.name,\n\t\t\t\t\t\tdescription: template.description,\n\t\t\t\t\t\tsource: \"prompt\",\n\t\t\t\t\t\tsourceInfo: template.sourceInfo,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfor (const skillCommand of getSkillCatalog(session.resourceLoader).commands) {\n\t\t\t\t\tcommands.push({\n\t\t\t\t\t\tname: `skill:${skillCommand.name}`,\n\t\t\t\t\t\tdescription: skillCommand.description,\n\t\t\t\t\t\tsource: \"skill\",\n\t\t\t\t\t\tsourceInfo: skillCommand.sourceInfo,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn createRpcSuccessResponse(id, \"get_commands\", { commands });\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconst unknownCommand = command as { type: string };\n\t\t\t\treturn createRpcErrorResponse(id, unknownCommand.type, `Unknown command: ${unknownCommand.type}`);\n\t\t\t}\n\t\t}\n\t}) as ManagedRpcCommandHandler;\n\thandleCommand.disposeActiveBash = () => bashOwners.dispose();\n\treturn handleCommand;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ExtensionUIContext } from "../../core/extensions/index.
|
|
1
|
+
import type { ExtensionUIContext } from "../../core/extensions/index.js";
|
|
2
2
|
import type { FooterDataProvider } from "../../core/footer-data-provider.ts";
|
|
3
3
|
import type { EngineCustomUiService } from "../interactive-engine/engine-custom-ui.ts";
|
|
4
4
|
import type { EngineInputFormService } from "../interactive-engine/engine-input-form.ts";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-extension-ui.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-extension-ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAWtC,OAAO,EAAc,KAAK,EAAE,MAAM,+BAA+B,CAAC;AA8BlE,SAAS,mBAAmB,CAAI,EAC/B,MAAM,EACN,wBAAwB,EACxB,aAAa,EACb,YAAY,EACZ,OAAO,EACP,aAAa,GACY;IACzB,IAAI,aAAa,EAAE,MAAM,EAAE,OAAO;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzE,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,IAAI,SAAoD,CAAC;QAEzD,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,IAAI,SAAS;gBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;YACvC,aAAa,EAAE,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7D,wBAAwB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,YAAY,CAAC,CAAC;QACvB,CAAC,CAAC;QACF,aAAa,EAAE,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1E,IAAI,aAAa,EAAE,OAAO,EAAE,CAAC;YAC5B,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC3B,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,YAAY,CAAC,CAAC;YACvB,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAED,wBAAwB,CAAC,GAAG,CAAC,EAAE,EAAE;YAChC,OAAO,EAAE,CAAC,QAAgC,EAAE,EAAE;gBAC7C,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClC,CAAC;YACD,MAAM;SACN,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,EAAE,EAAE,GAAG,OAAO,EAA2B,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAiB,EAAE,OAAgC;IAClF,MAAM,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,EAA2B,CAAC,CAAC;AACxG,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,EAC3C,MAAM,EACN,wBAAwB,EACxB,QAAQ,EACR,aAAa,EACb,SAAS,EACT,kBAAkB,GACkB;IACpC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9C,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,MAAM,eAAe,GAAG,CAAC,MAAc,EAAQ,EAAE;QAChD,IAAI,CAAC,QAAQ,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO;QACzD,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChC,sBAAsB,CAAC,MAAM,EAAE;YAC9B,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,GAAG,MAAM,8FAA8F;YAChH,UAAU,EAAE,SAAS;SACrB,CAAC,CAAC;IACJ,CAAC,CAAC;IACF,OAAO;QACN,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAChC,mBAAmB,CAAC;YACnB,MAAM;YACN,wBAAwB;YACxB,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE,SAAS;YACvB,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;YACrE,aAAa,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC3B,WAAW,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS;gBAC5C,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,OAAO,IAAI,QAAQ;oBACpB,CAAC,CAAC,QAAQ,CAAC,KAAK;oBAChB,CAAC,CAAC,SAAS;SACd,CAAC;QAEH,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CACjC,mBAAmB,CAAC;YACnB,MAAM;YACN,wBAAwB;YACxB,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE,KAAK;YACnB,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;YACtE,aAAa,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC3B,WAAW,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS;gBAC5C,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,WAAW,IAAI,QAAQ;oBACxB,CAAC,CAAC,QAAQ,CAAC,SAAS;oBACpB,CAAC,CAAC,KAAK;SACV,CAAC;QAEH,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CACnC,mBAAmB,CAAC;YACnB,MAAM;YACN,wBAAwB;YACxB,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE,SAAS;YACvB,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;YACxE,aAAa,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC3B,WAAW,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS;gBAC5C,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,OAAO,IAAI,QAAQ;oBACpB,CAAC,CAAC,QAAQ,CAAC,KAAK;oBAChB,CAAC,CAAC,SAAS;SACd,CAAC;QAEH,MAAM,CAAC,OAAe,EAAE,IAAmC;YAC1D,sBAAsB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QACjF,CAAC;QAED,aAAa;YACZ,QAAQ,EAAE,aAAa,EAAE,CAAC;QAC3B,CAAC;QAED,oBAAoB,EAAE,GAAG,EAAE,CAC1B,QAAQ,EAAE,oBAAoB,EAAE,IAAI;YACnC,2BAA2B,EAAE,CAAC;YAC9B,4BAA4B,EAAE,KAAK;SACnC;QACF,yBAAyB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,yBAAyB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;QACpG,eAAe,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;QAC1F,uBAAuB,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,uBAAuB,EAAE,IAAI,KAAK;QAE3E,eAAe;YACd,eAAe,CAAC,wBAAwB,CAAC,CAAC;YAC1C,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QACjB,CAAC;QAED,SAAS,CAAC,GAAW,EAAE,IAAwB;YAC9C,kBAAkB,EAAE,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAClD,qEAAqE;YACrE,qEAAqE;YACrE,qEAAqE;YACrE,QAAQ,EAAE,aAAa,EAAE,CAAC;YAC1B,sBAAsB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3F,CAAC;QAED,iBAAiB,CAAC,QAAiB;YAClC,yEAAyE;QAC1E,CAAC;QAED,iBAAiB,CAAC,QAAiB;YAClC,4EAA4E;QAC7E,CAAC;QAED,mBAAmB,CAAC,QAAkC;YACrD,yFAAyF;QAC1F,CAAC;QAED,sBAAsB,CAAC,MAAe;YACrC,0FAA0F;QAC3F,CAAC;QAED,SAAS,CAAC,GAAW,EAAE,OAAgB,EAAE,OAAgC;YACxE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC3B,QAAQ,EAAE,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;gBACxD,sBAAsB,CAAC,MAAM,EAAE;oBAC9B,MAAM,EAAE,WAAW;oBACnB,SAAS,EAAE,GAAG;oBACd,WAAW,EAAE,SAAS;oBACtB,eAAe,EAAE,OAAO,EAAE,SAAS;iBACnC,CAAC,CAAC;gBACH,OAAO;YACR,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,sBAAsB,CAAC,MAAM,EAAE;oBAC9B,MAAM,EAAE,WAAW;oBACnB,SAAS,EAAE,GAAG;oBACd,WAAW,EAAE,OAAmB;oBAChC,eAAe,EAAE,OAAO,EAAE,SAAS;iBACnC,CAAC,CAAC;gBACH,OAAO;YACR,CAAC;YACD,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;gBACnC,IAAI,CAAC,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;gBAC9F,QAAQ,CAAC,SAAS,CACjB,GAAG,EACH,OAAuE,EACvE,OAAO,EAAE,SAAS,CAClB,CAAC;gBACF,OAAO;YACR,CAAC;YACD,eAAe,CAAC,2BAA2B,CAAC,CAAC;QAC9C,CAAC;QAED,SAAS;YACR,eAAe,CAAC,kBAAkB,CAAC,CAAC;QACrC,CAAC;QAED,SAAS;YACR,eAAe,CAAC,kBAAkB,CAAC,CAAC;QACrC,CAAC;QAED,QAAQ,CAAC,KAAa;YACrB,sBAAsB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAC5B,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAkB,CAAC;QAEnF,uEAAuE;QACvE,wEAAwE;QACxE,qEAAqE;QACrE,kEAAkE;QAClE,GAAG,CAAC,aAAa;YAChB,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,OAAiC,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC3F,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,OAA6B,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAEnG,aAAa,CAAC,IAAY;YACzB,yEAAyE;YACzE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,aAAa,CAAC,IAAY;YACzB,sBAAsB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,aAAa;YACZ,eAAe,CAAC,sBAAsB,CAAC,CAAC;YACxC,OAAO,EAAE,CAAC;QACX,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,OAAgB;YAC3C,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACtC,wBAAwB,CAAC,GAAG,CAAC,EAAE,EAAE;oBAChC,OAAO,EAAE,CAAC,QAAgC,EAAE,EAAE;wBAC7C,IAAI,WAAW,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;4BACnD,OAAO,CAAC,SAAS,CAAC,CAAC;wBACpB,CAAC;6BAAM,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;4BAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBACzB,CAAC;6BAAM,CAAC;4BACP,OAAO,CAAC,SAAS,CAAC,CAAC;wBACpB,CAAC;oBACF,CAAC;oBACD,MAAM;iBACN,CAAC,CAAC;gBACH,MAAM,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAA2B,CAAC,CAAC;YACzG,CAAC,CAAC,CAAC;QACJ,CAAC;QAED,uBAAuB;YACtB,eAAe,CAAC,gCAAgC,CAAC,CAAC;QACnD,CAAC;QAED,kBAAkB;YACjB,eAAe,CAAC,2BAA2B,CAAC,CAAC;QAC9C,CAAC;QAED,kBAAkB;YACjB,qDAAqD;YACrD,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,qBAAqB;YACpB,OAAO,CACN,kBAAkB,IAAI;gBACrB,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI;gBACxB,oBAAoB,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE;gBACrC,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC;gBAClC,cAAc,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC;aAC9B,CACD,CAAC;QACH,CAAC;QAED,IAAI,KAAK;YACR,OAAO,KAAK,CAAC;QACd,CAAC;QAED,YAAY;YACX,OAAO,EAAE,CAAC;QACX,CAAC;QAED,QAAQ,CAAC,KAAa;YACrB,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,QAAQ,CAAC,MAAsB;YAC9B,4CAA4C;YAC5C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,2CAA2C,EAAE,CAAC;QAC/E,CAAC;QAED,gBAAgB;YACf,OAAO,aAAa,CAAC;QACtB,CAAC;QAED,gBAAgB,CAAC,QAAiB;YACjC,IAAI,QAAQ,KAAK,aAAa;gBAAE,OAAO;YACvC,aAAa,GAAG,QAAQ,CAAC;YACzB,QAAQ,EAAE,aAAa,EAAE,CAAC;QAC3B,CAAC;QAED,qBAAqB;YACpB,OAAO;gBACN,iBAAiB,EAAE,KAAK;gBACxB,mBAAmB,EAAE,aAAa;gBAClC,kBAAkB,EAAE,aAAa;gBACjC,UAAU,EAAE,KAAK;gBACjB,eAAe,EAAE,EAAE;gBACnB,oBAAoB,EAAE,EAAE;gBACxB,iBAAiB,EAAE,GAAG,EAAE,CAAC,SAAS;gBAClC,wBAAwB,EAAE,GAAG,EAAE,CAAC,SAAS;aACzC,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC","sourcesContent":["import * as crypto from \"node:crypto\";\nimport type { Component, TUI } from \"@earendil-works/pi-tui\";\nimport type {\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tHostInputFormRequest,\n\tHostSessionPickerRequest,\n\tWorkingIndicatorOptions,\n} from \"../../core/extensions/index.ts\";\nimport type { FooterDataProvider } from \"../../core/footer-data-provider.ts\";\nimport { type Theme, theme } from \"../interactive/theme/theme.ts\";\nimport type { EngineCustomUiService } from \"../interactive-engine/engine-custom-ui.ts\";\nimport type { EngineInputFormService } from \"../interactive-engine/engine-input-form.ts\";\nimport type { EngineSessionPickerService } from \"../interactive-engine/engine-session-picker.ts\";\nimport type { RpcOutput } from \"./rpc-responses.ts\";\nimport type { RpcExtensionUIRequest, RpcExtensionUIResponse } from \"./rpc-types.ts\";\n\nexport interface RpcPendingExtensionRequest {\n\tresolve: (value: RpcExtensionUIResponse) => void;\n\treject: (error: Error) => void;\n}\n\nexport type RpcPendingExtensionRequests = Map<string, RpcPendingExtensionRequest>;\n\ninterface CreateRpcExtensionUIContextOptions {\n\toutput: RpcOutput;\n\tpendingExtensionRequests: RpcPendingExtensionRequests;\n\tcustomUi?: EngineCustomUiService;\n\tsessionPicker?: EngineSessionPickerService;\n\tinputForm?: EngineInputFormService;\n\tfooterDataProvider?: FooterDataProvider;\n}\n\ninterface DialogPromiseOptions<T> extends CreateRpcExtensionUIContextOptions {\n\tdialogOptions: ExtensionUIDialogOptions | undefined;\n\tdefaultValue: T;\n\trequest: Record<string, unknown>;\n\tparseResponse: (response: RpcExtensionUIResponse) => T;\n}\n\nfunction createDialogPromise<T>({\n\toutput,\n\tpendingExtensionRequests,\n\tdialogOptions,\n\tdefaultValue,\n\trequest,\n\tparseResponse,\n}: DialogPromiseOptions<T>): Promise<T> {\n\tif (dialogOptions?.signal?.aborted) return Promise.resolve(defaultValue);\n\n\tconst id = crypto.randomUUID();\n\treturn new Promise((resolve, reject) => {\n\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n\t\tconst cleanup = () => {\n\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\tdialogOptions?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\tpendingExtensionRequests.delete(id);\n\t\t};\n\n\t\tconst onAbort = () => {\n\t\t\tcleanup();\n\t\t\tresolve(defaultValue);\n\t\t};\n\t\tdialogOptions?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\tif (dialogOptions?.timeout) {\n\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\tcleanup();\n\t\t\t\tresolve(defaultValue);\n\t\t\t}, dialogOptions.timeout);\n\t\t}\n\n\t\tpendingExtensionRequests.set(id, {\n\t\t\tresolve: (response: RpcExtensionUIResponse) => {\n\t\t\t\tcleanup();\n\t\t\t\tresolve(parseResponse(response));\n\t\t\t},\n\t\t\treject,\n\t\t});\n\t\toutput({ type: \"extension_ui_request\", id, ...request } as RpcExtensionUIRequest);\n\t});\n}\n\nfunction emitExtensionUIRequest(output: RpcOutput, request: Record<string, unknown>): void {\n\toutput({ type: \"extension_ui_request\", id: crypto.randomUUID(), ...request } as RpcExtensionUIRequest);\n}\n\nexport function createRpcExtensionUIContext({\n\toutput,\n\tpendingExtensionRequests,\n\tcustomUi,\n\tsessionPicker,\n\tinputForm,\n\tfooterDataProvider,\n}: CreateRpcExtensionUIContextOptions): ExtensionUIContext {\n\tconst unsupportedWarnings = new Set<string>();\n\tlet toolsExpanded = false;\n\tconst warnUnsupported = (method: string): void => {\n\t\tif (!customUi || unsupportedWarnings.has(method)) return;\n\t\tunsupportedWarnings.add(method);\n\t\temitExtensionUIRequest(output, {\n\t\t\tmethod: \"notify\",\n\t\t\tmessage: `${method} is unavailable in isolated interactive mode because it requires a synchronous host callback`,\n\t\t\tnotifyType: \"warning\",\n\t\t});\n\t};\n\treturn {\n\t\tselect: (title, options, opts) =>\n\t\t\tcreateDialogPromise({\n\t\t\t\toutput,\n\t\t\t\tpendingExtensionRequests,\n\t\t\t\tdialogOptions: opts,\n\t\t\t\tdefaultValue: undefined,\n\t\t\t\trequest: { method: \"select\", title, options, timeout: opts?.timeout },\n\t\t\t\tparseResponse: (response) =>\n\t\t\t\t\t\"cancelled\" in response && response.cancelled\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: \"value\" in response\n\t\t\t\t\t\t\t? response.value\n\t\t\t\t\t\t\t: undefined,\n\t\t\t}),\n\n\t\tconfirm: (title, message, opts) =>\n\t\t\tcreateDialogPromise({\n\t\t\t\toutput,\n\t\t\t\tpendingExtensionRequests,\n\t\t\t\tdialogOptions: opts,\n\t\t\t\tdefaultValue: false,\n\t\t\t\trequest: { method: \"confirm\", title, message, timeout: opts?.timeout },\n\t\t\t\tparseResponse: (response) =>\n\t\t\t\t\t\"cancelled\" in response && response.cancelled\n\t\t\t\t\t\t? false\n\t\t\t\t\t\t: \"confirmed\" in response\n\t\t\t\t\t\t\t? response.confirmed\n\t\t\t\t\t\t\t: false,\n\t\t\t}),\n\n\t\tinput: (title, placeholder, opts) =>\n\t\t\tcreateDialogPromise({\n\t\t\t\toutput,\n\t\t\t\tpendingExtensionRequests,\n\t\t\t\tdialogOptions: opts,\n\t\t\t\tdefaultValue: undefined,\n\t\t\t\trequest: { method: \"input\", title, placeholder, timeout: opts?.timeout },\n\t\t\t\tparseResponse: (response) =>\n\t\t\t\t\t\"cancelled\" in response && response.cancelled\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: \"value\" in response\n\t\t\t\t\t\t\t? response.value\n\t\t\t\t\t\t\t: undefined,\n\t\t\t}),\n\n\t\tnotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void {\n\t\t\temitExtensionUIRequest(output, { method: \"notify\", message, notifyType: type });\n\t\t},\n\n\t\trequestRender(): void {\n\t\t\tcustomUi?.requestRender();\n\t\t},\n\n\t\tgetHostCustomUiState: () =>\n\t\t\tcustomUi?.getHostCustomUiState() ?? {\n\t\t\t\tblockingInlineCustomUiDepth: 0,\n\t\t\t\tblockingInlineCustomUiActive: false,\n\t\t\t},\n\t\tonHostCustomUiStateChange: (listener) => customUi?.onHostCustomUiStateChange(listener) ?? (() => {}),\n\t\tonWidgetRelease: (key, listener) => customUi?.onWidgetRelease(key, listener) ?? (() => {}),\n\t\tfocusHostInlineCustomUi: () => customUi?.focusHostInlineCustomUi() ?? false,\n\n\t\tonTerminalInput(): () => void {\n\t\t\twarnUnsupported(\"ctx.ui.onTerminalInput\");\n\t\t\treturn () => {};\n\t\t},\n\n\t\tsetStatus(key: string, text: string | undefined): void {\n\t\t\tfooterDataProvider?.setExtensionStatus(key, text);\n\t\t\t// Isolated custom UI components (e.g. an attached stage-chat footer)\n\t\t\t// re-render only after an engine_custom_invalidate; without this the\n\t\t\t// mirrored status text goes stale until an unrelated repaint occurs.\n\t\t\tcustomUi?.requestRender();\n\t\t\temitExtensionUIRequest(output, { method: \"setStatus\", statusKey: key, statusText: text });\n\t\t},\n\n\t\tsetWorkingMessage(_message?: string): void {\n\t\t\t// Working message not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetWorkingVisible(_visible: boolean): void {\n\t\t\t// Working visibility not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetWorkingIndicator(_options?: WorkingIndicatorOptions): void {\n\t\t\t// Working indicator customization not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetHiddenThinkingLabel(_label?: string): void {\n\t\t\t// Hidden thinking label not supported in RPC mode - requires TUI message rendering access\n\t\t},\n\n\t\tsetWidget(key: string, content: unknown, options?: ExtensionWidgetOptions): void {\n\t\t\tif (content === undefined) {\n\t\t\t\tcustomUi?.setWidget(key, undefined, options?.placement);\n\t\t\t\temitExtensionUIRequest(output, {\n\t\t\t\t\tmethod: \"setWidget\",\n\t\t\t\t\twidgetKey: key,\n\t\t\t\t\twidgetLines: undefined,\n\t\t\t\t\twidgetPlacement: options?.placement,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (Array.isArray(content)) {\n\t\t\t\temitExtensionUIRequest(output, {\n\t\t\t\t\tmethod: \"setWidget\",\n\t\t\t\t\twidgetKey: key,\n\t\t\t\t\twidgetLines: content as string[],\n\t\t\t\t\twidgetPlacement: options?.placement,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (typeof content === \"function\") {\n\t\t\t\tif (!customUi) throw new Error(\"Component-factory widgets are unavailable in this RPC host.\");\n\t\t\t\tcustomUi.setWidget(\n\t\t\t\t\tkey,\n\t\t\t\t\tcontent as (tui: TUI, theme: Theme) => Component & { dispose?(): void },\n\t\t\t\t\toptions?.placement,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\twarnUnsupported(\"component-factory widgets\");\n\t\t},\n\n\t\tsetFooter(): void {\n\t\t\twarnUnsupported(\"ctx.ui.setFooter\");\n\t\t},\n\n\t\tsetHeader(): void {\n\t\t\twarnUnsupported(\"ctx.ui.setHeader\");\n\t\t},\n\n\t\tsetTitle(title: string): void {\n\t\t\temitExtensionUIRequest(output, { method: \"setTitle\", title });\n\t\t},\n\n\t\tcustom: (factory, options) =>\n\t\t\tcustomUi ? customUi.custom(factory, options) : Promise.resolve(undefined as never),\n\n\t\t// Exposed in the isolated engine child, where the terminal host mounts\n\t\t// the real session selector natively so picker navigation never crosses\n\t\t// the process boundary. Absent in plain headless RPC (no interactive\n\t\t// host); callers must fail with an actionable error, not degrade.\n\t\t...(sessionPicker\n\t\t\t? { hostSessionPicker: (request: HostSessionPickerRequest) => sessionPicker.open(request) }\n\t\t\t: {}),\n\t\t...(inputForm ? { hostInputForm: (request: HostInputFormRequest) => inputForm.open(request) } : {}),\n\n\t\tpasteToEditor(text: string): void {\n\t\t\t// Paste handling not supported in RPC mode - falls back to setEditorText\n\t\t\tthis.setEditorText(text);\n\t\t},\n\n\t\tsetEditorText(text: string): void {\n\t\t\temitExtensionUIRequest(output, { method: \"set_editor_text\", text });\n\t\t},\n\n\t\tgetEditorText(): string {\n\t\t\twarnUnsupported(\"ctx.ui.getEditorText\");\n\t\t\treturn \"\";\n\t\t},\n\n\t\tasync editor(title: string, prefill?: string): Promise<string | undefined> {\n\t\t\tconst id = crypto.randomUUID();\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tpendingExtensionRequests.set(id, {\n\t\t\t\t\tresolve: (response: RpcExtensionUIResponse) => {\n\t\t\t\t\t\tif (\"cancelled\" in response && response.cancelled) {\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t} else if (\"value\" in response) {\n\t\t\t\t\t\t\tresolve(response.value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\treject,\n\t\t\t\t});\n\t\t\t\toutput({ type: \"extension_ui_request\", id, method: \"editor\", title, prefill } as RpcExtensionUIRequest);\n\t\t\t});\n\t\t},\n\n\t\taddAutocompleteProvider(): void {\n\t\t\twarnUnsupported(\"ctx.ui.addAutocompleteProvider\");\n\t\t},\n\n\t\tsetEditorComponent(): void {\n\t\t\twarnUnsupported(\"ctx.ui.setEditorComponent\");\n\t\t},\n\n\t\tgetEditorComponent() {\n\t\t\t// Custom editor components not supported in RPC mode\n\t\t\treturn undefined;\n\t\t},\n\n\t\tgetFooterDataProvider() {\n\t\t\treturn (\n\t\t\t\tfooterDataProvider ?? {\n\t\t\t\t\tgetGitBranch: () => null,\n\t\t\t\t\tgetExtensionStatuses: () => new Map(),\n\t\t\t\t\tgetAvailableProviderCount: () => 1,\n\t\t\t\t\tonBranchChange: () => () => {},\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\n\t\tget theme() {\n\t\t\treturn theme;\n\t\t},\n\n\t\tgetAllThemes() {\n\t\t\treturn [];\n\t\t},\n\n\t\tgetTheme(_name: string) {\n\t\t\treturn undefined;\n\t\t},\n\n\t\tsetTheme(_theme: string | Theme) {\n\t\t\t// Theme switching not supported in RPC mode\n\t\t\treturn { success: false, error: \"Theme switching not supported in RPC mode\" };\n\t\t},\n\n\t\tgetToolsExpanded() {\n\t\t\treturn toolsExpanded;\n\t\t},\n\n\t\tsetToolsExpanded(expanded: boolean) {\n\t\t\tif (expanded === toolsExpanded) return;\n\t\t\ttoolsExpanded = expanded;\n\t\t\tcustomUi?.requestRender();\n\t\t},\n\n\t\tgetChatRenderSettings() {\n\t\t\treturn {\n\t\t\t\thideThinkingBlock: false,\n\t\t\t\thiddenThinkingLabel: \"Thinking...\",\n\t\t\t\ttoolOutputExpanded: toolsExpanded,\n\t\t\t\tshowImages: false,\n\t\t\t\timageWidthCells: 60,\n\t\t\t\tmarkdownTransformers: [],\n\t\t\t\tgetToolDefinition: () => undefined,\n\t\t\t\tgetCustomMessageRenderer: () => undefined,\n\t\t\t};\n\t\t},\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"rpc-extension-ui.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-extension-ui.ts"],"names":[],"mappings":"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","sourcesContent":["import * as crypto from \"node:crypto\";\nimport type { Component, TUI } from \"@earendil-works/pi-tui\";\nimport type {\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tHostInputFormRequest,\n\tHostSessionPickerRequest,\n\tWorkingIndicatorOptions,\n} from \"../../core/extensions/index.js\";\nimport type { FooterDataProvider } from \"../../core/footer-data-provider.ts\";\nimport { type Theme, theme } from \"../interactive/theme/theme.js\";\nimport type { EngineCustomUiService } from \"../interactive-engine/engine-custom-ui.ts\";\nimport type { EngineInputFormService } from \"../interactive-engine/engine-input-form.ts\";\nimport type { EngineSessionPickerService } from \"../interactive-engine/engine-session-picker.ts\";\nimport type { RpcOutput } from \"./rpc-responses.ts\";\nimport type { RpcExtensionUIRequest, RpcExtensionUIResponse } from \"./rpc-types.ts\";\n\nexport interface RpcPendingExtensionRequest {\n\tresolve: (value: RpcExtensionUIResponse) => void;\n\treject: (error: Error) => void;\n}\n\nexport type RpcPendingExtensionRequests = Map<string, RpcPendingExtensionRequest>;\n\ninterface CreateRpcExtensionUIContextOptions {\n\toutput: RpcOutput;\n\tpendingExtensionRequests: RpcPendingExtensionRequests;\n\tcustomUi?: EngineCustomUiService;\n\tsessionPicker?: EngineSessionPickerService;\n\tinputForm?: EngineInputFormService;\n\tfooterDataProvider?: FooterDataProvider;\n}\n\ninterface DialogPromiseOptions<T> extends CreateRpcExtensionUIContextOptions {\n\tdialogOptions: ExtensionUIDialogOptions | undefined;\n\tdefaultValue: T;\n\trequest: Record<string, unknown>;\n\tparseResponse: (response: RpcExtensionUIResponse) => T;\n}\n\nfunction createDialogPromise<T>({\n\toutput,\n\tpendingExtensionRequests,\n\tdialogOptions,\n\tdefaultValue,\n\trequest,\n\tparseResponse,\n}: DialogPromiseOptions<T>): Promise<T> {\n\tif (dialogOptions?.signal?.aborted) return Promise.resolve(defaultValue);\n\n\tconst id = crypto.randomUUID();\n\treturn new Promise((resolve, reject) => {\n\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n\t\tconst cleanup = () => {\n\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\tdialogOptions?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\tpendingExtensionRequests.delete(id);\n\t\t};\n\n\t\tconst onAbort = () => {\n\t\t\tcleanup();\n\t\t\tresolve(defaultValue);\n\t\t};\n\t\tdialogOptions?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\tif (dialogOptions?.timeout) {\n\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\tcleanup();\n\t\t\t\tresolve(defaultValue);\n\t\t\t}, dialogOptions.timeout);\n\t\t}\n\n\t\tpendingExtensionRequests.set(id, {\n\t\t\tresolve: (response: RpcExtensionUIResponse) => {\n\t\t\t\tcleanup();\n\t\t\t\tresolve(parseResponse(response));\n\t\t\t},\n\t\t\treject,\n\t\t});\n\t\toutput({ type: \"extension_ui_request\", id, ...request } as RpcExtensionUIRequest);\n\t});\n}\n\nfunction emitExtensionUIRequest(output: RpcOutput, request: Record<string, unknown>): void {\n\toutput({ type: \"extension_ui_request\", id: crypto.randomUUID(), ...request } as RpcExtensionUIRequest);\n}\n\nexport function createRpcExtensionUIContext({\n\toutput,\n\tpendingExtensionRequests,\n\tcustomUi,\n\tsessionPicker,\n\tinputForm,\n\tfooterDataProvider,\n}: CreateRpcExtensionUIContextOptions): ExtensionUIContext {\n\tconst unsupportedWarnings = new Set<string>();\n\tlet toolsExpanded = false;\n\tconst warnUnsupported = (method: string): void => {\n\t\tif (!customUi || unsupportedWarnings.has(method)) return;\n\t\tunsupportedWarnings.add(method);\n\t\temitExtensionUIRequest(output, {\n\t\t\tmethod: \"notify\",\n\t\t\tmessage: `${method} is unavailable in isolated interactive mode because it requires a synchronous host callback`,\n\t\t\tnotifyType: \"warning\",\n\t\t});\n\t};\n\treturn {\n\t\tselect: (title, options, opts) =>\n\t\t\tcreateDialogPromise({\n\t\t\t\toutput,\n\t\t\t\tpendingExtensionRequests,\n\t\t\t\tdialogOptions: opts,\n\t\t\t\tdefaultValue: undefined,\n\t\t\t\trequest: { method: \"select\", title, options, timeout: opts?.timeout },\n\t\t\t\tparseResponse: (response) =>\n\t\t\t\t\t\"cancelled\" in response && response.cancelled\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: \"value\" in response\n\t\t\t\t\t\t\t? response.value\n\t\t\t\t\t\t\t: undefined,\n\t\t\t}),\n\n\t\tconfirm: (title, message, opts) =>\n\t\t\tcreateDialogPromise({\n\t\t\t\toutput,\n\t\t\t\tpendingExtensionRequests,\n\t\t\t\tdialogOptions: opts,\n\t\t\t\tdefaultValue: false,\n\t\t\t\trequest: { method: \"confirm\", title, message, timeout: opts?.timeout },\n\t\t\t\tparseResponse: (response) =>\n\t\t\t\t\t\"cancelled\" in response && response.cancelled\n\t\t\t\t\t\t? false\n\t\t\t\t\t\t: \"confirmed\" in response\n\t\t\t\t\t\t\t? response.confirmed\n\t\t\t\t\t\t\t: false,\n\t\t\t}),\n\n\t\tinput: (title, placeholder, opts) =>\n\t\t\tcreateDialogPromise({\n\t\t\t\toutput,\n\t\t\t\tpendingExtensionRequests,\n\t\t\t\tdialogOptions: opts,\n\t\t\t\tdefaultValue: undefined,\n\t\t\t\trequest: { method: \"input\", title, placeholder, timeout: opts?.timeout },\n\t\t\t\tparseResponse: (response) =>\n\t\t\t\t\t\"cancelled\" in response && response.cancelled\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: \"value\" in response\n\t\t\t\t\t\t\t? response.value\n\t\t\t\t\t\t\t: undefined,\n\t\t\t}),\n\n\t\tnotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void {\n\t\t\temitExtensionUIRequest(output, { method: \"notify\", message, notifyType: type });\n\t\t},\n\n\t\trequestRender(): void {\n\t\t\tcustomUi?.requestRender();\n\t\t},\n\n\t\tgetHostCustomUiState: () =>\n\t\t\tcustomUi?.getHostCustomUiState() ?? {\n\t\t\t\tblockingInlineCustomUiDepth: 0,\n\t\t\t\tblockingInlineCustomUiActive: false,\n\t\t\t},\n\t\tonHostCustomUiStateChange: (listener) => customUi?.onHostCustomUiStateChange(listener) ?? (() => {}),\n\t\tonWidgetRelease: (key, listener) => customUi?.onWidgetRelease(key, listener) ?? (() => {}),\n\t\tfocusHostInlineCustomUi: () => customUi?.focusHostInlineCustomUi() ?? false,\n\n\t\tonTerminalInput(): () => void {\n\t\t\twarnUnsupported(\"ctx.ui.onTerminalInput\");\n\t\t\treturn () => {};\n\t\t},\n\n\t\tsetStatus(key: string, text: string | undefined): void {\n\t\t\tfooterDataProvider?.setExtensionStatus(key, text);\n\t\t\t// Isolated custom UI components (e.g. an attached stage-chat footer)\n\t\t\t// re-render only after an engine_custom_invalidate; without this the\n\t\t\t// mirrored status text goes stale until an unrelated repaint occurs.\n\t\t\tcustomUi?.requestRender();\n\t\t\temitExtensionUIRequest(output, { method: \"setStatus\", statusKey: key, statusText: text });\n\t\t},\n\n\t\tsetWorkingMessage(_message?: string): void {\n\t\t\t// Working message not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetWorkingVisible(_visible: boolean): void {\n\t\t\t// Working visibility not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetWorkingIndicator(_options?: WorkingIndicatorOptions): void {\n\t\t\t// Working indicator customization not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetHiddenThinkingLabel(_label?: string): void {\n\t\t\t// Hidden thinking label not supported in RPC mode - requires TUI message rendering access\n\t\t},\n\n\t\tsetWidget(key: string, content: unknown, options?: ExtensionWidgetOptions): void {\n\t\t\tif (content === undefined) {\n\t\t\t\tcustomUi?.setWidget(key, undefined, options?.placement);\n\t\t\t\temitExtensionUIRequest(output, {\n\t\t\t\t\tmethod: \"setWidget\",\n\t\t\t\t\twidgetKey: key,\n\t\t\t\t\twidgetLines: undefined,\n\t\t\t\t\twidgetPlacement: options?.placement,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (Array.isArray(content)) {\n\t\t\t\temitExtensionUIRequest(output, {\n\t\t\t\t\tmethod: \"setWidget\",\n\t\t\t\t\twidgetKey: key,\n\t\t\t\t\twidgetLines: content as string[],\n\t\t\t\t\twidgetPlacement: options?.placement,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (typeof content === \"function\") {\n\t\t\t\tif (!customUi) throw new Error(\"Component-factory widgets are unavailable in this RPC host.\");\n\t\t\t\tcustomUi.setWidget(\n\t\t\t\t\tkey,\n\t\t\t\t\tcontent as (tui: TUI, theme: Theme) => Component & { dispose?(): void },\n\t\t\t\t\toptions?.placement,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\twarnUnsupported(\"component-factory widgets\");\n\t\t},\n\n\t\tsetFooter(): void {\n\t\t\twarnUnsupported(\"ctx.ui.setFooter\");\n\t\t},\n\n\t\tsetHeader(): void {\n\t\t\twarnUnsupported(\"ctx.ui.setHeader\");\n\t\t},\n\n\t\tsetTitle(title: string): void {\n\t\t\temitExtensionUIRequest(output, { method: \"setTitle\", title });\n\t\t},\n\n\t\tcustom: (factory, options) =>\n\t\t\tcustomUi ? customUi.custom(factory, options) : Promise.resolve(undefined as never),\n\n\t\t// Exposed in the isolated engine child, where the terminal host mounts\n\t\t// the real session selector natively so picker navigation never crosses\n\t\t// the process boundary. Absent in plain headless RPC (no interactive\n\t\t// host); callers must fail with an actionable error, not degrade.\n\t\t...(sessionPicker\n\t\t\t? { hostSessionPicker: (request: HostSessionPickerRequest) => sessionPicker.open(request) }\n\t\t\t: {}),\n\t\t...(inputForm ? { hostInputForm: (request: HostInputFormRequest) => inputForm.open(request) } : {}),\n\n\t\tpasteToEditor(text: string): void {\n\t\t\t// Paste handling not supported in RPC mode - falls back to setEditorText\n\t\t\tthis.setEditorText(text);\n\t\t},\n\n\t\tsetEditorText(text: string): void {\n\t\t\temitExtensionUIRequest(output, { method: \"set_editor_text\", text });\n\t\t},\n\n\t\tgetEditorText(): string {\n\t\t\twarnUnsupported(\"ctx.ui.getEditorText\");\n\t\t\treturn \"\";\n\t\t},\n\n\t\tasync editor(title: string, prefill?: string): Promise<string | undefined> {\n\t\t\tconst id = crypto.randomUUID();\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tpendingExtensionRequests.set(id, {\n\t\t\t\t\tresolve: (response: RpcExtensionUIResponse) => {\n\t\t\t\t\t\tif (\"cancelled\" in response && response.cancelled) {\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t} else if (\"value\" in response) {\n\t\t\t\t\t\t\tresolve(response.value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\treject,\n\t\t\t\t});\n\t\t\t\toutput({ type: \"extension_ui_request\", id, method: \"editor\", title, prefill } as RpcExtensionUIRequest);\n\t\t\t});\n\t\t},\n\n\t\taddAutocompleteProvider(): void {\n\t\t\twarnUnsupported(\"ctx.ui.addAutocompleteProvider\");\n\t\t},\n\n\t\tsetEditorComponent(): void {\n\t\t\twarnUnsupported(\"ctx.ui.setEditorComponent\");\n\t\t},\n\n\t\tgetEditorComponent() {\n\t\t\t// Custom editor components not supported in RPC mode\n\t\t\treturn undefined;\n\t\t},\n\n\t\tgetFooterDataProvider() {\n\t\t\treturn (\n\t\t\t\tfooterDataProvider ?? {\n\t\t\t\t\tgetGitBranch: () => null,\n\t\t\t\t\tgetExtensionStatuses: () => new Map(),\n\t\t\t\t\tgetAvailableProviderCount: () => 1,\n\t\t\t\t\tonBranchChange: () => () => {},\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\n\t\tget theme() {\n\t\t\treturn theme;\n\t\t},\n\n\t\tgetAllThemes() {\n\t\t\treturn [];\n\t\t},\n\n\t\tgetTheme(_name: string) {\n\t\t\treturn undefined;\n\t\t},\n\n\t\tsetTheme(_theme: string | Theme) {\n\t\t\t// Theme switching not supported in RPC mode\n\t\t\treturn { success: false, error: \"Theme switching not supported in RPC mode\" };\n\t\t},\n\n\t\tgetToolsExpanded() {\n\t\t\treturn toolsExpanded;\n\t\t},\n\n\t\tsetToolsExpanded(expanded: boolean) {\n\t\t\tif (expanded === toolsExpanded) return;\n\t\t\ttoolsExpanded = expanded;\n\t\t\tcustomUi?.requestRender();\n\t\t},\n\n\t\tgetChatRenderSettings() {\n\t\t\treturn {\n\t\t\t\thideThinkingBlock: false,\n\t\t\t\thiddenThinkingLabel: \"Thinking...\",\n\t\t\t\ttoolOutputExpanded: toolsExpanded,\n\t\t\t\tshowImages: false,\n\t\t\t\timageWidthCells: 60,\n\t\t\t\tmarkdownTransformers: [],\n\t\t\t\tgetToolDefinition: () => undefined,\n\t\t\t\tgetCustomMessageRenderer: () => undefined,\n\t\t\t};\n\t\t},\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-mode.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-mode.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"rpc-mode.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-mode.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAuB/E,YAAY,EACX,UAAU,EACV,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,eAAe,GACf,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,cAAc;IAC9B,+BAA+B,CAAC,EAAE,OAAO,CAAC;CAC1C;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,mBAAmB,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,KAAK,CAAC,CA2L/G"}
|
|
@@ -19,6 +19,7 @@ import { killTrackedDetachedChildren } from "../../utils/shell.js";
|
|
|
19
19
|
import { startInteractiveEngineLiveness } from "../interactive-engine/engine-child-liveness.js";
|
|
20
20
|
import { EngineCustomUiService } from "../interactive-engine/engine-custom-ui.js";
|
|
21
21
|
import { EngineInputFormService } from "../interactive-engine/engine-input-form.js";
|
|
22
|
+
import { EngineProjectTrustService } from "../interactive-engine/engine-project-trust.js";
|
|
22
23
|
import { EngineRenderService } from "../interactive-engine/engine-render-service.js";
|
|
23
24
|
import { EngineSessionPickerService } from "../interactive-engine/engine-session-picker.js";
|
|
24
25
|
import { serializeInteractiveEngineMessage } from "../interactive-engine/protocol.js";
|
|
@@ -51,6 +52,9 @@ export async function runRpcMode(runtimeHost, options = {}) {
|
|
|
51
52
|
const renderService = interactiveEngineChild ? new EngineRenderService(writeRawStdout) : undefined;
|
|
52
53
|
const sessionPicker = interactiveEngineChild ? new EngineSessionPickerService(writeRawStdout) : undefined;
|
|
53
54
|
const inputForm = interactiveEngineChild ? new EngineInputFormService(writeRawStdout) : undefined;
|
|
55
|
+
const projectTrust = interactiveEngineChild
|
|
56
|
+
? new EngineProjectTrustService(() => runtimeHost.session.extensionRunner)
|
|
57
|
+
: undefined;
|
|
54
58
|
const reloadCoordinator = keybindings
|
|
55
59
|
? new KeybindingsReloadCoordinator(keybindings, (state) => writeRawStdout(serializeInteractiveEngineMessage({ type: "engine_keybindings_reloaded", state })), (session, effectiveBindings) => [...session.extensionRunner.getShortcuts(effectiveBindings)].map(([key, shortcut]) => ({
|
|
56
60
|
key,
|
|
@@ -87,6 +91,7 @@ export async function runRpcMode(runtimeHost, options = {}) {
|
|
|
87
91
|
}
|
|
88
92
|
});
|
|
89
93
|
runtimeHost.setRebindSession(async () => {
|
|
94
|
+
projectTrust?.dispose();
|
|
90
95
|
await sessionBinding.rebindSession();
|
|
91
96
|
});
|
|
92
97
|
const handleCommand = createRpcCommandHandler({
|
|
@@ -95,6 +100,8 @@ export async function runRpcMode(runtimeHost, options = {}) {
|
|
|
95
100
|
rebindSession: () => sessionBinding.rebindSession(),
|
|
96
101
|
output,
|
|
97
102
|
keybindings,
|
|
103
|
+
// Browsing host-owned task history is not an extension approval prompt.
|
|
104
|
+
taskInspectorUi: customUi ? { custom: customUi.custom.bind(customUi) } : undefined,
|
|
98
105
|
reloadCoordinator,
|
|
99
106
|
inputForm,
|
|
100
107
|
pendingExtensionRequests,
|
|
@@ -119,6 +126,7 @@ export async function runRpcMode(runtimeHost, options = {}) {
|
|
|
119
126
|
renderService?.dispose();
|
|
120
127
|
sessionPicker?.dispose();
|
|
121
128
|
inputForm?.dispose();
|
|
129
|
+
projectTrust?.dispose();
|
|
122
130
|
outputBuffer.dispose();
|
|
123
131
|
await runtimeHost.dispose();
|
|
124
132
|
if (signal !== "SIGTERM") {
|
|
@@ -154,11 +162,12 @@ export async function runRpcMode(runtimeHost, options = {}) {
|
|
|
154
162
|
announceRequestAccepted: interactiveEngineChild
|
|
155
163
|
? (requestId, command) => writeRawStdout(serializeInteractiveEngineMessage({ type: "engine_request_accepted", requestId, command }))
|
|
156
164
|
: undefined,
|
|
157
|
-
handleInteractiveEngineLine: customUi || renderService || sessionPicker || inputForm
|
|
165
|
+
handleInteractiveEngineLine: customUi || renderService || sessionPicker || inputForm || projectTrust
|
|
158
166
|
? (line) => customUi?.handleLine(line) === true ||
|
|
159
167
|
renderService?.handleLine(line) === true ||
|
|
160
168
|
sessionPicker?.handleLine(line) === true ||
|
|
161
|
-
inputForm?.handleLine(line) === true
|
|
169
|
+
inputForm?.handleLine(line) === true ||
|
|
170
|
+
projectTrust?.handleLine(line) === true
|
|
162
171
|
: undefined,
|
|
163
172
|
});
|
|
164
173
|
const onInputEnd = () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-mode.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,8BAA8B,EAAE,MAAM,gDAAgD,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AACrF,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AAC5F,OAAO,EAAE,iCAAiC,EAAE,MAAM,mCAAmC,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAe7D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,WAAgC,EAAE,OAAO,GAAmB,EAAE;IAC9F,cAAc,EAAE,CAAC;IAEjB,MAAM,sBAAsB,GAAG,wBAAwB,EAAE,CAAC;IAC1D,MAAM,+BAA+B,GAAG,sBAAsB,IAAI,OAAO,CAAC,+BAA+B,KAAK,IAAI,CAAC;IACnH,MAAM,iBAAiB,GAAG,IAAI,oBAAoB,EAAE,CAAC;IACrD,MAAM,WAAW,GAAG,sBAAsB,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClH,IAAI,WAAW;QAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IAE7C,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IACnC,MAAM,wBAAwB,GAAgC,IAAI,GAAG,EAAE,CAAC;IACxE,MAAM,qBAAqB,GAAsB,EAAE,CAAC;IACpD,MAAM,cAAc,GAAG,8BAA8B,CAAC,cAAc,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClG,MAAM,aAAa,GAAG,sBAAsB,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnG,MAAM,aAAa,GAAG,sBAAsB,CAAC,CAAC,CAAC,IAAI,0BAA0B,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1G,MAAM,SAAS,GAAG,sBAAsB,CAAC,CAAC,CAAC,IAAI,sBAAsB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClG,MAAM,iBAAiB,GAAG,WAAW;QACpC,CAAC,CAAC,IAAI,4BAA4B,CAChC,WAAW,EACX,CAAC,KAAK,EAAE,EAAE,CACT,cAAc,CAAC,iCAAiC,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,CAAC,EAClG,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,CAC9B,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;YACtF,GAAG;YACH,GAAG,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC;SACpF,CAAC,CAAC,CACJ;QACF,CAAC,CAAC,SAAS,CAAC;IAEb,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,WAAW,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IAE3B,MAAM,eAAe,GAAG,GAAG,EAAE;QAC5B,iBAAiB,GAAG,IAAI,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,IAAI,iBAAiB,CAAC;QAC5C,WAAW;QACX,MAAM;QACN,wBAAwB;QACxB,eAAe;QACf,QAAQ;QACR,aAAa;QACb,aAAa;QACb,SAAS;QACT,iBAAiB;KACjB,CAAC,CAAC;IACH,MAAM,qBAAqB,GAAG,GAAG,EAAE,CAClC,iBAAiB,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAChC,IAAI,CAAC;YACJ,MAAM,cAAc,CAAC,qBAAqB,EAAE,CAAC;YAC7C,mBAAmB,CAAC,wBAAwB,CAAC,CAAC;YAC9C,cAAc,CAAC,cAAc,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,aAAa,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAChF,cAAc,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC9C,MAAM,aAAa,CAAC;QACrB,CAAC;IACF,CAAC,CAAC,CAAC;IAEJ,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;QACvC,MAAM,cAAc,CAAC,aAAa,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,uBAAuB,CAAC;QAC7C,WAAW;QACX,UAAU,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,cAAc;QAC/C,aAAa,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,aAAa,EAAE;QACnD,MAAM;QACN,WAAW;QACX,iBAAiB;QACjB,SAAS;QACT,wBAAwB;QACxB,gBAAgB,EAAE,+BAA+B,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;QAC9F,eAAe,EAAE,+BAA+B,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;QACpF,oBAAoB,EAAE,+BAA+B,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;KACxG,CAAC,CAAC;IAEH,KAAK,UAAU,QAAQ,CAAC,QAAQ,GAAG,CAAC,EAAE,MAAuB;QAC5D,IAAI,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QACD,YAAY,GAAG,IAAI,CAAC;QACpB,WAAW,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,aAAa,CAAC,iBAAiB,EAAE,CAAC;QACxC,KAAK,MAAM,OAAO,IAAI,qBAAqB,EAAE,CAAC;YAC7C,OAAO,EAAE,CAAC;QACX,CAAC;QACD,cAAc,CAAC,oBAAoB,EAAE,CAAC;QACtC,cAAc,CAAC,IAAI,EAAE,CAAC;QACtB,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpB,aAAa,EAAE,OAAO,EAAE,CAAC;QACzB,aAAa,EAAE,OAAO,EAAE,CAAC;QACzB,SAAS,EAAE,OAAO,EAAE,CAAC;QACrB,YAAY,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;QAC5B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,cAAc,EAAE,CAAC;QACxB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,sBAAsB,GAAG,KAAK,IAAmB,EAAE;QACxD,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAC/B,MAAM,QAAQ,EAAE,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,sBAAsB,GAAG,GAAS,EAAE;QACzC,MAAM,OAAO,GAAqB,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,GAAG,EAAE;gBACpB,2BAA2B,EAAE,CAAC;gBAC9B,KAAK,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACxD,CAAC,CAAC;YACF,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5B,qBAAqB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAChE,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,yBAAyB,CAAC;QACjD,MAAM;QACN,wBAAwB;QACxB,aAAa;QACb,sBAAsB;QACtB,qEAAqE;QACrE,uBAAuB,EAAE,sBAAsB;YAC9C,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CACvB,cAAc,CACb,iCAAiC,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAC1F;YACH,CAAC,CAAC,SAAS;QACZ,2BAA2B,EAC1B,QAAQ,IAAI,aAAa,IAAI,aAAa,IAAI,SAAS;YACtD,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CACT,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI;gBACnC,aAAa,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI;gBACxC,aAAa,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI;gBACxC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI;YACtC,CAAC,CAAC,SAAS;KACb,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,GAAG,EAAE;QACvB,KAAK,QAAQ,EAAE,CAAC;IACjB,CAAC,CAAC;IACF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAEpC,WAAW,GAAG,CAAC,GAAG,EAAE;QACnB,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,eAAe,CAAC,CAAC;QACnE,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,EAAE;YAC3E,eAAe,EAAE,GAAG,GAAG,IAAI;SAC3B,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACX,WAAW,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACtC,CAAC,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IACL,sBAAsB,EAAE,CAAC;IACzB,cAAc,CAAC,KAAK,EAAE,CAAC;IACvB,MAAM,cAAc,CAAC,aAAa,EAAE,CAAC;IACrC,IAAI,sBAAsB;QAAE,cAAc,CAAC,KAAK,EAAE,CAAC;IACnD,IAAI,+BAA+B,EAAE,CAAC;QACrC,uEAAuE;QACvE,oFAAoF;QACpF,KAAK,qBAAqB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;SAAM,IAAI,sBAAsB,EAAE,CAAC;QACnC,mBAAmB,CAAC,wBAAwB,CAAC,CAAC;QAC9C,cAAc,CAAC,cAAc,EAAE,CAAC;IACjC,CAAC;IAED,6BAA6B;IAC7B,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAC9B,CAAC","sourcesContent":["import { markLifecycleTiming } from \"../../core/lifecycle-timings.ts\";\n/**\n * RPC mode: Headless operation with JSON stdin/stdout protocol.\n *\n * Used for embedding the agent in other applications.\n * Receives commands as JSON on stdin, outputs events and responses as JSON on stdout.\n *\n * Protocol:\n * - Commands: JSON objects with `type` field, optional `id` for correlation\n * - Responses: JSON objects with `type: \"response\"`, `command`, `success`, and optional `data`/`error`\n * - Events: AgentSessionEvent objects streamed as they occur\n * - Extension UI: Extension UI requests are emitted, client responds with extension_ui_response\n */\n\nimport { setKeybindings } from \"@earendil-works/pi-tui\";\nimport type { AgentSession } from \"../../core/agent-session.ts\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.ts\";\nimport { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport { flushRawStdout, takeOverStdout, writeRawStdout } from \"../../core/output-guard.ts\";\nimport { isInteractiveEngineChild } from \"../../utils/interactive-engine-env.ts\";\nimport { killTrackedDetachedChildren } from \"../../utils/shell.ts\";\nimport { startInteractiveEngineLiveness } from \"../interactive-engine/engine-child-liveness.ts\";\nimport { EngineCustomUiService } from \"../interactive-engine/engine-custom-ui.ts\";\nimport { EngineInputFormService } from \"../interactive-engine/engine-input-form.ts\";\nimport { EngineRenderService } from \"../interactive-engine/engine-render-service.ts\";\nimport { EngineSessionPickerService } from \"../interactive-engine/engine-session-picker.ts\";\nimport { serializeInteractiveEngineMessage } from \"../interactive-engine/protocol.ts\";\nimport { attachJsonlLineReader } from \"./jsonl.ts\";\nimport { createRpcCommandHandler } from \"./rpc-command-handler.ts\";\nimport type { RpcPendingExtensionRequests } from \"./rpc-extension-ui.ts\";\nimport { createRpcInputLineHandler } from \"./rpc-input.ts\";\nimport { createRpcInputScheduler } from \"./rpc-input-scheduler.ts\";\nimport { KeybindingsReloadCoordinator } from \"./rpc-keybindings-reload.ts\";\nimport { RpcOutputBuffer } from \"./rpc-output-buffer.ts\";\nimport { RpcResourceReadiness } from \"./rpc-resource-readiness.ts\";\nimport { RpcSessionBinding } from \"./rpc-session-binding.ts\";\n\n// Re-export types for consumers\nexport type {\n\tRpcCommand,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcResponse,\n\tRpcSessionState,\n} from \"./rpc-types.ts\";\n\nexport interface RpcModeOptions {\n\tdeferInteractiveEngineResources?: boolean;\n}\n\n/**\n * Run in RPC mode.\n * Listens for JSON commands on stdin, outputs events and responses on stdout.\n */\nexport async function runRpcMode(runtimeHost: AgentSessionRuntime, options: RpcModeOptions = {}): Promise<never> {\n\ttakeOverStdout();\n\n\tconst interactiveEngineChild = isInteractiveEngineChild();\n\tconst deferInteractiveEngineResources = interactiveEngineChild && options.deferInteractiveEngineResources === true;\n\tconst resourceReadiness = new RpcResourceReadiness();\n\tconst keybindings = interactiveEngineChild ? KeybindingsManager.create(runtimeHost.services.agentDir) : undefined;\n\tif (keybindings) setKeybindings(keybindings);\n\n\tconst outputBuffer = new RpcOutputBuffer();\n\tconst output = outputBuffer.output;\n\tconst pendingExtensionRequests: RpcPendingExtensionRequests = new Map();\n\tconst signalCleanupHandlers: Array<() => void> = [];\n\tconst engineLiveness = startInteractiveEngineLiveness(writeRawStdout);\n\tconst customUi = keybindings ? new EngineCustomUiService(writeRawStdout, keybindings) : undefined;\n\tconst renderService = interactiveEngineChild ? new EngineRenderService(writeRawStdout) : undefined;\n\tconst sessionPicker = interactiveEngineChild ? new EngineSessionPickerService(writeRawStdout) : undefined;\n\tconst inputForm = interactiveEngineChild ? new EngineInputFormService(writeRawStdout) : undefined;\n\tconst reloadCoordinator = keybindings\n\t\t? new KeybindingsReloadCoordinator<AgentSession>(\n\t\t\t\tkeybindings,\n\t\t\t\t(state) =>\n\t\t\t\t\twriteRawStdout(serializeInteractiveEngineMessage({ type: \"engine_keybindings_reloaded\", state })),\n\t\t\t\t(session, effectiveBindings) =>\n\t\t\t\t\t[...session.extensionRunner.getShortcuts(effectiveBindings)].map(([key, shortcut]) => ({\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\t...(shortcut.description === undefined ? {} : { description: shortcut.description }),\n\t\t\t\t\t})),\n\t\t\t)\n\t\t: undefined;\n\n\tlet shutdownRequested = false;\n\tlet shuttingDown = false;\n\tlet detachInput = () => {};\n\n\tconst requestShutdown = () => {\n\t\tshutdownRequested = true;\n\t};\n\n\tconst sessionBinding = new RpcSessionBinding({\n\t\truntimeHost,\n\t\toutput,\n\t\tpendingExtensionRequests,\n\t\trequestShutdown,\n\t\tcustomUi,\n\t\trenderService,\n\t\tsessionPicker,\n\t\tinputForm,\n\t\treloadCoordinator,\n\t});\n\tconst loadDeferredResources = () =>\n\t\tresourceReadiness.run(async () => {\n\t\t\ttry {\n\t\t\t\tawait sessionBinding.loadDeferredResources();\n\t\t\t\tmarkLifecycleTiming(\"engine-resources-ready\");\n\t\t\t\tengineLiveness.resourcesReady();\n\t\t\t} catch (error) {\n\t\t\t\tconst resourceError = error instanceof Error ? error : new Error(String(error));\n\t\t\t\tengineLiveness.resourcesFailed(resourceError);\n\t\t\t\tthrow resourceError;\n\t\t\t}\n\t\t});\n\n\truntimeHost.setRebindSession(async () => {\n\t\tawait sessionBinding.rebindSession();\n\t});\n\n\tconst handleCommand = createRpcCommandHandler({\n\t\truntimeHost,\n\t\tgetSession: () => sessionBinding.currentSession,\n\t\trebindSession: () => sessionBinding.rebindSession(),\n\t\toutput,\n\t\tkeybindings,\n\t\treloadCoordinator,\n\t\tinputForm,\n\t\tpendingExtensionRequests,\n\t\twaitForResources: deferInteractiveEngineResources ? () => resourceReadiness.wait() : undefined,\n\t\treloadResources: deferInteractiveEngineResources ? loadDeferredResources : undefined,\n\t\tshouldRetryResources: deferInteractiveEngineResources ? () => resourceReadiness.needsRetry() : undefined,\n\t});\n\n\tasync function shutdown(exitCode = 0, signal?: NodeJS.Signals): Promise<never> {\n\t\tif (shuttingDown) {\n\t\t\tprocess.exit(exitCode);\n\t\t}\n\t\tshuttingDown = true;\n\t\tdetachInput();\n\t\tprocess.stdin.pause();\n\t\tawait handleCommand.disposeActiveBash();\n\t\tfor (const cleanup of signalCleanupHandlers) {\n\t\t\tcleanup();\n\t\t}\n\t\tsessionBinding.disposeSubscriptions();\n\t\tengineLiveness.stop();\n\t\tcustomUi?.dispose();\n\t\trenderService?.dispose();\n\t\tsessionPicker?.dispose();\n\t\tinputForm?.dispose();\n\t\toutputBuffer.dispose();\n\t\tawait runtimeHost.dispose();\n\t\tif (signal !== \"SIGTERM\") {\n\t\t\tawait flushRawStdout();\n\t\t}\n\t\tprocess.exit(exitCode);\n\t}\n\n\tconst checkShutdownRequested = async (): Promise<void> => {\n\t\tif (!shutdownRequested) return;\n\t\tawait shutdown();\n\t};\n\n\tconst registerSignalHandlers = (): void => {\n\t\tconst signals: NodeJS.Signals[] = [\"SIGTERM\"];\n\t\tif (process.platform !== \"win32\") {\n\t\t\tsignals.push(\"SIGHUP\");\n\t\t}\n\n\t\tfor (const signal of signals) {\n\t\t\tconst handler = () => {\n\t\t\t\tkillTrackedDetachedChildren();\n\t\t\t\tvoid shutdown(signal === \"SIGHUP\" ? 129 : 143, signal);\n\t\t\t};\n\t\t\tprocess.on(signal, handler);\n\t\t\tsignalCleanupHandlers.push(() => process.off(signal, handler));\n\t\t}\n\t};\n\n\tconst handleInputLine = createRpcInputLineHandler({\n\t\toutput,\n\t\tpendingExtensionRequests,\n\t\thandleCommand,\n\t\tcheckShutdownRequested,\n\t\t// Only the interactive engine host consults this ownership boundary.\n\t\tannounceRequestAccepted: interactiveEngineChild\n\t\t\t? (requestId, command) =>\n\t\t\t\t\twriteRawStdout(\n\t\t\t\t\t\tserializeInteractiveEngineMessage({ type: \"engine_request_accepted\", requestId, command }),\n\t\t\t\t\t)\n\t\t\t: undefined,\n\t\thandleInteractiveEngineLine:\n\t\t\tcustomUi || renderService || sessionPicker || inputForm\n\t\t\t\t? (line) =>\n\t\t\t\t\t\tcustomUi?.handleLine(line) === true ||\n\t\t\t\t\t\trenderService?.handleLine(line) === true ||\n\t\t\t\t\t\tsessionPicker?.handleLine(line) === true ||\n\t\t\t\t\t\tinputForm?.handleLine(line) === true\n\t\t\t\t: undefined,\n\t});\n\n\tconst onInputEnd = () => {\n\t\tvoid shutdown();\n\t};\n\tprocess.stdin.on(\"end\", onInputEnd);\n\n\tdetachInput = (() => {\n\t\tconst scheduleInputLine = createRpcInputScheduler(handleInputLine);\n\t\tconst detachJsonl = attachJsonlLineReader(process.stdin, scheduleInputLine, {\n\t\t\tmaxBytesPerTurn: 256 * 1024,\n\t\t});\n\t\treturn () => {\n\t\t\tdetachJsonl();\n\t\t\tprocess.stdin.off(\"end\", onInputEnd);\n\t\t};\n\t})();\n\tregisterSignalHandlers();\n\tengineLiveness.ready();\n\tawait sessionBinding.rebindSession();\n\tif (interactiveEngineChild) engineLiveness.bound();\n\tif (deferInteractiveEngineResources) {\n\t\t// RPC control and the mandatory minimal session are usable now. Prompt\n\t\t// handling remains generation-gated until a retryable transactional reload commits.\n\t\tvoid loadDeferredResources().catch(() => {});\n\t} else if (interactiveEngineChild) {\n\t\tmarkLifecycleTiming(\"engine-resources-ready\");\n\t\tengineLiveness.resourcesReady();\n\t}\n\n\t// Keep process alive forever\n\treturn new Promise(() => {});\n}\n"]}
|
|
1
|
+
{"version":3,"file":"rpc-mode.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-mode.ts"],"names":[],"mappings":"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","sourcesContent":["import { markLifecycleTiming } from \"../../core/lifecycle-timings.ts\";\n/**\n * RPC mode: Headless operation with JSON stdin/stdout protocol.\n *\n * Used for embedding the agent in other applications.\n * Receives commands as JSON on stdin, outputs events and responses as JSON on stdout.\n *\n * Protocol:\n * - Commands: JSON objects with `type` field, optional `id` for correlation\n * - Responses: JSON objects with `type: \"response\"`, `command`, `success`, and optional `data`/`error`\n * - Events: AgentSessionEvent objects streamed as they occur\n * - Extension UI: Extension UI requests are emitted, client responds with extension_ui_response\n */\n\nimport { setKeybindings } from \"@earendil-works/pi-tui\";\nimport type { AgentSession } from \"../../core/agent-session.js\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.ts\";\nimport { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport { flushRawStdout, takeOverStdout, writeRawStdout } from \"../../core/output-guard.ts\";\nimport { isInteractiveEngineChild } from \"../../utils/interactive-engine-env.ts\";\nimport { killTrackedDetachedChildren } from \"../../utils/shell.ts\";\nimport { startInteractiveEngineLiveness } from \"../interactive-engine/engine-child-liveness.ts\";\nimport { EngineCustomUiService } from \"../interactive-engine/engine-custom-ui.ts\";\nimport { EngineInputFormService } from \"../interactive-engine/engine-input-form.ts\";\nimport { EngineProjectTrustService } from \"../interactive-engine/engine-project-trust.js\";\nimport { EngineRenderService } from \"../interactive-engine/engine-render-service.ts\";\nimport { EngineSessionPickerService } from \"../interactive-engine/engine-session-picker.ts\";\nimport { serializeInteractiveEngineMessage } from \"../interactive-engine/protocol.ts\";\nimport { attachJsonlLineReader } from \"./jsonl.ts\";\nimport { createRpcCommandHandler } from \"./rpc-command-handler.ts\";\nimport type { RpcPendingExtensionRequests } from \"./rpc-extension-ui.ts\";\nimport { createRpcInputLineHandler } from \"./rpc-input.ts\";\nimport { createRpcInputScheduler } from \"./rpc-input-scheduler.ts\";\nimport { KeybindingsReloadCoordinator } from \"./rpc-keybindings-reload.ts\";\nimport { RpcOutputBuffer } from \"./rpc-output-buffer.ts\";\nimport { RpcResourceReadiness } from \"./rpc-resource-readiness.ts\";\nimport { RpcSessionBinding } from \"./rpc-session-binding.ts\";\n\n// Re-export types for consumers\nexport type {\n\tRpcCommand,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcResponse,\n\tRpcSessionState,\n} from \"./rpc-types.ts\";\n\nexport interface RpcModeOptions {\n\tdeferInteractiveEngineResources?: boolean;\n}\n\n/**\n * Run in RPC mode.\n * Listens for JSON commands on stdin, outputs events and responses on stdout.\n */\nexport async function runRpcMode(runtimeHost: AgentSessionRuntime, options: RpcModeOptions = {}): Promise<never> {\n\ttakeOverStdout();\n\n\tconst interactiveEngineChild = isInteractiveEngineChild();\n\tconst deferInteractiveEngineResources = interactiveEngineChild && options.deferInteractiveEngineResources === true;\n\tconst resourceReadiness = new RpcResourceReadiness();\n\tconst keybindings = interactiveEngineChild ? KeybindingsManager.create(runtimeHost.services.agentDir) : undefined;\n\tif (keybindings) setKeybindings(keybindings);\n\n\tconst outputBuffer = new RpcOutputBuffer();\n\tconst output = outputBuffer.output;\n\tconst pendingExtensionRequests: RpcPendingExtensionRequests = new Map();\n\tconst signalCleanupHandlers: Array<() => void> = [];\n\tconst engineLiveness = startInteractiveEngineLiveness(writeRawStdout);\n\tconst customUi = keybindings ? new EngineCustomUiService(writeRawStdout, keybindings) : undefined;\n\tconst renderService = interactiveEngineChild ? new EngineRenderService(writeRawStdout) : undefined;\n\tconst sessionPicker = interactiveEngineChild ? new EngineSessionPickerService(writeRawStdout) : undefined;\n\tconst inputForm = interactiveEngineChild ? new EngineInputFormService(writeRawStdout) : undefined;\n\tconst projectTrust = interactiveEngineChild\n\t\t? new EngineProjectTrustService(() => runtimeHost.session.extensionRunner)\n\t\t: undefined;\n\tconst reloadCoordinator = keybindings\n\t\t? new KeybindingsReloadCoordinator<AgentSession>(\n\t\t\t\tkeybindings,\n\t\t\t\t(state) =>\n\t\t\t\t\twriteRawStdout(serializeInteractiveEngineMessage({ type: \"engine_keybindings_reloaded\", state })),\n\t\t\t\t(session, effectiveBindings) =>\n\t\t\t\t\t[...session.extensionRunner.getShortcuts(effectiveBindings)].map(([key, shortcut]) => ({\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\t...(shortcut.description === undefined ? {} : { description: shortcut.description }),\n\t\t\t\t\t})),\n\t\t\t)\n\t\t: undefined;\n\n\tlet shutdownRequested = false;\n\tlet shuttingDown = false;\n\tlet detachInput = () => {};\n\n\tconst requestShutdown = () => {\n\t\tshutdownRequested = true;\n\t};\n\n\tconst sessionBinding = new RpcSessionBinding({\n\t\truntimeHost,\n\t\toutput,\n\t\tpendingExtensionRequests,\n\t\trequestShutdown,\n\t\tcustomUi,\n\t\trenderService,\n\t\tsessionPicker,\n\t\tinputForm,\n\t\treloadCoordinator,\n\t});\n\tconst loadDeferredResources = () =>\n\t\tresourceReadiness.run(async () => {\n\t\t\ttry {\n\t\t\t\tawait sessionBinding.loadDeferredResources();\n\t\t\t\tmarkLifecycleTiming(\"engine-resources-ready\");\n\t\t\t\tengineLiveness.resourcesReady();\n\t\t\t} catch (error) {\n\t\t\t\tconst resourceError = error instanceof Error ? error : new Error(String(error));\n\t\t\t\tengineLiveness.resourcesFailed(resourceError);\n\t\t\t\tthrow resourceError;\n\t\t\t}\n\t\t});\n\n\truntimeHost.setRebindSession(async () => {\n\t\tprojectTrust?.dispose();\n\t\tawait sessionBinding.rebindSession();\n\t});\n\n\tconst handleCommand = createRpcCommandHandler({\n\t\truntimeHost,\n\t\tgetSession: () => sessionBinding.currentSession,\n\t\trebindSession: () => sessionBinding.rebindSession(),\n\t\toutput,\n\t\tkeybindings,\n\t\t// Browsing host-owned task history is not an extension approval prompt.\n\t\ttaskInspectorUi: customUi ? { custom: customUi.custom.bind(customUi) } : undefined,\n\t\treloadCoordinator,\n\t\tinputForm,\n\t\tpendingExtensionRequests,\n\t\twaitForResources: deferInteractiveEngineResources ? () => resourceReadiness.wait() : undefined,\n\t\treloadResources: deferInteractiveEngineResources ? loadDeferredResources : undefined,\n\t\tshouldRetryResources: deferInteractiveEngineResources ? () => resourceReadiness.needsRetry() : undefined,\n\t});\n\n\tasync function shutdown(exitCode = 0, signal?: NodeJS.Signals): Promise<never> {\n\t\tif (shuttingDown) {\n\t\t\tprocess.exit(exitCode);\n\t\t}\n\t\tshuttingDown = true;\n\t\tdetachInput();\n\t\tprocess.stdin.pause();\n\t\tawait handleCommand.disposeActiveBash();\n\t\tfor (const cleanup of signalCleanupHandlers) {\n\t\t\tcleanup();\n\t\t}\n\t\tsessionBinding.disposeSubscriptions();\n\t\tengineLiveness.stop();\n\t\tcustomUi?.dispose();\n\t\trenderService?.dispose();\n\t\tsessionPicker?.dispose();\n\t\tinputForm?.dispose();\n\t\tprojectTrust?.dispose();\n\t\toutputBuffer.dispose();\n\t\tawait runtimeHost.dispose();\n\t\tif (signal !== \"SIGTERM\") {\n\t\t\tawait flushRawStdout();\n\t\t}\n\t\tprocess.exit(exitCode);\n\t}\n\n\tconst checkShutdownRequested = async (): Promise<void> => {\n\t\tif (!shutdownRequested) return;\n\t\tawait shutdown();\n\t};\n\n\tconst registerSignalHandlers = (): void => {\n\t\tconst signals: NodeJS.Signals[] = [\"SIGTERM\"];\n\t\tif (process.platform !== \"win32\") {\n\t\t\tsignals.push(\"SIGHUP\");\n\t\t}\n\n\t\tfor (const signal of signals) {\n\t\t\tconst handler = () => {\n\t\t\t\tkillTrackedDetachedChildren();\n\t\t\t\tvoid shutdown(signal === \"SIGHUP\" ? 129 : 143, signal);\n\t\t\t};\n\t\t\tprocess.on(signal, handler);\n\t\t\tsignalCleanupHandlers.push(() => process.off(signal, handler));\n\t\t}\n\t};\n\n\tconst handleInputLine = createRpcInputLineHandler({\n\t\toutput,\n\t\tpendingExtensionRequests,\n\t\thandleCommand,\n\t\tcheckShutdownRequested,\n\t\t// Only the interactive engine host consults this ownership boundary.\n\t\tannounceRequestAccepted: interactiveEngineChild\n\t\t\t? (requestId, command) =>\n\t\t\t\t\twriteRawStdout(\n\t\t\t\t\t\tserializeInteractiveEngineMessage({ type: \"engine_request_accepted\", requestId, command }),\n\t\t\t\t\t)\n\t\t\t: undefined,\n\t\thandleInteractiveEngineLine:\n\t\t\tcustomUi || renderService || sessionPicker || inputForm || projectTrust\n\t\t\t\t? (line) =>\n\t\t\t\t\t\tcustomUi?.handleLine(line) === true ||\n\t\t\t\t\t\trenderService?.handleLine(line) === true ||\n\t\t\t\t\t\tsessionPicker?.handleLine(line) === true ||\n\t\t\t\t\t\tinputForm?.handleLine(line) === true ||\n\t\t\t\t\t\tprojectTrust?.handleLine(line) === true\n\t\t\t\t: undefined,\n\t});\n\n\tconst onInputEnd = () => {\n\t\tvoid shutdown();\n\t};\n\tprocess.stdin.on(\"end\", onInputEnd);\n\n\tdetachInput = (() => {\n\t\tconst scheduleInputLine = createRpcInputScheduler(handleInputLine);\n\t\tconst detachJsonl = attachJsonlLineReader(process.stdin, scheduleInputLine, {\n\t\t\tmaxBytesPerTurn: 256 * 1024,\n\t\t});\n\t\treturn () => {\n\t\t\tdetachJsonl();\n\t\t\tprocess.stdin.off(\"end\", onInputEnd);\n\t\t};\n\t})();\n\tregisterSignalHandlers();\n\tengineLiveness.ready();\n\tawait sessionBinding.rebindSession();\n\tif (interactiveEngineChild) engineLiveness.bound();\n\tif (deferInteractiveEngineResources) {\n\t\t// RPC control and the mandatory minimal session are usable now. Prompt\n\t\t// handling remains generation-gated until a retryable transactional reload commits.\n\t\tvoid loadDeferredResources().catch(() => {});\n\t} else if (interactiveEngineChild) {\n\t\tmarkLifecycleTiming(\"engine-resources-ready\");\n\t\tengineLiveness.resourcesReady();\n\t}\n\n\t// Keep process alive forever\n\treturn new Promise(() => {});\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Credential } from "@bastani/pi-ai";
|
|
2
|
-
import type { AgentSession } from "../../core/agent-session.
|
|
2
|
+
import type { AgentSession } from "../../core/agent-session.js";
|
|
3
3
|
import type { HostInputFormRequest } from "../../core/extensions/ui-types.ts";
|
|
4
4
|
import { type OAuthInteractionTransport } from "./rpc-oauth-interaction.ts";
|
|
5
5
|
import type { RpcLoginProviderResult, RpcModelCatalog, RpcOAuthLoginProviderResult } from "./rpc-types.ts";
|