@hansjm10/volt-coding-agent 0.0.0-bootstrap.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BINARY-CAPABILITIES.md +28 -0
- package/CHANGELOG.md +4845 -0
- package/LICENSE +1 -1
- package/README.md +716 -3
- package/THIRD-PARTY-NOTICES.md +55 -0
- package/dist/LICENSES/clipboard-image-MIT.txt +9 -0
- package/dist/LICENSES/highlight.js-10.7.3-BSD-3-Clause.txt +29 -0
- package/dist/LICENSES/highlight.js-11.9.0-BSD-3-Clause.txt +29 -0
- package/dist/LICENSES/marked-18.0.5-LICENSE.txt +44 -0
- package/dist/LICENSES/run-jxa-MIT.txt +9 -0
- package/dist/cli/args.d.ts +60 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +414 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/config-selector.d.ts +14 -0
- package/dist/cli/config-selector.d.ts.map +1 -0
- package/dist/cli/config-selector.js +31 -0
- package/dist/cli/config-selector.js.map +1 -0
- package/dist/cli/file-processor.d.ts +15 -0
- package/dist/cli/file-processor.d.ts.map +1 -0
- package/dist/cli/file-processor.js +85 -0
- package/dist/cli/file-processor.js.map +1 -0
- package/dist/cli/initial-message.d.ts +18 -0
- package/dist/cli/initial-message.d.ts.map +1 -0
- package/dist/cli/initial-message.js +22 -0
- package/dist/cli/initial-message.js.map +1 -0
- package/dist/cli/list-models.d.ts +9 -0
- package/dist/cli/list-models.d.ts.map +1 -0
- package/dist/cli/list-models.js +98 -0
- package/dist/cli/list-models.js.map +1 -0
- package/dist/cli/project-trust.d.ts +10 -0
- package/dist/cli/project-trust.d.ts.map +1 -0
- package/dist/cli/project-trust.js +48 -0
- package/dist/cli/project-trust.js.map +1 -0
- package/dist/cli/session-picker.d.ts +9 -0
- package/dist/cli/session-picker.d.ts.map +1 -0
- package/dist/cli/session-picker.js +35 -0
- package/dist/cli/session-picker.js.map +1 -0
- package/dist/cli/startup-ui.d.ts +17 -0
- package/dist/cli/startup-ui.d.ts.map +1 -0
- package/dist/cli/startup-ui.js +133 -0
- package/dist/cli/startup-ui.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +18 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +85 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +487 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-session-runtime.d.ts +160 -0
- package/dist/core/agent-session-runtime.d.ts.map +1 -0
- package/dist/core/agent-session-runtime.js +397 -0
- package/dist/core/agent-session-runtime.js.map +1 -0
- package/dist/core/agent-session-services.d.ts +98 -0
- package/dist/core/agent-session-services.d.ts.map +1 -0
- package/dist/core/agent-session-services.js +125 -0
- package/dist/core/agent-session-services.js.map +1 -0
- package/dist/core/agent-session.d.ts +739 -0
- package/dist/core/agent-session.d.ts.map +1 -0
- package/dist/core/agent-session.js +3158 -0
- package/dist/core/agent-session.js.map +1 -0
- package/dist/core/auth-guidance.d.ts +5 -0
- package/dist/core/auth-guidance.d.ts.map +1 -0
- package/dist/core/auth-guidance.js +21 -0
- package/dist/core/auth-guidance.js.map +1 -0
- package/dist/core/auth-storage.d.ts +159 -0
- package/dist/core/auth-storage.d.ts.map +1 -0
- package/dist/core/auth-storage.js +509 -0
- package/dist/core/auth-storage.js.map +1 -0
- package/dist/core/bash-executor.d.ts +32 -0
- package/dist/core/bash-executor.d.ts.map +1 -0
- package/dist/core/bash-executor.js +111 -0
- package/dist/core/bash-executor.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +92 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
- package/dist/core/compaction/branch-summarization.js +257 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +121 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -0
- package/dist/core/compaction/compaction.js +658 -0
- package/dist/core/compaction/compaction.js.map +1 -0
- package/dist/core/compaction/index.d.ts +7 -0
- package/dist/core/compaction/index.d.ts.map +1 -0
- package/dist/core/compaction/index.js +7 -0
- package/dist/core/compaction/index.js.map +1 -0
- package/dist/core/compaction/utils.d.ts +56 -0
- package/dist/core/compaction/utils.d.ts.map +1 -0
- package/dist/core/compaction/utils.js +271 -0
- package/dist/core/compaction/utils.js.map +1 -0
- package/dist/core/defaults.d.ts +3 -0
- package/dist/core/defaults.d.ts.map +1 -0
- package/dist/core/defaults.js +2 -0
- package/dist/core/defaults.js.map +1 -0
- package/dist/core/diagnostics.d.ts +15 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +2 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/event-bus.d.ts +9 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +25 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/exec.d.ts +29 -0
- package/dist/core/exec.d.ts.map +1 -0
- package/dist/core/exec.js +75 -0
- package/dist/core/exec.js.map +1 -0
- package/dist/core/experimental.d.ts +2 -0
- package/dist/core/experimental.d.ts.map +1 -0
- package/dist/core/experimental.js +4 -0
- package/dist/core/experimental.js.map +1 -0
- package/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
- package/dist/core/export-html/ansi-to-html.js +249 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -0
- package/dist/core/export-html/index.d.ts +37 -0
- package/dist/core/export-html/index.d.ts.map +1 -0
- package/dist/core/export-html/index.js +234 -0
- package/dist/core/export-html/index.js.map +1 -0
- package/dist/core/export-html/template.css +1066 -0
- package/dist/core/export-html/template.html +55 -0
- package/dist/core/export-html/template.js +1864 -0
- package/dist/core/export-html/tool-renderer.d.ts +34 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
- package/dist/core/export-html/tool-renderer.js +108 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -0
- package/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/dist/core/export-html/vendor/marked.min.js +78 -0
- package/dist/core/extensions/index.d.ts +12 -0
- package/dist/core/extensions/index.d.ts.map +1 -0
- package/dist/core/extensions/index.js +9 -0
- package/dist/core/extensions/index.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +25 -0
- package/dist/core/extensions/loader.d.ts.map +1 -0
- package/dist/core/extensions/loader.js +516 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +180 -0
- package/dist/core/extensions/runner.d.ts.map +1 -0
- package/dist/core/extensions/runner.js +938 -0
- package/dist/core/extensions/runner.js.map +1 -0
- package/dist/core/extensions/types.d.ts +1215 -0
- package/dist/core/extensions/types.d.ts.map +1 -0
- package/dist/core/extensions/types.js +48 -0
- package/dist/core/extensions/types.js.map +1 -0
- package/dist/core/extensions/wrapper.d.ts +20 -0
- package/dist/core/extensions/wrapper.d.ts.map +1 -0
- package/dist/core/extensions/wrapper.js +22 -0
- package/dist/core/extensions/wrapper.js.map +1 -0
- package/dist/core/footer-data-provider.d.ts +54 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -0
- package/dist/core/footer-data-provider.js +338 -0
- package/dist/core/footer-data-provider.js.map +1 -0
- package/dist/core/host-actions.d.ts +107 -0
- package/dist/core/host-actions.d.ts.map +1 -0
- package/dist/core/host-actions.js +632 -0
- package/dist/core/host-actions.js.map +1 -0
- package/dist/core/host-interaction.d.ts +35 -0
- package/dist/core/host-interaction.d.ts.map +1 -0
- package/dist/core/host-interaction.js +2 -0
- package/dist/core/host-interaction.js.map +1 -0
- package/dist/core/http-dispatcher.d.ts +22 -0
- package/dist/core/http-dispatcher.d.ts.map +1 -0
- package/dist/core/http-dispatcher.js +64 -0
- package/dist/core/http-dispatcher.js.map +1 -0
- package/dist/core/index.d.ts +18 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +17 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/keybindings.d.ts +373 -0
- package/dist/core/keybindings.d.ts.map +1 -0
- package/dist/core/keybindings.js +303 -0
- package/dist/core/keybindings.js.map +1 -0
- package/dist/core/lsp/client.d.ts +119 -0
- package/dist/core/lsp/client.d.ts.map +1 -0
- package/dist/core/lsp/client.js +711 -0
- package/dist/core/lsp/client.js.map +1 -0
- package/dist/core/lsp/config.d.ts +96 -0
- package/dist/core/lsp/config.d.ts.map +1 -0
- package/dist/core/lsp/config.js +206 -0
- package/dist/core/lsp/config.js.map +1 -0
- package/dist/core/lsp/index.d.ts +6 -0
- package/dist/core/lsp/index.d.ts.map +1 -0
- package/dist/core/lsp/index.js +6 -0
- package/dist/core/lsp/index.js.map +1 -0
- package/dist/core/lsp/manager.d.ts +122 -0
- package/dist/core/lsp/manager.d.ts.map +1 -0
- package/dist/core/lsp/manager.js +1136 -0
- package/dist/core/lsp/manager.js.map +1 -0
- package/dist/core/lsp/trace.d.ts +26 -0
- package/dist/core/lsp/trace.d.ts.map +1 -0
- package/dist/core/lsp/trace.js +98 -0
- package/dist/core/lsp/trace.js.map +1 -0
- package/dist/core/lsp/workspace-edit.d.ts +60 -0
- package/dist/core/lsp/workspace-edit.d.ts.map +1 -0
- package/dist/core/lsp/workspace-edit.js +71 -0
- package/dist/core/lsp/workspace-edit.js.map +1 -0
- package/dist/core/mcp/audit.d.ts +39 -0
- package/dist/core/mcp/audit.d.ts.map +1 -0
- package/dist/core/mcp/audit.js +35 -0
- package/dist/core/mcp/audit.js.map +1 -0
- package/dist/core/mcp/auth.d.ts +7 -0
- package/dist/core/mcp/auth.d.ts.map +1 -0
- package/dist/core/mcp/auth.js +56 -0
- package/dist/core/mcp/auth.js.map +1 -0
- package/dist/core/mcp/client-factory.d.ts +20 -0
- package/dist/core/mcp/client-factory.d.ts.map +1 -0
- package/dist/core/mcp/client-factory.js +200 -0
- package/dist/core/mcp/client-factory.js.map +1 -0
- package/dist/core/mcp/config-loader.d.ts +9 -0
- package/dist/core/mcp/config-loader.d.ts.map +1 -0
- package/dist/core/mcp/config-loader.js +104 -0
- package/dist/core/mcp/config-loader.js.map +1 -0
- package/dist/core/mcp/config-writer.d.ts +21 -0
- package/dist/core/mcp/config-writer.d.ts.map +1 -0
- package/dist/core/mcp/config-writer.js +124 -0
- package/dist/core/mcp/config-writer.js.map +1 -0
- package/dist/core/mcp/config.d.ts +32 -0
- package/dist/core/mcp/config.d.ts.map +1 -0
- package/dist/core/mcp/config.js +385 -0
- package/dist/core/mcp/config.js.map +1 -0
- package/dist/core/mcp/direct-tools.d.ts +11 -0
- package/dist/core/mcp/direct-tools.d.ts.map +1 -0
- package/dist/core/mcp/direct-tools.js +47 -0
- package/dist/core/mcp/direct-tools.js.map +1 -0
- package/dist/core/mcp/gateway-tool.d.ts +29 -0
- package/dist/core/mcp/gateway-tool.d.ts.map +1 -0
- package/dist/core/mcp/gateway-tool.js +108 -0
- package/dist/core/mcp/gateway-tool.js.map +1 -0
- package/dist/core/mcp/index.d.ts +19 -0
- package/dist/core/mcp/index.d.ts.map +1 -0
- package/dist/core/mcp/index.js +18 -0
- package/dist/core/mcp/index.js.map +1 -0
- package/dist/core/mcp/manager.d.ts +117 -0
- package/dist/core/mcp/manager.d.ts.map +1 -0
- package/dist/core/mcp/manager.js +819 -0
- package/dist/core/mcp/manager.js.map +1 -0
- package/dist/core/mcp/metadata-cache.d.ts +27 -0
- package/dist/core/mcp/metadata-cache.d.ts.map +1 -0
- package/dist/core/mcp/metadata-cache.js +152 -0
- package/dist/core/mcp/metadata-cache.js.map +1 -0
- package/dist/core/mcp/oauth-flow.d.ts +94 -0
- package/dist/core/mcp/oauth-flow.d.ts.map +1 -0
- package/dist/core/mcp/oauth-flow.js +473 -0
- package/dist/core/mcp/oauth-flow.js.map +1 -0
- package/dist/core/mcp/oauth-provider.d.ts +39 -0
- package/dist/core/mcp/oauth-provider.d.ts.map +1 -0
- package/dist/core/mcp/oauth-provider.js +149 -0
- package/dist/core/mcp/oauth-provider.js.map +1 -0
- package/dist/core/mcp/oauth-store.d.ts +27 -0
- package/dist/core/mcp/oauth-store.d.ts.map +1 -0
- package/dist/core/mcp/oauth-store.js +111 -0
- package/dist/core/mcp/oauth-store.js.map +1 -0
- package/dist/core/mcp/output-store.d.ts +55 -0
- package/dist/core/mcp/output-store.d.ts.map +1 -0
- package/dist/core/mcp/output-store.js +206 -0
- package/dist/core/mcp/output-store.js.map +1 -0
- package/dist/core/mcp/rpc.d.ts +13 -0
- package/dist/core/mcp/rpc.d.ts.map +1 -0
- package/dist/core/mcp/rpc.js +29 -0
- package/dist/core/mcp/rpc.js.map +1 -0
- package/dist/core/mcp/safety.d.ts +6 -0
- package/dist/core/mcp/safety.d.ts.map +1 -0
- package/dist/core/mcp/safety.js +65 -0
- package/dist/core/mcp/safety.js.map +1 -0
- package/dist/core/mcp/search.d.ts +8 -0
- package/dist/core/mcp/search.d.ts.map +1 -0
- package/dist/core/mcp/search.js +85 -0
- package/dist/core/mcp/search.js.map +1 -0
- package/dist/core/mcp/server-supervisor.d.ts +59 -0
- package/dist/core/mcp/server-supervisor.d.ts.map +1 -0
- package/dist/core/mcp/server-supervisor.js +331 -0
- package/dist/core/mcp/server-supervisor.js.map +1 -0
- package/dist/core/mcp/types.d.ts +321 -0
- package/dist/core/mcp/types.d.ts.map +1 -0
- package/dist/core/mcp/types.js +2 -0
- package/dist/core/mcp/types.js.map +1 -0
- package/dist/core/messages.d.ts +78 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +138 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/model-catalog-watcher.d.ts +36 -0
- package/dist/core/model-catalog-watcher.d.ts.map +1 -0
- package/dist/core/model-catalog-watcher.js +101 -0
- package/dist/core/model-catalog-watcher.js.map +1 -0
- package/dist/core/model-registry.d.ts +160 -0
- package/dist/core/model-registry.d.ts.map +1 -0
- package/dist/core/model-registry.js +754 -0
- package/dist/core/model-registry.js.map +1 -0
- package/dist/core/model-resolver.d.ts +111 -0
- package/dist/core/model-resolver.d.ts.map +1 -0
- package/dist/core/model-resolver.js +534 -0
- package/dist/core/model-resolver.js.map +1 -0
- package/dist/core/output-guard.d.ts +7 -0
- package/dist/core/output-guard.d.ts.map +1 -0
- package/dist/core/output-guard.js +89 -0
- package/dist/core/output-guard.js.map +1 -0
- package/dist/core/package-manager.d.ts +220 -0
- package/dist/core/package-manager.d.ts.map +1 -0
- package/dist/core/package-manager.js +2217 -0
- package/dist/core/package-manager.js.map +1 -0
- package/dist/core/project-trust.d.ts +15 -0
- package/dist/core/project-trust.d.ts.map +1 -0
- package/dist/core/project-trust.js +58 -0
- package/dist/core/project-trust.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +53 -0
- package/dist/core/prompt-templates.d.ts.map +1 -0
- package/dist/core/prompt-templates.js +236 -0
- package/dist/core/prompt-templates.js.map +1 -0
- package/dist/core/provider-attribution.d.ts +4 -0
- package/dist/core/provider-attribution.d.ts.map +1 -0
- package/dist/core/provider-attribution.js +81 -0
- package/dist/core/provider-attribution.js.map +1 -0
- package/dist/core/provider-display-names.d.ts +2 -0
- package/dist/core/provider-display-names.d.ts.map +1 -0
- package/dist/core/provider-display-names.js +36 -0
- package/dist/core/provider-display-names.js.map +1 -0
- package/dist/core/remote/iroh/access-grant.d.ts +40 -0
- package/dist/core/remote/iroh/access-grant.d.ts.map +1 -0
- package/dist/core/remote/iroh/access-grant.js +199 -0
- package/dist/core/remote/iroh/access-grant.js.map +1 -0
- package/dist/core/remote/iroh/active-stream-registry.d.ts +39 -0
- package/dist/core/remote/iroh/active-stream-registry.d.ts.map +1 -0
- package/dist/core/remote/iroh/active-stream-registry.js +109 -0
- package/dist/core/remote/iroh/active-stream-registry.js.map +1 -0
- package/dist/core/remote/iroh/audit.d.ts +67 -0
- package/dist/core/remote/iroh/audit.d.ts.map +1 -0
- package/dist/core/remote/iroh/audit.js +274 -0
- package/dist/core/remote/iroh/audit.js.map +1 -0
- package/dist/core/remote/iroh/authorization.d.ts +46 -0
- package/dist/core/remote/iroh/authorization.d.ts.map +1 -0
- package/dist/core/remote/iroh/authorization.js +327 -0
- package/dist/core/remote/iroh/authorization.js.map +1 -0
- package/dist/core/remote/iroh/control.d.ts +64 -0
- package/dist/core/remote/iroh/control.d.ts.map +1 -0
- package/dist/core/remote/iroh/control.js +326 -0
- package/dist/core/remote/iroh/control.js.map +1 -0
- package/dist/core/remote/iroh/device-log-rpc.d.ts +22 -0
- package/dist/core/remote/iroh/device-log-rpc.d.ts.map +1 -0
- package/dist/core/remote/iroh/device-log-rpc.js +152 -0
- package/dist/core/remote/iroh/device-log-rpc.js.map +1 -0
- package/dist/core/remote/iroh/engine.d.ts +148 -0
- package/dist/core/remote/iroh/engine.d.ts.map +1 -0
- package/dist/core/remote/iroh/engine.js +499 -0
- package/dist/core/remote/iroh/engine.js.map +1 -0
- package/dist/core/remote/iroh/handshake-reader.d.ts +19 -0
- package/dist/core/remote/iroh/handshake-reader.d.ts.map +1 -0
- package/dist/core/remote/iroh/handshake-reader.js +91 -0
- package/dist/core/remote/iroh/handshake-reader.js.map +1 -0
- package/dist/core/remote/iroh/handshake.d.ts +119 -0
- package/dist/core/remote/iroh/handshake.d.ts.map +1 -0
- package/dist/core/remote/iroh/handshake.js +621 -0
- package/dist/core/remote/iroh/handshake.js.map +1 -0
- package/dist/core/remote/iroh/host-policy.d.ts +13 -0
- package/dist/core/remote/iroh/host-policy.d.ts.map +1 -0
- package/dist/core/remote/iroh/host-policy.js +15 -0
- package/dist/core/remote/iroh/host-policy.js.map +1 -0
- package/dist/core/remote/iroh/index.d.ts +25 -0
- package/dist/core/remote/iroh/index.d.ts.map +1 -0
- package/dist/core/remote/iroh/index.js +25 -0
- package/dist/core/remote/iroh/index.js.map +1 -0
- package/dist/core/remote/iroh/metadata.d.ts +28 -0
- package/dist/core/remote/iroh/metadata.d.ts.map +1 -0
- package/dist/core/remote/iroh/metadata.js +16 -0
- package/dist/core/remote/iroh/metadata.js.map +1 -0
- package/dist/core/remote/iroh/outbound-filter.d.ts +29 -0
- package/dist/core/remote/iroh/outbound-filter.d.ts.map +1 -0
- package/dist/core/remote/iroh/outbound-filter.js +692 -0
- package/dist/core/remote/iroh/outbound-filter.js.map +1 -0
- package/dist/core/remote/iroh/protocol.d.ts +60 -0
- package/dist/core/remote/iroh/protocol.d.ts.map +1 -0
- package/dist/core/remote/iroh/protocol.js +204 -0
- package/dist/core/remote/iroh/protocol.js.map +1 -0
- package/dist/core/remote/iroh/push.d.ts +179 -0
- package/dist/core/remote/iroh/push.d.ts.map +1 -0
- package/dist/core/remote/iroh/push.js +662 -0
- package/dist/core/remote/iroh/push.js.map +1 -0
- package/dist/core/remote/iroh/qr.d.ts +12 -0
- package/dist/core/remote/iroh/qr.d.ts.map +1 -0
- package/dist/core/remote/iroh/qr.js +27 -0
- package/dist/core/remote/iroh/qr.js.map +1 -0
- package/dist/core/remote/iroh/rpc-command-filter.d.ts +47 -0
- package/dist/core/remote/iroh/rpc-command-filter.d.ts.map +1 -0
- package/dist/core/remote/iroh/rpc-command-filter.js +188 -0
- package/dist/core/remote/iroh/rpc-command-filter.js.map +1 -0
- package/dist/core/remote/iroh/rpc-transport.d.ts +21 -0
- package/dist/core/remote/iroh/rpc-transport.d.ts.map +1 -0
- package/dist/core/remote/iroh/rpc-transport.js +106 -0
- package/dist/core/remote/iroh/rpc-transport.js.map +1 -0
- package/dist/core/remote/iroh/state-manager.d.ts +141 -0
- package/dist/core/remote/iroh/state-manager.d.ts.map +1 -0
- package/dist/core/remote/iroh/state-manager.js +744 -0
- package/dist/core/remote/iroh/state-manager.js.map +1 -0
- package/dist/core/remote/iroh/state.d.ts +141 -0
- package/dist/core/remote/iroh/state.d.ts.map +1 -0
- package/dist/core/remote/iroh/state.js +433 -0
- package/dist/core/remote/iroh/state.js.map +1 -0
- package/dist/core/remote/iroh/ticket.d.ts +46 -0
- package/dist/core/remote/iroh/ticket.d.ts.map +1 -0
- package/dist/core/remote/iroh/ticket.js +267 -0
- package/dist/core/remote/iroh/ticket.js.map +1 -0
- package/dist/core/remote/iroh/transcript-text.d.ts +8 -0
- package/dist/core/remote/iroh/transcript-text.d.ts.map +1 -0
- package/dist/core/remote/iroh/transcript-text.js +26 -0
- package/dist/core/remote/iroh/transcript-text.js.map +1 -0
- package/dist/core/remote/iroh/workspace-rpc.d.ts +31 -0
- package/dist/core/remote/iroh/workspace-rpc.d.ts.map +1 -0
- package/dist/core/remote/iroh/workspace-rpc.js +73 -0
- package/dist/core/remote/iroh/workspace-rpc.js.map +1 -0
- package/dist/core/remote/iroh/workspace.d.ts +16 -0
- package/dist/core/remote/iroh/workspace.d.ts.map +1 -0
- package/dist/core/remote/iroh/workspace.js +104 -0
- package/dist/core/remote/iroh/workspace.js.map +1 -0
- package/dist/core/remote/iroh/worktree-rpc.d.ts +83 -0
- package/dist/core/remote/iroh/worktree-rpc.d.ts.map +1 -0
- package/dist/core/remote/iroh/worktree-rpc.js +148 -0
- package/dist/core/remote/iroh/worktree-rpc.js.map +1 -0
- package/dist/core/resolve-config-value.d.ts +30 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -0
- package/dist/core/resolve-config-value.js +245 -0
- package/dist/core/resolve-config-value.js.map +1 -0
- package/dist/core/resource-loader.d.ts +214 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +824 -0
- package/dist/core/resource-loader.js.map +1 -0
- package/dist/core/review.d.ts +318 -0
- package/dist/core/review.d.ts.map +1 -0
- package/dist/core/review.js +1271 -0
- package/dist/core/review.js.map +1 -0
- package/dist/core/rpc/duplex-write-gate.d.ts +29 -0
- package/dist/core/rpc/duplex-write-gate.d.ts.map +1 -0
- package/dist/core/rpc/duplex-write-gate.js +124 -0
- package/dist/core/rpc/duplex-write-gate.js.map +1 -0
- package/dist/core/rpc/index.d.ts +6 -0
- package/dist/core/rpc/index.d.ts.map +1 -0
- package/dist/core/rpc/index.js +5 -0
- package/dist/core/rpc/index.js.map +1 -0
- package/dist/core/rpc/iroh-transport.d.ts +58 -0
- package/dist/core/rpc/iroh-transport.d.ts.map +1 -0
- package/dist/core/rpc/iroh-transport.js +278 -0
- package/dist/core/rpc/iroh-transport.js.map +1 -0
- package/dist/core/rpc/jsonl.d.ts +17 -0
- package/dist/core/rpc/jsonl.d.ts.map +1 -0
- package/dist/core/rpc/jsonl.js +49 -0
- package/dist/core/rpc/jsonl.js.map +1 -0
- package/dist/core/rpc/loopback-transport.d.ts +14 -0
- package/dist/core/rpc/loopback-transport.d.ts.map +1 -0
- package/dist/core/rpc/loopback-transport.js +120 -0
- package/dist/core/rpc/loopback-transport.js.map +1 -0
- package/dist/core/rpc/transcript.d.ts +37 -0
- package/dist/core/rpc/transcript.d.ts.map +1 -0
- package/dist/core/rpc/transcript.js +624 -0
- package/dist/core/rpc/transcript.js.map +1 -0
- package/dist/core/rpc/transport.d.ts +41 -0
- package/dist/core/rpc/transport.d.ts.map +1 -0
- package/dist/core/rpc/transport.js +155 -0
- package/dist/core/rpc/transport.js.map +1 -0
- package/dist/core/rpc/types.d.ts +1254 -0
- package/dist/core/rpc/types.d.ts.map +1 -0
- package/dist/core/rpc/types.js +8 -0
- package/dist/core/rpc/types.js.map +1 -0
- package/dist/core/rpc/ui-action-args.d.ts +3 -0
- package/dist/core/rpc/ui-action-args.d.ts.map +1 -0
- package/dist/core/rpc/ui-action-args.js +66 -0
- package/dist/core/rpc/ui-action-args.js.map +1 -0
- package/dist/core/rpc/ui-actions.d.ts +43 -0
- package/dist/core/rpc/ui-actions.d.ts.map +1 -0
- package/dist/core/rpc/ui-actions.js +362 -0
- package/dist/core/rpc/ui-actions.js.map +1 -0
- package/dist/core/sdk.d.ts +138 -0
- package/dist/core/sdk.d.ts.map +1 -0
- package/dist/core/sdk.js +324 -0
- package/dist/core/sdk.js.map +1 -0
- package/dist/core/session-cwd.d.ts +19 -0
- package/dist/core/session-cwd.d.ts.map +1 -0
- package/dist/core/session-cwd.js +38 -0
- package/dist/core/session-cwd.js.map +1 -0
- package/dist/core/session-manager.d.ts +346 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +1280 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/settings-manager.d.ts +359 -0
- package/dist/core/settings-manager.d.ts.map +1 -0
- package/dist/core/settings-manager.js +1277 -0
- package/dist/core/settings-manager.js.map +1 -0
- package/dist/core/skills.d.ts +60 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +387 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/slash-commands.d.ts +14 -0
- package/dist/core/slash-commands.d.ts.map +1 -0
- package/dist/core/slash-commands.js +51 -0
- package/dist/core/slash-commands.js.map +1 -0
- package/dist/core/source-info.d.ts +18 -0
- package/dist/core/source-info.d.ts.map +1 -0
- package/dist/core/source-info.js +19 -0
- package/dist/core/source-info.js.map +1 -0
- package/dist/core/subagents/delegation-scope.d.ts +47 -0
- package/dist/core/subagents/delegation-scope.d.ts.map +1 -0
- package/dist/core/subagents/delegation-scope.js +134 -0
- package/dist/core/subagents/delegation-scope.js.map +1 -0
- package/dist/core/subagents/index.d.ts +46 -0
- package/dist/core/subagents/index.d.ts.map +1 -0
- package/dist/core/subagents/index.js +369 -0
- package/dist/core/subagents/index.js.map +1 -0
- package/dist/core/subagents/manager.d.ts +183 -0
- package/dist/core/subagents/manager.d.ts.map +1 -0
- package/dist/core/subagents/manager.js +820 -0
- package/dist/core/subagents/manager.js.map +1 -0
- package/dist/core/system-prompt.d.ts +28 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +180 -0
- package/dist/core/system-prompt.js.map +1 -0
- package/dist/core/telemetry.d.ts +3 -0
- package/dist/core/telemetry.d.ts.map +1 -0
- package/dist/core/telemetry.js +9 -0
- package/dist/core/telemetry.js.map +1 -0
- package/dist/core/theme/dark.json +86 -0
- package/dist/core/theme/discovery.d.ts +48 -0
- package/dist/core/theme/discovery.d.ts.map +1 -0
- package/dist/core/theme/discovery.js +239 -0
- package/dist/core/theme/discovery.js.map +1 -0
- package/dist/core/theme/index.d.ts +6 -0
- package/dist/core/theme/index.d.ts.map +1 -0
- package/dist/core/theme/index.js +5 -0
- package/dist/core/theme/index.js.map +1 -0
- package/dist/core/theme/light.json +85 -0
- package/dist/core/theme/runtime.d.ts +55 -0
- package/dist/core/theme/runtime.d.ts.map +1 -0
- package/dist/core/theme/runtime.js +555 -0
- package/dist/core/theme/runtime.js.map +1 -0
- package/dist/core/theme/theme-schema.json +335 -0
- package/dist/core/theme/theme-service.d.ts +37 -0
- package/dist/core/theme/theme-service.d.ts.map +1 -0
- package/dist/core/theme/theme-service.js +222 -0
- package/dist/core/theme/theme-service.js.map +1 -0
- package/dist/core/theme/theme.d.ts +100 -0
- package/dist/core/theme/theme.d.ts.map +1 -0
- package/dist/core/theme/theme.js +243 -0
- package/dist/core/theme/theme.js.map +1 -0
- package/dist/core/theme/tokens.d.ts +20 -0
- package/dist/core/theme/tokens.d.ts.map +1 -0
- package/dist/core/theme/tokens.js +178 -0
- package/dist/core/theme/tokens.js.map +1 -0
- package/dist/core/theme/types.d.ts +21 -0
- package/dist/core/theme/types.d.ts.map +1 -0
- package/dist/core/theme/types.js +2 -0
- package/dist/core/theme/types.js.map +1 -0
- package/dist/core/timings.d.ts +8 -0
- package/dist/core/timings.d.ts.map +1 -0
- package/dist/core/timings.js +31 -0
- package/dist/core/timings.js.map +1 -0
- package/dist/core/tools/bash.d.ts +68 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +345 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/diagnostics-provider.d.ts +12 -0
- package/dist/core/tools/diagnostics-provider.d.ts.map +1 -0
- package/dist/core/tools/diagnostics-provider.js +2 -0
- package/dist/core/tools/diagnostics-provider.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +77 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -0
- package/dist/core/tools/edit-diff.js +506 -0
- package/dist/core/tools/edit-diff.js.map +1 -0
- package/dist/core/tools/edit.d.ts +56 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +300 -0
- package/dist/core/tools/edit.js.map +1 -0
- package/dist/core/tools/file-mutation-queue.d.ts +6 -0
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
- package/dist/core/tools/file-mutation-queue.js +52 -0
- package/dist/core/tools/file-mutation-queue.js.map +1 -0
- package/dist/core/tools/find.d.ts +35 -0
- package/dist/core/tools/find.d.ts.map +1 -0
- package/dist/core/tools/find.js +337 -0
- package/dist/core/tools/find.js.map +1 -0
- package/dist/core/tools/grep.d.ts +37 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +305 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/index.d.ts +56 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +174 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/ls.d.ts +37 -0
- package/dist/core/tools/ls.d.ts.map +1 -0
- package/dist/core/tools/ls.js +167 -0
- package/dist/core/tools/ls.js.map +1 -0
- package/dist/core/tools/lsp.d.ts +59 -0
- package/dist/core/tools/lsp.d.ts.map +1 -0
- package/dist/core/tools/lsp.js +157 -0
- package/dist/core/tools/lsp.js.map +1 -0
- package/dist/core/tools/output-accumulator.d.ts +52 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -0
- package/dist/core/tools/output-accumulator.js +184 -0
- package/dist/core/tools/output-accumulator.js.map +1 -0
- package/dist/core/tools/path-utils.d.ts +10 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -0
- package/dist/core/tools/path-utils.js +99 -0
- package/dist/core/tools/path-utils.js.map +1 -0
- package/dist/core/tools/read.d.ts +35 -0
- package/dist/core/tools/read.d.ts.map +1 -0
- package/dist/core/tools/read.js +292 -0
- package/dist/core/tools/read.js.map +1 -0
- package/dist/core/tools/render-utils.d.ts +26 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -0
- package/dist/core/tools/render-utils.js +69 -0
- package/dist/core/tools/render-utils.js.map +1 -0
- package/dist/core/tools/subagent.d.ts +219 -0
- package/dist/core/tools/subagent.d.ts.map +1 -0
- package/dist/core/tools/subagent.js +1445 -0
- package/dist/core/tools/subagent.js.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.js +34 -0
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
- package/dist/core/tools/truncate.d.ts +70 -0
- package/dist/core/tools/truncate.d.ts.map +1 -0
- package/dist/core/tools/truncate.js +215 -0
- package/dist/core/tools/truncate.js.map +1 -0
- package/dist/core/tools/web-search.d.ts +69 -0
- package/dist/core/tools/web-search.d.ts.map +1 -0
- package/dist/core/tools/web-search.js +634 -0
- package/dist/core/tools/web-search.js.map +1 -0
- package/dist/core/tools/write.d.ts +33 -0
- package/dist/core/tools/write.d.ts.map +1 -0
- package/dist/core/tools/write.js +210 -0
- package/dist/core/tools/write.js.map +1 -0
- package/dist/core/trust-manager.d.ts +36 -0
- package/dist/core/trust-manager.d.ts.map +1 -0
- package/dist/core/trust-manager.js +220 -0
- package/dist/core/trust-manager.js.map +1 -0
- package/dist/daemon/cli.d.ts +8 -0
- package/dist/daemon/cli.d.ts.map +1 -0
- package/dist/daemon/cli.js +468 -0
- package/dist/daemon/cli.js.map +1 -0
- package/dist/daemon/control-client.d.ts +60 -0
- package/dist/daemon/control-client.d.ts.map +1 -0
- package/dist/daemon/control-client.js +411 -0
- package/dist/daemon/control-client.js.map +1 -0
- package/dist/daemon/control-protocol.d.ts +507 -0
- package/dist/daemon/control-protocol.d.ts.map +1 -0
- package/dist/daemon/control-protocol.js +395 -0
- package/dist/daemon/control-protocol.js.map +1 -0
- package/dist/daemon/control-server.d.ts +77 -0
- package/dist/daemon/control-server.d.ts.map +1 -0
- package/dist/daemon/control-server.js +327 -0
- package/dist/daemon/control-server.js.map +1 -0
- package/dist/daemon/conversation-commands.d.ts +176 -0
- package/dist/daemon/conversation-commands.d.ts.map +1 -0
- package/dist/daemon/conversation-commands.js +1268 -0
- package/dist/daemon/conversation-commands.js.map +1 -0
- package/dist/daemon/daemon-lock.d.ts +27 -0
- package/dist/daemon/daemon-lock.d.ts.map +1 -0
- package/dist/daemon/daemon-lock.js +238 -0
- package/dist/daemon/daemon-lock.js.map +1 -0
- package/dist/daemon/handshake-responses.d.ts +47 -0
- package/dist/daemon/handshake-responses.d.ts.map +1 -0
- package/dist/daemon/handshake-responses.js +113 -0
- package/dist/daemon/handshake-responses.js.map +1 -0
- package/dist/daemon/integrated-runtimes.d.ts +137 -0
- package/dist/daemon/integrated-runtimes.d.ts.map +1 -0
- package/dist/daemon/integrated-runtimes.js +763 -0
- package/dist/daemon/integrated-runtimes.js.map +1 -0
- package/dist/daemon/iroh-native.d.ts +76 -0
- package/dist/daemon/iroh-native.d.ts.map +1 -0
- package/dist/daemon/iroh-native.js +18 -0
- package/dist/daemon/iroh-native.js.map +1 -0
- package/dist/daemon/iroh-resource-guard.d.ts +57 -0
- package/dist/daemon/iroh-resource-guard.d.ts.map +1 -0
- package/dist/daemon/iroh-resource-guard.js +134 -0
- package/dist/daemon/iroh-resource-guard.js.map +1 -0
- package/dist/daemon/iroh-service.d.ts +51 -0
- package/dist/daemon/iroh-service.d.ts.map +1 -0
- package/dist/daemon/iroh-service.js +2604 -0
- package/dist/daemon/iroh-service.js.map +1 -0
- package/dist/daemon/keep-awake.d.ts +62 -0
- package/dist/daemon/keep-awake.d.ts.map +1 -0
- package/dist/daemon/keep-awake.js +190 -0
- package/dist/daemon/keep-awake.js.map +1 -0
- package/dist/daemon/lease-broker.d.ts +139 -0
- package/dist/daemon/lease-broker.d.ts.map +1 -0
- package/dist/daemon/lease-broker.js +504 -0
- package/dist/daemon/lease-broker.js.map +1 -0
- package/dist/daemon/log.d.ts +16 -0
- package/dist/daemon/log.d.ts.map +1 -0
- package/dist/daemon/log.js +40 -0
- package/dist/daemon/log.js.map +1 -0
- package/dist/daemon/main.d.ts +70 -0
- package/dist/daemon/main.d.ts.map +1 -0
- package/dist/daemon/main.js +781 -0
- package/dist/daemon/main.js.map +1 -0
- package/dist/daemon/paths.d.ts +32 -0
- package/dist/daemon/paths.d.ts.map +1 -0
- package/dist/daemon/paths.js +208 -0
- package/dist/daemon/paths.js.map +1 -0
- package/dist/daemon/process-identity.d.ts +58 -0
- package/dist/daemon/process-identity.d.ts.map +1 -0
- package/dist/daemon/process-identity.js +185 -0
- package/dist/daemon/process-identity.js.map +1 -0
- package/dist/daemon/relay-stream.d.ts +89 -0
- package/dist/daemon/relay-stream.d.ts.map +1 -0
- package/dist/daemon/relay-stream.js +202 -0
- package/dist/daemon/relay-stream.js.map +1 -0
- package/dist/daemon/remote-cli.d.ts +7 -0
- package/dist/daemon/remote-cli.d.ts.map +1 -0
- package/dist/daemon/remote-cli.js +774 -0
- package/dist/daemon/remote-cli.js.map +1 -0
- package/dist/daemon/service-install.d.ts +43 -0
- package/dist/daemon/service-install.d.ts.map +1 -0
- package/dist/daemon/service-install.js +198 -0
- package/dist/daemon/service-install.js.map +1 -0
- package/dist/daemon/session-target.d.ts +62 -0
- package/dist/daemon/session-target.d.ts.map +1 -0
- package/dist/daemon/session-target.js +66 -0
- package/dist/daemon/session-target.js.map +1 -0
- package/dist/daemon/spawn.d.ts +53 -0
- package/dist/daemon/spawn.d.ts.map +1 -0
- package/dist/daemon/spawn.js +205 -0
- package/dist/daemon/spawn.js.map +1 -0
- package/dist/daemon/state.d.ts +145 -0
- package/dist/daemon/state.d.ts.map +1 -0
- package/dist/daemon/state.js +454 -0
- package/dist/daemon/state.js.map +1 -0
- package/dist/daemon/theme-push.d.ts +23 -0
- package/dist/daemon/theme-push.d.ts.map +1 -0
- package/dist/daemon/theme-push.js +30 -0
- package/dist/daemon/theme-push.js.map +1 -0
- package/dist/daemon/viewer-feed.d.ts +42 -0
- package/dist/daemon/viewer-feed.d.ts.map +1 -0
- package/dist/daemon/viewer-feed.js +138 -0
- package/dist/daemon/viewer-feed.js.map +1 -0
- package/dist/daemon/workspace-directory.d.ts +35 -0
- package/dist/daemon/workspace-directory.d.ts.map +1 -0
- package/dist/daemon/workspace-directory.js +105 -0
- package/dist/daemon/workspace-directory.js.map +1 -0
- package/dist/daemon/workspace-streams.d.ts +70 -0
- package/dist/daemon/workspace-streams.d.ts.map +1 -0
- package/dist/daemon/workspace-streams.js +289 -0
- package/dist/daemon/workspace-streams.js.map +1 -0
- package/dist/daemon/worktree-manager.d.ts +219 -0
- package/dist/daemon/worktree-manager.d.ts.map +1 -0
- package/dist/daemon/worktree-manager.js +1204 -0
- package/dist/daemon/worktree-manager.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +12 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +773 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp-cli.d.ts +6 -0
- package/dist/mcp-cli.d.ts.map +1 -0
- package/dist/mcp-cli.js +347 -0
- package/dist/mcp-cli.js.map +1 -0
- package/dist/migrations.d.ts +33 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +281 -0
- package/dist/migrations.js.map +1 -0
- package/dist/modes/index.d.ts +13 -0
- package/dist/modes/index.d.ts.map +1 -0
- package/dist/modes/index.js +12 -0
- package/dist/modes/index.js.map +1 -0
- package/dist/modes/interactive/components/armin.d.ts +34 -0
- package/dist/modes/interactive/components/armin.d.ts.map +1 -0
- package/dist/modes/interactive/components/armin.js +333 -0
- package/dist/modes/interactive/components/armin.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +22 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/assistant-message.js +129 -0
- package/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +39 -0
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/bash-execution.js +212 -0
- package/dist/modes/interactive/components/bash-execution.js.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts +17 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.js +57 -0
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.js +44 -0
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts +71 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector.js +510 -0
- package/dist/modes/interactive/components/config-selector.js.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.js +33 -0
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
- package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-editor.js +70 -0
- package/dist/modes/interactive/components/custom-editor.js.map +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +20 -0
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-message.js +76 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -0
- package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
- package/dist/modes/interactive/components/daxnuts.js +140 -0
- package/dist/modes/interactive/components/daxnuts.js.map +1 -0
- package/dist/modes/interactive/components/diff.d.ts +12 -0
- package/dist/modes/interactive/components/diff.d.ts.map +1 -0
- package/dist/modes/interactive/components/diff.js +133 -0
- package/dist/modes/interactive/components/diff.js.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.js +21 -0
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-editor.js +116 -0
- package/dist/modes/interactive/components/extension-editor.js.map +1 -0
- package/dist/modes/interactive/components/extension-input.d.ts +23 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-input.js +61 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -0
- package/dist/modes/interactive/components/extension-selector.d.ts +27 -0
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-selector.js +98 -0
- package/dist/modes/interactive/components/extension-selector.js.map +1 -0
- package/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
- package/dist/modes/interactive/components/first-time-setup.js +103 -0
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +27 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/dist/modes/interactive/components/footer.js +180 -0
- package/dist/modes/interactive/components/footer.js.map +1 -0
- package/dist/modes/interactive/components/hotkeys.d.ts +24 -0
- package/dist/modes/interactive/components/hotkeys.d.ts.map +1 -0
- package/dist/modes/interactive/components/hotkeys.js +97 -0
- package/dist/modes/interactive/components/hotkeys.js.map +1 -0
- package/dist/modes/interactive/components/index.d.ts +35 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -0
- package/dist/modes/interactive/components/index.js +36 -0
- package/dist/modes/interactive/components/index.js.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts +19 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.js +48 -0
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
- package/dist/modes/interactive/components/login-dialog.d.ts +52 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
- package/dist/modes/interactive/components/login-dialog.js +179 -0
- package/dist/modes/interactive/components/login-dialog.js.map +1 -0
- package/dist/modes/interactive/components/logo.d.ts +25 -0
- package/dist/modes/interactive/components/logo.d.ts.map +1 -0
- package/dist/modes/interactive/components/logo.js +89 -0
- package/dist/modes/interactive/components/logo.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +47 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/model-selector.js +278 -0
- package/dist/modes/interactive/components/model-selector.js.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts +31 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.js +165 -0
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
- package/dist/modes/interactive/components/remote-control-center.d.ts +110 -0
- package/dist/modes/interactive/components/remote-control-center.d.ts.map +1 -0
- package/dist/modes/interactive/components/remote-control-center.js +1217 -0
- package/dist/modes/interactive/components/remote-control-center.js.map +1 -0
- package/dist/modes/interactive/components/review-tools-selector.d.ts +24 -0
- package/dist/modes/interactive/components/review-tools-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/review-tools-selector.js +93 -0
- package/dist/modes/interactive/components/review-tools-selector.js.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +290 -0
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.js +155 -0
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +95 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector.js +856 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +77 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector.js +484 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.js +39 -0
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
- package/dist/modes/interactive/components/streaming-render-coalescer.d.ts +29 -0
- package/dist/modes/interactive/components/streaming-render-coalescer.d.ts.map +1 -0
- package/dist/modes/interactive/components/streaming-render-coalescer.js +98 -0
- package/dist/modes/interactive/components/streaming-render-coalescer.js.map +1 -0
- package/dist/modes/interactive/components/subagent-inspector.d.ts +32 -0
- package/dist/modes/interactive/components/subagent-inspector.d.ts.map +1 -0
- package/dist/modes/interactive/components/subagent-inspector.js +439 -0
- package/dist/modes/interactive/components/subagent-inspector.js.map +1 -0
- package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/theme-selector.js +50 -0
- package/dist/modes/interactive/components/theme-selector.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.js +52 -0
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +83 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution.js +421 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +89 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector.js +1208 -0
- package/dist/modes/interactive/components/tree-selector.js.map +1 -0
- package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/trust-selector.js +91 -0
- package/dist/modes/interactive/components/trust-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.js +114 -0
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message.d.ts +9 -0
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message.js +42 -0
- package/dist/modes/interactive/components/user-message.js.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.js +33 -0
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
- package/dist/modes/interactive/components/volt-announcement.d.ts +5 -0
- package/dist/modes/interactive/components/volt-announcement.d.ts.map +1 -0
- package/dist/modes/interactive/components/volt-announcement.js +15 -0
- package/dist/modes/interactive/components/volt-announcement.js.map +1 -0
- package/dist/modes/interactive/daemon-attach.d.ts +154 -0
- package/dist/modes/interactive/daemon-attach.d.ts.map +1 -0
- package/dist/modes/interactive/daemon-attach.js +552 -0
- package/dist/modes/interactive/daemon-attach.js.map +1 -0
- package/dist/modes/interactive/drain-viewer.d.ts +31 -0
- package/dist/modes/interactive/drain-viewer.d.ts.map +1 -0
- package/dist/modes/interactive/drain-viewer.js +166 -0
- package/dist/modes/interactive/drain-viewer.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +502 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode.js +7007 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -0
- package/dist/modes/interactive/prompt-image-attachments.d.ts +34 -0
- package/dist/modes/interactive/prompt-image-attachments.d.ts.map +1 -0
- package/dist/modes/interactive/prompt-image-attachments.js +120 -0
- package/dist/modes/interactive/prompt-image-attachments.js.map +1 -0
- package/dist/modes/interactive/relay-stream-adapter.d.ts +19 -0
- package/dist/modes/interactive/relay-stream-adapter.d.ts.map +1 -0
- package/dist/modes/interactive/relay-stream-adapter.js +107 -0
- package/dist/modes/interactive/relay-stream-adapter.js.map +1 -0
- package/dist/modes/print-mode.d.ts +28 -0
- package/dist/modes/print-mode.d.ts.map +1 -0
- package/dist/modes/print-mode.js +132 -0
- package/dist/modes/print-mode.js.map +1 -0
- package/dist/modes/rpc/in-process-rpc-client.d.ts +31 -0
- package/dist/modes/rpc/in-process-rpc-client.d.ts.map +1 -0
- package/dist/modes/rpc/in-process-rpc-client.js +63 -0
- package/dist/modes/rpc/in-process-rpc-client.js.map +1 -0
- package/dist/modes/rpc/iroh-remote-agent-runtime.d.ts +61 -0
- package/dist/modes/rpc/iroh-remote-agent-runtime.d.ts.map +1 -0
- package/dist/modes/rpc/iroh-remote-agent-runtime.js +155 -0
- package/dist/modes/rpc/iroh-remote-agent-runtime.js.map +1 -0
- package/dist/modes/rpc/iroh-remote-rpc-mode.d.ts +69 -0
- package/dist/modes/rpc/iroh-remote-rpc-mode.d.ts.map +1 -0
- package/dist/modes/rpc/iroh-remote-rpc-mode.js +1223 -0
- package/dist/modes/rpc/iroh-remote-rpc-mode.js.map +1 -0
- package/dist/modes/rpc/jsonl.d.ts +2 -0
- package/dist/modes/rpc/jsonl.d.ts.map +1 -0
- package/dist/modes/rpc/jsonl.js +2 -0
- package/dist/modes/rpc/jsonl.js.map +1 -0
- package/dist/modes/rpc/rpc-client-base.d.ts +209 -0
- package/dist/modes/rpc/rpc-client-base.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client-base.js +530 -0
- package/dist/modes/rpc/rpc-client-base.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +50 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client.js +190 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -0
- package/dist/modes/rpc/rpc-command-dispatcher.d.ts +43 -0
- package/dist/modes/rpc/rpc-command-dispatcher.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-command-dispatcher.js +613 -0
- package/dist/modes/rpc/rpc-command-dispatcher.js.map +1 -0
- package/dist/modes/rpc/rpc-command-validation.d.ts +2 -0
- package/dist/modes/rpc/rpc-command-validation.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-command-validation.js +207 -0
- package/dist/modes/rpc/rpc-command-validation.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts +48 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-mode.js +1089 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-transport-client.d.ts +26 -0
- package/dist/modes/rpc/rpc-transport-client.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-transport-client.js +76 -0
- package/dist/modes/rpc/rpc-transport-client.js.map +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +2 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-types.js +2 -0
- package/dist/modes/rpc/rpc-types.js.map +1 -0
- package/dist/package-manager-cli.d.ts +28 -0
- package/dist/package-manager-cli.d.ts.map +1 -0
- package/dist/package-manager-cli.js +667 -0
- package/dist/package-manager-cli.js.map +1 -0
- package/dist/remote/integrated-runtime-retention.d.ts +17 -0
- package/dist/remote/integrated-runtime-retention.d.ts.map +1 -0
- package/dist/remote/integrated-runtime-retention.js +62 -0
- package/dist/remote/integrated-runtime-retention.js.map +1 -0
- package/dist/remote/iroh-native-adapter.cjs +19 -0
- package/dist/sea/cli.d.ts +4 -0
- package/dist/sea/cli.d.ts.map +1 -0
- package/dist/sea/cli.js +4 -0
- package/dist/sea/cli.js.map +1 -0
- package/dist/sea/register-bedrock.d.ts +2 -0
- package/dist/sea/register-bedrock.d.ts.map +1 -0
- package/dist/sea/register-bedrock.js +4 -0
- package/dist/sea/register-bedrock.js.map +1 -0
- package/dist/store/catalog.d.ts +57 -0
- package/dist/store/catalog.d.ts.map +1 -0
- package/dist/store/catalog.js +331 -0
- package/dist/store/catalog.js.map +1 -0
- package/dist/store/inspector.d.ts +36 -0
- package/dist/store/inspector.d.ts.map +1 -0
- package/dist/store/inspector.js +578 -0
- package/dist/store/inspector.js.map +1 -0
- package/dist/store/install-plan.d.ts +26 -0
- package/dist/store/install-plan.d.ts.map +1 -0
- package/dist/store/install-plan.js +80 -0
- package/dist/store/install-plan.js.map +1 -0
- package/dist/store/render.d.ts +11 -0
- package/dist/store/render.d.ts.map +1 -0
- package/dist/store/render.js +153 -0
- package/dist/store/render.js.map +1 -0
- package/dist/store/resolver.d.ts +22 -0
- package/dist/store/resolver.d.ts.map +1 -0
- package/dist/store/resolver.js +207 -0
- package/dist/store/resolver.js.map +1 -0
- package/dist/store/store-cli.d.ts +7 -0
- package/dist/store/store-cli.d.ts.map +1 -0
- package/dist/store/store-cli.js +636 -0
- package/dist/store/store-cli.js.map +1 -0
- package/dist/store/targets.d.ts +21 -0
- package/dist/store/targets.d.ts.map +1 -0
- package/dist/store/targets.js +55 -0
- package/dist/store/targets.js.map +1 -0
- package/dist/utils/ansi.d.ts +2 -0
- package/dist/utils/ansi.d.ts.map +1 -0
- package/dist/utils/ansi.js +52 -0
- package/dist/utils/ansi.js.map +1 -0
- package/dist/utils/changelog.d.ts +22 -0
- package/dist/utils/changelog.d.ts.map +1 -0
- package/dist/utils/changelog.js +165 -0
- package/dist/utils/changelog.js.map +1 -0
- package/dist/utils/child-process.d.ts +18 -0
- package/dist/utils/child-process.d.ts.map +1 -0
- package/dist/utils/child-process.js +106 -0
- package/dist/utils/child-process.js.map +1 -0
- package/dist/utils/clipboard-image.d.ts +11 -0
- package/dist/utils/clipboard-image.d.ts.map +1 -0
- package/dist/utils/clipboard-image.js +245 -0
- package/dist/utils/clipboard-image.js.map +1 -0
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +94 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/deprecation.d.ts +4 -0
- package/dist/utils/deprecation.d.ts.map +1 -0
- package/dist/utils/deprecation.js +13 -0
- package/dist/utils/deprecation.js.map +1 -0
- package/dist/utils/durable-atomic-write.d.ts +46 -0
- package/dist/utils/durable-atomic-write.d.ts.map +1 -0
- package/dist/utils/durable-atomic-write.js +104 -0
- package/dist/utils/durable-atomic-write.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +8 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +26 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/fs-watch.d.ts +5 -0
- package/dist/utils/fs-watch.d.ts.map +1 -0
- package/dist/utils/fs-watch.js +25 -0
- package/dist/utils/fs-watch.js.map +1 -0
- package/dist/utils/git.d.ts +26 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +195 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/html.d.ts +7 -0
- package/dist/utils/html.d.ts.map +1 -0
- package/dist/utils/html.js +40 -0
- package/dist/utils/html.js.map +1 -0
- package/dist/utils/ignore-files.d.ts +5 -0
- package/dist/utils/ignore-files.d.ts.map +1 -0
- package/dist/utils/ignore-files.js +58 -0
- package/dist/utils/ignore-files.js.map +1 -0
- package/dist/utils/image-codec.d.ts +22 -0
- package/dist/utils/image-codec.d.ts.map +1 -0
- package/dist/utils/image-codec.js +35 -0
- package/dist/utils/image-codec.js.map +1 -0
- package/dist/utils/image-convert.d.ts +9 -0
- package/dist/utils/image-convert.d.ts.map +1 -0
- package/dist/utils/image-convert.js +26 -0
- package/dist/utils/image-convert.js.map +1 -0
- package/dist/utils/image-resize-core.d.ts +31 -0
- package/dist/utils/image-resize-core.d.ts.map +1 -0
- package/dist/utils/image-resize-core.js +181 -0
- package/dist/utils/image-resize-core.js.map +1 -0
- package/dist/utils/image-resize-worker.d.ts +2 -0
- package/dist/utils/image-resize-worker.d.ts.map +1 -0
- package/dist/utils/image-resize-worker.js +31 -0
- package/dist/utils/image-resize-worker.js.map +1 -0
- package/dist/utils/image-resize.d.ts +15 -0
- package/dist/utils/image-resize.d.ts.map +1 -0
- package/dist/utils/image-resize.js +92 -0
- package/dist/utils/image-resize.js.map +1 -0
- package/dist/utils/json.d.ts +3 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +7 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/mime.d.ts +3 -0
- package/dist/utils/mime.d.ts.map +1 -0
- package/dist/utils/mime.js +69 -0
- package/dist/utils/mime.js.map +1 -0
- package/dist/utils/npm-spec.d.ts +9 -0
- package/dist/utils/npm-spec.d.ts.map +1 -0
- package/dist/utils/npm-spec.js +15 -0
- package/dist/utils/npm-spec.js.map +1 -0
- package/dist/utils/open-browser.d.ts +9 -0
- package/dist/utils/open-browser.d.ts.map +1 -0
- package/dist/utils/open-browser.js +22 -0
- package/dist/utils/open-browser.js.map +1 -0
- package/dist/utils/paths.d.ts +31 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +92 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/private-files.d.ts +21 -0
- package/dist/utils/private-files.d.ts.map +1 -0
- package/dist/utils/private-files.js +103 -0
- package/dist/utils/private-files.js.map +1 -0
- package/dist/utils/process-env.d.ts +2 -0
- package/dist/utils/process-env.d.ts.map +1 -0
- package/dist/utils/process-env.js +31 -0
- package/dist/utils/process-env.js.map +1 -0
- package/dist/utils/shell.d.ts +30 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +195 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/sleep.d.ts +5 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +17 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/utils/syntax-highlight.d.ts +18 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -0
- package/dist/utils/syntax-highlight.js +139 -0
- package/dist/utils/syntax-highlight.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +3 -0
- package/dist/utils/tools-manager.d.ts.map +1 -0
- package/dist/utils/tools-manager.js +328 -0
- package/dist/utils/tools-manager.js.map +1 -0
- package/dist/utils/version-check.d.ts +15 -0
- package/dist/utils/version-check.d.ts.map +1 -0
- package/dist/utils/version-check.js +61 -0
- package/dist/utils/version-check.js.map +1 -0
- package/dist/utils/volt-user-agent.d.ts +2 -0
- package/dist/utils/volt-user-agent.d.ts.map +1 -0
- package/dist/utils/volt-user-agent.js +5 -0
- package/dist/utils/volt-user-agent.js.map +1 -0
- package/dist/utils/windows-self-update.d.ts +3 -0
- package/dist/utils/windows-self-update.d.ts.map +1 -0
- package/dist/utils/windows-self-update.js +77 -0
- package/dist/utils/windows-self-update.js.map +1 -0
- package/docs/compaction.md +394 -0
- package/docs/containerization.md +111 -0
- package/docs/custom-provider.md +737 -0
- package/docs/daemon.md +190 -0
- package/docs/development.md +70 -0
- package/docs/docs.json +176 -0
- package/docs/extensions.md +2692 -0
- package/docs/images/exy.png +0 -0
- package/docs/images/interactive-mode.png +0 -0
- package/docs/images/tree-view.png +0 -0
- package/docs/index.md +82 -0
- package/docs/iroh-remote-access-design.md +340 -0
- package/docs/iroh-remote-protocol.md +431 -0
- package/docs/json.md +87 -0
- package/docs/keybindings.md +200 -0
- package/docs/live-shared-session-daemon-design.md +1090 -0
- package/docs/lsp.md +143 -0
- package/docs/mcp.md +1044 -0
- package/docs/models.md +495 -0
- package/docs/packages.md +230 -0
- package/docs/prompt-templates.md +108 -0
- package/docs/providers.md +274 -0
- package/docs/quickstart.md +165 -0
- package/docs/rpc.md +2050 -0
- package/docs/sdk.md +1267 -0
- package/docs/security.md +139 -0
- package/docs/session-format.md +412 -0
- package/docs/sessions.md +145 -0
- package/docs/settings.md +371 -0
- package/docs/shell-aliases.md +13 -0
- package/docs/skills.md +243 -0
- package/docs/subagents-design.md +419 -0
- package/docs/terminal-setup.md +148 -0
- package/docs/termux.md +127 -0
- package/docs/themes.md +295 -0
- package/docs/tla/ClientAuth.cfg +16 -0
- package/docs/tla/ClientAuth.tla +205 -0
- package/docs/tla/ClientConn.cfg +16 -0
- package/docs/tla/ClientConn.tla +265 -0
- package/docs/tla/LeaseBroker.cfg +43 -0
- package/docs/tla/LeaseBroker.tla +563 -0
- package/docs/tla/PLAN.md +240 -0
- package/docs/tla/PushOrdering.cfg +17 -0
- package/docs/tla/PushOrdering.tla +183 -0
- package/docs/tla/README.md +205 -0
- package/docs/tla/RelayViewer.cfg +26 -0
- package/docs/tla/RelayViewer.tla +299 -0
- package/docs/tla/SessionTarget.cfg +18 -0
- package/docs/tla/SessionTarget.tla +192 -0
- package/docs/tla/check.sh +34 -0
- package/docs/tmux.md +63 -0
- package/docs/tui.md +949 -0
- package/docs/usage.md +482 -0
- package/docs/windows.md +17 -0
- package/docs/worktrees-design.md +605 -0
- package/examples/README.md +28 -0
- package/examples/extensions/README.md +211 -0
- package/examples/extensions/auto-commit-on-exit.ts +49 -0
- package/examples/extensions/bash-spawn-hook.ts +30 -0
- package/examples/extensions/bookmark.ts +50 -0
- package/examples/extensions/border-status-editor.ts +150 -0
- package/examples/extensions/built-in-tool-renderer.ts +249 -0
- package/examples/extensions/claude-rules.ts +86 -0
- package/examples/extensions/commands.ts +72 -0
- package/examples/extensions/confirm-destructive.ts +59 -0
- package/examples/extensions/custom-compaction.ts +127 -0
- package/examples/extensions/custom-footer.ts +64 -0
- package/examples/extensions/custom-header.ts +72 -0
- package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/examples/extensions/custom-provider-anthropic/package.json +19 -0
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +400 -0
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
- package/examples/extensions/dirty-repo-guard.ts +56 -0
- package/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/examples/extensions/dynamic-resources/dynamic.json +79 -0
- package/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/examples/extensions/dynamic-resources/index.ts +15 -0
- package/examples/extensions/dynamic-tools.ts +74 -0
- package/examples/extensions/event-bus.ts +43 -0
- package/examples/extensions/file-trigger.ts +41 -0
- package/examples/extensions/git-checkpoint.ts +53 -0
- package/examples/extensions/git-merge-and-resolve.ts +115 -0
- package/examples/extensions/github-issue-autocomplete.ts +185 -0
- package/examples/extensions/gondolin/index.ts +531 -0
- package/examples/extensions/gondolin/package-lock.json +185 -0
- package/examples/extensions/gondolin/package.json +19 -0
- package/examples/extensions/handoff.ts +191 -0
- package/examples/extensions/hello.ts +26 -0
- package/examples/extensions/hidden-thinking-label.ts +53 -0
- package/examples/extensions/inline-bash.ts +94 -0
- package/examples/extensions/input-transform-streaming.ts +39 -0
- package/examples/extensions/input-transform.ts +43 -0
- package/examples/extensions/interactive-shell.ts +196 -0
- package/examples/extensions/mac-system-theme.ts +47 -0
- package/examples/extensions/message-renderer.ts +59 -0
- package/examples/extensions/minimal-mode.ts +426 -0
- package/examples/extensions/modal-editor.ts +85 -0
- package/examples/extensions/model-status.ts +31 -0
- package/examples/extensions/notify.ts +55 -0
- package/examples/extensions/overlay-qa-tests.ts +1450 -0
- package/examples/extensions/overlay-test.ts +153 -0
- package/examples/extensions/permission-gate.ts +34 -0
- package/examples/extensions/pirate.ts +47 -0
- package/examples/extensions/plan-mode/README.md +65 -0
- package/examples/extensions/plan-mode/index.ts +340 -0
- package/examples/extensions/plan-mode/utils.ts +168 -0
- package/examples/extensions/preset.ts +436 -0
- package/examples/extensions/project-trust.ts +64 -0
- package/examples/extensions/prompt-customizer.ts +97 -0
- package/examples/extensions/protected-paths.ts +30 -0
- package/examples/extensions/provider-payload.ts +18 -0
- package/examples/extensions/qna.ts +122 -0
- package/examples/extensions/question.ts +277 -0
- package/examples/extensions/questionnaire.ts +440 -0
- package/examples/extensions/rainbow-editor.ts +88 -0
- package/examples/extensions/reload-runtime.ts +37 -0
- package/examples/extensions/rpc-demo.ts +118 -0
- package/examples/extensions/sandbox/index.ts +321 -0
- package/examples/extensions/sandbox/package-lock.json +92 -0
- package/examples/extensions/sandbox/package.json +19 -0
- package/examples/extensions/send-user-message.ts +97 -0
- package/examples/extensions/session-name.ts +27 -0
- package/examples/extensions/shutdown-command.ts +63 -0
- package/examples/extensions/snake.ts +343 -0
- package/examples/extensions/space-invaders.ts +560 -0
- package/examples/extensions/ssh.ts +220 -0
- package/examples/extensions/status-line.ts +32 -0
- package/examples/extensions/structured-output.ts +65 -0
- package/examples/extensions/subagent/README.md +175 -0
- package/examples/extensions/subagent/agents/planner.md +37 -0
- package/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/examples/extensions/subagent/agents/scout.md +50 -0
- package/examples/extensions/subagent/agents/worker.md +24 -0
- package/examples/extensions/subagent/agents.ts +126 -0
- package/examples/extensions/subagent/index.ts +1009 -0
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/examples/extensions/subagent/prompts/implement.md +10 -0
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/examples/extensions/summarize.ts +206 -0
- package/examples/extensions/system-prompt-header.ts +17 -0
- package/examples/extensions/tic-tac-toe.ts +1008 -0
- package/examples/extensions/timed-confirm.ts +70 -0
- package/examples/extensions/titlebar-spinner.ts +58 -0
- package/examples/extensions/todo.ts +297 -0
- package/examples/extensions/tool-override.ts +144 -0
- package/examples/extensions/tools.ts +146 -0
- package/examples/extensions/trigger-compact.ts +50 -0
- package/examples/extensions/truncated-tool.ts +195 -0
- package/examples/extensions/widget-placement.ts +9 -0
- package/examples/extensions/with-deps/index.ts +32 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +22 -0
- package/examples/extensions/working-indicator.ts +123 -0
- package/examples/extensions/working-message-test.ts +25 -0
- package/examples/remote/firebase-push-relay/README.md +79 -0
- package/examples/remote/firebase-push-relay/firebase.json +12 -0
- package/examples/remote/firebase-push-relay/firestore.indexes.json +11 -0
- package/examples/remote/firebase-push-relay/firestore.rules +9 -0
- package/examples/remote/firebase-push-relay/functions/core.js +511 -0
- package/examples/remote/firebase-push-relay/functions/core.test.js +273 -0
- package/examples/remote/firebase-push-relay/functions/index.js +413 -0
- package/examples/remote/firebase-push-relay/functions/package-lock.json +2974 -0
- package/examples/remote/firebase-push-relay/functions/package.json +18 -0
- package/examples/remote/iroh-sidecar/README.md +211 -0
- package/examples/remote/iroh-sidecar/client.mjs +554 -0
- package/examples/remote/iroh-sidecar/common.mjs +195 -0
- package/examples/remote/iroh-sidecar/host.mjs +4 -0
- package/examples/remote/iroh-sidecar/package-lock.json +213 -0
- package/examples/remote/iroh-sidecar/package.json +13 -0
- package/examples/remote/iroh-sidecar/source-aware-run.mjs +41 -0
- package/examples/rpc-extension-ui.ts +632 -0
- package/examples/sdk/01-minimal.ts +26 -0
- package/examples/sdk/02-custom-model.ts +53 -0
- package/examples/sdk/03-custom-prompt.ts +70 -0
- package/examples/sdk/04-skills.ts +55 -0
- package/examples/sdk/05-tools.ts +48 -0
- package/examples/sdk/06-extensions.ts +94 -0
- package/examples/sdk/07-context-files.ts +42 -0
- package/examples/sdk/08-prompt-templates.ts +51 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +52 -0
- package/examples/sdk/10-settings.ts +53 -0
- package/examples/sdk/11-sessions.ts +52 -0
- package/examples/sdk/12-full-control.ts +78 -0
- package/examples/sdk/13-session-runtime.ts +67 -0
- package/examples/sdk/README.md +147 -0
- package/npm-shrinkwrap.json +3442 -0
- package/package.json +125 -19
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iroh-service.js","sourceRoot":"","sources":["../../src/daemon/iroh-service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"node:buffer\";\nimport { randomUUID } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport type { Socket } from \"node:net\";\nimport { relative, resolve, sep } from \"node:path\";\nimport {\n\tcreateIrohRemoteExplicitAccess,\n\tcreateIrohRemotePresetAccess,\n\tgetIrohRemoteRpcCommandCapabilities,\n\tgetIrohRemoteStreamCapability,\n\tgetMissingIrohRemoteRpcCapability,\n\thasIrohRemoteRpcCapability,\n\tparseIrohRemoteRpcCapabilities,\n\tparseIrohRemoteRpcGrant,\n} from \"../core/remote/iroh/access-grant.ts\";\nimport type { IrohRemoteActiveStreamEntry } from \"../core/remote/iroh/active-stream-registry.ts\";\nimport { IrohRemoteActiveStreamRegistry } from \"../core/remote/iroh/active-stream-registry.ts\";\nimport type { IrohRemoteClientAuthorizationSuccess } from \"../core/remote/iroh/authorization.ts\";\nimport { hashIrohRemotePairingSecret } from \"../core/remote/iroh/authorization.ts\";\nimport {\n\tDEFAULT_IROH_REMOTE_PAIRING_TICKET_TTL_MS,\n\tIrohRemoteHostEngine,\n\ttype IrohRemoteHostHandshakeResult,\n} from \"../core/remote/iroh/engine.ts\";\nimport { createIrohRemoteHandshakeFailure, type IrohRemoteHello } from \"../core/remote/iroh/handshake.ts\";\nimport {\n\tDEFAULT_IROH_REMOTE_HANDSHAKE_MAX_LINE_BYTES,\n\tDEFAULT_IROH_REMOTE_HANDSHAKE_TIMEOUT_MS,\n\twriteIrohRemoteHandshakeResponse,\n} from \"../core/remote/iroh/handshake-reader.ts\";\nimport { resolveIrohRemoteWorkspaceProjectTrusted } from \"../core/remote/iroh/host-policy.ts\";\nimport { IROH_REMOTE_ALPN, resolveIrohRemoteRuntimeToolPolicy } from \"../core/remote/iroh/protocol.ts\";\nimport {\n\tIrohRemoteInMemoryPushNotificationDeduper,\n\ttype IrohRemoteLiveActivityUpdateIntent,\n\ttype IrohRemotePushNotificationDeliveryStatus,\n\tIrohRemotePushNotificationDispatcher,\n\ttype IrohRemotePushNotificationIntent,\n\tIrohRemotePushRelayHttpClient,\n\trevokeIrohRemoteClientPushTargets,\n} from \"../core/remote/iroh/push.ts\";\nimport {\n\tcreateIrohRemoteRpcCapabilityDeniedResponse,\n\tcreateIrohRemoteRpcErrorResponse,\n} from \"../core/remote/iroh/rpc-command-filter.ts\";\nimport type { IrohRemoteClient, IrohRemoteWorkspace, IrohRemoteWorkspaceWorktree } from \"../core/remote/iroh/state.ts\";\nimport {\n\tIROH_REMOTE_WORKSPACE_HAS_WORKTREES_ERROR,\n\ttype IrohRemoteHostStateManager,\n\tisIrohRemoteWorkspaceHasWorktreesError,\n} from \"../core/remote/iroh/state-manager.ts\";\nimport { getIrohRemoteWorkspaceAvailabilityStatus } from \"../core/remote/iroh/workspace.ts\";\nimport type { IrohRemoteWorktreeRpcBackend } from \"../core/remote/iroh/worktree-rpc.ts\";\nimport type { IrohBiStreamLike } from \"../core/rpc/iroh-transport.ts\";\nimport { getDefaultSessionDir } from \"../core/session-manager.ts\";\nimport { getCurrentThemeName, getResolvedThemeColors } from \"../core/theme/runtime.ts\";\nimport { ProjectTrustStore } from \"../core/trust-manager.ts\";\nimport { runIrohRemoteRpcMode } from \"../modes/rpc/iroh-remote-rpc-mode.ts\";\nimport {\n\tCONTROL_RPC_GRANTS_CAPABILITY,\n\tCONTROL_WORKTREES_CAPABILITY,\n\ttype ControlLeaseStatus,\n\ttype ControlRequest,\n\tRELAY_RPC_COMMAND_TYPES,\n\ttype RelayCloseReason,\n} from \"./control-protocol.ts\";\nimport type { ControlConnection } from \"./control-server.ts\";\nimport {\n\ttype ConversationCommandContext,\n\tcreateKeepAwakeRpcResponse,\n\tcreateRemoteRegisterLiveActivityRpcResponse,\n\tcreateRemoteUnregisterLiveActivityRpcResponse,\n\tcreateRpcSuccessResponse,\n\tcreateWebSearchKeyRpcResponse,\n\tgetRpcResponseId,\n\thandleIntegratedConversationRpcCommand,\n\thandleRemoteHostRpcCommand,\n\tREMOTE_SESSION_LIST_CURSOR_TTL_MS,\n\ttype RemoteSessionListCursorEntry,\n\ttoRpcKeepAwakeStatus,\n} from \"./conversation-commands.ts\";\nimport {\n\tcreateIntegratedConversationHandshakeResponse,\n\tdecorateRemoteHostState,\n\ttype RemoteHostResponseContext,\n} from \"./handshake-responses.ts\";\nimport {\n\tcreateConversationOpenError,\n\tgetResolvedTargetSessionId,\n\ttype IntegratedRuntimeEntry,\n\tIntegratedRuntimeRegistry,\n\ttype IntegratedRuntimeSubscriber,\n} from \"./integrated-runtimes.ts\";\nimport {\n\tformatIrohLoadError,\n\ttype IrohConnectionLike,\n\ttype IrohEndpointLike,\n\ttype IrohModuleLike,\n\tloadIrohModule,\n} from \"./iroh-native.ts\";\nimport { IrohRemoteResourceGuard } from \"./iroh-resource-guard.ts\";\nimport { type DaemonAttachClaim, LeaseBroker, type LeaseState } from \"./lease-broker.ts\";\nimport type { VoltdRuntimeServices, VoltdServiceExtension } from \"./main.ts\";\nimport { RELAY_TOKEN_TTL_MS, RelayRegistry } from \"./relay-stream.ts\";\nimport {\n\tcreateSessionManagerTargetStore,\n\ttype IrohRemoteSessionTarget,\n\tresolveIrohRemoteSessionTarget,\n} from \"./session-target.ts\";\nimport { resolveWorktreeCleanupPolicy } from \"./state.ts\";\nimport { createHostThemeTokensFrame, HOST_THEME_TOKENS_FEATURE } from \"./theme-push.ts\";\nimport { ViewerFeedRegistry } from \"./viewer-feed.ts\";\nimport { isPathInside, type WorkspaceDirectoryResolution } from \"./workspace-directory.ts\";\nimport {\n\ttype RemoteSanitizerOverrides,\n\trunWorkspaceDiscoveryStream,\n\trunWorkspaceManagementStream,\n\trunWorktreeManagementStream,\n\tWORKSPACE_UNREGISTERED_CLOSE_REASON,\n\twriteIrohRemoteJsonLine,\n} from \"./workspace-streams.ts\";\nimport {\n\tevaluateWorktreeRelayGate,\n\tgetRegisteredWorkingDirectoryForWorktree,\n\tgetWorkspaceWorktreesDir,\n\tgetWorktreesRoot,\n\thandleWorktreeControlRequest,\n\tisWorktreeControlRequest,\n\tWorktreeManager,\n\ttype WorktreeResult,\n\tWorktreeRetentionSweeper,\n} from \"./worktree-manager.ts\";\n\nconst ACTIVE_REVOKE_CLOSE_REASON = \"revoked\";\nconst ACTIVE_REPLACE_CLOSE_REASON = \"replaced\";\nconst DUPLICATE_CONVERSATION_RETRY_AFTER_MS = 500;\nconst RELAY_OFFER_RETRY_AFTER_MS = 1000;\nconst WORKSPACE_DISCOVERY_STREAM_SESSION_ID = \"$workspace-discovery\";\nconst WORKSPACE_MANAGEMENT_STREAM_SESSION_ID = \"$workspace-management\";\nconst IROH_ENDPOINT_READY_TIMEOUT_MS = 15_000;\nconst IROH_UNAUTHENTICATED_CONNECTION_TIMEOUT_MS = 15_000;\nconst SHUTDOWN_RUNTIME_IDLE_CAP_MS = 60_000;\n\nexport type AuthorityInvalidationRuntime = Pick<IntegratedRuntimeEntry, \"clientNodeId\" | \"workspaceName\" | \"sessionId\">;\n\nexport function collectClientAuthorityInvalidationRuntimes<T extends AuthorityInvalidationRuntime>(\n\tactiveStreams: IrohRemoteActiveStreamRegistry,\n\truntimes: Iterable<T>,\n\tclientNodeId: string,\n): Set<T> {\n\tconst clientEntries = activeStreams.entriesForClientNodeId(clientNodeId);\n\treturn new Set(\n\t\tArray.from(runtimes).filter(\n\t\t\t(runtime) =>\n\t\t\t\truntime.clientNodeId === clientNodeId ||\n\t\t\t\tclientEntries.some(\n\t\t\t\t\t(entry) => entry.workspaceName === runtime.workspaceName && entry.sessionId === runtime.sessionId,\n\t\t\t\t),\n\t\t),\n\t);\n}\n\nexport function collectClientAuthorityInvalidationStreams(\n\tactiveStreams: IrohRemoteActiveStreamRegistry,\n\truntimes: Iterable<AuthorityInvalidationRuntime>,\n\tclientNodeId: string,\n): Set<IrohRemoteActiveStreamEntry> {\n\tconst runtimeList = Array.from(runtimes);\n\tconst entries = new Set(activeStreams.entriesForClientNodeId(clientNodeId));\n\tfor (const runtime of collectClientAuthorityInvalidationRuntimes(activeStreams, runtimeList, clientNodeId)) {\n\t\tfor (const entry of activeStreams.entriesForConversationKey(runtime.workspaceName, runtime.sessionId)) {\n\t\t\tentries.add(entry);\n\t\t}\n\t}\n\treturn entries;\n}\n\nfunction getRelativeWorkingDirectoryForRoot(rootPath: string, cwd: string): string | null | undefined {\n\tconst root = resolve(rootPath);\n\tconst child = resolve(cwd);\n\tif (!isPathInside(root, child)) {\n\t\treturn null;\n\t}\n\tconst relativePath = relative(root, child);\n\treturn relativePath.length === 0 || relativePath === \".\" ? undefined : relativePath.split(sep).join(\"/\");\n}\n\n/**\n * Defensive cap on concurrent in-flight bi-streams per client connection. A\n * well-behaved client keeps only a handful open (one conversation + a few\n * utility streams); an authenticated-but-misbehaving client could otherwise open\n * unbounded concurrent streams, each spawning a runtime attach, and exhaust\n * daemon resources. Hitting the cap closes the connection.\n */\nconst MAX_CONCURRENT_STREAMS_PER_CONNECTION = 64;\n\nlet activeConnectionSequence = 0;\nlet activeStreamSequence = 0;\n\nexport type IrohRelayMode = \"disabled\" | \"development\" | \"production\";\n\n/**\n * The Volt-operated relay fleet. Endpoints bind against these by default\n * (\"production\" mode); the n0 public relays (\"development\" mode) are for\n * development only and must be opted into via VOLT_IROH_RELAY_MODE=development.\n */\nexport const VOLT_PRODUCTION_RELAY_URLS = [\"https://iroh-relay-us-central.volt-cli.dev\"];\n\nexport interface IrohDaemonServiceConfig {\n\trelayMode?: IrohRelayMode;\n\t/**\n\t * Relay server URLs (e.g. \"https://relay.example.com\"). When set (or via\n\t * VOLT_IROH_RELAY_URLS, comma-separated), production mode binds against\n\t * these instead of the built-in Volt fleet, and pairing tickets carry the\n\t * URLs so clients bind against the same relays.\n\t */\n\trelayUrls?: string[];\n\t/**\n\t * Bearer token presented to relay servers configured with\n\t * access.shared_token. Falls back to VOLT_IROH_RELAY_AUTH_TOKEN, then the\n\t * token persisted in daemon state from a previous start.\n\t */\n\trelayAuthToken?: string;\n\tpushRelayUrl?: string;\n\tpushRelayAuthToken?: string;\n\tprofile?: string;\n}\n\nexport interface ResolvedIrohRelayConfig {\n\trelayMode: IrohRelayMode;\n\trelayUrls: string[];\n\twarning?: string;\n}\n\n/**\n * Resolves the effective relay configuration. Precedence: explicit service\n * config, then VOLT_IROH_RELAY_MODE / VOLT_IROH_RELAY_URLS, then the Volt\n * production relay fleet.\n */\nexport function resolveIrohRelayConfig(\n\tconfig: Pick<IrohDaemonServiceConfig, \"relayMode\" | \"relayUrls\">,\n\tenv: Record<string, string | undefined> = process.env,\n): ResolvedIrohRelayConfig {\n\tconst envUrls = parseRelayUrlsEnv(env.VOLT_IROH_RELAY_URLS);\n\tconst envModeValue = env.VOLT_IROH_RELAY_MODE?.trim();\n\tlet envMode: IrohRelayMode | undefined;\n\tlet warning: string | undefined;\n\tif (envModeValue !== undefined && envModeValue !== \"\") {\n\t\tif (envModeValue === \"disabled\" || envModeValue === \"development\" || envModeValue === \"production\") {\n\t\t\tenvMode = envModeValue;\n\t\t} else {\n\t\t\twarning = `ignoring invalid VOLT_IROH_RELAY_MODE \"${envModeValue}\" (expected disabled, development, or production)`;\n\t\t}\n\t}\n\tconst relayMode = config.relayMode ?? envMode ?? \"production\";\n\tconst configuredUrls = config.relayUrls ?? envUrls;\n\tconst relayUrls =\n\t\trelayMode === \"production\" ? (configuredUrls ?? VOLT_PRODUCTION_RELAY_URLS) : (configuredUrls ?? []);\n\treturn { relayMode, relayUrls, ...(warning === undefined ? {} : { warning }) };\n}\n\nfunction parseRelayUrlsEnv(value: string | undefined): string[] | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tconst urls = value\n\t\t.split(\",\")\n\t\t.map((url) => url.trim())\n\t\t.filter((url) => url.length > 0);\n\treturn urls.length > 0 ? urls : undefined;\n}\n\ninterface PendingPairRequest {\n\trequestId: string;\n\tconnectionId: string;\n\tsecretHash: string;\n\texpiresAt: number;\n\ttimer: NodeJS.Timeout;\n}\n\ninterface ClientConnectionRecord {\n\tconnectionId: string;\n\tclose(reason: string): void;\n}\n\ntype RelayPushDeliveryResult =\n\t| { ok: true; status: IrohRemotePushNotificationDeliveryStatus }\n\t| { ok: false; code: string; message: string };\n\nfunction isExpectedApplicationClose(error: unknown): boolean {\n\tconst message = error instanceof Error ? error.message : String(error);\n\treturn (\n\t\tmessage.includes(\"ConnectionLost(ApplicationClosed\") &&\n\t\tmessage.includes(\"error_code: 0\") &&\n\t\t(message.includes('reason: b\"done\"') ||\n\t\t\tmessage.includes(`reason: b\"${ACTIVE_REVOKE_CLOSE_REASON}\"`) ||\n\t\t\tmessage.includes(`reason: b\"${ACTIVE_REPLACE_CLOSE_REASON}\"`) ||\n\t\t\tmessage.includes(`reason: b\"${WORKSPACE_UNREGISTERED_CLOSE_REASON}\"`))\n\t);\n}\n\nfunction closeConnection(connection: IrohConnectionLike, reason: string): void {\n\ttry {\n\t\tconnection.close(0n, Array.from(Buffer.from(reason, \"utf8\")));\n\t} catch {\n\t\t// Transport closure is best-effort; registry/task cleanup must still run.\n\t}\n}\n\nasync function waitForConnectionClose(connection: IrohConnectionLike): Promise<void> {\n\tawait Promise.race([\n\t\tconnection.closed().catch(() => {}),\n\t\tnew Promise((resolveDelay) => {\n\t\t\tsetTimeout(resolveDelay, 500);\n\t\t}),\n\t]);\n}\n\nasync function withTimeout<T>(promise: Promise<T>, timeoutMs: number, message: string): Promise<T> {\n\tlet timeoutId: NodeJS.Timeout | undefined;\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tpromise,\n\t\t\tnew Promise<never>((_, reject) => {\n\t\t\t\ttimeoutId = setTimeout(() => reject(new Error(message)), timeoutMs);\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tclearTimeout(timeoutId);\n\t}\n}\n\nfunction closeIrohRemoteStream(stream: IrohBiStreamLike, _reason?: string): void {\n\tvoid Promise.resolve(stream.send.finish?.()).catch(() => {});\n\tvoid Promise.resolve(stream.recv.stop?.(0n)).catch(() => {});\n}\n\nfunction getRemoteTerminalReason(reason: string): string | undefined {\n\tif (reason === ACTIVE_REVOKE_CLOSE_REASON) {\n\t\treturn \"client_revoked\";\n\t}\n\tif (\n\t\treason === WORKSPACE_UNREGISTERED_CLOSE_REASON ||\n\t\treason === \"workspace_authorization_removed\" ||\n\t\treason === \"lease_transferred\" ||\n\t\treason === \"session_rekeyed_reconnect\"\n\t) {\n\t\treturn reason;\n\t}\n\treturn undefined;\n}\n\n/**\n * The daemon's Iroh host: owns the endpoint identity, pairing, revocation,\n * headless integrated runtimes, workspace/device streams, push dispatch, and\n * the accept loop. Ported from the dissolved src/remote/iroh-host.mjs.\n */\nexport function createIrohDaemonService(config: IrohDaemonServiceConfig = {}): VoltdServiceExtension {\n\treturn (services: VoltdRuntimeServices) => {\n\t\tconst log = services.logger.child(\"iroh\");\n\t\tconst loaded = loadIrohModule();\n\t\tif (!loaded.iroh) {\n\t\t\tlog(\"warn\", formatIrohLoadError(loaded.error));\n\t\t\treturn {\n\t\t\t\tasync handleRequest(connection, request) {\n\t\t\t\t\tif (request.type === \"pair_request\") {\n\t\t\t\t\t\tconnection.send({\n\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\tid: request.id,\n\t\t\t\t\t\t\tcode: \"iroh_unavailable\",\n\t\t\t\t\t\t\tmessage: formatIrohLoadError(loaded.error),\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst service = new IrohDaemonService(loaded.iroh, services, config);\n\t\tvoid service.start();\n\t\treturn {\n\t\t\thandleRequest: (connection, request) => service.handleRequest(connection, request),\n\t\t\tonConnectionClosed: (connection) => service.onControlConnectionClosed(connection),\n\t\t\tonThemeChanged: () => service.onThemeChanged(),\n\t\t\tonKeepAwakeChanged: () => service.onKeepAwakeChanged(),\n\t\t\tstatusExtras: () => service.statusExtras(),\n\t\t\tadmitRelay: (relayId, relayToken, socket, bufferedRemainder) =>\n\t\t\t\tservice.admitRelay(relayId, relayToken, socket, bufferedRemainder),\n\t\t\tshutdown: () => service.shutdown(),\n\t\t};\n\t};\n}\n\nclass IrohDaemonService {\n\tprivate readonly iroh: IrohModuleLike;\n\tprivate readonly services: VoltdRuntimeServices;\n\tprivate readonly relayMode: IrohRelayMode;\n\tprivate readonly relayUrls: string[];\n\tprivate readonly relayAuthToken: string | undefined;\n\tprivate readonly relayConfigWarning: string | undefined;\n\tprivate readonly log: ReturnType<VoltdRuntimeServices[\"logger\"][\"child\"]>;\n\tprivate readonly stateManager: IrohRemoteHostStateManager;\n\tprivate readonly activeStreams = new IrohRemoteActiveStreamRegistry();\n\tprivate readonly clientConnections = new Map<string, Set<ClientConnectionRecord>>();\n\tprivate readonly connectionTasks = new Set<Promise<void>>();\n\tprivate readonly resourceGuard = new IrohRemoteResourceGuard();\n\tprivate readonly pendingPairRequests = new Map<string, PendingPairRequest>();\n\tprivate readonly sessionListCursors = new Map<string, RemoteSessionListCursorEntry>();\n\tprivate readonly pushRelayClient: IrohRemotePushRelayHttpClient;\n\tprivate readonly pushNotificationDeduper = new IrohRemoteInMemoryPushNotificationDeduper();\n\tprivate readonly trustStore: ProjectTrustStore;\n\tprivate readonly runtimes: IntegratedRuntimeRegistry;\n\tprivate readonly worktrees: WorktreeManager;\n\tprivate readonly worktreeRetention: WorktreeRetentionSweeper;\n\tprivate readonly leaseBroker: LeaseBroker;\n\tprivate readonly viewerFeeds: ViewerFeedRegistry;\n\tprivate readonly relays = new RelayRegistry();\n\tprivate endpoint: IrohEndpointLike | undefined;\n\tprivate engine: IrohRemoteHostEngine | undefined;\n\tprivate hostNodeId: string | undefined;\n\tprivate endpointTicket: string | undefined;\n\tprivate shuttingDown = false;\n\tprivate readonly ready: { promise: Promise<void>; resolve: () => void; reject: (error: unknown) => void };\n\n\tconstructor(iroh: IrohModuleLike, services: VoltdRuntimeServices, config: IrohDaemonServiceConfig) {\n\t\tthis.iroh = iroh;\n\t\tthis.services = services;\n\t\tconst relayConfig = resolveIrohRelayConfig(config);\n\t\tthis.relayMode = relayConfig.relayMode;\n\t\tthis.relayUrls = relayConfig.relayUrls;\n\t\tthis.relayConfigWarning = relayConfig.warning;\n\t\tconst envRelayAuthToken = process.env.VOLT_IROH_RELAY_AUTH_TOKEN?.trim();\n\t\tthis.relayAuthToken =\n\t\t\tconfig.relayAuthToken ??\n\t\t\t(envRelayAuthToken !== undefined && envRelayAuthToken !== \"\" ? envRelayAuthToken : undefined) ??\n\t\t\tservices.state.state.settings.relayAuthToken;\n\t\t// Persist a newly seen token so bare restarts keep authenticating against\n\t\t// the relay without re-exporting the env var.\n\t\tif (this.relayAuthToken !== undefined && this.relayAuthToken !== services.state.state.settings.relayAuthToken) {\n\t\t\tservices.state.updateSettings({ relayAuthToken: this.relayAuthToken });\n\t\t}\n\t\tthis.log = services.logger.child(\"iroh\");\n\t\tthis.stateManager = services.stateManager;\n\t\tthis.trustStore = new ProjectTrustStore(services.agentDir);\n\t\tthis.pushRelayClient = new IrohRemotePushRelayHttpClient({\n\t\t\tauthToken: config.pushRelayAuthToken ?? process.env.VOLT_PUSH_RELAY_AUTH_TOKEN,\n\t\t\tbaseUrl: config.pushRelayUrl ?? process.env.VOLT_PUSH_RELAY_URL,\n\t\t});\n\t\tthis.runtimes = new IntegratedRuntimeRegistry({\n\t\t\tagentDir: services.agentDir,\n\t\t\tprofile: config.profile,\n\t\t\tauditLogger: services.auditLogger,\n\t\t\tstateManager: this.stateManager,\n\t\t\tactiveStreams: this.activeStreams,\n\t\t\tdetachedRuntimeTtlMs: () => services.state.state.settings.detachedRuntimeTtlMs,\n\t\t\tgetToolPolicy: (workspace, clientAllowTools) =>\n\t\t\t\tresolveIrohRemoteRuntimeToolPolicy({\n\t\t\t\t\tclientAllowTools,\n\t\t\t\t\tworkspaceAllowTools: workspace.allowedTools,\n\t\t\t\t\tdaemonAllowTools: services.state.state.settings.allowTools,\n\t\t\t\t}),\n\t\t\tgetProjectTrustedForWorkspace: (workspace) =>\n\t\t\t\tresolveIrohRemoteWorkspaceProjectTrusted(workspace, { trustStore: this.trustStore }),\n\t\t\tsetClientLastSessionId: (nodeId, workspace, sessionId) =>\n\t\t\t\tthis.requireEngine().setClientLastSessionId(nodeId, workspace, sessionId),\n\t\t\tresolveWorktree: (workspaceName, hello, targetSessionId) =>\n\t\t\t\tthis.resolveConversationWorktree(workspaceName, hello, targetSessionId),\n\t\t\tresolveWorkingDirectory: (options) => this.resolveConversationWorkingDirectory(options),\n\t\t\tbindWorktreeSession: (workspaceName, worktreeId, sessionId) =>\n\t\t\t\tthis.worktrees.bindSession(workspaceName, worktreeId, sessionId),\n\t\t\tonRuntimeRekeyed: (workspaceName, previousSessionId, sessionId) =>\n\t\t\t\tthis.leaseBroker.rekey(workspaceName, previousSessionId, sessionId),\n\t\t\tonRuntimeDisposed: (entry, reason) => {\n\t\t\t\tthis.leaseBroker.onDaemonRuntimeDisposed(entry.workspaceName, entry.sessionId, reason);\n\t\t\t\tif (entry.worktreeId !== undefined) {\n\t\t\t\t\tthis.worktreeRetention.onRuntimeDisposed(entry.workspaceName, entry.worktreeId);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\tthis.worktrees = new WorktreeManager({\n\t\t\tagentDir: services.agentDir,\n\t\t\tstateManager: this.stateManager,\n\t\t\tauditLogger: services.auditLogger,\n\t\t\thasActiveRuntimeForSession: (workspaceName, sessionId) =>\n\t\t\t\tthis.runtimes.findOwner(workspaceName, sessionId) !== undefined,\n\t\t\tflushState: () => services.state.flush(),\n\t\t});\n\t\tthis.worktreeRetention = new WorktreeRetentionSweeper({\n\t\t\tmanager: this.worktrees,\n\t\t\tstateManager: this.stateManager,\n\t\t\tauditLogger: services.auditLogger,\n\t\t\tgetRetentionPolicy: () => resolveWorktreeCleanupPolicy(services.state.state.settings).retention,\n\t\t});\n\t\tthis.viewerFeeds = new ViewerFeedRegistry({\n\t\t\tsendTo: (connectionId, event) => services.controlServer.sendTo(connectionId, event),\n\t\t});\n\t\tthis.leaseBroker = new LeaseBroker({\n\t\t\tisRuntimeStreaming: (workspaceName, sessionId) =>\n\t\t\t\tthis.runtimes.findOwner(workspaceName, sessionId)?.runtime.session.isBusy ?? false,\n\t\t\twaitForRuntimeIdle: async (workspaceName, sessionId) => {\n\t\t\t\tawait this.runtimes.findOwner(workspaceName, sessionId)?.runtime.session.waitForIdle();\n\t\t\t},\n\t\t\tdisposeRuntime: async (workspaceName, sessionId, reason) => {\n\t\t\t\tconst owner = this.runtimes.findOwner(workspaceName, sessionId);\n\t\t\t\tif (owner) {\n\t\t\t\t\tawait this.runtimes.stopEntry(owner, reason);\n\t\t\t\t}\n\t\t\t},\n\t\t\tclosePhoneStreams: async (workspaceName, sessionId, reason) => {\n\t\t\t\tawait this.closeActiveStreamsForConversationKey(workspaceName, sessionId, reason);\n\t\t\t},\n\t\t\tcloseRelays: (record, reason) => {\n\t\t\t\tfor (const relayId of Array.from(record.relayIds)) {\n\t\t\t\t\tthis.relays.closeActive(relayId, reason);\n\t\t\t\t\t// Unredeemed offers must not linger until the 10s token expiry:\n\t\t\t\t\t// fail the phone's deferred handshake immediately so it retries\n\t\t\t\t\t// against the new lease owner.\n\t\t\t\t\tthis.abortPendingRelay(relayId, reason, \"relay offer cancelled; retry\", RELAY_OFFER_RETRY_AFTER_MS);\n\t\t\t\t}\n\t\t\t},\n\t\t\tonDrainStarted: (record, viewerFeedId) => {\n\t\t\t\tconst owner = this.runtimes.findOwner(record.workspaceName, record.sessionId);\n\t\t\t\tif (owner && record.tuiConnectionId) {\n\t\t\t\t\tthis.viewerFeeds.start(viewerFeedId, record.tuiConnectionId, owner.runtime.session);\n\t\t\t\t}\n\t\t\t},\n\t\t\tonDrainEnded: (_record, viewerFeedId, reason) => {\n\t\t\t\tthis.viewerFeeds.end(viewerFeedId, reason);\n\t\t\t},\n\t\t\taudit: (event) => {\n\t\t\t\tvoid this.logAudit({\n\t\t\t\t\ttype: event.type,\n\t\t\t\t\tworkspace: event.workspaceName,\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tdetails: { sessionId: event.sessionId, ...event.details },\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t\tlet readyResolve: () => void = () => {};\n\t\tlet readyReject: (error: unknown) => void = () => {};\n\t\tconst readyPromise = new Promise<void>((resolve, reject) => {\n\t\t\treadyResolve = resolve;\n\t\t\treadyReject = reject;\n\t\t});\n\t\treadyPromise.catch(() => {});\n\t\tthis.ready = { promise: readyPromise, resolve: readyResolve, reject: readyReject };\n\t}\n\n\tprivate requireEngine(): IrohRemoteHostEngine {\n\t\tif (!this.engine) {\n\t\t\tthrow new Error(\"iroh host engine is not ready\");\n\t\t}\n\t\treturn this.engine;\n\t}\n\n\tprivate async pruneWorktreesOnStart(): Promise<void> {\n\t\tif (!resolveWorktreeCleanupPolicy(this.services.state.state.settings).pruneOnStart) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconst state = await this.stateManager.getState();\n\t\t\tconst workspacesWithRecords = new Set((state.worktrees ?? []).map((worktree) => worktree.workspaceName));\n\t\t\tfor (const workspace of state.workspaces) {\n\t\t\t\t// Skip workspaces with neither records nor checkout directories: no git\n\t\t\t\t// subprocesses or audit noise on the common no-worktrees start.\n\t\t\t\tif (\n\t\t\t\t\t!workspacesWithRecords.has(workspace.name) &&\n\t\t\t\t\t!existsSync(getWorkspaceWorktreesDir(this.services.agentDir, workspace.path))\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this.worktrees.prune(workspace);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.log(\"warn\", \"worktree prune failed on start\", {\n\t\t\t\t\t\tworkspace: workspace.name,\n\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Startup prune is best-effort; a manual `volt remote worktree prune` covers it.\n\t\t}\n\t}\n\n\tprivate getResponseContext(): RemoteHostResponseContext {\n\t\treturn {\n\t\t\thostNodeId: this.hostNodeId,\n\t\t\trelayMode: this.relayMode,\n\t\t\t...(this.relayMode === \"production\" ? { relayUrls: this.relayUrls } : {}),\n\t\t};\n\t}\n\n\tprivate async isAuthorizationGrantCurrent(authorization: IrohRemoteClientAuthorizationSuccess): Promise<boolean> {\n\t\tconst client = await this.stateManager.getClient(authorization.client.nodeId);\n\t\treturn client?.rpcGrant.revision === authorization.client.rpcGrant.revision;\n\t}\n\n\tprivate getCommandContext(conversation?: {\n\t\tworkspaceName: string;\n\t\tworkspacePath?: string;\n\t\tentry: IntegratedRuntimeEntry;\n\t\tstreamEntry?: IrohRemoteActiveStreamEntry;\n\t}): ConversationCommandContext {\n\t\treturn {\n\t\t\tagentDir: this.services.agentDir,\n\t\t\tauditLogger: this.services.auditLogger,\n\t\t\thostEngine: this.engine,\n\t\t\tstateManager: this.stateManager,\n\t\t\tsessionListCursors: this.sessionListCursors,\n\t\t\tsessionListCursorTtlMs: REMOTE_SESSION_LIST_CURSOR_TTL_MS,\n\t\t\tlistRuntimeStates: (workspaceName) => {\n\t\t\t\tconst states = new Map<string, Exclude<LeaseState, \"unowned\">>();\n\t\t\t\tfor (const record of this.leaseBroker.list()) {\n\t\t\t\t\tif (record.workspaceName === workspaceName && record.state !== \"unowned\") {\n\t\t\t\t\t\tstates.set(record.sessionId, record.state);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn states;\n\t\t\t},\n\t\t\tkeepAwake: this.services.keepAwake,\n\t\t\tonKeepAwakeSetting: (enabled) => this.services.state.updateSettings({ keepAwakeEnabled: enabled }),\n\t\t\twebSearchKey: this.services.webSearchKey,\n\t\t\tcreateWorktreeBackend: (workspace) => this.createWorktreeRpcBackend(workspace),\n\t\t\tonWorkspaceUnregistered: async (workspaceName) => {\n\t\t\t\t// Unregistering the conversation's own workspace keeps the requesting\n\t\t\t\t// stream and runtime alive so the response can still be delivered\n\t\t\t\t// (mirrors the workspace-management stream path).\n\t\t\t\tconst excludeOwn = conversation !== undefined && workspaceName === conversation.workspaceName;\n\t\t\t\tconst workspacePath = excludeOwn ? conversation.workspacePath : undefined;\n\t\t\t\tawait this.cleanupUnregisteredWorkspace(\n\t\t\t\t\tworkspaceName,\n\t\t\t\t\texcludeOwn\n\t\t\t\t\t\t? { streamEntry: conversation.streamEntry, runtimeEntry: conversation.entry, workspacePath }\n\t\t\t\t\t\t: {},\n\t\t\t\t);\n\t\t\t},\n\t\t\t...(conversation === undefined\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\tisDraining: () =>\n\t\t\t\t\t\t\tthis.leaseBroker.isDraining(conversation.workspaceName, conversation.entry.sessionId),\n\t\t\t\t\t\tisSubagentSession: () =>\n\t\t\t\t\t\t\tconversation.entry.subagentId !== undefined || conversation.entry.parentSessionId !== undefined,\n\t\t\t\t\t}),\n\t\t};\n\t}\n\n\tasync start(): Promise<void> {\n\t\tlet endpoint: IrohEndpointLike | undefined;\n\t\tif (this.relayConfigWarning !== undefined) {\n\t\t\tthis.log(\"warn\", this.relayConfigWarning);\n\t\t}\n\t\t// Reconcile worktree records/checkouts before the endpoint starts taking\n\t\t// conversations (design §5.3 pruneOnStart; default on, quarantine-only).\n\t\tawait this.pruneWorktreesOnStart();\n\t\ttry {\n\t\t\tconst builder = this.iroh.Endpoint.builder();\n\t\t\tif (this.relayMode === \"development\") {\n\t\t\t\tthis.log(\n\t\t\t\t\t\"warn\",\n\t\t\t\t\t\"using public n0 relays (development only; unset VOLT_IROH_RELAY_MODE for the Volt relays)\",\n\t\t\t\t);\n\t\t\t\tthis.iroh.presetN0(builder);\n\t\t\t} else if (this.relayMode === \"production\") {\n\t\t\t\tif (this.relayUrls.length === 0) {\n\t\t\t\t\tthrow new Error(\"relayMode production requires relay URLs (config.relayUrls or VOLT_IROH_RELAY_URLS)\");\n\t\t\t\t}\n\t\t\t\tthis.iroh.presetN0DisableRelay(builder);\n\t\t\t\tif (this.relayAuthToken !== undefined) {\n\t\t\t\t\tconst relayMap = this.iroh.RelayMap.empty();\n\t\t\t\t\tfor (const url of this.relayUrls) {\n\t\t\t\t\t\trelayMap.insert({ url, authToken: this.relayAuthToken });\n\t\t\t\t\t}\n\t\t\t\t\tbuilder.relayMode(this.iroh.RelayMode.custom(relayMap));\n\t\t\t\t} else {\n\t\t\t\t\tbuilder.relayMode(this.iroh.RelayMode.customFromUrls(this.relayUrls));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.iroh.presetMinimal(builder);\n\t\t\t\tbuilder.relayMode(this.iroh.RelayMode.disabled());\n\t\t\t}\n\t\t\tconst secretKey = this.services.state.state.irohSecretKey;\n\t\t\tif (secretKey) {\n\t\t\t\tbuilder.secretKey(secretKey);\n\t\t\t}\n\t\t\tbuilder.alpns([Array.from(Buffer.from(IROH_REMOTE_ALPN, \"utf8\"))]);\n\t\t\tendpoint = await builder.bind();\n\t\t\tif (!secretKey) {\n\t\t\t\tconst boundKey = endpoint.secretKey().toBytes();\n\t\t\t\tthis.services.state.setHostState({\n\t\t\t\t\t...this.services.state.getHostState(),\n\t\t\t\t\thostSecretKey: boundKey,\n\t\t\t\t});\n\t\t\t\t// Persist the freshly minted identity synchronously before the accept\n\t\t\t\t// loop starts taking pairings. A crash/SIGKILL inside the 250ms debounce\n\t\t\t\t// window would otherwise lose the key, and every phone paired against\n\t\t\t\t// this endpoint would be talking to a node id the daemon can never\n\t\t\t\t// reproduce on restart.\n\t\t\t\tawait this.services.state.flush();\n\t\t\t}\n\t\t\tif (this.relayMode !== \"disabled\") {\n\t\t\t\tawait endpoint.online();\n\t\t\t}\n\t\t\tthis.endpoint = endpoint;\n\t\t\tthis.hostNodeId = endpoint.id().toString();\n\t\t\tthis.endpointTicket = this.iroh.EndpointTicket.fromAddr(endpoint.addr()).toString();\n\t\t\tthis.engine = new IrohRemoteHostEngine({\n\t\t\t\tauditLogger: this.services.auditLogger,\n\t\t\t\tclassifyWorkspaceAvailability: getIrohRemoteWorkspaceAvailabilityStatus,\n\t\t\t\thostNodeId: this.hostNodeId,\n\t\t\t\trelayMode: this.relayMode,\n\t\t\t\t...(this.relayMode === \"production\" ? { relayUrls: this.relayUrls } : {}),\n\t\t\t\tstateManager: this.stateManager,\n\t\t\t\tvalidateWorkspace: async (workspace) =>\n\t\t\t\t\t(await getIrohRemoteWorkspaceAvailabilityStatus(workspace)) === \"available\",\n\t\t\t\tworkspace: { name: \"voltd\", path: this.services.agentDir },\n\t\t\t});\n\t\t\tthis.ready.resolve();\n\t\t\tthis.log(\"info\", `iroh endpoint online`, {\n\t\t\t\thostNodeId: this.hostNodeId,\n\t\t\t\trelayMode: this.relayMode,\n\t\t\t\t...(this.relayMode === \"production\" ? { relayUrls: this.relayUrls } : {}),\n\t\t\t});\n\t\t\tvoid this.acceptLoop(endpoint);\n\t\t} catch (error) {\n\t\t\tif (endpoint) {\n\t\t\t\t// bind() succeeded but a later start step (e.g. online()) failed before\n\t\t\t\t// the endpoint was adopted; close it so its QUIC socket is not leaked.\n\t\t\t\ttry {\n\t\t\t\t\tawait endpoint.close();\n\t\t\t\t} catch {}\n\t\t\t\tif (this.endpoint === endpoint) {\n\t\t\t\t\tthis.endpoint = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.ready.reject(error);\n\t\t\tthis.log(\"error\", `failed to start iroh endpoint: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate async acceptLoop(endpoint: IrohEndpointLike): Promise<void> {\n\t\twhile (!this.shuttingDown) {\n\t\t\tlet incoming: Awaited<ReturnType<IrohEndpointLike[\"acceptNext\"]>>;\n\t\t\ttry {\n\t\t\t\tincoming = await endpoint.acceptNext();\n\t\t\t} catch (error) {\n\t\t\t\tif (this.shuttingDown) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthis.log(\"error\", `accept failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!incoming) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst connectionAdmission = this.resourceGuard.tryAcquireConnectionTask();\n\t\t\tif (!connectionAdmission.ok) {\n\t\t\t\tlet refused = true;\n\t\t\t\ttry {\n\t\t\t\t\tawait incoming.refuse();\n\t\t\t\t} catch {\n\t\t\t\t\trefused = false;\n\t\t\t\t}\n\t\t\t\tawait this.logAudit({\n\t\t\t\t\ttype: \"iroh_security_connection_limit\",\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: \"incoming connection refused at daemon connection-task limit\",\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tlimit: connectionAdmission.limit,\n\t\t\t\t\t\trefused,\n\t\t\t\t\t\tscope: connectionAdmission.scope,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst task = this.handleConnection(incoming)\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (!isExpectedApplicationClose(error)) {\n\t\t\t\t\t\tthis.log(\n\t\t\t\t\t\t\t\"error\",\n\t\t\t\t\t\t\t`connection error: ${error instanceof Error ? (error.stack ?? error.message) : String(error)}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tthis.connectionTasks.delete(task);\n\t\t\t\t\tconnectionAdmission.lease.release();\n\t\t\t\t});\n\t\t\tthis.connectionTasks.add(task);\n\t\t}\n\t}\n\n\tprivate async handleConnection(\n\t\tincoming: NonNullable<Awaited<ReturnType<IrohEndpointLike[\"acceptNext\"]>>>,\n\t): Promise<void> {\n\t\tlet connection: IrohConnectionLike;\n\t\ttry {\n\t\t\tconst accepting = await incoming.accept();\n\t\t\tconnection = await accepting.connect();\n\t\t} catch {\n\t\t\tawait this.logAudit({\n\t\t\t\ttype: \"iroh_security_transport_rejected\",\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"incoming transport handshake failed\",\n\t\t\t\tdetails: { phase: \"transport_connect\" },\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconnection.setMaxConcurrentBiStreams(BigInt(MAX_CONCURRENT_STREAMS_PER_CONNECTION));\n\t\t} catch {\n\t\t\tcloseConnection(connection, \"stream_limit_configuration_failed\");\n\t\t\tawait waitForConnectionClose(connection);\n\t\t\tawait this.logAudit({\n\t\t\t\ttype: \"iroh_security_transport_rejected\",\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"connected transport could not enforce the inbound stream limit\",\n\t\t\t\tdetails: { phase: \"stream_limit_configuration\" },\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tlet remoteId: string;\n\t\ttry {\n\t\t\tremoteId = connection.remoteId().toString();\n\t\t} catch {\n\t\t\tcloseConnection(connection, \"invalid_remote_identity\");\n\t\t\tawait waitForConnectionClose(connection);\n\t\t\tawait this.logAudit({\n\t\t\t\ttype: \"iroh_security_transport_rejected\",\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"connected transport did not expose a valid remote identity\",\n\t\t\t\tdetails: { phase: \"remote_identity\" },\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst nodeConnectionAdmission = this.resourceGuard.tryAcquireNodeConnection(remoteId);\n\t\tif (!nodeConnectionAdmission.ok) {\n\t\t\tcloseConnection(connection, \"node_connection_limit\");\n\t\t\tawait waitForConnectionClose(connection);\n\t\t\tawait this.logAudit({\n\t\t\t\ttype: \"iroh_security_connection_limit\",\n\t\t\t\tclientNodeId: remoteId,\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"connection refused at per-node connection limit\",\n\t\t\t\tdetails: { limit: nodeConnectionAdmission.limit, scope: nodeConnectionAdmission.scope },\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst unauthenticatedAdmission = this.resourceGuard.tryAcquireUnauthenticatedConnection(remoteId);\n\t\tif (!unauthenticatedAdmission.ok) {\n\t\t\tnodeConnectionAdmission.lease.release();\n\t\t\tcloseConnection(connection, \"unauthenticated_connection_limit\");\n\t\t\tawait waitForConnectionClose(connection);\n\t\t\tawait this.logAudit({\n\t\t\t\ttype: \"iroh_security_unauthenticated_connection_limit\",\n\t\t\t\tclientNodeId: remoteId,\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"unauthenticated connection refused at admission limit\",\n\t\t\t\tdetails: { limit: unauthenticatedAdmission.limit, scope: unauthenticatedAdmission.scope },\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst connectionId = `conn-${++activeConnectionSequence}`;\n\t\tconst removeClientConnection = this.registerClientConnection(remoteId, connection, connectionId);\n\t\tconst streamTasks = new Set<Promise<void>>();\n\t\tlet acceptedStreamCount = 0;\n\t\tlet closeRequested = false;\n\t\tlet authenticated = false;\n\t\tconst unauthenticatedTimer = setTimeout(() => {\n\t\t\tif (authenticated || closeRequested) return;\n\t\t\tcloseRequested = true;\n\t\t\tcloseConnection(connection, \"handshake_timeout\");\n\t\t\tvoid this.logAudit({\n\t\t\t\ttype: \"iroh_security_handshake_timeout\",\n\t\t\t\tclientNodeId: remoteId,\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"connection did not authenticate before the handshake deadline\",\n\t\t\t\tdetails: { connectionId, timeoutMs: IROH_UNAUTHENTICATED_CONNECTION_TIMEOUT_MS },\n\t\t\t});\n\t\t}, IROH_UNAUTHENTICATED_CONNECTION_TIMEOUT_MS);\n\t\tunauthenticatedTimer.unref?.();\n\n\t\tconst markAuthenticated = async (): Promise<boolean> => {\n\t\t\tif (authenticated) return true;\n\t\t\tif (closeRequested) return false;\n\t\t\tauthenticated = true;\n\t\t\tclearTimeout(unauthenticatedTimer);\n\t\t\tunauthenticatedAdmission.lease.release();\n\t\t\tthis.log(\"info\", `client connection opened: ${remoteId} (${connectionId})`);\n\t\t\tawait this.logAudit({\n\t\t\t\ttype: \"client_connected\",\n\t\t\t\tclientNodeId: remoteId,\n\t\t\t\tsuccess: true,\n\t\t\t\tdetails: { connectionId },\n\t\t\t});\n\t\t\treturn true;\n\t\t};\n\n\t\tconst requestCloseWhenIdle = () => {\n\t\t\tif (closeRequested || acceptedStreamCount === 0 || streamTasks.size > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcloseRequested = true;\n\t\t\tcloseConnection(connection, \"done\");\n\t\t};\n\n\t\ttry {\n\t\t\twhile (!closeRequested) {\n\t\t\t\tconst stream = await (!authenticated\n\t\t\t\t\t? withTimeout(connection.acceptBi(), DEFAULT_IROH_REMOTE_HANDSHAKE_TIMEOUT_MS, \"handshake timed out\")\n\t\t\t\t\t: connection.acceptBi());\n\t\t\t\tacceptedStreamCount++;\n\t\t\t\tif (streamTasks.size >= MAX_CONCURRENT_STREAMS_PER_CONNECTION) {\n\t\t\t\t\t// One connection is holding too many concurrent streams open. Refuse\n\t\t\t\t\t// further work and close the connection rather than let\n\t\t\t\t\t// it exhaust daemon resources; the just-accepted stream is torn down\n\t\t\t\t\t// with the connection. A legitimate client never reaches this.\n\t\t\t\t\tcloseRequested = true;\n\t\t\t\t\tcloseConnection(connection, \"stream_limit_exceeded\");\n\t\t\t\t\tawait this.logAudit({\n\t\t\t\t\t\ttype: \"iroh_security_stream_limit\",\n\t\t\t\t\t\tclientNodeId: remoteId,\n\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\terror: \"connection exceeded concurrent stream limit\",\n\t\t\t\t\t\tdetails: { connectionId, limit: MAX_CONCURRENT_STREAMS_PER_CONNECTION, scope: \"connection\" },\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst streamAdmission = this.resourceGuard.tryAcquireActiveStream(remoteId);\n\t\t\t\tif (!streamAdmission.ok) {\n\t\t\t\t\tcloseIrohRemoteStream(stream, \"stream_limit_exceeded\");\n\t\t\t\t\tawait this.logAudit({\n\t\t\t\t\t\ttype: \"iroh_security_stream_limit\",\n\t\t\t\t\t\tclientNodeId: remoteId,\n\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\terror: \"stream refused at daemon active-stream limit\",\n\t\t\t\t\t\tdetails: { connectionId, limit: streamAdmission.limit, scope: streamAdmission.scope },\n\t\t\t\t\t});\n\t\t\t\t\trequestCloseWhenIdle();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst streamId = `stream-${++activeStreamSequence}`;\n\t\t\t\tconst task = this.handleConnectionStream(\n\t\t\t\t\tstream,\n\t\t\t\t\tconnection,\n\t\t\t\t\tremoteId,\n\t\t\t\t\tconnectionId,\n\t\t\t\t\tstreamId,\n\t\t\t\t\tmarkAuthenticated,\n\t\t\t\t)\n\t\t\t\t\t.catch(async (error) => {\n\t\t\t\t\t\tif (!isExpectedApplicationClose(error)) {\n\t\t\t\t\t\t\tif (authenticated) {\n\t\t\t\t\t\t\t\tthis.log(\n\t\t\t\t\t\t\t\t\t\"error\",\n\t\t\t\t\t\t\t\t\t`stream error: ${error instanceof Error ? (error.stack ?? error.message) : String(error)}`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tawait this.logAudit({\n\t\t\t\t\t\t\t\t\ttype: \"iroh_security_transport_rejected\",\n\t\t\t\t\t\t\t\t\tclientNodeId: remoteId,\n\t\t\t\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\t\t\t\terror: \"unauthenticated stream failed\",\n\t\t\t\t\t\t\t\t\tdetails: { connectionId, phase: \"stream_handshake\" },\n\t\t\t\t\t\t\t\t});\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\t.finally(() => {\n\t\t\t\t\t\tstreamAdmission.lease.release();\n\t\t\t\t\t\tstreamTasks.delete(task);\n\t\t\t\t\t\trequestCloseWhenIdle();\n\t\t\t\t\t});\n\t\t\t\tstreamTasks.add(task);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (acceptedStreamCount === 0 && authenticated) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tif (acceptedStreamCount === 0 && !closeRequested) {\n\t\t\t\tawait this.logAudit({\n\t\t\t\t\ttype: \"iroh_security_handshake_timeout\",\n\t\t\t\t\tclientNodeId: remoteId,\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: \"connection closed or timed out before opening a handshake stream\",\n\t\t\t\t\tdetails: { connectionId, timeoutMs: DEFAULT_IROH_REMOTE_HANDSHAKE_TIMEOUT_MS },\n\t\t\t\t});\n\t\t\t}\n\t\t} finally {\n\t\t\tclearTimeout(unauthenticatedTimer);\n\t\t\tunauthenticatedAdmission.lease.release();\n\t\t\tnodeConnectionAdmission.lease.release();\n\t\t\tawait this.closeActiveStreamsForConnection(connectionId, \"connection_closed\");\n\t\t\tawait Promise.allSettled(streamTasks);\n\t\t\tremoveClientConnection();\n\t\t\tif (!closeRequested) {\n\t\t\t\tcloseConnection(connection, \"done\");\n\t\t\t}\n\t\t\tawait waitForConnectionClose(connection);\n\t\t\tif (authenticated) {\n\t\t\t\tthis.log(\"info\", `client connection closed: ${remoteId} (${connectionId})`);\n\t\t\t\tawait this.logAudit({\n\t\t\t\t\ttype: \"client_disconnected\",\n\t\t\t\t\tclientNodeId: remoteId,\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tdetails: { connectionId },\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async handleConnectionStream(\n\t\tstream: IrohBiStreamLike,\n\t\tconnection: IrohConnectionLike,\n\t\tremoteId: string,\n\t\tconnectionId: string,\n\t\tstreamId: string,\n\t\tmarkAuthenticated: () => Promise<boolean>,\n\t): Promise<void> {\n\t\tconst engine = this.requireEngine();\n\t\tconst handshakeAdmission = this.resourceGuard.tryAcquireHandshake(remoteId);\n\t\tif (!handshakeAdmission.ok) {\n\t\t\tcloseIrohRemoteStream(stream, \"handshake_limit_exceeded\");\n\t\t\tawait this.logAudit({\n\t\t\t\ttype: \"iroh_security_handshake_limit\",\n\t\t\t\tclientNodeId: remoteId,\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"stream refused at concurrent handshake limit\",\n\t\t\t\tdetails: { connectionId, limit: handshakeAdmission.limit, scope: handshakeAdmission.scope },\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tlet handshake: IrohRemoteHostHandshakeResult;\n\t\ttry {\n\t\t\thandshake = await engine.readHandshake(stream, remoteId, {\n\t\t\t\tchild: \"volt\",\n\t\t\t\tmaxLineBytes: DEFAULT_IROH_REMOTE_HANDSHAKE_MAX_LINE_BYTES,\n\t\t\t\ttimeoutMs: DEFAULT_IROH_REMOTE_HANDSHAKE_TIMEOUT_MS,\n\t\t\t\twriteSuccessResponse: false,\n\t\t\t});\n\t\t} finally {\n\t\t\thandshakeAdmission.lease.release();\n\t\t}\n\t\tif (!handshake.ok) {\n\t\t\tif (\n\t\t\t\thandshake.response.outcome === \"workspace_authorization_removed\" &&\n\t\t\t\ttypeof handshake.response.workspace === \"string\"\n\t\t\t) {\n\t\t\t\tawait this.closeWorkspaceAuthorizationRemovedStreams(remoteId, handshake.response.workspace);\n\t\t\t}\n\t\t\tawait Promise.resolve(stream.send.finish?.()).catch(() => {});\n\t\t\tawait Promise.resolve(stream.recv.stop?.(0n)).catch(() => {});\n\t\t\treturn;\n\t\t}\n\t\tif (!(await markAuthenticated())) {\n\t\t\tcloseIrohRemoteStream(stream, \"handshake_timeout\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst streamCapability = getIrohRemoteStreamCapability({\n\t\t\tmode: handshake.hello.mode,\n\t\t\t...(handshake.hello.mode === \"workspaceManagement\"\n\t\t\t\t? { purpose: handshake.hello.workspaceManagement.purpose }\n\t\t\t\t: {}),\n\t\t});\n\t\tif (\n\t\t\tstreamCapability !== undefined &&\n\t\t\t!hasIrohRemoteRpcCapability(\n\t\t\t\tparseIrohRemoteRpcGrant(handshake.authorization.client.rpcGrant, \"client rpcGrant\"),\n\t\t\t\tstreamCapability,\n\t\t\t)\n\t\t) {\n\t\t\tawait writeIrohRemoteHandshakeResponse(\n\t\t\t\tstream.send,\n\t\t\t\tcreateIrohRemoteHandshakeFailure(`rpc_capability_denied: ${streamCapability}`, {\n\t\t\t\t\thostNodeId: this.hostNodeId,\n\t\t\t\t\tworkspace: handshake.authorization.workspace.name,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tcloseIrohRemoteStream(stream, \"rpc_capability_denied\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.notifyPairingConsumed(handshake, remoteId);\n\n\t\tif (handshake.authorization.paired) {\n\t\t\tthis.log(\"info\", `paired client stream: ${handshake.authorization.client.label} (${remoteId}, ${streamId})`);\n\t\t}\n\n\t\tif (handshake.hello.mode === \"workspaceDiscovery\") {\n\t\t\tawait this.runWorkspaceDiscovery(stream, handshake, connection, connectionId, streamId);\n\t\t\treturn;\n\t\t}\n\t\tif (handshake.hello.mode === \"workspaceManagement\") {\n\t\t\tif (handshake.hello.workspaceManagement.purpose === \"manage_worktrees\") {\n\t\t\t\tawait this.runWorktreeManagement(stream, handshake, connection, connectionId, streamId);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.runWorkspaceManagement(stream, handshake, connection, connectionId, streamId);\n\t\t\treturn;\n\t\t}\n\t\tawait this.runIntegratedConversation(stream, handshake, connection, connectionId, streamId);\n\t}\n\n\t// ==========================================================================\n\t// Workspace streams\n\t// ==========================================================================\n\n\tprivate registerActiveStream(\n\t\tauthorization: IrohRemoteClientAuthorizationSuccess,\n\t\tsessionId: string,\n\t\tstream: IrohBiStreamLike,\n\t\tconnection: IrohConnectionLike,\n\t\tconnectionId: string,\n\t\tstreamId: string,\n\t\tdetails: { terminalSessionId?: string | undefined; sanitizerOverrides?: RemoteSanitizerOverrides } = {},\n\t): { entry: IrohRemoteActiveStreamEntry; remove: () => void } {\n\t\tconst entry: IrohRemoteActiveStreamEntry = {\n\t\t\tclientNodeId: authorization.client.nodeId,\n\t\t\tconnectionId,\n\t\t\tsessionId,\n\t\t\tstreamId,\n\t\t\tworkspaceName: authorization.workspace.name,\n\t\t\tclose: (reason: string) =>\n\t\t\t\tthis.closeStreamWithTerminal(stream, reason, {\n\t\t\t\t\tauthorization,\n\t\t\t\t\tsessionId: Object.hasOwn(details, \"terminalSessionId\") ? details.terminalSessionId : entry.sessionId,\n\t\t\t\t}),\n\t\t\tcloseConnection: (reason: string) => closeConnection(connection, reason),\n\t\t\twrite: (value: object) =>\n\t\t\t\twriteIrohRemoteJsonLine(stream.send, value, authorization, details.sanitizerOverrides ?? {}),\n\t\t};\n\t\tconst remove = this.activeStreams.register(entry);\n\t\treturn { entry, remove };\n\t}\n\n\t// ==========================================================================\n\t// iOS theme token push (§9.5) — flag off by default, capability gated\n\t// ==========================================================================\n\n\tprivate isThemeTokenPushEnabled(): boolean {\n\t\treturn this.services.state.state.settings.themeTokenPush === true || process.env.VOLT_HOST_THEME_TOKENS === \"1\";\n\t}\n\n\t/** Send the current sanitized theme tokens to one capable stream. */\n\tprivate pushThemeTokensToStream(entry: IrohRemoteActiveStreamEntry): void {\n\t\tif (!this.isThemeTokenPushEnabled() || !entry.capabilities?.has(HOST_THEME_TOKENS_FEATURE)) {\n\t\t\treturn;\n\t\t}\n\t\tconst frame = createHostThemeTokensFrame(getCurrentThemeName() ?? \"dark\", getResolvedThemeColors());\n\t\tvoid Promise.resolve(entry.write?.(frame)).catch(() => {});\n\t}\n\n\t/** Theme changed: fan the new tokens out to every capable phone stream. */\n\tonThemeChanged(): void {\n\t\tif (!this.isThemeTokenPushEnabled()) {\n\t\t\treturn;\n\t\t}\n\t\tfor (const entry of this.activeStreams.allEntries()) {\n\t\t\tthis.pushThemeTokensToStream(entry);\n\t\t}\n\t}\n\n\t/**\n\t * Keep-awake status changed (control toggle, phone toggle, or degradation):\n\t * fan the new state to every phone stream. Clients that ignore the frame are\n\t * fully supported, so no capability gating.\n\t */\n\tonKeepAwakeChanged(): void {\n\t\tconst frame = {\n\t\t\ttype: \"keep_awake_changed\",\n\t\t\tdata: { keepAwake: toRpcKeepAwakeStatus(this.services.keepAwake.status) },\n\t\t};\n\t\tfor (const entry of this.activeStreams.allEntries()) {\n\t\t\tvoid Promise.resolve(entry.write?.(frame)).catch(() => {});\n\t\t}\n\t}\n\n\tprivate async closeStreamWithTerminal(\n\t\tstream: IrohBiStreamLike,\n\t\treason: string,\n\t\tterminal: { authorization: IrohRemoteClientAuthorizationSuccess; sessionId: string | undefined },\n\t): Promise<void> {\n\t\tconst terminalReason = getRemoteTerminalReason(reason);\n\t\tif (terminalReason) {\n\t\t\tawait writeIrohRemoteJsonLine(\n\t\t\t\tstream.send,\n\t\t\t\t{\n\t\t\t\t\ttype: \"remote_terminal\",\n\t\t\t\t\treason: terminalReason,\n\t\t\t\t\tworkspace: terminal.authorization.workspace.name,\n\t\t\t\t\t...(terminal.sessionId === undefined ? {} : { sessionId: terminal.sessionId }),\n\t\t\t\t\thostNodeId: this.hostNodeId,\n\t\t\t\t},\n\t\t\t\tterminal.authorization,\n\t\t\t).catch(() => {});\n\t\t}\n\t\tcloseIrohRemoteStream(stream, reason);\n\t}\n\n\tprivate async runWorkspaceDiscovery(\n\t\tstream: IrohBiStreamLike,\n\t\thandshake: Extract<IrohRemoteHostHandshakeResult, { ok: true }>,\n\t\tconnection: IrohConnectionLike,\n\t\tconnectionId: string,\n\t\tstreamId: string,\n\t): Promise<void> {\n\t\tawait writeIrohRemoteHandshakeResponse(stream.send, handshake.response);\n\t\tconst activeStream = this.registerActiveStream(\n\t\t\thandshake.authorization,\n\t\t\tWORKSPACE_DISCOVERY_STREAM_SESSION_ID,\n\t\t\tstream,\n\t\t\tconnection,\n\t\t\tconnectionId,\n\t\t\tstreamId,\n\t\t\t{ terminalSessionId: undefined },\n\t\t);\n\t\ttry {\n\t\t\tawait runWorkspaceDiscoveryStream(\n\t\t\t\t{\n\t\t\t\t\tstream,\n\t\t\t\t\tinitialInput: handshake.initialInput,\n\t\t\t\t\tauthorization: handshake.authorization,\n\t\t\t\t\tisRpcGrantCurrent: () => this.isAuthorizationGrantCurrent(handshake.authorization),\n\t\t\t\t\tcloseStream: (reason) => closeIrohRemoteStream(stream, reason),\n\t\t\t\t},\n\t\t\t\t{ commandContext: this.getCommandContext() },\n\t\t\t);\n\t\t} finally {\n\t\t\tactiveStream.remove();\n\t\t}\n\t}\n\n\tprivate async runWorkspaceManagement(\n\t\tstream: IrohBiStreamLike,\n\t\thandshake: Extract<IrohRemoteHostHandshakeResult, { ok: true }>,\n\t\tconnection: IrohConnectionLike,\n\t\tconnectionId: string,\n\t\tstreamId: string,\n\t): Promise<void> {\n\t\tawait writeIrohRemoteHandshakeResponse(stream.send, handshake.response);\n\t\tconst activeStream = this.registerActiveStream(\n\t\t\thandshake.authorization,\n\t\t\tWORKSPACE_MANAGEMENT_STREAM_SESSION_ID,\n\t\t\tstream,\n\t\t\tconnection,\n\t\t\tconnectionId,\n\t\t\tstreamId,\n\t\t\t{ terminalSessionId: undefined },\n\t\t);\n\t\ttry {\n\t\t\tawait runWorkspaceManagementStream(\n\t\t\t\t{\n\t\t\t\t\tstream,\n\t\t\t\t\tinitialInput: handshake.initialInput,\n\t\t\t\t\tauthorization: handshake.authorization,\n\t\t\t\t\tisRpcGrantCurrent: () => this.isAuthorizationGrantCurrent(handshake.authorization),\n\t\t\t\t\tcloseStream: (reason) => {\n\t\t\t\t\t\tactiveStream.remove();\n\t\t\t\t\t\tcloseIrohRemoteStream(stream, reason);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tauditLogger: this.services.auditLogger,\n\t\t\t\t\tcommandContext: this.getCommandContext(),\n\t\t\t\t\tunregisterWorkspace: async (workspaceName) => {\n\t\t\t\t\t\tlet removedWorkspace: Awaited<ReturnType<IrohRemoteHostStateManager[\"unregisterWorkspace\"]>>;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tremovedWorkspace = await this.stateManager.unregisterWorkspace(workspaceName);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tif (!isIrohRemoteWorkspaceHasWorktreesError(error)) {\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tok: false,\n\t\t\t\t\t\t\t\terror: IROH_REMOTE_WORKSPACE_HAS_WORKTREES_ERROR,\n\t\t\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\t\t\tworktreeCount: error.worktreeIds.length,\n\t\t\t\t\t\t\t\t\tworktreeIds: error.worktreeIds,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!removedWorkspace) {\n\t\t\t\t\t\t\treturn { ok: false, error: \"workspace_unregistered\" };\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.engine?.clearPairingSecretForWorkspace(workspaceName);\n\t\t\t\t\t\tconst { closedStreamCount, stoppedRuntimeCount } = await this.cleanupUnregisteredWorkspace(\n\t\t\t\t\t\t\tworkspaceName,\n\t\t\t\t\t\t\t{ streamEntry: activeStream.entry, workspacePath: removedWorkspace.path },\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn { ok: true, closedStreamCount, stoppedRuntimeCount };\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t} finally {\n\t\t\tactiveStream.remove();\n\t\t}\n\t}\n\n\t/** Serve a manage_worktrees workspaceManagement stream (worktrees.v1). */\n\tprivate async runWorktreeManagement(\n\t\tstream: IrohBiStreamLike,\n\t\thandshake: Extract<IrohRemoteHostHandshakeResult, { ok: true }>,\n\t\tconnection: IrohConnectionLike,\n\t\tconnectionId: string,\n\t\tstreamId: string,\n\t): Promise<void> {\n\t\tawait writeIrohRemoteHandshakeResponse(stream.send, handshake.response);\n\t\tconst sanitizerOverrides: RemoteSanitizerOverrides = {\n\t\t\tadditionalRedactedPaths: [getWorktreesRoot(this.services.agentDir)],\n\t\t};\n\t\tconst activeStream = this.registerActiveStream(\n\t\t\thandshake.authorization,\n\t\t\tWORKSPACE_MANAGEMENT_STREAM_SESSION_ID,\n\t\t\tstream,\n\t\t\tconnection,\n\t\t\tconnectionId,\n\t\t\tstreamId,\n\t\t\t{ terminalSessionId: undefined, sanitizerOverrides },\n\t\t);\n\t\ttry {\n\t\t\tawait runWorktreeManagementStream(\n\t\t\t\t{\n\t\t\t\t\tstream,\n\t\t\t\t\tinitialInput: handshake.initialInput,\n\t\t\t\t\tauthorization: handshake.authorization,\n\t\t\t\t\tisRpcGrantCurrent: () => this.isAuthorizationGrantCurrent(handshake.authorization),\n\t\t\t\t\tcloseStream: (reason) => closeIrohRemoteStream(stream, reason),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tauditLogger: this.services.auditLogger,\n\t\t\t\t\tadditionalRedactedPaths: sanitizerOverrides.additionalRedactedPaths,\n\t\t\t\t\tworktrees: this.createWorktreeRpcBackend(handshake.authorization.workspace),\n\t\t\t\t},\n\t\t\t);\n\t\t} finally {\n\t\t\tactiveStream.remove();\n\t\t}\n\t}\n\n\t/** Backend for the worktree RPC helpers, bound to the stream's authorized workspace. */\n\tprivate createWorktreeRpcBackend(workspace: IrohRemoteWorkspace): IrohRemoteWorktreeRpcBackend {\n\t\treturn {\n\t\t\tcreateWorktree: async (_workspaceName, options) => {\n\t\t\t\tconst created = await this.worktrees.create(workspace, options);\n\t\t\t\tif (!created.ok) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tok: false,\n\t\t\t\t\t\terror: created.error,\n\t\t\t\t\t\t...(created.detail === undefined ? {} : { detail: created.detail }),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn { ok: true, worktree: created.worktree };\n\t\t\t},\n\t\t\tlistWorktrees: async () => ({ ok: true, worktrees: await this.worktrees.list(workspace) }),\n\t\t\tremoveWorktree: async (_workspaceName, worktreeId, force) =>\n\t\t\t\tthis.removeWorkspaceWorktree(workspace, worktreeId, force),\n\t\t};\n\t}\n\n\t/**\n\t * Runtime-aware worktree removal: refuses busy worktrees without force; with\n\t * force, closes bound phone streams and stops bound runtimes first.\n\t */\n\tprivate async removeWorkspaceWorktree(\n\t\tworkspace: IrohRemoteWorkspace,\n\t\tworktreeId: string,\n\t\tforce: boolean,\n\t): Promise<WorktreeResult<{ stoppedRuntimeCount: number; closedStreamCount: number }>> {\n\t\tconst record = await this.worktrees.findWorktree(workspace.name, worktreeId);\n\t\tif (!record) {\n\t\t\treturn { ok: false, error: \"worktree_not_found\" };\n\t\t}\n\t\tlet stoppedRuntimeCount = 0;\n\t\tlet closedStreamCount = 0;\n\t\tconst boundEntries = record.sessionIds\n\t\t\t.map((sessionId) => this.runtimes.findOwner(workspace.name, sessionId))\n\t\t\t.filter((entry): entry is IntegratedRuntimeEntry => entry !== undefined);\n\t\tif (boundEntries.length > 0) {\n\t\t\tif (!force) {\n\t\t\t\treturn { ok: false, error: \"worktree_busy\" };\n\t\t\t}\n\t\t\tfor (const entry of boundEntries) {\n\t\t\t\tclosedStreamCount += await this.closeActiveStreamsForConversationKey(\n\t\t\t\t\tworkspace.name,\n\t\t\t\t\tentry.sessionId,\n\t\t\t\t\t\"worktree_removed\",\n\t\t\t\t);\n\t\t\t\tawait this.runtimes.stopEntry(entry, \"worktree_removed\");\n\t\t\t\tstoppedRuntimeCount++;\n\t\t\t}\n\t\t}\n\t\tconst removed = await this.worktrees.remove(workspace, worktreeId, { force });\n\t\tif (!removed.ok) {\n\t\t\treturn removed;\n\t\t}\n\t\treturn { ok: true, stoppedRuntimeCount, closedStreamCount };\n\t}\n\n\t/**\n\t * Worktree resolution for conversation opens: explicit worktreeId on \"new\"\n\t * (must exist AND be on disk), persisted binding on resume (missing checkout\n\t * fails with session_unavailable). Availability is an open-time failure, not\n\t * an authorization failure.\n\t */\n\tprivate async resolveConversationWorktree(\n\t\tworkspaceName: string,\n\t\thello: IrohRemoteHello,\n\t\ttargetSessionId: string | undefined,\n\t): Promise<IrohRemoteWorkspaceWorktree | undefined> {\n\t\tif (hello.mode !== \"conversation\") {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (hello.conversation.target === \"new\") {\n\t\t\tconst worktreeId = hello.conversation.worktreeId;\n\t\t\tif (worktreeId === undefined) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst worktree = await this.worktrees.findWorktree(workspaceName, worktreeId);\n\t\t\tif (!worktree || !existsSync(worktree.path)) {\n\t\t\t\tthrow createConversationOpenError(\"invalid_conversation_target\", \"unknown or unavailable worktree\", {\n\t\t\t\t\tworkspace: workspaceName,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn worktree;\n\t\t}\n\t\tif (targetSessionId === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst worktree = await this.worktrees.resolveSessionWorktree(workspaceName, targetSessionId);\n\t\tif (worktree === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (!existsSync(worktree.path)) {\n\t\t\tthrow createConversationOpenError(\"session_unavailable\", \"worktree checkout is unavailable\", {\n\t\t\t\tworkspace: workspaceName,\n\t\t\t\tsessionId: targetSessionId,\n\t\t\t});\n\t\t}\n\t\treturn worktree;\n\t}\n\n\tprivate async resolveConversationWorkingDirectory(options: {\n\t\tworkspace: IrohRemoteWorkspace;\n\t\trootPath: string;\n\t\tworkingDirectory?: string;\n\t\tworktree?: IrohRemoteWorkspaceWorktree;\n\t}): Promise<WorkspaceDirectoryResolution> {\n\t\tif (options.worktree === undefined) {\n\t\t\tconst parentDirectory = await this.worktrees.validateWorkingDirectory(\n\t\t\t\toptions.workspace,\n\t\t\t\toptions.workingDirectory,\n\t\t\t);\n\t\t\tif (!parentDirectory.ok) {\n\t\t\t\tconst message = parentDirectory.detail ?? parentDirectory.error;\n\t\t\t\tthrow createConversationOpenError(\"invalid_conversation_target\", message, {\n\t\t\t\t\tworkspace: options.workspace.name,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn parentDirectory.directory;\n\t\t}\n\t\tconst worktreeDirectory = await this.worktrees.resolveWorktreeWorkingDirectory(\n\t\t\toptions.workspace,\n\t\t\toptions.worktree,\n\t\t\toptions.workingDirectory,\n\t\t);\n\t\tif (!worktreeDirectory.ok) {\n\t\t\tthrow createConversationOpenError(\n\t\t\t\t\"invalid_conversation_target\",\n\t\t\t\tworktreeDirectory.detail ?? worktreeDirectory.error,\n\t\t\t\t{\n\t\t\t\t\tworkspace: options.workspace.name,\n\t\t\t\t\tworktreeId: options.worktree.id,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\treturn worktreeDirectory.directory;\n\t}\n\n\t// ==========================================================================\n\t// Integrated conversation serving\n\t// ==========================================================================\n\n\tprivate createPushNotificationDispatcher(\n\t\tauthorization: IrohRemoteClientAuthorizationSuccess,\n\t): IrohRemotePushNotificationDispatcher {\n\t\treturn new IrohRemotePushNotificationDispatcher({\n\t\t\tauditLogger: this.services.auditLogger,\n\t\t\tclientNodeId: authorization.client.nodeId,\n\t\t\tdeduper: this.pushNotificationDeduper,\n\t\t\trelayClient: this.pushRelayClient,\n\t\t\tstateManager: this.stateManager,\n\t\t\tworkspace: authorization.workspace.name,\n\t\t});\n\t}\n\n\tprivate async revokeClientPushTargets(client: IrohRemoteClient | undefined): Promise<void> {\n\t\tif ((client?.pushTargets?.length ?? 0) === 0) return;\n\t\ttry {\n\t\t\tconst summary = await revokeIrohRemoteClientPushTargets(client, this.pushRelayClient);\n\t\t\tconst complete = summary.failed === 0 && summary.skipped === 0;\n\t\t\tif (!complete) {\n\t\t\t\tthis.log(\"warn\", \"remote push-target cleanup incomplete after client revoke\", { ...summary });\n\t\t\t}\n\t\t\tawait this.logAudit({\n\t\t\t\ttype: \"push_targets_revoked\",\n\t\t\t\tclientNodeId: client?.nodeId,\n\t\t\t\tsuccess: complete,\n\t\t\t\terror: complete ? undefined : \"remote push-target cleanup incomplete; relay TTL remains the lifetime bound\",\n\t\t\t\tdetails: { ...summary, remainingLifetimeBound: \"relay_target_ttl\" },\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthis.log(\"warn\", \"remote push-target cleanup failed after client revoke\", { error: message });\n\t\t\tawait this.logAudit({\n\t\t\t\ttype: \"push_targets_revoked\",\n\t\t\t\tclientNodeId: client?.nodeId,\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"remote push-target cleanup failed; relay TTL remains the lifetime bound\",\n\t\t\t\tdetails: { remainingLifetimeBound: \"relay_target_ttl\" },\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async sendHandshakeError(stream: IrohBiStreamLike, error: unknown): Promise<void> {\n\t\tconst record = (error ?? {}) as Record<string, unknown>;\n\t\t// Plain {message, ...} records (abortPendingRelay, lease re-check) must not\n\t\t// stringify to \"[object Object]\".\n\t\tconst message =\n\t\t\terror instanceof Error ? error.message : typeof record.message === \"string\" ? record.message : String(error);\n\t\tconst outcome = typeof record.outcome === \"string\" ? record.outcome : undefined;\n\t\tconst workspace = typeof record.workspace === \"string\" ? record.workspace : undefined;\n\t\tconst sessionId = typeof record.sessionId === \"string\" ? record.sessionId : undefined;\n\t\tconst retryAfterMs = typeof record.retryAfterMs === \"number\" ? record.retryAfterMs : undefined;\n\t\tawait writeIrohRemoteHandshakeResponse(\n\t\t\tstream.send,\n\t\t\tcreateIrohRemoteHandshakeFailure(message, {\n\t\t\t\thostNodeId: this.hostNodeId,\n\t\t\t\t...(outcome === undefined ? {} : { outcome: outcome as never }),\n\t\t\t\t...(workspace === undefined ? {} : { workspace }),\n\t\t\t\t...(sessionId === undefined ? {} : { sessionId }),\n\t\t\t\t...(retryAfterMs === undefined ? {} : { retryAfterMs }),\n\t\t\t}),\n\t\t);\n\t\tawait Promise.resolve(stream.send.finish?.()).catch(() => {});\n\t\tawait Promise.resolve(stream.recv.stop?.(0n)).catch(() => {});\n\t}\n\n\tprivate async rejectDuplicateActiveConnection(\n\t\tstream: IrohBiStreamLike,\n\t\tauthorization: IrohRemoteClientAuthorizationSuccess,\n\t\tsessionId: string,\n\t\tsource = \"active_stream_registry\",\n\t): Promise<void> {\n\t\tconst error = \"duplicate conversation connection\";\n\t\tawait this.logAudit({\n\t\t\ttype: \"duplicate_connection_rejected\",\n\t\t\tclientNodeId: authorization.client.nodeId,\n\t\t\tworkspace: authorization.workspace.name,\n\t\t\tsuccess: false,\n\t\t\terror,\n\t\t\tdetails: {\n\t\t\t\tretryAfterMs: DUPLICATE_CONVERSATION_RETRY_AFTER_MS,\n\t\t\t\tsessionId,\n\t\t\t\tsource,\n\t\t\t},\n\t\t});\n\t\tawait writeIrohRemoteHandshakeResponse(\n\t\t\tstream.send,\n\t\t\tcreateIrohRemoteHandshakeFailure(error, {\n\t\t\t\thostNodeId: this.hostNodeId,\n\t\t\t\toutcome: \"duplicate_conversation_connection\",\n\t\t\t\tworkspace: authorization.workspace.name,\n\t\t\t\tsessionId,\n\t\t\t\tretryAfterMs: DUPLICATE_CONVERSATION_RETRY_AFTER_MS,\n\t\t\t}),\n\t\t);\n\t\tawait Promise.resolve(stream.send.finish?.()).catch(() => {});\n\t\tawait Promise.resolve(stream.recv.stop?.(0n)).catch(() => {});\n\t}\n\n\tprivate async closeReplacedActiveStreams(\n\t\tauthorization: IrohRemoteClientAuthorizationSuccess,\n\t\treplacementStreamId: string,\n\t\treplacedEntries: IrohRemoteActiveStreamEntry[],\n\t): Promise<void> {\n\t\tif (replacedEntries.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst replacedStreamIds = replacedEntries.map((entry) => entry.streamId);\n\t\tfor (const entry of replacedEntries) {\n\t\t\tawait Promise.resolve(entry.close(ACTIVE_REPLACE_CLOSE_REASON)).catch(() => {});\n\t\t}\n\t\tawait this.closeIdleConnectionsForEntries(replacedEntries, ACTIVE_REPLACE_CLOSE_REASON);\n\t\tthis.log(\n\t\t\t\"info\",\n\t\t\t`client stream replaced: ${authorization.client.nodeId}/${authorization.workspace.name} (${replacedStreamIds.join(\", \")} -> ${replacementStreamId})`,\n\t\t);\n\t\tawait this.logAudit({\n\t\t\ttype: \"duplicate_connection_replaced\",\n\t\t\tclientNodeId: authorization.client.nodeId,\n\t\t\tworkspace: authorization.workspace.name,\n\t\t\tsuccess: true,\n\t\t\tdetails: {\n\t\t\t\tcloseReason: ACTIVE_REPLACE_CLOSE_REASON,\n\t\t\t\tclosedCount: replacedEntries.length,\n\t\t\t\treplacedStreamIds,\n\t\t\t\treplacementStreamId,\n\t\t\t\tsource: \"active_stream_registry\",\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Relay a phone conversation stream to the owning TUI (§5.6): the daemon\n\t * has already authenticated the phone; the TUI serves the framed RPC from\n\t * its in-process runtime over a dedicated relay unix connection.\n\t */\n\tprivate async relayConversationToTui(\n\t\tstream: IrohBiStreamLike,\n\t\thandshake: Extract<IrohRemoteHostHandshakeResult, { ok: true }>,\n\t\tconnectionId: string,\n\t\tstreamId: string,\n\t\ttargetSessionId: string,\n\t\ttuiConnectionId: string,\n\t): Promise<void> {\n\t\tconst authorization = handshake.authorization;\n\t\tconst workspaceName = authorization.workspace.name;\n\n\t\t// Duplicate handling per clientNodeId + key: duplicates already on this\n\t\t// Iroh connection are real duplicates; entries on older connections are\n\t\t// stale for this conversation and may be replaced independently of any\n\t\t// sibling subagent streams that opened first on the new connection.\n\t\tconst liveRelays = this.relays.activeForConversation(authorization.client.nodeId, workspaceName, targetSessionId);\n\t\tconst pendingRelays = this.relays.pendingForConversation(\n\t\t\tauthorization.client.nodeId,\n\t\t\tworkspaceName,\n\t\t\ttargetSessionId,\n\t\t);\n\t\tif (\n\t\t\tliveRelays.some((relay) => relay.connectionId === connectionId) ||\n\t\t\tpendingRelays.some((pending) => pending.connectionId === connectionId)\n\t\t) {\n\t\t\tawait this.rejectDuplicateActiveConnection(stream, authorization, targetSessionId, \"relay_registry\");\n\t\t\treturn;\n\t\t}\n\t\tfor (const relay of liveRelays) {\n\t\t\trelay.close(\"error\");\n\t\t}\n\t\t// Unredeemed offers for the same conversation on older connections are\n\t\t// superseded by this one: fail their deferred handshakes and settle them\n\t\t// (relay_closed to the TUI, lease bookkeeping) instead of leaking tasks.\n\t\tfor (const pending of pendingRelays) {\n\t\t\tthis.abortPendingRelay(pending.relayId, \"error\", \"relay offer superseded; retry\", RELAY_OFFER_RETRY_AFTER_MS);\n\t\t}\n\n\t\t// Resolve the concrete session target for the preamble (§3.7).\n\t\tconst target: IrohRemoteSessionTarget =\n\t\t\thandshake.hello.mode === \"conversation\" && handshake.hello.conversation.target === \"session\"\n\t\t\t\t? { kind: \"session\", sessionId: handshake.hello.conversation.sessionId }\n\t\t\t\t: { kind: \"last\", resumeSessionId: targetSessionId };\n\t\t// A worktree-bound session must resolve against the worktree cwd (the\n\t\t// parent-keyed session dir plus a non-matching cwd makes SessionManager.list\n\t\t// filter by header cwd, restricting resolution to that worktree's sessions).\n\t\tconst boundWorktree = await this.stateManager.findWorktreeForSession(workspaceName, targetSessionId);\n\t\tconst relayOwnerCapabilities = this.services.controlServer\n\t\t\t.connections()\n\t\t\t.find((controlConnection) => controlConnection.connectionId === tuiConnectionId)?.capabilities;\n\t\tif (!relayOwnerCapabilities?.has(CONTROL_RPC_GRANTS_CAPABILITY)) {\n\t\t\tawait this.sendHandshakeError(stream, {\n\t\t\t\tmessage: \"conversation owner is not grant-aware; retry\",\n\t\t\t\tretryAfterMs: RELAY_OFFER_RETRY_AFTER_MS,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\t// Worktree-bound conversations are only relayed to TUIs that advertised the\n\t\t// worktrees control capability (an old TUI would sanitize with the parent\n\t\t// root and leak host paths), and never when the checkout has vanished.\n\t\tconst relayGate = evaluateWorktreeRelayGate(boundWorktree, relayOwnerCapabilities, CONTROL_WORKTREES_CAPABILITY);\n\t\tif (!relayGate.ok) {\n\t\t\tif (relayGate.reason === \"checkout_missing\") {\n\t\t\t\tawait this.sendHandshakeError(stream, {\n\t\t\t\t\tmessage: \"worktree checkout is unavailable\",\n\t\t\t\t\toutcome: \"session_unavailable\",\n\t\t\t\t\tworkspace: workspaceName,\n\t\t\t\t\tsessionId: targetSessionId,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.sendHandshakeError(stream, {\n\t\t\t\tmessage: \"conversation owner cannot serve worktree sessions; retry\",\n\t\t\t\tretryAfterMs: RELAY_OFFER_RETRY_AFTER_MS,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tlet resolvedTarget: Awaited<ReturnType<typeof resolveIrohRemoteSessionTarget>>;\n\t\ttry {\n\t\t\tresolvedTarget = await resolveIrohRemoteSessionTarget(\n\t\t\t\ttarget,\n\t\t\t\t{ name: workspaceName, path: authorization.workspace.path },\n\t\t\t\tcreateSessionManagerTargetStore(\n\t\t\t\t\tboundWorktree?.path ?? authorization.workspace.path,\n\t\t\t\t\tgetDefaultSessionDir(authorization.workspace.path, this.services.agentDir),\n\t\t\t\t\t{ listAll: true, preserveSessionCwd: true },\n\t\t\t\t),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tawait this.sendHandshakeError(stream, error);\n\t\t\treturn;\n\t\t}\n\t\tconst resolvedSessionManager = resolvedTarget.sessionManager as { getCwd?: () => string };\n\t\tconst resolvedSessionCwd =\n\t\t\tresolvedSessionManager.getCwd?.() ?? boundWorktree?.path ?? authorization.workspace.path;\n\t\tconst relayWorkingDirectoryRelativeToRoot = getRelativeWorkingDirectoryForRoot(\n\t\t\tboundWorktree?.path ?? authorization.workspace.path,\n\t\t\tresolvedSessionCwd,\n\t\t);\n\t\tif (relayWorkingDirectoryRelativeToRoot === null) {\n\t\t\tawait this.sendHandshakeError(stream, {\n\t\t\t\tmessage: \"stored session working directory is outside the authorized workspace\",\n\t\t\t\toutcome: \"session_unavailable\",\n\t\t\t\tworkspace: workspaceName,\n\t\t\t\tsessionId: targetSessionId,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst relayWorkingDirectory =\n\t\t\tboundWorktree === undefined\n\t\t\t\t? relayWorkingDirectoryRelativeToRoot\n\t\t\t\t: getRegisteredWorkingDirectoryForWorktree(boundWorktree, relayWorkingDirectoryRelativeToRoot);\n\n\t\t// Session-target resolution awaited; the lease can have moved (release,\n\t\t// rekey, connection loss) in the meantime. Re-check before minting so the\n\t\t// offer cannot go to a stale or dead owner.\n\t\tconst lease = this.leaseBroker.lookup(workspaceName, targetSessionId);\n\t\tif (lease?.state !== \"tui-owned\" || lease.tuiConnectionId !== tuiConnectionId) {\n\t\t\tawait this.sendHandshakeError(stream, {\n\t\t\t\tmessage: \"conversation lease owner changed; retry\",\n\t\t\t\tretryAfterMs: RELAY_OFFER_RETRY_AFTER_MS,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\t// The target-resolution awaits above can race an access update or revoke.\n\t\t// Recheck immediately before the synchronous mint so stale authorization\n\t\t// cannot create a new pending offer after control-plane invalidation acks.\n\t\tif (!(await this.isAuthorizationGrantCurrent(authorization))) {\n\t\t\tawait this.sendHandshakeError(stream, { message: \"client access changed; reconnect\" });\n\t\t\treturn;\n\t\t}\n\n\t\t// A sibling stream can resolve/redeem while this stream awaits target\n\t\t// resolution. Re-check immediately before minting the offer.\n\t\tconst currentLiveRelays = this.relays.activeForConversation(\n\t\t\tauthorization.client.nodeId,\n\t\t\tworkspaceName,\n\t\t\ttargetSessionId,\n\t\t);\n\t\tconst currentPendingRelays = this.relays.pendingForConversation(\n\t\t\tauthorization.client.nodeId,\n\t\t\tworkspaceName,\n\t\t\ttargetSessionId,\n\t\t);\n\t\tif (\n\t\t\tcurrentLiveRelays.some((relay) => relay.connectionId === connectionId) ||\n\t\t\tcurrentPendingRelays.some((pending) => pending.connectionId === connectionId)\n\t\t) {\n\t\t\tawait this.rejectDuplicateActiveConnection(stream, authorization, targetSessionId, \"relay_registry\");\n\t\t\treturn;\n\t\t}\n\t\tfor (const relay of currentLiveRelays) {\n\t\t\trelay.close(\"error\");\n\t\t}\n\t\tfor (const pending of currentPendingRelays) {\n\t\t\tthis.abortPendingRelay(pending.relayId, \"error\", \"relay offer superseded; retry\", RELAY_OFFER_RETRY_AFTER_MS);\n\t\t}\n\n\t\tconst settled = new Promise<void>((resolveSettled) => {\n\t\t\tconst relay = this.relays.mint({\n\t\t\t\tworkspaceName,\n\t\t\t\tsessionId: targetSessionId,\n\t\t\t\tclientNodeId: authorization.client.nodeId,\n\t\t\t\tconnectionId,\n\t\t\t\townerControlConnectionId: tuiConnectionId,\n\t\t\t\tstreamId,\n\t\t\t\tstream,\n\t\t\t\tpreamble: {\n\t\t\t\t\thandshake: {\n\t\t\t\t\t\thello: handshake.hello,\n\t\t\t\t\t\tresponse: handshake.response,\n\t\t\t\t\t\tinitialInput: Array.from(handshake.initialInput),\n\t\t\t\t\t},\n\t\t\t\t\tauthorization: {\n\t\t\t\t\t\tclientNodeId: authorization.client.nodeId,\n\t\t\t\t\t\tallowedTools: authorization.client.allowedTools,\n\t\t\t\t\t\trpcGrant: authorization.client.rpcGrant,\n\t\t\t\t\t\tworkspaceName,\n\t\t\t\t\t\tworkspacePath: authorization.workspace.path,\n\t\t\t\t\t\t...(boundWorktree === undefined\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tworktreeId: boundWorktree.id,\n\t\t\t\t\t\t\t\t\tworktreePath: boundWorktree.path,\n\t\t\t\t\t\t\t\t\t...(boundWorktree.sourceRootRelativePath === undefined\n\t\t\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t\t\t: { worktreeSourceRootRelativePath: boundWorktree.sourceRootRelativePath }),\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t\t// The phone verifies the saved host's node id in the handshake\n\t\t\t\t\t// response the TUI writes; without this the relay path fails the\n\t\t\t\t\t// client's identity check.\n\t\t\t\t\t...(this.hostNodeId === undefined ? {} : { hostNodeId: this.hostNodeId }),\n\t\t\t\t\trelayMode: this.relayMode,\n\t\t\t\t\t...(this.relayMode === \"production\" ? { relayUrls: this.relayUrls } : {}),\n\t\t\t\t\tconnectionId,\n\t\t\t\t\tstreamId,\n\t\t\t\t\tresolvedTarget: {\n\t\t\t\t\t\tsessionId: resolvedTarget.sessionId,\n\t\t\t\t\t\t...(resolvedTarget.sessionFilePath === undefined\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: { sessionFilePath: resolvedTarget.sessionFilePath }),\n\t\t\t\t\t\tselection: resolvedTarget.selection,\n\t\t\t\t\t\t...(resolvedTarget.requestedSessionId === undefined\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: { requestedSessionId: resolvedTarget.requestedSessionId }),\n\t\t\t\t\t\tworkspaceName: resolvedTarget.workspaceName,\n\t\t\t\t\t\tworkspacePath: resolvedTarget.workspacePath,\n\t\t\t\t\t\t...(boundWorktree === undefined ? {} : { worktreeId: boundWorktree.id }),\n\t\t\t\t\t\t...(relayWorkingDirectory === undefined ? {} : { workingDirectory: relayWorkingDirectory }),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsettle: (outcome) => {\n\t\t\t\t\tthis.leaseBroker.unregisterRelay(workspaceName, targetSessionId, relay.relayId);\n\t\t\t\t\tthis.services.controlServer.sendTo(tuiConnectionId, {\n\t\t\t\t\t\ttype: \"relay_closed\",\n\t\t\t\t\t\trelayId: relay.relayId,\n\t\t\t\t\t\treason: outcome.reason,\n\t\t\t\t\t});\n\t\t\t\t\tvoid this.logAudit({\n\t\t\t\t\t\ttype: \"relay_closed\",\n\t\t\t\t\t\tclientNodeId: authorization.client.nodeId,\n\t\t\t\t\t\tworkspace: workspaceName,\n\t\t\t\t\t\tsuccess: outcome.error === undefined,\n\t\t\t\t\t\terror: outcome.error,\n\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\trelayId: relay.relayId,\n\t\t\t\t\t\t\treason: outcome.reason,\n\t\t\t\t\t\t\tbytesUp: outcome.bytesUp,\n\t\t\t\t\t\t\tbytesDown: outcome.bytesDown,\n\t\t\t\t\t\t\tdurationMs: outcome.durationMs,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tresolveSettled();\n\t\t\t\t},\n\t\t\t});\n\n\t\t\t// The offer is single-use with a 10s expiry; the phone's handshake\n\t\t\t// response is deferred until the TUI redeems the token.\n\t\t\tconst expiryTimer = setTimeout(() => {\n\t\t\t\tthis.abortPendingRelay(relay.relayId, \"error\", \"relay offer expired; retry\", RELAY_OFFER_RETRY_AFTER_MS);\n\t\t\t}, RELAY_TOKEN_TTL_MS);\n\t\t\texpiryTimer.unref?.();\n\n\t\t\tthis.leaseBroker.registerRelay(workspaceName, targetSessionId, relay.relayId);\n\t\t\tvoid this.logAudit({\n\t\t\t\ttype: \"relay_opened\",\n\t\t\t\tclientNodeId: authorization.client.nodeId,\n\t\t\t\tworkspace: workspaceName,\n\t\t\t\tsuccess: true,\n\t\t\t\tdetails: {\n\t\t\t\t\trelayId: relay.relayId,\n\t\t\t\t\tworkspaceName,\n\t\t\t\t\tsessionId: targetSessionId,\n\t\t\t\t\tconnectionId,\n\t\t\t\t\tstreamId,\n\t\t\t\t},\n\t\t\t});\n\t\t\tconst delivered = this.services.controlServer.sendTo(tuiConnectionId, {\n\t\t\t\ttype: \"relay_offer\",\n\t\t\t\trelayId: relay.relayId,\n\t\t\t\trelayToken: relay.relayToken,\n\t\t\t\tworkspaceName,\n\t\t\t\tsessionId: targetSessionId,\n\t\t\t\tclientNodeId: authorization.client.nodeId,\n\t\t\t\tconnectionId,\n\t\t\t\tstreamId,\n\t\t\t});\n\t\t\tif (!delivered) {\n\t\t\t\t// The TUI connection vanished between the lease check and the offer;\n\t\t\t\t// fail the phone's deferred handshake now instead of after the TTL.\n\t\t\t\tthis.abortPendingRelay(\n\t\t\t\t\trelay.relayId,\n\t\t\t\t\t\"error\",\n\t\t\t\t\t\"relay offer undeliverable; retry\",\n\t\t\t\t\tRELAY_OFFER_RETRY_AFTER_MS,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t\tawait settled;\n\t}\n\n\tprivate async runIntegratedConversation(\n\t\tstream: IrohBiStreamLike,\n\t\thandshake: Extract<IrohRemoteHostHandshakeResult, { ok: true }>,\n\t\tconnection: IrohConnectionLike,\n\t\tconnectionId: string,\n\t\tstreamId: string,\n\t): Promise<void> {\n\t\tconst authorization = handshake.authorization;\n\t\tconst targetSessionId = getResolvedTargetSessionId(handshake.hello, authorization);\n\t\tconst daemonAttach = this.leaseBroker.beginDaemonAttach(authorization.workspace.name, targetSessionId);\n\t\tif (daemonAttach.kind === \"relay\") {\n\t\t\tif (!targetSessionId) {\n\t\t\t\tawait this.sendHandshakeError(stream, {\n\t\t\t\t\tmessage: \"conversation lease owner changed; retry\",\n\t\t\t\t\tretryAfterMs: RELAY_OFFER_RETRY_AFTER_MS,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.relayConversationToTui(\n\t\t\t\tstream,\n\t\t\t\thandshake,\n\t\t\t\tconnectionId,\n\t\t\t\tstreamId,\n\t\t\t\ttargetSessionId,\n\t\t\t\tdaemonAttach.tuiConnectionId,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (daemonAttach.kind === \"retry\") {\n\t\t\tawait this.sendHandshakeError(stream, {\n\t\t\t\tmessage: \"conversation lease is draining; retry\",\n\t\t\t\tretryAfterMs: daemonAttach.retryAfterMs,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst daemonAttachClaim: DaemonAttachClaim = daemonAttach.claim;\n\t\tlet entry: IntegratedRuntimeEntry;\n\t\tlet sessionSelection: Awaited<ReturnType<IntegratedRuntimeRegistry[\"getOrCreateEntry\"]>>[\"sessionSelection\"];\n\t\tlet createdRuntime = false;\n\t\ttry {\n\t\t\t({\n\t\t\t\tentry,\n\t\t\t\tsessionSelection,\n\t\t\t\tcreated: createdRuntime,\n\t\t\t} = await this.runtimes.getOrCreateEntry(\n\t\t\t\t{ hello: handshake.hello, response: handshake.response },\n\t\t\t\tauthorization,\n\t\t\t));\n\t\t} catch (error) {\n\t\t\tthis.leaseBroker.abortDaemonAttach(daemonAttachClaim);\n\t\t\tawait this.logAudit({\n\t\t\t\ttype: \"runtime_failure\",\n\t\t\t\tclientNodeId: authorization.client.nodeId,\n\t\t\t\tworkspace: authorization.workspace.name,\n\t\t\t\tsuccess: false,\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\tdetails: { runtime: \"integrated-volt\" },\n\t\t\t});\n\t\t\tawait this.sendHandshakeError(stream, error);\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tthis.activeStreams.hasConversationOnConnection(\n\t\t\t\tauthorization.client.nodeId,\n\t\t\t\tauthorization.workspace.name,\n\t\t\t\tentry.sessionId,\n\t\t\t\tconnectionId,\n\t\t\t)\n\t\t) {\n\t\t\tthis.leaseBroker.abortDaemonAttach(daemonAttachClaim);\n\t\t\tif (createdRuntime) {\n\t\t\t\tawait this.runtimes.cleanupUncommittedEntry(entry, sessionSelection);\n\t\t\t} else {\n\t\t\t\t// Reattach: getOrCreateEntry cancelled the detached-runtime retention\n\t\t\t\t// timer up front. Re-arm it (no-op unless the entry is still detached\n\t\t\t\t// with no timer) so aborting here never leaves the runtime unswept.\n\t\t\t\tawait this.runtimes.detachWithoutSubscriber(entry, \"reattach_superseded\");\n\t\t\t}\n\t\t\tawait this.rejectDuplicateActiveConnection(stream, authorization, entry.sessionId);\n\t\t\treturn;\n\t\t}\n\n\t\tlet activeStream: { entry: IrohRemoteActiveStreamEntry; remove: () => void } | undefined;\n\t\tlet subscriber: IntegratedRuntimeSubscriber | undefined;\n\t\tlet subscriberError: unknown;\n\t\tlet handshakeCommitted = false;\n\t\ttry {\n\t\t\tconst brokerCommit = this.leaseBroker.commitDaemonRuntime(\n\t\t\t\tdaemonAttachClaim,\n\t\t\t\tauthorization.workspace.name,\n\t\t\t\tentry.sessionId,\n\t\t\t);\n\t\t\tif (!brokerCommit.ok) {\n\t\t\t\tif (createdRuntime) {\n\t\t\t\t\tawait this.runtimes.cleanupUncommittedEntry(entry, sessionSelection);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tbrokerCommit.reason === \"tui_owned\" &&\n\t\t\t\t\tbrokerCommit.tuiConnectionId &&\n\t\t\t\t\ttargetSessionId === entry.sessionId\n\t\t\t\t) {\n\t\t\t\t\tawait this.relayConversationToTui(\n\t\t\t\t\t\tstream,\n\t\t\t\t\t\thandshake,\n\t\t\t\t\t\tconnectionId,\n\t\t\t\t\t\tstreamId,\n\t\t\t\t\t\tentry.sessionId,\n\t\t\t\t\t\tbrokerCommit.tuiConnectionId,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait this.sendHandshakeError(stream, {\n\t\t\t\t\tmessage: \"conversation lease owner changed; retry\",\n\t\t\t\t\tretryAfterMs: RELAY_OFFER_RETRY_AFTER_MS,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.runtimes.commitEntry(entry, sessionSelection, authorization);\n\t\t\t} catch (error) {\n\t\t\t\tthis.leaseBroker.rollbackDaemonRuntimeCommit(\n\t\t\t\t\tauthorization.workspace.name,\n\t\t\t\t\tentry.sessionId,\n\t\t\t\t\tbrokerCommit.previousState,\n\t\t\t\t);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tthis.activeStreams.hasConversationOnConnection(\n\t\t\t\t\tauthorization.client.nodeId,\n\t\t\t\t\tauthorization.workspace.name,\n\t\t\t\t\tentry.sessionId,\n\t\t\t\t\tconnectionId,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tthis.leaseBroker.rollbackDaemonRuntimeCommit(\n\t\t\t\t\tauthorization.workspace.name,\n\t\t\t\t\tentry.sessionId,\n\t\t\t\t\tbrokerCommit.previousState,\n\t\t\t\t);\n\t\t\t\tif (createdRuntime) {\n\t\t\t\t\tawait this.runtimes.cleanupUncommittedEntry(entry, sessionSelection);\n\t\t\t\t} else {\n\t\t\t\t\tawait this.runtimes.detachWithoutSubscriber(entry, \"reattach_superseded\");\n\t\t\t\t}\n\t\t\t\tawait this.rejectDuplicateActiveConnection(stream, authorization, entry.sessionId);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\thandshakeCommitted = true;\n\t\t\t// Worktree-bound conversations sanitize with the worktree checkout as the\n\t\t\t// root; the parent checkout and the worktrees root must ALSO redact (bash\n\t\t\t// output like `git worktree list` prints both).\n\t\t\tconst worktreeSanitizerOverrides: RemoteSanitizerOverrides | undefined =\n\t\t\t\tentry.worktreePath === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tremoteWorkspacePath:\n\t\t\t\t\t\t\t\tentry.worktreeSourceRootRelativePath === undefined\n\t\t\t\t\t\t\t\t\t? \"/workspace\"\n\t\t\t\t\t\t\t\t\t: `/workspace/${entry.worktreeSourceRootRelativePath}`,\n\t\t\t\t\t\t\tworkspacePath: entry.worktreePath,\n\t\t\t\t\t\t\tadditionalRedactedPaths: [authorization.workspace.path, getWorktreesRoot(this.services.agentDir)],\n\t\t\t\t\t\t};\n\t\t\tif (!(await this.isAuthorizationGrantCurrent(authorization))) {\n\t\t\t\tawait this.runtimes.stopEntry(entry, \"access_updated_during_attach\");\n\t\t\t\tthrow new Error(\"client access changed during conversation attach; reconnect\");\n\t\t\t}\n\t\t\tconst replacedEntries = this.activeStreams.takeEntriesForConversationOnOtherConnections(\n\t\t\t\tauthorization.client.nodeId,\n\t\t\t\tauthorization.workspace.name,\n\t\t\t\tentry.sessionId,\n\t\t\t\tconnectionId,\n\t\t\t);\n\t\t\tactiveStream = this.registerActiveStream(\n\t\t\t\tauthorization,\n\t\t\t\tentry.sessionId,\n\t\t\t\tstream,\n\t\t\t\tconnection,\n\t\t\t\tconnectionId,\n\t\t\t\tstreamId,\n\t\t\t\tworktreeSanitizerOverrides === undefined ? {} : { sanitizerOverrides: worktreeSanitizerOverrides },\n\t\t\t);\n\t\t\tawait this.closeReplacedActiveStreams(authorization, streamId, replacedEntries);\n\t\t\tawait writeIrohRemoteHandshakeResponse(\n\t\t\t\tstream.send,\n\t\t\t\tcreateIntegratedConversationHandshakeResponse(\n\t\t\t\t\t{ hello: handshake.hello, response: handshake.response },\n\t\t\t\t\tauthorization,\n\t\t\t\t\tentry.sessionId,\n\t\t\t\t\tsessionSelection,\n\t\t\t\t\tthis.getResponseContext(),\n\t\t\t\t\tentry.worktreeId,\n\t\t\t\t\tentry.workingDirectory,\n\t\t\t\t),\n\t\t\t);\n\t\t\tsubscriber = await this.runtimes.attachSubscriber(entry);\n\t\t\tthis.leaseBroker.onDaemonRuntimeStreamCountChanged(\n\t\t\t\tauthorization.workspace.name,\n\t\t\t\tentry.sessionId,\n\t\t\t\tentry.subscribers.size,\n\t\t\t);\n\t\t\tawait this.runtimes.replayWorkflowEvents(activeStream.entry, entry);\n\t\t\tconst pushDispatcher = this.createPushNotificationDispatcher(authorization);\n\t\t\tawait runIrohRemoteRpcMode(entry.runtime, {\n\t\t\t\trpcGrant: authorization.client.rpcGrant,\n\t\t\t\tisRpcGrantCurrent: () => this.isAuthorizationGrantCurrent(authorization),\n\t\t\t\tdecorateOutbound: (value) => decorateRemoteHostState(value, authorization, this.getResponseContext()),\n\t\t\t\tdisposeRuntimeOnClose: false,\n\t\t\t\tnotificationDelivery: pushDispatcher,\n\t\t\t\tonClientCapabilitiesChanged: (features) => {\n\t\t\t\t\tconst streamEntry = activeStream?.entry;\n\t\t\t\t\tif (streamEntry) {\n\t\t\t\t\t\tstreamEntry.capabilities = new Set(features);\n\t\t\t\t\t\tthis.pushThemeTokensToStream(streamEntry);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonSessionChanged: async (session) => {\n\t\t\t\t\tawait this.runtimes.handleSessionChanged(entry, activeStream?.entry, session, authorization);\n\t\t\t\t},\n\t\t\t\tonWorkflowEvent: async (event) => {\n\t\t\t\t\tawait this.runtimes.handleWorkflowEvent(\n\t\t\t\t\t\tentry,\n\t\t\t\t\t\tevent as unknown as Record<string, unknown>,\n\t\t\t\t\t\tactiveStream?.entry,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tregisterPushTarget: (args) => pushDispatcher.registerPushTarget(args),\n\t\t\t\tremoteCommandHandler: (command) =>\n\t\t\t\t\thandleIntegratedConversationRpcCommand(\n\t\t\t\t\t\tcommand as { type: string } & Record<string, unknown>,\n\t\t\t\t\t\tauthorization,\n\t\t\t\t\t\tthis.getCommandContext({\n\t\t\t\t\t\t\tworkspaceName: authorization.workspace.name,\n\t\t\t\t\t\t\tworkspacePath: authorization.workspace.path,\n\t\t\t\t\t\t\tentry,\n\t\t\t\t\t\t\tstreamEntry: activeStream?.entry,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tentry.runtime,\n\t\t\t\t\t),\n\t\t\t\tstream,\n\t\t\t\tinitialInput: handshake.initialInput,\n\t\t\t\tworkspaceName: authorization.workspace.name,\n\t\t\t\tworkspacePath: entry.worktreePath ?? authorization.workspace.path,\n\t\t\t\t...(worktreeSanitizerOverrides?.remoteWorkspacePath === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { remoteWorkspacePath: worktreeSanitizerOverrides.remoteWorkspacePath }),\n\t\t\t\t...(worktreeSanitizerOverrides?.additionalRedactedPaths === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { additionalRedactedPaths: worktreeSanitizerOverrides.additionalRedactedPaths }),\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tsubscriberError = error;\n\t\t\tif (!handshakeCommitted) {\n\t\t\t\tif (createdRuntime) {\n\t\t\t\t\tawait this.runtimes.cleanupUncommittedEntry(entry, sessionSelection);\n\t\t\t\t}\n\t\t\t\tawait this.sendHandshakeError(stream, error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t} finally {\n\t\t\tif (subscriber) {\n\t\t\t\tawait this.runtimes.detachSubscriber(\n\t\t\t\t\tentry,\n\t\t\t\t\tsubscriber,\n\t\t\t\t\tsubscriberError ? \"transport_error\" : \"transport_closed\",\n\t\t\t\t\tsubscriberError,\n\t\t\t\t);\n\t\t\t\tthis.leaseBroker.onDaemonRuntimeStreamCountChanged(\n\t\t\t\t\tauthorization.workspace.name,\n\t\t\t\t\tentry.sessionId,\n\t\t\t\t\tentry.subscribers.size,\n\t\t\t\t);\n\t\t\t} else if (handshakeCommitted || !createdRuntime) {\n\t\t\t\t// handshakeCommitted: normal detach after the runtime ran. !createdRuntime:\n\t\t\t\t// a reattach that failed before attachSubscriber, whose retention timer\n\t\t\t\t// getOrCreateEntry cancelled up front — re-arm it so the runtime is still\n\t\t\t\t// swept at TTL instead of leaking forever. detachWithoutSubscriber no-ops\n\t\t\t\t// when the entry was replaced or still has other subscribers.\n\t\t\t\tawait this.runtimes.detachWithoutSubscriber(\n\t\t\t\t\tentry,\n\t\t\t\t\tsubscriberError ? \"transport_error\" : \"transport_closed\",\n\t\t\t\t);\n\t\t\t\t// Sync the lease's stream count to reality. Without this, a handshake\n\t\t\t\t// write that failed after commitDaemonRuntime but before attachSubscriber\n\t\t\t\t// leaves the lease stuck at daemon-active with no live stream until the\n\t\t\t\t// detached-runtime retention TTL expires.\n\t\t\t\tthis.leaseBroker.onDaemonRuntimeStreamCountChanged(\n\t\t\t\t\tauthorization.workspace.name,\n\t\t\t\t\tentry.sessionId,\n\t\t\t\t\tentry.subscribers.size,\n\t\t\t\t);\n\t\t\t}\n\t\t\tactiveStream?.remove();\n\t\t}\n\t}\n\n\t// ==========================================================================\n\t// Stream/connection registries\n\t// ==========================================================================\n\n\tprivate registerClientConnection(nodeId: string, connection: IrohConnectionLike, connectionId: string): () => void {\n\t\tconst record: ClientConnectionRecord = {\n\t\t\tconnectionId,\n\t\t\tclose: (reason: string) => closeConnection(connection, reason),\n\t\t};\n\t\tlet records = this.clientConnections.get(nodeId);\n\t\tif (!records) {\n\t\t\trecords = new Set();\n\t\t\tthis.clientConnections.set(nodeId, records);\n\t\t}\n\t\trecords.add(record);\n\t\tlet removed = false;\n\t\treturn () => {\n\t\t\tif (removed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tremoved = true;\n\t\t\trecords.delete(record);\n\t\t\tif (records.size === 0 && this.clientConnections.get(nodeId) === records) {\n\t\t\t\tthis.clientConnections.delete(nodeId);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate closeClientConnectionsForClient(nodeId: string, reason: string): number {\n\t\tconst records = Array.from(this.clientConnections.get(nodeId) ?? []);\n\t\tif (records.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tthis.clientConnections.delete(nodeId);\n\t\tfor (const record of records) {\n\t\t\ttry {\n\t\t\t\trecord.close(reason);\n\t\t\t} catch {\n\t\t\t\t// Connection closure is best-effort; the transport may already be closing.\n\t\t\t}\n\t\t}\n\t\treturn records.length;\n\t}\n\n\tprivate async closeEntryConnection(entry: IrohRemoteActiveStreamEntry, reason: string): Promise<void> {\n\t\ttry {\n\t\t\tawait Promise.resolve(entry.closeConnection?.(reason));\n\t\t} catch {\n\t\t\t// Connection closure is best-effort. Stream teardown still drives task cleanup.\n\t\t}\n\t}\n\n\tprivate async closeIdleConnectionsForEntries(entries: IrohRemoteActiveStreamEntry[], reason: string): Promise<void> {\n\t\tconst closedConnectionIds = new Set<string>();\n\t\tfor (const entry of entries) {\n\t\t\tif (closedConnectionIds.has(entry.connectionId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (this.activeStreams.entriesForConnection(entry.connectionId).length > 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tclosedConnectionIds.add(entry.connectionId);\n\t\t\tawait this.closeEntryConnection(entry, reason);\n\t\t}\n\t}\n\n\tprivate async closeActiveStreamsForConnection(connectionId: string, reason: string): Promise<void> {\n\t\tconst entries = this.activeStreams.entriesForConnection(connectionId);\n\t\tfor (const entry of entries) {\n\t\t\tthis.activeStreams.unregister(entry);\n\t\t\tawait Promise.resolve(entry.close(reason)).catch(() => {});\n\t\t}\n\t}\n\n\tprivate async closeActiveStreamsForConversationKey(\n\t\tworkspaceName: string,\n\t\tsessionId: string,\n\t\treason: string,\n\t): Promise<number> {\n\t\tconst entries = this.activeStreams.entriesForConversationKey(workspaceName, sessionId);\n\t\tfor (const entry of entries) {\n\t\t\tthis.activeStreams.unregister(entry);\n\t\t\tawait Promise.resolve(entry.close(reason)).catch(() => {});\n\t\t}\n\t\tawait this.closeIdleConnectionsForEntries(entries, reason);\n\t\treturn entries.length;\n\t}\n\n\tprivate async closeActiveStreamsForWorkspace(\n\t\tworkspaceName: string,\n\t\treason: string,\n\t\texcludedEntry?: IrohRemoteActiveStreamEntry,\n\t): Promise<number> {\n\t\tconst entries = this.activeStreams\n\t\t\t.entriesForWorkspaceName(workspaceName)\n\t\t\t.filter((entry) => entry !== excludedEntry);\n\t\tif (entries.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tfor (const entry of entries) {\n\t\t\tthis.activeStreams.unregister(entry);\n\t\t\tawait Promise.resolve(entry.close(reason)).catch(() => {});\n\t\t}\n\t\tawait this.closeIdleConnectionsForEntries(entries, reason);\n\t\treturn entries.length;\n\t}\n\n\t/**\n\t * Invalidate an unredeemed relay offer: fail the phone's deferred handshake\n\t * immediately and settle the relay (lease bookkeeping, relay_closed to the\n\t * TUI, audit).\n\t */\n\tprivate abortPendingRelay(relayId: string, reason: RelayCloseReason, message: string, retryAfterMs?: number): void {\n\t\tconst pending = this.relays.invalidatePending(relayId);\n\t\tif (!pending) {\n\t\t\treturn;\n\t\t}\n\t\tvoid this.sendHandshakeError(pending.stream, {\n\t\t\tmessage,\n\t\t\t...(retryAfterMs === undefined ? {} : { retryAfterMs }),\n\t\t}).finally(() => pending.settle({ reason, bytesUp: 0, bytesDown: 0, durationMs: 0 }));\n\t}\n\n\tprivate closeRelaysForWorkspace(workspaceName: string, excludeRelayIds?: ReadonlySet<string>): void {\n\t\tfor (const relay of this.relays.activeRelays()) {\n\t\t\tif (relay.workspaceName === workspaceName && !excludeRelayIds?.has(relay.relayId)) {\n\t\t\t\trelay.close(\"workspace_unregistered\");\n\t\t\t}\n\t\t}\n\t\tfor (const pending of this.relays.pendingRelays()) {\n\t\t\tif (pending.workspaceName === workspaceName && !excludeRelayIds?.has(pending.relayId)) {\n\t\t\t\tthis.abortPendingRelay(pending.relayId, \"workspace_unregistered\", \"workspace unregistered\");\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Post-unregister host cleanup shared by the control, workspace-management,\n\t * and conversation RPC unregister paths: closes phone streams, stops\n\t * runtimes, drops live activities, and closes TUI relays for the workspace.\n\t * Exclusions keep the requesting stream/runtime/relays alive so the\n\t * unregister response can still be delivered.\n\t */\n\tprivate async cleanupUnregisteredWorkspace(\n\t\tworkspaceName: string,\n\t\texclusions: {\n\t\t\tstreamEntry?: IrohRemoteActiveStreamEntry;\n\t\t\truntimeEntry?: IntegratedRuntimeEntry;\n\t\t\trelayIds?: ReadonlySet<string>;\n\t\t\t/** Enables a non-destructive audit of preserved checkout directories. */\n\t\t\tworkspacePath?: string;\n\t\t} = {},\n\t): Promise<{ closedStreamCount: number; stoppedRuntimeCount: number }> {\n\t\tconst closedStreamCount = await this.closeActiveStreamsForWorkspace(\n\t\t\tworkspaceName,\n\t\t\tWORKSPACE_UNREGISTERED_CLOSE_REASON,\n\t\t\texclusions.streamEntry,\n\t\t);\n\t\tconst stoppedRuntimeCount = await this.runtimes.stopForWorkspace(\n\t\t\tworkspaceName,\n\t\t\tWORKSPACE_UNREGISTERED_CLOSE_REASON,\n\t\t\texclusions.runtimeEntry,\n\t\t);\n\t\tawait this.stateManager.removeLiveActivitiesForWorkspace(workspaceName);\n\t\tthis.closeRelaysForWorkspace(workspaceName, exclusions.relayIds);\n\t\tif (exclusions.workspacePath !== undefined) {\n\t\t\tawait this.worktrees\n\t\t\t\t.cleanupUnregisteredWorkspace({ name: workspaceName, path: exclusions.workspacePath })\n\t\t\t\t.catch(() => {});\n\t\t}\n\t\treturn { closedStreamCount, stoppedRuntimeCount };\n\t}\n\n\tprivate async closeActiveStreamsForClientWorkspace(\n\t\tnodeId: string,\n\t\tworkspaceName: string,\n\t\treason: string,\n\t): Promise<number> {\n\t\tconst entries = this.activeStreams\n\t\t\t.entriesForClientNodeId(nodeId)\n\t\t\t.filter((entry) => entry.workspaceName === workspaceName);\n\t\tif (entries.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tfor (const entry of entries) {\n\t\t\tthis.activeStreams.unregister(entry);\n\t\t\tawait Promise.resolve(entry.close(reason)).catch(() => {});\n\t\t}\n\t\tawait this.closeIdleConnectionsForEntries(entries, reason);\n\t\treturn entries.length;\n\t}\n\n\tprivate async closeClientForAccessUpdate(nodeId: string): Promise<void> {\n\t\tconst runtimeEntries = collectClientAuthorityInvalidationRuntimes(\n\t\t\tthis.activeStreams,\n\t\t\tthis.runtimes.values(),\n\t\t\tnodeId,\n\t\t);\n\t\tconst entries = collectClientAuthorityInvalidationStreams(this.activeStreams, runtimeEntries, nodeId);\n\t\tfor (const entry of entries) {\n\t\t\tthis.activeStreams.unregister(entry);\n\t\t}\n\t\t// Invalidate transport and relay authority synchronously. Terminal writes\n\t\t// below are best-effort and must never keep old commands or buffered prompts\n\t\t// alive behind backpressure.\n\t\tthis.closeClientConnectionsForClient(nodeId, \"access_updated\");\n\t\tfor (const entry of entries) {\n\t\t\ttry {\n\t\t\t\tentry.closeConnection?.(\"access_updated\");\n\t\t\t} catch {}\n\t\t}\n\t\tfor (const relay of this.relays.activeRelays()) {\n\t\t\tif (relay.clientNodeId === nodeId) relay.close(\"error\");\n\t\t}\n\t\tfor (const pending of this.relays.pendingRelays()) {\n\t\t\tif (pending.clientNodeId === nodeId) {\n\t\t\t\tthis.abortPendingRelay(pending.relayId, \"error\", \"client access updated; reconnect\");\n\t\t\t}\n\t\t}\n\t\tconst streamClosures = Promise.allSettled(\n\t\t\tArray.from(entries, (entry) => Promise.resolve(entry.close(\"access_updated\"))),\n\t\t);\n\t\tawait Promise.allSettled(\n\t\t\tArray.from(runtimeEntries, (runtimeEntry) => this.runtimes.stopEntry(runtimeEntry, \"access_updated\")),\n\t\t);\n\t\tawait streamClosures;\n\t}\n\n\tprivate async closeWorkspaceAuthorizationRemovedStreams(nodeId: string, workspaceName: string): Promise<void> {\n\t\tconst reason = \"workspace_authorization_removed\";\n\t\tconst closedStreamCount = await this.closeActiveStreamsForClientWorkspace(nodeId, workspaceName, reason);\n\t\tconst stoppedRuntimeCount = await this.runtimes.stopForClientWorkspace(nodeId, workspaceName, reason);\n\t\tconst removedLiveActivityCount = await this.stateManager.removeClientLiveActivitiesForWorkspace(\n\t\t\tnodeId,\n\t\t\tworkspaceName,\n\t\t);\n\t\tawait this.logAudit({\n\t\t\ttype: \"workspace_authorization_removed\",\n\t\t\tclientNodeId: nodeId,\n\t\t\tworkspace: workspaceName,\n\t\t\tsuccess: closedStreamCount > 0 || stoppedRuntimeCount > 0 || removedLiveActivityCount > 0,\n\t\t\tdetails: {\n\t\t\t\tclosedStreamCount,\n\t\t\t\tremovedLiveActivityCount,\n\t\t\t\tsource: \"authorization_failure\",\n\t\t\t\tstoppedRuntimeCount,\n\t\t\t},\n\t\t});\n\t}\n\n\tasync closeActiveStreamsForClient(nodeId: string): Promise<{ closed: boolean; closedCount: number }> {\n\t\tconst runtimeEntries = collectClientAuthorityInvalidationRuntimes(\n\t\t\tthis.activeStreams,\n\t\t\tthis.runtimes.values(),\n\t\t\tnodeId,\n\t\t);\n\t\tconst entries = collectClientAuthorityInvalidationStreams(this.activeStreams, runtimeEntries, nodeId);\n\t\tfor (const entry of entries) {\n\t\t\tthis.activeStreams.unregister(entry);\n\t\t}\n\n\t\t// Match access-update ordering: synchronously make active and unredeemed TUI\n\t\t// relays unusable before any terminal write, runtime disposal, or control ack.\n\t\tconst activeRelays = this.relays.activeRelays().filter((relay) => relay.clientNodeId === nodeId);\n\t\tconst pendingRelays = this.relays.pendingRelays().filter((relay) => relay.clientNodeId === nodeId);\n\t\tfor (const relay of activeRelays) {\n\t\t\trelay.close(\"error\");\n\t\t}\n\t\tfor (const pending of pendingRelays) {\n\t\t\tthis.abortPendingRelay(pending.relayId, \"error\", \"client revoked; re-pair required\");\n\t\t}\n\n\t\tconst closedConnectionCount = this.closeClientConnectionsForClient(nodeId, ACTIVE_REVOKE_CLOSE_REASON);\n\t\tfor (const entry of entries) {\n\t\t\ttry {\n\t\t\t\tentry.closeConnection?.(ACTIVE_REVOKE_CLOSE_REASON);\n\t\t\t} catch {}\n\t\t}\n\t\tconst streamClosures = Promise.allSettled(\n\t\t\tArray.from(entries, (entry) => Promise.resolve(entry.close(ACTIVE_REVOKE_CLOSE_REASON))),\n\t\t);\n\t\tawait Promise.allSettled(\n\t\t\tArray.from(runtimeEntries, (runtimeEntry) => this.runtimes.stopEntry(runtimeEntry, \"client_revoked\")),\n\t\t);\n\t\tawait streamClosures;\n\t\tconst stoppedRuntimeCount = runtimeEntries.size;\n\t\tconst closed =\n\t\t\tentries.size > 0 || closedConnectionCount > 0 || activeRelays.length > 0 || pendingRelays.length > 0;\n\t\tif (entries.size === 0) {\n\t\t\tawait this.logAudit({\n\t\t\t\ttype: \"active_connection_revoked\",\n\t\t\t\tclientNodeId: nodeId,\n\t\t\t\tsuccess: closed || stoppedRuntimeCount > 0,\n\t\t\t\terror: closed || stoppedRuntimeCount > 0 ? undefined : \"no active connection found\",\n\t\t\t\tdetails: {\n\t\t\t\t\tactiveRelayCount: activeRelays.length,\n\t\t\t\t\tcloseReason: ACTIVE_REVOKE_CLOSE_REASON,\n\t\t\t\t\tclosedConnectionCount,\n\t\t\t\t\tpendingRelayCount: pendingRelays.length,\n\t\t\t\t\tsource: \"control_channel\",\n\t\t\t\t\tstoppedRuntimeCount,\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn { closed, closedCount: closedConnectionCount + activeRelays.length + pendingRelays.length };\n\t\t}\n\n\t\tfor (const entry of entries) {\n\t\t\tawait this.logAudit({\n\t\t\t\ttype: \"active_connection_revoked\",\n\t\t\t\tclientNodeId: nodeId,\n\t\t\t\tworkspace: entry.workspaceName,\n\t\t\t\tsuccess: true,\n\t\t\t\tdetails: {\n\t\t\t\t\tactiveRelayCount: activeRelays.length,\n\t\t\t\t\tcloseReason: ACTIVE_REVOKE_CLOSE_REASON,\n\t\t\t\t\tclosedConnectionCount,\n\t\t\t\t\tpendingRelayCount: pendingRelays.length,\n\t\t\t\t\tsource: \"control_channel\",\n\t\t\t\t\tstreamId: entry.streamId,\n\t\t\t\t\tstoppedRuntimeCount,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\treturn { closed: true, closedCount: entries.size + activeRelays.length + pendingRelays.length };\n\t}\n\n\t// ==========================================================================\n\t// Pairing over the control plane\n\t// ==========================================================================\n\n\tprivate notifyPairingConsumed(\n\t\thandshake: { ok: true; authorization: IrohRemoteClientAuthorizationSuccess },\n\t\tremoteId: string,\n\t): void {\n\t\tconst consumed = handshake.authorization.consumedPairingTicket;\n\t\tif (!consumed) {\n\t\t\treturn;\n\t\t}\n\t\tfor (const [requestId, pending] of this.pendingPairRequests) {\n\t\t\tif (pending.secretHash !== consumed.secretHash) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tclearTimeout(pending.timer);\n\t\t\tthis.pendingPairRequests.delete(requestId);\n\t\t\tthis.services.controlServer.sendTo(pending.connectionId, {\n\t\t\t\ttype: \"pairing_progress\",\n\t\t\t\trequestId,\n\t\t\t\tphase: \"completed\",\n\t\t\t\tclientNodeId: remoteId,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handlePairRequest(\n\t\tconnection: ControlConnection,\n\t\trequest: ControlRequest & { type: \"pair_request\" },\n\t): Promise<void> {\n\t\ttry {\n\t\t\tawait withTimeout(\n\t\t\t\tthis.ready.promise,\n\t\t\t\tIROH_ENDPOINT_READY_TIMEOUT_MS,\n\t\t\t\t\"Iroh endpoint did not become ready within 15s\",\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconnection.send({\n\t\t\t\ttype: \"error\",\n\t\t\t\tid: request.id,\n\t\t\t\tcode: \"iroh_unavailable\",\n\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst engine = this.requireEngine();\n\t\tconst endpoint = this.endpoint;\n\t\tif (!endpoint || !this.endpointTicket) {\n\t\t\tconnection.send({ type: \"error\", id: request.id, code: \"iroh_unavailable\", message: \"endpoint not ready\" });\n\t\t\treturn;\n\t\t}\n\t\tconst workspaceName =\n\t\t\ttypeof (request as Record<string, unknown>).workspaceName === \"string\"\n\t\t\t\t? ((request as Record<string, unknown>).workspaceName as string)\n\t\t\t\t: undefined;\n\t\tconst requestId = randomUUID();\n\t\ttry {\n\t\t\tconst access =\n\t\t\t\trequest.access !== undefined\n\t\t\t\t\t? createIrohRemotePresetAccess(request.access)\n\t\t\t\t\t: request.allowedTools !== undefined && request.rpcCapabilities !== undefined\n\t\t\t\t\t\t? createIrohRemoteExplicitAccess(\n\t\t\t\t\t\t\t\trequest.allowedTools,\n\t\t\t\t\t\t\t\tparseIrohRemoteRpcCapabilities(request.rpcCapabilities),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: createIrohRemotePresetAccess(\"coding\");\n\t\t\tconst pairing = await engine.pair({\n\t\t\t\tallowTools: access.allowedTools,\n\t\t\t\trpcGrant: access.rpcGrant,\n\t\t\t\tirohTicket: this.endpointTicket,\n\t\t\t\tnodeId: this.hostNodeId,\n\t\t\t\trelayMode: this.relayMode,\n\t\t\t\t...(this.relayMode === \"production\" ? { relayUrls: this.relayUrls } : {}),\n\t\t\t\t...(this.relayMode === \"production\" && this.relayAuthToken !== undefined\n\t\t\t\t\t? { relayAuthToken: this.relayAuthToken }\n\t\t\t\t\t: {}),\n\t\t\t\t...(workspaceName === undefined ? {} : { workspace: workspaceName }),\n\t\t\t});\n\t\t\tconnection.send({ type: \"pair_started\", id: request.id, requestId });\n\t\t\tconnection.send({\n\t\t\t\ttype: \"pairing_progress\",\n\t\t\t\trequestId,\n\t\t\t\tphase: \"ticket\",\n\t\t\t\tticket: pairing.ticket,\n\t\t\t});\n\t\t\tconnection.send({ type: \"pairing_progress\", requestId, phase: \"waiting\" });\n\t\t\tconst ttlMs = Math.max(0, pairing.expiresAt - Date.now());\n\t\t\tconst timer = setTimeout(\n\t\t\t\t() => {\n\t\t\t\t\tif (!this.pendingPairRequests.delete(requestId)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.services.controlServer.sendTo(connection.connectionId, {\n\t\t\t\t\t\ttype: \"pairing_progress\",\n\t\t\t\t\t\trequestId,\n\t\t\t\t\t\tphase: \"failed\",\n\t\t\t\t\t\terror: \"pairing ticket expired\",\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tttlMs > 0 ? ttlMs : DEFAULT_IROH_REMOTE_PAIRING_TICKET_TTL_MS,\n\t\t\t);\n\t\t\ttimer.unref?.();\n\t\t\tthis.pendingPairRequests.set(requestId, {\n\t\t\t\trequestId,\n\t\t\t\tconnectionId: connection.connectionId,\n\t\t\t\tsecretHash: hashIrohRemotePairingSecret(pairing.secret),\n\t\t\t\texpiresAt: pairing.expiresAt,\n\t\t\t\ttimer,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconnection.send({\n\t\t\t\ttype: \"error\",\n\t\t\t\tid: request.id,\n\t\t\t\tcode: \"pair_failed\",\n\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t}\n\t}\n\n\t// ==========================================================================\n\t// Control plane integration\n\t// ==========================================================================\n\n\tasync handleRequest(connection: ControlConnection, request: ControlRequest): Promise<boolean> {\n\t\tswitch (request.type) {\n\t\t\tcase \"lease_acquire\": {\n\t\t\t\tconst outcome = await this.leaseBroker.acquireForTui({\n\t\t\t\t\tconnectionId: connection.connectionId,\n\t\t\t\t\tworkspaceName: request.workspaceName,\n\t\t\t\t\tsessionId: request.sessionId,\n\t\t\t\t\tforce: request.force,\n\t\t\t\t});\n\t\t\t\tif (outcome.kind === \"granted\") {\n\t\t\t\t\tconnection.send({\n\t\t\t\t\t\ttype: \"lease_granted\",\n\t\t\t\t\t\tid: request.id,\n\t\t\t\t\t\tworkspaceName: request.workspaceName,\n\t\t\t\t\t\tsessionId: request.sessionId,\n\t\t\t\t\t\thandoff: outcome.handoff,\n\t\t\t\t\t});\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (outcome.kind === \"denied\") {\n\t\t\t\t\tconnection.send({ type: \"lease_denied\", id: request.id, reason: outcome.reason });\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tconnection.send({ type: \"lease_pending\", id: request.id, viewerFeedId: outcome.viewerFeedId });\n\t\t\t\toutcome.granted.then(\n\t\t\t\t\t(granted) => {\n\t\t\t\t\t\tconnection.send({\n\t\t\t\t\t\t\ttype: \"lease_granted\",\n\t\t\t\t\t\t\tid: request.id,\n\t\t\t\t\t\t\tworkspaceName: request.workspaceName,\n\t\t\t\t\t\t\tsessionId: request.sessionId,\n\t\t\t\t\t\t\thandoff: granted.handoff,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\t(error: unknown) => {\n\t\t\t\t\t\tconnection.send({\n\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\tid: request.id,\n\t\t\t\t\t\t\tcode: \"drain_failed\",\n\t\t\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"lease_release\": {\n\t\t\t\tconst result = this.leaseBroker.releaseFromTui(\n\t\t\t\t\tconnection.connectionId,\n\t\t\t\t\trequest.workspaceName,\n\t\t\t\t\trequest.sessionId,\n\t\t\t\t);\n\t\t\t\tif (!result.ok) {\n\t\t\t\t\tconnection.send({ type: \"error\", id: request.id, code: result.code, message: \"lease not held\" });\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tconnection.send({ type: \"ok\", id: request.id });\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"lease_rekey\": {\n\t\t\t\tthis.leaseBroker.rekey(request.workspaceName, request.oldSessionId, request.newSessionId);\n\t\t\t\tconnection.send({ type: \"ok\", id: request.id });\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"viewer_subscribe\": {\n\t\t\t\tif (!this.viewerFeeds.subscribe(request.viewerFeedId, connection.connectionId)) {\n\t\t\t\t\tconnection.send({ type: \"error\", id: request.id, code: \"not_found\", message: \"unknown viewer feed\" });\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tconnection.send({ type: \"ok\", id: request.id });\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"viewer_unsubscribe\": {\n\t\t\t\tif (!this.viewerFeeds.unsubscribe(request.viewerFeedId, connection.connectionId)) {\n\t\t\t\t\tconnection.send({ type: \"error\", id: request.id, code: \"not_found\", message: \"unknown viewer feed\" });\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tconnection.send({ type: \"ok\", id: request.id });\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"viewer_abort\": {\n\t\t\t\tif (!(await this.viewerFeeds.abort(request.viewerFeedId, connection.connectionId))) {\n\t\t\t\t\tconnection.send({ type: \"error\", id: request.id, code: \"not_found\", message: \"unknown viewer feed\" });\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tconnection.send({ type: \"ok\", id: request.id });\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"pair_request\":\n\t\t\t\tawait this.handlePairRequest(connection, request);\n\t\t\t\treturn true;\n\t\t\tcase \"pair_cancel\": {\n\t\t\t\tconst pending = this.pendingPairRequests.get(request.requestId);\n\t\t\t\tif (!pending || pending.connectionId !== connection.connectionId) {\n\t\t\t\t\tconnection.send({\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\tid: request.id,\n\t\t\t\t\t\tcode: \"not_found\",\n\t\t\t\t\t\tmessage: \"pairing request not found\",\n\t\t\t\t\t});\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this.cancelPendingPairing(request.requestId, pending);\n\t\t\t\t\tconnection.send({ type: \"ok\", id: request.id });\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconnection.send({\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\tid: request.id,\n\t\t\t\t\t\tcode: \"cancel_failed\",\n\t\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"relay_rpc\": {\n\t\t\t\tconst result = await this.handleRelayRpc(connection, request);\n\t\t\t\tif (!result.ok) {\n\t\t\t\t\tconnection.send({ type: \"error\", id: request.id, code: result.code, message: result.message });\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tconnection.send({\n\t\t\t\t\ttype: \"relay_rpc_result\",\n\t\t\t\t\tid: request.id,\n\t\t\t\t\tresponse: result.response,\n\t\t\t\t\t...(result.workspaceMetadata === undefined ? {} : { workspaceMetadata: result.workspaceMetadata }),\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"relay_notification_delivery\": {\n\t\t\t\tconst result = await this.handleRelayNotificationDelivery(connection, request);\n\t\t\t\tif (!result.ok) {\n\t\t\t\t\tconnection.send({ type: \"error\", id: request.id, code: result.code, message: result.message });\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tconnection.send({ type: \"relay_push_delivery_result\", id: request.id, status: result.status });\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"relay_live_activity_delivery\": {\n\t\t\t\tconst result = await this.handleRelayLiveActivityDelivery(connection, request);\n\t\t\t\tif (!result.ok) {\n\t\t\t\t\tconnection.send({ type: \"error\", id: request.id, code: result.code, message: result.message });\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tconnection.send({ type: \"relay_push_delivery_result\", id: request.id, status: result.status });\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"client_access_update\": {\n\t\t\t\tconst access =\n\t\t\t\t\trequest.access !== undefined\n\t\t\t\t\t\t? createIrohRemotePresetAccess(request.access)\n\t\t\t\t\t\t: createIrohRemoteExplicitAccess(\n\t\t\t\t\t\t\t\trequest.allowedTools ?? [],\n\t\t\t\t\t\t\t\tparseIrohRemoteRpcCapabilities(request.rpcCapabilities),\n\t\t\t\t\t\t\t);\n\t\t\t\tconst engine = this.engine;\n\t\t\t\tconst updated = engine\n\t\t\t\t\t? await engine.updateClientAccess(request.clientNodeId, request.expectedRevision, access)\n\t\t\t\t\t: await this.stateManager.updateClientAccess(request.clientNodeId, request.expectedRevision, access);\n\t\t\t\tif (!engine) {\n\t\t\t\t\tawait this.logAudit({\n\t\t\t\t\t\ttype: \"client_access_updated\",\n\t\t\t\t\t\tclientNodeId: request.clientNodeId,\n\t\t\t\t\t\tsuccess: updated.ok,\n\t\t\t\t\t\terror: updated.ok ? undefined : updated.reason,\n\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\texpectedRevision: request.expectedRevision,\n\t\t\t\t\t\t\t...(updated.ok\n\t\t\t\t\t\t\t\t? { revision: updated.client.rpcGrant.revision }\n\t\t\t\t\t\t\t\t: { currentRevision: updated.currentRevision }),\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (!updated.ok) {\n\t\t\t\t\tconnection.send({\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\tid: request.id,\n\t\t\t\t\t\tcode: updated.reason,\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\tupdated.reason === \"revision_conflict\"\n\t\t\t\t\t\t\t\t? `RPC grant revision conflict (current ${updated.currentRevision ?? \"unknown\"})`\n\t\t\t\t\t\t\t\t: updated.reason === \"revision_exhausted\"\n\t\t\t\t\t\t\t\t\t? \"RPC grant revision is exhausted; revoke and re-pair the client\"\n\t\t\t\t\t\t\t\t\t: \"client not found\",\n\t\t\t\t\t});\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tawait this.services.state.flush();\n\t\t\t\tawait this.closeClientForAccessUpdate(request.clientNodeId);\n\t\t\t\tconnection.send({\n\t\t\t\t\ttype: \"client_access_updated\",\n\t\t\t\t\tid: request.id,\n\t\t\t\t\tclient: {\n\t\t\t\t\t\tclientNodeId: updated.client.nodeId,\n\t\t\t\t\t\tlabel: updated.client.label,\n\t\t\t\t\t\tpairedAtMs: updated.client.pairedAt,\n\t\t\t\t\t\tlastSeenAtMs: updated.client.lastSeenAt,\n\t\t\t\t\t\tallowedTools: updated.client.allowedTools.length === 0 ? [] : updated.client.allowedTools.split(\",\"),\n\t\t\t\t\t\trpcGrant: updated.client.rpcGrant,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"client_revoke\": {\n\t\t\t\tconst result = await this.requireEngineSafe();\n\t\t\t\tif (!result.ok) {\n\t\t\t\t\tconnection.send({ type: \"error\", id: request.id, code: \"iroh_unavailable\", message: result.error });\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tconst revocation = await result.engine.revokeClient(request.clientNodeId);\n\t\t\t\tif (!revocation.revoked) {\n\t\t\t\t\tconnection.send({ type: \"error\", id: request.id, code: \"not_found\", message: \"client not found\" });\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tawait this.closeActiveStreamsForClient(request.clientNodeId);\n\t\t\t\tawait this.revokeClientPushTargets(revocation.client);\n\t\t\t\tconnection.send({ type: \"ok\", id: request.id });\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"workspace_unregister\": {\n\t\t\t\tlet removedWorkspace: Awaited<ReturnType<IrohRemoteHostStateManager[\"unregisterWorkspace\"]>>;\n\t\t\t\ttry {\n\t\t\t\t\tremovedWorkspace = await this.stateManager.unregisterWorkspace(request.name);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!isIrohRemoteWorkspaceHasWorktreesError(error)) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tawait this.logAudit({\n\t\t\t\t\t\ttype: \"workspace_unregistered\",\n\t\t\t\t\t\tworkspace: request.name,\n\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\terror: IROH_REMOTE_WORKSPACE_HAS_WORKTREES_ERROR,\n\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\tsource: \"control\",\n\t\t\t\t\t\t\tworktreeCount: error.worktreeIds.length,\n\t\t\t\t\t\t\tworktreeIds: error.worktreeIds,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tconnection.send({\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\tid: request.id,\n\t\t\t\t\t\tcode: IROH_REMOTE_WORKSPACE_HAS_WORKTREES_ERROR,\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t});\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (!removedWorkspace) {\n\t\t\t\t\tconnection.send({\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\tid: request.id,\n\t\t\t\t\t\tcode: \"not_found\",\n\t\t\t\t\t\tmessage: `No registered workspace named ${request.name}`,\n\t\t\t\t\t});\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tthis.engine?.clearPairingSecretForWorkspace(request.name);\n\t\t\t\tawait this.cleanupUnregisteredWorkspace(request.name, { workspacePath: removedWorkspace.path });\n\t\t\t\tawait this.logAudit({\n\t\t\t\t\ttype: \"workspace_unregistered\",\n\t\t\t\t\tworkspace: request.name,\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tdetails: { source: \"control\" },\n\t\t\t\t});\n\t\t\t\tconnection.send({ type: \"ok\", id: request.id });\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tif (isWorktreeControlRequest(request)) {\n\t\t\t\t\tawait handleWorktreeControlRequest(connection, request, {\n\t\t\t\t\t\tmanager: this.worktrees,\n\t\t\t\t\t\tstateManager: this.stateManager,\n\t\t\t\t\t\tremoveWorktree: (workspace, worktreeId, force) =>\n\t\t\t\t\t\t\tthis.removeWorkspaceWorktree(workspace, worktreeId, force),\n\t\t\t\t\t});\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tprivate async createRelayDeliveryAuthorization(\n\t\tconnection: ControlConnection,\n\t\trequest: { clientNodeId: string; workspaceName: string; sessionId: string },\n\t): Promise<\n\t\t{ ok: true; authorization: IrohRemoteClientAuthorizationSuccess } | { ok: false; code: string; message: string }\n\t> {\n\t\tconst lease = this.leaseBroker.lookup(request.workspaceName, request.sessionId);\n\t\tif (!lease || lease.state !== \"tui-owned\" || lease.tuiConnectionId !== connection.connectionId) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\tcode: \"not_held\",\n\t\t\t\tmessage: \"relay lease is not held by this control connection\",\n\t\t\t};\n\t\t}\n\t\tconst client = await this.stateManager.getClient(request.clientNodeId);\n\t\tif (!client) {\n\t\t\treturn { ok: false, code: \"not_found\", message: \"paired client not found\" };\n\t\t}\n\t\tconst workspace = (await this.stateManager.getState()).workspaces.find(\n\t\t\t(candidate) => candidate.name === request.workspaceName,\n\t\t);\n\t\tif (!workspace) {\n\t\t\treturn { ok: false, code: \"not_found\", message: `no registered workspace named ${request.workspaceName}` };\n\t\t}\n\t\treturn {\n\t\t\tok: true,\n\t\t\tauthorization: {\n\t\t\t\tok: true,\n\t\t\t\tallowTools: client.allowedTools,\n\t\t\t\tclient,\n\t\t\t\tpaired: true,\n\t\t\t\tpairingSecretConsumed: false,\n\t\t\t\tworkspace,\n\t\t\t\tworkspaceNames: [workspace.name],\n\t\t\t\tworkspaces: [{ name: workspace.name, status: \"available\" }],\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate async handleRelayNotificationDelivery(\n\t\tconnection: ControlConnection,\n\t\trequest: Extract<ControlRequest, { type: \"relay_notification_delivery\" }>,\n\t): Promise<RelayPushDeliveryResult> {\n\t\tconst notification = request.notification;\n\t\tif (notification.sessionId !== undefined && notification.sessionId !== request.sessionId) {\n\t\t\treturn { ok: false, code: \"session_mismatch\", message: \"notification session does not match relay session\" };\n\t\t}\n\t\tif (notification.workspace !== undefined && notification.workspace !== request.workspaceName) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\tcode: \"workspace_mismatch\",\n\t\t\t\tmessage: \"notification workspace does not match relay workspace\",\n\t\t\t};\n\t\t}\n\t\tconst authorization = await this.createRelayDeliveryAuthorization(connection, request);\n\t\tif (!authorization.ok) {\n\t\t\treturn authorization;\n\t\t}\n\t\tconst scopedNotification: IrohRemotePushNotificationIntent = {\n\t\t\t...notification,\n\t\t\tsessionId: notification.sessionId ?? request.sessionId,\n\t\t\tworkspace: notification.workspace ?? request.workspaceName,\n\t\t};\n\t\ttry {\n\t\t\tconst status = await this.createPushNotificationDispatcher(authorization.authorization).deliverNotification(\n\t\t\t\tscopedNotification,\n\t\t\t);\n\t\t\treturn { ok: true, status };\n\t\t} catch {\n\t\t\treturn { ok: true, status: \"failed\" };\n\t\t}\n\t}\n\n\tprivate async handleRelayLiveActivityDelivery(\n\t\tconnection: ControlConnection,\n\t\trequest: Extract<ControlRequest, { type: \"relay_live_activity_delivery\" }>,\n\t): Promise<RelayPushDeliveryResult> {\n\t\tconst contentState = request.update.contentState;\n\t\tif (contentState.sessionID !== undefined && contentState.sessionID !== request.sessionId) {\n\t\t\treturn { ok: false, code: \"session_mismatch\", message: \"Live Activity session does not match relay session\" };\n\t\t}\n\t\tif (contentState.workspaceName !== undefined && contentState.workspaceName !== request.workspaceName) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\tcode: \"workspace_mismatch\",\n\t\t\t\tmessage: \"Live Activity workspace does not match relay workspace\",\n\t\t\t};\n\t\t}\n\t\tconst authorization = await this.createRelayDeliveryAuthorization(connection, request);\n\t\tif (!authorization.ok) {\n\t\t\treturn authorization;\n\t\t}\n\t\tconst scopedUpdate: IrohRemoteLiveActivityUpdateIntent = {\n\t\t\t...request.update,\n\t\t\tcontentState: {\n\t\t\t\t...contentState,\n\t\t\t\tsessionID: contentState.sessionID ?? request.sessionId,\n\t\t\t\tworkspaceName: contentState.workspaceName ?? request.workspaceName,\n\t\t\t},\n\t\t};\n\t\ttry {\n\t\t\tconst status = await this.createPushNotificationDispatcher(\n\t\t\t\tauthorization.authorization,\n\t\t\t).deliverLiveActivityUpdate(scopedUpdate);\n\t\t\treturn { ok: true, status };\n\t\t} catch {\n\t\t\treturn { ok: true, status: \"failed\" };\n\t\t}\n\t}\n\n\t/**\n\t * Execute a state-touching RPC command forwarded from a TUI-owned relay\n\t * against the daemon's real state (§5.6): push targets, live activities,\n\t * and workspace unregistration must land here, not in the TUI's in-memory\n\t * state copy.\n\t */\n\tprivate async handleRelayRpc(\n\t\tconnection: ControlConnection,\n\t\trequest: Extract<ControlRequest, { type: \"relay_rpc\" }>,\n\t): Promise<\n\t\t| {\n\t\t\t\tok: true;\n\t\t\t\tresponse: Record<string, unknown>;\n\t\t\t\tworkspaceMetadata?: { workspaceNames: string[]; workspaces: Array<{ name: string; status: string }> };\n\t\t }\n\t\t| { ok: false; code: string; message: string }\n\t> {\n\t\tconst relayAuthorization = this.relays.authorizeRpc(request.relayId, connection.connectionId, request);\n\t\tif (!relayAuthorization.ok) {\n\t\t\treturn relayAuthorization;\n\t\t}\n\t\tconst command = request.command;\n\t\tif (!RELAY_RPC_COMMAND_TYPES.has(command.type)) {\n\t\t\treturn { ok: false, code: \"unsupported\", message: `unsupported relay rpc command: ${command.type}` };\n\t\t}\n\t\tconst client = await this.stateManager.getClient(request.clientNodeId);\n\t\tif (!client) {\n\t\t\treturn { ok: false, code: \"not_found\", message: \"paired client not found\" };\n\t\t}\n\t\tconst requiredCapabilities = getIrohRemoteRpcCommandCapabilities(command);\n\t\tif (requiredCapabilities === undefined) {\n\t\t\treturn { ok: false, code: \"unsupported\", message: `unsupported relay rpc command: ${command.type}` };\n\t\t}\n\t\tconst missingCapability = getMissingIrohRemoteRpcCapability(client.rpcGrant, requiredCapabilities);\n\t\tif (missingCapability !== undefined) {\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\tresponse: {\n\t\t\t\t\t...createIrohRemoteRpcCapabilityDeniedResponse(\n\t\t\t\t\t\tgetRpcResponseId(command),\n\t\t\t\t\t\tcommand.type,\n\t\t\t\t\t\tmissingCapability,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tconst workspace = (await this.stateManager.getState()).workspaces.find(\n\t\t\t(candidate) => candidate.name === request.workspaceName,\n\t\t);\n\t\tif (!workspace) {\n\t\t\treturn { ok: false, code: \"not_found\", message: `no registered workspace named ${request.workspaceName}` };\n\t\t}\n\t\tconst authorization: IrohRemoteClientAuthorizationSuccess = {\n\t\t\tok: true,\n\t\t\tallowTools: client.allowedTools,\n\t\t\tclient,\n\t\t\tpaired: true,\n\t\t\tpairingSecretConsumed: false,\n\t\t\tworkspace,\n\t\t\tworkspaceNames: [workspace.name],\n\t\t\tworkspaces: [{ name: workspace.name, status: \"available\" }],\n\t\t};\n\t\tconst responseId = getRpcResponseId(command);\n\t\tif (command.type === \"set_keep_awake\" || command.type === \"get_keep_awake\") {\n\t\t\tconst response = createKeepAwakeRpcResponse(command, this.getCommandContext());\n\t\t\treturn { ok: true, response: response as Record<string, unknown> };\n\t\t}\n\t\tif (command.type === \"set_web_search_key\" || command.type === \"get_web_search_status\") {\n\t\t\tconst response = createWebSearchKeyRpcResponse(command, this.getCommandContext());\n\t\t\treturn { ok: true, response: response as Record<string, unknown> };\n\t\t}\n\t\tif (command.type === \"register_push_target\") {\n\t\t\ttry {\n\t\t\t\tconst data = await this.createPushNotificationDispatcher(authorization).registerPushTarget(command.args);\n\t\t\t\treturn { ok: true, response: createRpcSuccessResponse(responseId, command.type, { ...data }) };\n\t\t\t} catch (error) {\n\t\t\t\treturn {\n\t\t\t\t\tok: true,\n\t\t\t\t\tresponse: {\n\t\t\t\t\t\t...createIrohRemoteRpcErrorResponse(\n\t\t\t\t\t\t\tresponseId,\n\t\t\t\t\t\t\tcommand.type,\n\t\t\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tif (command.type === \"register_live_activity\") {\n\t\t\tconst response = await createRemoteRegisterLiveActivityRpcResponse(\n\t\t\t\tcommand,\n\t\t\t\tauthorization,\n\t\t\t\tthis.getCommandContext(),\n\t\t\t\trequest.sessionId,\n\t\t\t);\n\t\t\treturn { ok: true, response: response as Record<string, unknown> };\n\t\t}\n\t\tif (command.type === \"unregister_live_activity\") {\n\t\t\tconst response = await createRemoteUnregisterLiveActivityRpcResponse(\n\t\t\t\tcommand,\n\t\t\t\tauthorization,\n\t\t\t\tthis.getCommandContext(),\n\t\t\t\trequest.sessionId,\n\t\t\t);\n\t\t\treturn { ok: true, response: response as Record<string, unknown> };\n\t\t}\n\t\t// unregister_workspace: run against the daemon state with the shared host\n\t\t// cleanup, keeping the requesting conversation's own relays open so the\n\t\t// response can still be delivered over them.\n\t\tconst excludeRelayIds = new Set(\n\t\t\tthis.relays\n\t\t\t\t.activeForConversation(request.clientNodeId, request.workspaceName, request.sessionId)\n\t\t\t\t.map((relay) => relay.relayId),\n\t\t);\n\t\tconst context: ConversationCommandContext = {\n\t\t\t...this.getCommandContext(),\n\t\t\tonWorkspaceUnregistered: async (workspaceName) => {\n\t\t\t\tawait this.cleanupUnregisteredWorkspace(workspaceName, {\n\t\t\t\t\trelayIds: excludeRelayIds,\n\t\t\t\t\tworkspacePath: workspace.path,\n\t\t\t\t});\n\t\t\t},\n\t\t};\n\t\tconst response = await handleRemoteHostRpcCommand(command, authorization, context);\n\t\tif (!response) {\n\t\t\treturn { ok: false, code: \"unsupported\", message: `unsupported relay rpc command: ${command.type}` };\n\t\t}\n\t\treturn {\n\t\t\tok: true,\n\t\t\tresponse: response as Record<string, unknown>,\n\t\t\tworkspaceMetadata: {\n\t\t\t\tworkspaceNames: [...authorization.workspaceNames],\n\t\t\t\tworkspaces: authorization.workspaces.map((entry) => ({ name: entry.name, status: entry.status })),\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate async requireEngineSafe(): Promise<\n\t\t{ ok: true; engine: IrohRemoteHostEngine } | { ok: false; error: string }\n\t> {\n\t\ttry {\n\t\t\tawait withTimeout(\n\t\t\t\tthis.ready.promise,\n\t\t\t\tIROH_ENDPOINT_READY_TIMEOUT_MS,\n\t\t\t\t\"Iroh endpoint did not become ready within 15s\",\n\t\t\t);\n\t\t} catch (error) {\n\t\t\treturn { ok: false, error: error instanceof Error ? error.message : String(error) };\n\t\t}\n\t\tif (!this.engine) {\n\t\t\treturn { ok: false, error: \"iroh host engine is not ready\" };\n\t\t}\n\t\treturn { ok: true, engine: this.engine };\n\t}\n\n\tprivate async cancelPendingPairing(\n\t\trequestId: string,\n\t\tpending: { secretHash: string; timer: NodeJS.Timeout },\n\t): Promise<void> {\n\t\tclearTimeout(pending.timer);\n\t\tif (this.engine) {\n\t\t\tawait this.engine.cancelPairingSecretByHash(pending.secretHash);\n\t\t} else {\n\t\t\tawait this.stateManager.removePendingPairingTicket(pending.secretHash);\n\t\t}\n\t\tawait this.services.state.flush();\n\t\tthis.pendingPairRequests.delete(requestId);\n\t}\n\n\tonControlConnectionClosed(connection: ControlConnection): void {\n\t\tthis.leaseBroker.releaseAllForConnection(connection.connectionId);\n\t\tfor (const [requestId, pending] of this.pendingPairRequests) {\n\t\t\tif (pending.connectionId !== connection.connectionId) continue;\n\t\t\tvoid this.cancelPendingPairing(requestId, pending).catch((error) => {\n\t\t\t\tthis.log(\"warn\", \"failed to cancel pairing after control disconnect\", {\n\t\t\t\t\trequestId,\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\n\tadmitRelay(relayId: string, relayToken: string, socket: Socket, bufferedRemainder: Buffer): boolean {\n\t\treturn this.relays.admit(relayId, relayToken, socket, bufferedRemainder);\n\t}\n\n\tstatusExtras(): { leases: ControlLeaseStatus[]; phoneConnections: number; relayCount: number } {\n\t\tconst leases: ControlLeaseStatus[] = this.leaseBroker.list().map((record) => ({\n\t\t\tworkspaceName: record.workspaceName,\n\t\t\tsessionId: record.sessionId,\n\t\t\tstate: record.state,\n\t\t\trelayCount: record.relayIds.size,\n\t\t\tstreamCount: record.streamCount,\n\t\t}));\n\t\treturn { leases, phoneConnections: this.clientConnections.size, relayCount: this.relays.activeCount() };\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tthis.shuttingDown = true;\n\t\tthis.worktreeRetention.dispose();\n\t\t// 1. Stop accepting: close the endpoint accept loop lazily; new hellos are\n\t\t// rejected by the control server's shutting-down gate. Close relays and\n\t\t// unredeemed offers up front with the dedicated host_shutdown reason —\n\t\t// otherwise they die with the endpoint and TUIs see a misleading\n\t\t// relay_closed{error}.\n\t\tfor (const relay of this.relays.activeRelays()) {\n\t\t\trelay.close(\"host_shutdown\");\n\t\t}\n\t\tfor (const pending of this.relays.pendingRelays()) {\n\t\t\tthis.abortPendingRelay(pending.relayId, \"host_shutdown\", \"daemon shutting down\");\n\t\t}\n\t\t// 2. Wait for busy runtimes to go idle (60s cap each, concurrently);\n\t\t// never abort prompt preflight or a turn from shutdown.\n\t\tconst drainResults = await Promise.allSettled(\n\t\t\tthis.runtimes\n\t\t\t\t.values()\n\t\t\t\t.filter((entry) => entry.runtime.session.isBusy)\n\t\t\t\t.map((entry) =>\n\t\t\t\t\twithTimeout(entry.runtime.session.waitForIdle(), SHUTDOWN_RUNTIME_IDLE_CAP_MS, \"drain cap\"),\n\t\t\t\t),\n\t\t);\n\t\tconst cappedRuntimes = drainResults.filter((result) => result.status === \"rejected\").length;\n\t\t// 3. Flush + dispose runtimes through the normal dispose path.\n\t\tawait this.runtimes.stopAll(\"host_shutdown\");\n\t\t// 4. Close all phone streams and connections with reason host_shutdown.\n\t\tfor (const nodeId of Array.from(this.clientConnections.keys())) {\n\t\t\tfor (const entry of this.activeStreams.entriesForClientNodeId(nodeId)) {\n\t\t\t\tthis.activeStreams.unregister(entry);\n\t\t\t\tawait Promise.resolve(entry.close(\"host_shutdown\")).catch(() => {});\n\t\t\t}\n\t\t\tawait this.closeClientConnectionsForClient(nodeId, \"host_shutdown\");\n\t\t}\n\t\ttry {\n\t\t\tawait this.endpoint?.close();\n\t\t} catch {\n\t\t\t// Endpoint shutdown is best-effort.\n\t\t}\n\t\tawait Promise.allSettled(this.connectionTasks);\n\t\tawait this.services.auditLogger.flush().catch(() => {});\n\t\tthis.log(\"info\", \"iroh service stopped\", { cappedRuntimes });\n\t}\n\n\tprivate async logAudit(event: Parameters<VoltdRuntimeServices[\"auditLogger\"][\"log\"]>[0]): Promise<void> {\n\t\ttry {\n\t\t\tawait this.services.auditLogger.log(event);\n\t\t} catch {\n\t\t\t// Audit logging is best-effort.\n\t\t}\n\t}\n}\n"]}
|