@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,91 @@
|
|
|
1
|
+
import { Buffer } from "node:buffer";
|
|
2
|
+
import { DEFAULT_IROH_READ_LIMIT, serializeJsonLine, } from "../../rpc/index.js";
|
|
3
|
+
export const DEFAULT_IROH_REMOTE_HANDSHAKE_MAX_LINE_BYTES = 16 * 1024;
|
|
4
|
+
export const DEFAULT_IROH_REMOTE_HANDSHAKE_TIMEOUT_MS = 15_000;
|
|
5
|
+
export async function readIrohRemoteHandshakeLine(recv, options = {}) {
|
|
6
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_IROH_REMOTE_HANDSHAKE_TIMEOUT_MS;
|
|
7
|
+
return withTimeout(readBoundedIrohLine(recv, options), timeoutMs, "Iroh remote handshake timed out", () => {
|
|
8
|
+
try {
|
|
9
|
+
const stopResult = recv.stop?.(options.timeoutStopErrorCode ?? 0n);
|
|
10
|
+
if (stopResult) {
|
|
11
|
+
void Promise.resolve(stopResult).catch(() => { });
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
// Timeout cleanup is best-effort; callers should receive the timeout error.
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export async function writeIrohRemoteHello(send, hello) {
|
|
20
|
+
await send.writeAll(textToBytes(serializeJsonLine(hello)));
|
|
21
|
+
}
|
|
22
|
+
export async function writeIrohRemoteHandshakeResponse(send, response) {
|
|
23
|
+
await send.writeAll(textToBytes(serializeJsonLine(response)));
|
|
24
|
+
}
|
|
25
|
+
async function readBoundedIrohLine(recv, options) {
|
|
26
|
+
const maxLineBytes = normalizePositiveInteger(options.maxLineBytes ?? DEFAULT_IROH_REMOTE_HANDSHAKE_MAX_LINE_BYTES, "maxLineBytes");
|
|
27
|
+
const requestedReadLimit = normalizePositiveInteger(options.readLimit ?? DEFAULT_IROH_READ_LIMIT, "readLimit");
|
|
28
|
+
const readLimit = Math.min(requestedReadLimit, maxLineBytes + 1);
|
|
29
|
+
let buffer = options.initialInput ? bytesToBuffer(options.initialInput) : Buffer.alloc(0);
|
|
30
|
+
while (true) {
|
|
31
|
+
const newlineIndex = buffer.indexOf(10);
|
|
32
|
+
if (newlineIndex !== -1) {
|
|
33
|
+
let lineBuffer = buffer.subarray(0, newlineIndex);
|
|
34
|
+
if (lineBuffer.length > 0 && lineBuffer[lineBuffer.length - 1] === 13) {
|
|
35
|
+
lineBuffer = lineBuffer.subarray(0, lineBuffer.length - 1);
|
|
36
|
+
}
|
|
37
|
+
assertLineWithinLimit(lineBuffer.length, maxLineBytes);
|
|
38
|
+
return {
|
|
39
|
+
line: lineBuffer.toString("utf8"),
|
|
40
|
+
rest: buffer.subarray(newlineIndex + 1),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
assertLineWithinLimit(buffer.length, maxLineBytes);
|
|
44
|
+
const chunk = await recv.read(readLimit);
|
|
45
|
+
if (!chunk || chunk.length === 0) {
|
|
46
|
+
return { line: undefined, rest: buffer };
|
|
47
|
+
}
|
|
48
|
+
buffer = Buffer.concat([buffer, bytesToBuffer(chunk)]);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function assertLineWithinLimit(length, maxLineBytes) {
|
|
52
|
+
if (length > maxLineBytes) {
|
|
53
|
+
throw new Error(`Iroh remote handshake line exceeds maximum size of ${maxLineBytes} bytes`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function normalizePositiveInteger(value, label) {
|
|
57
|
+
if (!Number.isInteger(value) || value <= 0) {
|
|
58
|
+
throw new Error(`${label} must be a positive integer`);
|
|
59
|
+
}
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
async function withTimeout(promise, timeoutMs, message, onTimeout) {
|
|
63
|
+
normalizePositiveInteger(timeoutMs, "timeoutMs");
|
|
64
|
+
let timeout;
|
|
65
|
+
try {
|
|
66
|
+
return await Promise.race([
|
|
67
|
+
promise,
|
|
68
|
+
new Promise((_resolve, reject) => {
|
|
69
|
+
timeout = setTimeout(() => {
|
|
70
|
+
reject(new Error(message));
|
|
71
|
+
onTimeout();
|
|
72
|
+
}, timeoutMs);
|
|
73
|
+
}),
|
|
74
|
+
]);
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
if (timeout) {
|
|
78
|
+
clearTimeout(timeout);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function bytesToBuffer(bytes) {
|
|
83
|
+
if (Buffer.isBuffer(bytes)) {
|
|
84
|
+
return bytes;
|
|
85
|
+
}
|
|
86
|
+
return Buffer.from(Array.from(bytes));
|
|
87
|
+
}
|
|
88
|
+
function textToBytes(text) {
|
|
89
|
+
return Array.from(Buffer.from(text, "utf8"));
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=handshake-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handshake-reader.js","sourceRoot":"","sources":["../../../../src/core/remote/iroh/handshake-reader.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"node:buffer\";\nimport {\n\tDEFAULT_IROH_READ_LIMIT,\n\ttype IrohBytes,\n\ttype IrohRecvStreamLike,\n\ttype IrohSendStreamLike,\n\tserializeJsonLine,\n} from \"../../rpc/index.ts\";\nimport type { IrohRemoteHandshakeResponse, IrohRemoteHello } from \"./handshake.ts\";\n\nexport const DEFAULT_IROH_REMOTE_HANDSHAKE_MAX_LINE_BYTES = 16 * 1024;\nexport const DEFAULT_IROH_REMOTE_HANDSHAKE_TIMEOUT_MS = 15_000;\n\nexport interface IrohRemoteHandshakeLineReadOptions {\n\tinitialInput?: IrohBytes;\n\tmaxLineBytes?: number;\n\treadLimit?: number;\n\ttimeoutStopErrorCode?: bigint;\n\ttimeoutMs?: number;\n}\n\nexport interface IrohRemoteHandshakeLineReadResult {\n\tline: string | undefined;\n\trest: IrohBytes;\n}\n\nexport async function readIrohRemoteHandshakeLine(\n\trecv: IrohRecvStreamLike,\n\toptions: IrohRemoteHandshakeLineReadOptions = {},\n): Promise<IrohRemoteHandshakeLineReadResult> {\n\tconst timeoutMs = options.timeoutMs ?? DEFAULT_IROH_REMOTE_HANDSHAKE_TIMEOUT_MS;\n\treturn withTimeout(readBoundedIrohLine(recv, options), timeoutMs, \"Iroh remote handshake timed out\", () => {\n\t\ttry {\n\t\t\tconst stopResult = recv.stop?.(options.timeoutStopErrorCode ?? 0n);\n\t\t\tif (stopResult) {\n\t\t\t\tvoid Promise.resolve(stopResult).catch(() => {});\n\t\t\t}\n\t\t} catch {\n\t\t\t// Timeout cleanup is best-effort; callers should receive the timeout error.\n\t\t}\n\t});\n}\n\nexport async function writeIrohRemoteHello(send: IrohSendStreamLike, hello: IrohRemoteHello): Promise<void> {\n\tawait send.writeAll(textToBytes(serializeJsonLine(hello)));\n}\n\nexport async function writeIrohRemoteHandshakeResponse(\n\tsend: IrohSendStreamLike,\n\tresponse: IrohRemoteHandshakeResponse,\n): Promise<void> {\n\tawait send.writeAll(textToBytes(serializeJsonLine(response)));\n}\n\nasync function readBoundedIrohLine(\n\trecv: IrohRecvStreamLike,\n\toptions: IrohRemoteHandshakeLineReadOptions,\n): Promise<IrohRemoteHandshakeLineReadResult> {\n\tconst maxLineBytes = normalizePositiveInteger(\n\t\toptions.maxLineBytes ?? DEFAULT_IROH_REMOTE_HANDSHAKE_MAX_LINE_BYTES,\n\t\t\"maxLineBytes\",\n\t);\n\tconst requestedReadLimit = normalizePositiveInteger(options.readLimit ?? DEFAULT_IROH_READ_LIMIT, \"readLimit\");\n\tconst readLimit = Math.min(requestedReadLimit, maxLineBytes + 1);\n\tlet buffer = options.initialInput ? bytesToBuffer(options.initialInput) : Buffer.alloc(0);\n\n\twhile (true) {\n\t\tconst newlineIndex = buffer.indexOf(10);\n\t\tif (newlineIndex !== -1) {\n\t\t\tlet lineBuffer = buffer.subarray(0, newlineIndex);\n\t\t\tif (lineBuffer.length > 0 && lineBuffer[lineBuffer.length - 1] === 13) {\n\t\t\t\tlineBuffer = lineBuffer.subarray(0, lineBuffer.length - 1);\n\t\t\t}\n\t\t\tassertLineWithinLimit(lineBuffer.length, maxLineBytes);\n\t\t\treturn {\n\t\t\t\tline: lineBuffer.toString(\"utf8\"),\n\t\t\t\trest: buffer.subarray(newlineIndex + 1),\n\t\t\t};\n\t\t}\n\n\t\tassertLineWithinLimit(buffer.length, maxLineBytes);\n\t\tconst chunk = await recv.read(readLimit);\n\t\tif (!chunk || chunk.length === 0) {\n\t\t\treturn { line: undefined, rest: buffer };\n\t\t}\n\t\tbuffer = Buffer.concat([buffer, bytesToBuffer(chunk)]);\n\t}\n}\n\nfunction assertLineWithinLimit(length: number, maxLineBytes: number): void {\n\tif (length > maxLineBytes) {\n\t\tthrow new Error(`Iroh remote handshake line exceeds maximum size of ${maxLineBytes} bytes`);\n\t}\n}\n\nfunction normalizePositiveInteger(value: number, label: string): number {\n\tif (!Number.isInteger(value) || value <= 0) {\n\t\tthrow new Error(`${label} must be a positive integer`);\n\t}\n\treturn value;\n}\n\nasync function withTimeout<T>(\n\tpromise: Promise<T>,\n\ttimeoutMs: number,\n\tmessage: string,\n\tonTimeout: () => void,\n): Promise<T> {\n\tnormalizePositiveInteger(timeoutMs, \"timeoutMs\");\n\tlet timeout: NodeJS.Timeout | undefined;\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tpromise,\n\t\t\tnew Promise<T>((_resolve, reject) => {\n\t\t\t\ttimeout = setTimeout(() => {\n\t\t\t\t\treject(new Error(message));\n\t\t\t\t\tonTimeout();\n\t\t\t\t}, timeoutMs);\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tif (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t}\n}\n\nfunction bytesToBuffer(bytes: IrohBytes): Buffer {\n\tif (Buffer.isBuffer(bytes)) {\n\t\treturn bytes;\n\t}\n\treturn Buffer.from(Array.from(bytes));\n}\n\nfunction textToBytes(text: string): Array<number> {\n\treturn Array.from(Buffer.from(text, \"utf8\"));\n}\n"]}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { IROH_REMOTE_ALPN, IROH_REMOTE_HANDSHAKE_TYPE, IROH_REMOTE_HELLO_TYPE, type IrohRemoteHostHandshakeFailureOutcome, type IrohRemoteOutcome, type IrohRemoteRelayMode } from "./protocol.ts";
|
|
2
|
+
import type { IrohRemoteWorkspaceStatus } from "./workspace.ts";
|
|
3
|
+
export type IrohRemoteConversationTarget = {
|
|
4
|
+
target: "last";
|
|
5
|
+
} | {
|
|
6
|
+
target: "new";
|
|
7
|
+
worktreeId?: string;
|
|
8
|
+
/** POSIX-style path relative to the registered workspace root. */
|
|
9
|
+
workingDirectory?: string;
|
|
10
|
+
} | {
|
|
11
|
+
target: "session";
|
|
12
|
+
sessionId: string;
|
|
13
|
+
};
|
|
14
|
+
export type IrohRemoteConversationSelection = "resumed" | "created" | "created_missing_last" | "session_rekeyed";
|
|
15
|
+
export interface IrohRemoteConversationHandshakeMetadata {
|
|
16
|
+
target: IrohRemoteConversationTarget["target"];
|
|
17
|
+
sessionId: string;
|
|
18
|
+
selection: IrohRemoteConversationSelection;
|
|
19
|
+
requestedSessionId?: string;
|
|
20
|
+
/** Echoed only for worktree-bound conversations (worktrees.v1). */
|
|
21
|
+
worktreeId?: string;
|
|
22
|
+
/** POSIX-style path relative to the workspace root. Omitted for workspace root. */
|
|
23
|
+
workingDirectory?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface IrohRemoteWorkspaceDiscoveryTarget {
|
|
26
|
+
purpose: "list_sessions";
|
|
27
|
+
}
|
|
28
|
+
export interface IrohRemoteWorkspaceManagementTarget {
|
|
29
|
+
purpose: "unregister_workspace" | "manage_worktrees";
|
|
30
|
+
}
|
|
31
|
+
export interface IrohRemoteHostHandshakeMetadata {
|
|
32
|
+
workspace: string;
|
|
33
|
+
workspaceNames: string[];
|
|
34
|
+
workspaces: IrohRemoteWorkspaceStatus[];
|
|
35
|
+
features: string[];
|
|
36
|
+
hostNodeId?: string;
|
|
37
|
+
relayMode?: IrohRemoteRelayMode;
|
|
38
|
+
relayUrls?: string[];
|
|
39
|
+
hostName?: string;
|
|
40
|
+
userName?: string;
|
|
41
|
+
cwd: string;
|
|
42
|
+
}
|
|
43
|
+
export type IrohRemoteHelloMode = {
|
|
44
|
+
mode: "conversation";
|
|
45
|
+
conversation: IrohRemoteConversationTarget;
|
|
46
|
+
} | {
|
|
47
|
+
mode: "workspaceDiscovery";
|
|
48
|
+
workspaceDiscovery: IrohRemoteWorkspaceDiscoveryTarget;
|
|
49
|
+
} | {
|
|
50
|
+
mode: "workspaceManagement";
|
|
51
|
+
workspaceManagement: IrohRemoteWorkspaceManagementTarget;
|
|
52
|
+
};
|
|
53
|
+
interface IrohRemoteHelloBase {
|
|
54
|
+
type: typeof IROH_REMOTE_HELLO_TYPE;
|
|
55
|
+
protocol: typeof IROH_REMOTE_ALPN;
|
|
56
|
+
workspace: string;
|
|
57
|
+
secret?: string;
|
|
58
|
+
clientLabel?: string;
|
|
59
|
+
clientNodeId?: string;
|
|
60
|
+
}
|
|
61
|
+
export type IrohRemoteHello = IrohRemoteHelloBase & IrohRemoteHelloMode;
|
|
62
|
+
export declare const IROH_REMOTE_SESSION_ID_PATTERN: RegExp;
|
|
63
|
+
export interface IrohRemoteHandshakeSuccess {
|
|
64
|
+
type: typeof IROH_REMOTE_HANDSHAKE_TYPE;
|
|
65
|
+
success: true;
|
|
66
|
+
workspace: string;
|
|
67
|
+
hostNodeId?: string;
|
|
68
|
+
clientNodeId: string;
|
|
69
|
+
features?: string[];
|
|
70
|
+
sessionId?: string;
|
|
71
|
+
conversation?: IrohRemoteConversationHandshakeMetadata;
|
|
72
|
+
workspaceDiscovery?: IrohRemoteWorkspaceDiscoveryTarget;
|
|
73
|
+
workspaceManagement?: IrohRemoteWorkspaceManagementTarget;
|
|
74
|
+
remoteHost?: IrohRemoteHostHandshakeMetadata;
|
|
75
|
+
child?: string;
|
|
76
|
+
}
|
|
77
|
+
export interface IrohRemoteHandshakeFailure {
|
|
78
|
+
type: typeof IROH_REMOTE_HANDSHAKE_TYPE;
|
|
79
|
+
success: false;
|
|
80
|
+
outcome?: IrohRemoteOutcome;
|
|
81
|
+
hostNodeId?: string;
|
|
82
|
+
workspace?: string;
|
|
83
|
+
sessionId?: string;
|
|
84
|
+
retryAfterMs?: number;
|
|
85
|
+
error: string;
|
|
86
|
+
}
|
|
87
|
+
export type IrohRemoteHandshakeResponse = IrohRemoteHandshakeSuccess | IrohRemoteHandshakeFailure;
|
|
88
|
+
export declare class IrohRemoteHandshakeError extends Error {
|
|
89
|
+
readonly outcome: IrohRemoteHostHandshakeFailureOutcome;
|
|
90
|
+
constructor(outcome: IrohRemoteHostHandshakeFailureOutcome, message: string);
|
|
91
|
+
}
|
|
92
|
+
export declare function parseIrohRemoteHelloLine(line: string): IrohRemoteHello;
|
|
93
|
+
export declare function parseIrohRemoteHandshakeResponseLine(line: string): IrohRemoteHandshakeResponse;
|
|
94
|
+
export declare function parseIrohRemoteHello(value: unknown): IrohRemoteHello;
|
|
95
|
+
export declare function parseIrohRemoteHandshakeResponse(value: unknown): IrohRemoteHandshakeResponse;
|
|
96
|
+
export declare function createIrohRemoteHandshakeSuccess(options: {
|
|
97
|
+
workspace: string;
|
|
98
|
+
hostNodeId?: string;
|
|
99
|
+
clientNodeId: string;
|
|
100
|
+
features?: string[];
|
|
101
|
+
sessionId?: string;
|
|
102
|
+
conversation?: IrohRemoteConversationHandshakeMetadata;
|
|
103
|
+
workspaceDiscovery?: IrohRemoteWorkspaceDiscoveryTarget;
|
|
104
|
+
workspaceManagement?: IrohRemoteWorkspaceManagementTarget;
|
|
105
|
+
remoteHost?: IrohRemoteHostHandshakeMetadata;
|
|
106
|
+
child?: string;
|
|
107
|
+
}): IrohRemoteHandshakeSuccess;
|
|
108
|
+
export declare function createIrohRemoteHandshakeFailure(error: string, options?: {
|
|
109
|
+
hostNodeId?: string;
|
|
110
|
+
outcome?: IrohRemoteHostHandshakeFailureOutcome;
|
|
111
|
+
workspace?: string;
|
|
112
|
+
sessionId?: string;
|
|
113
|
+
retryAfterMs?: number;
|
|
114
|
+
}): IrohRemoteHandshakeFailure;
|
|
115
|
+
export declare function assertIrohRemoteHandshakeHostIdentity(response: IrohRemoteHandshakeResponse, expectedHostNodeId: string | undefined): void;
|
|
116
|
+
export declare function isIrohRemoteWorkspaceName(value: unknown): value is string;
|
|
117
|
+
export declare function isIrohRemoteSessionId(value: unknown): value is string;
|
|
118
|
+
export {};
|
|
119
|
+
//# sourceMappingURL=handshake.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handshake.d.ts","sourceRoot":"","sources":["../../../../src/core/remote/iroh/handshake.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"node:buffer\";\nimport {\n\tIROH_REMOTE_ALPN,\n\tIROH_REMOTE_CONVERSATION_STREAMS_FEATURE,\n\tIROH_REMOTE_HANDSHAKE_TYPE,\n\tIROH_REMOTE_HELLO_TYPE,\n\tIROH_REMOTE_MULTI_STREAMS_FEATURE,\n\ttype IrohRemoteHostHandshakeFailureOutcome,\n\ttype IrohRemoteOutcome,\n\tIrohRemoteOutcomeError,\n\ttype IrohRemoteRelayMode,\n\tisIrohRemoteOutcome,\n\tisIrohRemoteRelayMode,\n\tisIrohRemoteRelayUrls,\n\tisIrohRemoteWorkingDirectory,\n\tisIrohRemoteWorktreeId,\n} from \"./protocol.ts\";\nimport type { IrohRemoteWorkspaceStatus } from \"./workspace.ts\";\n\nexport type IrohRemoteConversationTarget =\n\t| {\n\t\t\ttarget: \"last\";\n\t }\n\t| {\n\t\t\ttarget: \"new\";\n\t\t\tworktreeId?: string;\n\t\t\t/** POSIX-style path relative to the registered workspace root. */\n\t\t\tworkingDirectory?: string;\n\t }\n\t| {\n\t\t\ttarget: \"session\";\n\t\t\tsessionId: string;\n\t };\n\nexport type IrohRemoteConversationSelection = \"resumed\" | \"created\" | \"created_missing_last\" | \"session_rekeyed\";\n\nexport interface IrohRemoteConversationHandshakeMetadata {\n\ttarget: IrohRemoteConversationTarget[\"target\"];\n\tsessionId: string;\n\tselection: IrohRemoteConversationSelection;\n\trequestedSessionId?: string;\n\t/** Echoed only for worktree-bound conversations (worktrees.v1). */\n\tworktreeId?: string;\n\t/** POSIX-style path relative to the workspace root. Omitted for workspace root. */\n\tworkingDirectory?: string;\n}\n\nexport interface IrohRemoteWorkspaceDiscoveryTarget {\n\tpurpose: \"list_sessions\";\n}\n\nexport interface IrohRemoteWorkspaceManagementTarget {\n\tpurpose: \"unregister_workspace\" | \"manage_worktrees\";\n}\n\nexport interface IrohRemoteHostHandshakeMetadata {\n\tworkspace: string;\n\tworkspaceNames: string[];\n\tworkspaces: IrohRemoteWorkspaceStatus[];\n\tfeatures: string[];\n\thostNodeId?: string;\n\trelayMode?: IrohRemoteRelayMode;\n\trelayUrls?: string[];\n\thostName?: string;\n\tuserName?: string;\n\tcwd: string;\n}\n\nexport type IrohRemoteHelloMode =\n\t| {\n\t\t\tmode: \"conversation\";\n\t\t\tconversation: IrohRemoteConversationTarget;\n\t }\n\t| {\n\t\t\tmode: \"workspaceDiscovery\";\n\t\t\tworkspaceDiscovery: IrohRemoteWorkspaceDiscoveryTarget;\n\t }\n\t| {\n\t\t\tmode: \"workspaceManagement\";\n\t\t\tworkspaceManagement: IrohRemoteWorkspaceManagementTarget;\n\t };\n\ninterface IrohRemoteHelloBase {\n\ttype: typeof IROH_REMOTE_HELLO_TYPE;\n\tprotocol: typeof IROH_REMOTE_ALPN;\n\tworkspace: string;\n\tsecret?: string;\n\tclientLabel?: string;\n\tclientNodeId?: string;\n}\n\nexport type IrohRemoteHello = IrohRemoteHelloBase & IrohRemoteHelloMode;\n\nexport const IROH_REMOTE_SESSION_ID_PATTERN = /^[a-z0-9_-]{1,128}$/;\n\nexport interface IrohRemoteHandshakeSuccess {\n\ttype: typeof IROH_REMOTE_HANDSHAKE_TYPE;\n\tsuccess: true;\n\tworkspace: string;\n\thostNodeId?: string;\n\tclientNodeId: string;\n\tfeatures?: string[];\n\tsessionId?: string;\n\tconversation?: IrohRemoteConversationHandshakeMetadata;\n\tworkspaceDiscovery?: IrohRemoteWorkspaceDiscoveryTarget;\n\tworkspaceManagement?: IrohRemoteWorkspaceManagementTarget;\n\tremoteHost?: IrohRemoteHostHandshakeMetadata;\n\tchild?: string;\n}\n\nexport interface IrohRemoteHandshakeFailure {\n\ttype: typeof IROH_REMOTE_HANDSHAKE_TYPE;\n\tsuccess: false;\n\toutcome?: IrohRemoteOutcome;\n\thostNodeId?: string;\n\tworkspace?: string;\n\tsessionId?: string;\n\tretryAfterMs?: number;\n\terror: string;\n}\n\nexport type IrohRemoteHandshakeResponse = IrohRemoteHandshakeSuccess | IrohRemoteHandshakeFailure;\n\nexport class IrohRemoteHandshakeError extends Error {\n\treadonly outcome: IrohRemoteHostHandshakeFailureOutcome;\n\n\tconstructor(outcome: IrohRemoteHostHandshakeFailureOutcome, message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"IrohRemoteHandshakeError\";\n\t\tthis.outcome = outcome;\n\t}\n}\n\nexport function parseIrohRemoteHelloLine(line: string): IrohRemoteHello {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(line);\n\t} catch (error: unknown) {\n\t\tthrow new IrohRemoteHandshakeError(\n\t\t\t\"invalid_conversation_target\",\n\t\t\t`Failed to parse Iroh remote handshake: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n\treturn parseIrohRemoteHello(parsed);\n}\n\nexport function parseIrohRemoteHandshakeResponseLine(line: string): IrohRemoteHandshakeResponse {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(line);\n\t} catch (error: unknown) {\n\t\tthrow new Error(\n\t\t\t`Failed to parse Iroh remote handshake response: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n\treturn parseIrohRemoteHandshakeResponse(parsed);\n}\n\nexport function parseIrohRemoteHello(value: unknown): IrohRemoteHello {\n\tconst hello = expectRecord(value, \"Iroh remote handshake\");\n\tif (hello.type !== IROH_REMOTE_HELLO_TYPE) {\n\t\tthrow new Error(\"unexpected handshake type\");\n\t}\n\tif (hello.protocol !== IROH_REMOTE_ALPN) {\n\t\tthrow new Error(`unsupported protocol: ${typeof hello.protocol === \"string\" ? hello.protocol : \"<missing>\"}`);\n\t}\n\n\tconst workspace = expectWorkspaceName(hello.workspace, \"handshake workspace\");\n\tconst mode = parseIrohRemoteHelloMode(hello);\n\treturn {\n\t\ttype: IROH_REMOTE_HELLO_TYPE,\n\t\tprotocol: IROH_REMOTE_ALPN,\n\t\tworkspace,\n\t\tsecret: expectOptionalString(hello.secret, \"handshake secret\"),\n\t\tclientLabel: expectOptionalString(hello.clientLabel, \"handshake clientLabel\"),\n\t\tclientNodeId: expectOptionalString(hello.clientNodeId, \"handshake clientNodeId\"),\n\t\t...mode,\n\t};\n}\n\nexport function parseIrohRemoteHandshakeResponse(value: unknown): IrohRemoteHandshakeResponse {\n\tconst response = expectRecord(value, \"Iroh remote handshake response\");\n\tif (response.type !== IROH_REMOTE_HANDSHAKE_TYPE) {\n\t\tthrow new Error(\"unexpected handshake response type\");\n\t}\n\tif (response.success === true) {\n\t\tconst hostNodeId = expectOptionalString(response.hostNodeId, \"handshake response hostNodeId\");\n\t\tconst workspace = expectString(response.workspace, \"handshake response workspace\");\n\t\tconst features = parseOptionalFeatures(response.features);\n\t\tconst modeMetadata = parseOptionalHandshakeSuccessMode(response);\n\t\tconst remoteHost = parseOptionalRemoteHostHandshakeMetadata(response.remoteHost);\n\t\tif (hasHandshakeSuccessModeMetadata(modeMetadata) && hostNodeId === undefined) {\n\t\t\tthrow new Error(\"handshake response hostNodeId is required for stream mode success\");\n\t\t}\n\t\tassertRemoteHostMetadataMatchesHandshake(remoteHost, { hostNodeId, workspace });\n\t\tconst success: IrohRemoteHandshakeSuccess = {\n\t\t\ttype: IROH_REMOTE_HANDSHAKE_TYPE,\n\t\t\tsuccess: true,\n\t\t\tworkspace,\n\t\t\tclientNodeId: expectString(response.clientNodeId, \"handshake response clientNodeId\"),\n\t\t\t...(features === undefined ? {} : { features }),\n\t\t\t...modeMetadata,\n\t\t\t...(remoteHost === undefined ? {} : { remoteHost }),\n\t\t\tchild: expectOptionalString(response.child, \"handshake response child\"),\n\t\t};\n\t\treturn hostNodeId === undefined ? success : { ...success, hostNodeId };\n\t}\n\tif (response.success === false) {\n\t\tconst outcome = expectOptionalOutcome(response.outcome, \"handshake response outcome\");\n\t\tconst hostNodeId = expectOptionalString(response.hostNodeId, \"handshake response hostNodeId\");\n\t\tconst workspace = expectOptionalString(response.workspace, \"handshake response workspace\");\n\t\tconst sessionId = expectOptionalRemoteSessionId(response.sessionId, \"handshake response sessionId\");\n\t\tconst retryAfterMs = expectOptionalNumber(response.retryAfterMs, \"handshake response retryAfterMs\");\n\t\tconst failure: IrohRemoteHandshakeFailure = {\n\t\t\ttype: IROH_REMOTE_HANDSHAKE_TYPE,\n\t\t\tsuccess: false,\n\t\t\terror: expectString(response.error, \"handshake response error\"),\n\t\t};\n\t\treturn {\n\t\t\t...failure,\n\t\t\t...(outcome === undefined ? {} : { outcome }),\n\t\t\t...(hostNodeId === undefined ? {} : { hostNodeId }),\n\t\t\t...(workspace === undefined ? {} : { workspace }),\n\t\t\t...(sessionId === undefined ? {} : { sessionId }),\n\t\t\t...(retryAfterMs === undefined ? {} : { retryAfterMs }),\n\t\t};\n\t}\n\tthrow new Error(\"handshake response success must be a boolean\");\n}\n\nexport function createIrohRemoteHandshakeSuccess(options: {\n\tworkspace: string;\n\thostNodeId?: string;\n\tclientNodeId: string;\n\tfeatures?: string[];\n\tsessionId?: string;\n\tconversation?: IrohRemoteConversationHandshakeMetadata;\n\tworkspaceDiscovery?: IrohRemoteWorkspaceDiscoveryTarget;\n\tworkspaceManagement?: IrohRemoteWorkspaceManagementTarget;\n\tremoteHost?: IrohRemoteHostHandshakeMetadata;\n\tchild?: string;\n}): IrohRemoteHandshakeSuccess {\n\tconst response: IrohRemoteHandshakeSuccess = {\n\t\ttype: IROH_REMOTE_HANDSHAKE_TYPE,\n\t\tsuccess: true,\n\t\tworkspace: options.workspace,\n\t\t...(options.hostNodeId === undefined ? {} : { hostNodeId: options.hostNodeId }),\n\t\tclientNodeId: options.clientNodeId,\n\t\t...(options.features === undefined ? {} : { features: [...options.features] }),\n\t\t...(options.sessionId === undefined ? {} : { sessionId: options.sessionId }),\n\t\t...(options.conversation === undefined ? {} : { conversation: { ...options.conversation } }),\n\t\t...(options.workspaceDiscovery === undefined ? {} : { workspaceDiscovery: { ...options.workspaceDiscovery } }),\n\t\t...(options.workspaceManagement === undefined ? {} : { workspaceManagement: { ...options.workspaceManagement } }),\n\t\t...(options.remoteHost === undefined ? {} : { remoteHost: cloneRemoteHostHandshakeMetadata(options.remoteHost) }),\n\t\tchild: options.child,\n\t};\n\treturn response;\n}\n\nexport function createIrohRemoteHandshakeFailure(\n\terror: string,\n\toptions: {\n\t\thostNodeId?: string;\n\t\toutcome?: IrohRemoteHostHandshakeFailureOutcome;\n\t\tworkspace?: string;\n\t\tsessionId?: string;\n\t\tretryAfterMs?: number;\n\t} = {},\n): IrohRemoteHandshakeFailure {\n\treturn {\n\t\ttype: IROH_REMOTE_HANDSHAKE_TYPE,\n\t\tsuccess: false,\n\t\t...(options.outcome === undefined ? {} : { outcome: options.outcome }),\n\t\t...(options.hostNodeId === undefined ? {} : { hostNodeId: options.hostNodeId }),\n\t\t...(options.workspace === undefined ? {} : { workspace: options.workspace }),\n\t\t...(options.sessionId === undefined ? {} : { sessionId: options.sessionId }),\n\t\t...(options.retryAfterMs === undefined ? {} : { retryAfterMs: options.retryAfterMs }),\n\t\terror,\n\t};\n}\n\nexport function assertIrohRemoteHandshakeHostIdentity(\n\tresponse: IrohRemoteHandshakeResponse,\n\texpectedHostNodeId: string | undefined,\n): void {\n\tif (expectedHostNodeId === undefined) {\n\t\treturn;\n\t}\n\tconst actualHostNodeId = response.hostNodeId;\n\tif (actualHostNodeId !== expectedHostNodeId) {\n\t\tthrow new IrohRemoteOutcomeError(\n\t\t\t\"host_identity_mismatch\",\n\t\t\t`expected ${expectedHostNodeId}, got ${actualHostNodeId ?? \"<missing>\"}`,\n\t\t);\n\t}\n}\n\nfunction cloneRemoteHostHandshakeMetadata(metadata: IrohRemoteHostHandshakeMetadata): IrohRemoteHostHandshakeMetadata {\n\treturn {\n\t\tworkspace: metadata.workspace,\n\t\tworkspaceNames: [...metadata.workspaceNames],\n\t\tworkspaces: metadata.workspaces.map((workspace) => ({ ...workspace })),\n\t\tfeatures: [...metadata.features],\n\t\t...(metadata.hostNodeId === undefined ? {} : { hostNodeId: metadata.hostNodeId }),\n\t\t...(metadata.relayMode === undefined ? {} : { relayMode: metadata.relayMode }),\n\t\t...(metadata.relayUrls === undefined ? {} : { relayUrls: [...metadata.relayUrls] }),\n\t\t...(metadata.hostName === undefined ? {} : { hostName: metadata.hostName }),\n\t\t...(metadata.userName === undefined ? {} : { userName: metadata.userName }),\n\t\tcwd: metadata.cwd,\n\t};\n}\n\nfunction assertRemoteHostMetadataMatchesHandshake(\n\tmetadata: IrohRemoteHostHandshakeMetadata | undefined,\n\tresponse: { hostNodeId: string | undefined; workspace: string },\n): void {\n\tif (metadata === undefined) {\n\t\treturn;\n\t}\n\tif (metadata.workspace !== response.workspace) {\n\t\tthrow new Error(\"handshake response remoteHost workspace must match top-level workspace\");\n\t}\n\tif (\n\t\tmetadata.hostNodeId !== undefined &&\n\t\tresponse.hostNodeId !== undefined &&\n\t\tmetadata.hostNodeId !== response.hostNodeId\n\t) {\n\t\tthrow new Error(\"handshake response remoteHost hostNodeId must match top-level hostNodeId\");\n\t}\n}\n\nfunction expectRecord(value: unknown, label: string): Record<string, unknown> {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tthrow new Error(`${label} must be an object`);\n\t}\n\treturn value as Record<string, unknown>;\n}\n\nfunction expectRecordForOutcome(\n\tvalue: unknown,\n\tlabel: string,\n\toutcome: IrohRemoteHostHandshakeFailureOutcome,\n): Record<string, unknown> {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tthrow new IrohRemoteHandshakeError(outcome, `${label} must be an object`);\n\t}\n\treturn value as Record<string, unknown>;\n}\n\nfunction expectString(value: unknown, label: string): string {\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`${label} must be a non-empty string`);\n\t}\n\treturn value;\n}\n\nfunction expectStringForOutcome(value: unknown, label: string, outcome: IrohRemoteHostHandshakeFailureOutcome): string {\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new IrohRemoteHandshakeError(outcome, `${label} must be a non-empty string`);\n\t}\n\treturn value;\n}\n\nfunction expectOptionalString(value: unknown, label: string): string | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\treturn expectString(value, label);\n}\n\nfunction expectOptionalNumber(value: unknown, label: string): number | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) {\n\t\tthrow new Error(`${label} must be a finite number`);\n\t}\n\treturn value;\n}\n\nfunction expectWorkspaceName(value: unknown, label: string): string {\n\tconst workspace = expectStringForOutcome(value, label, \"invalid_workspace\");\n\tconst validationError = getIrohRemoteWorkspaceNameValidationError(workspace, label);\n\tif (validationError) {\n\t\tthrow new IrohRemoteHandshakeError(\"invalid_workspace\", validationError);\n\t}\n\treturn workspace;\n}\n\nexport function isIrohRemoteWorkspaceName(value: unknown): value is string {\n\treturn typeof value === \"string\" && getIrohRemoteWorkspaceNameValidationError(value, \"workspace\") === undefined;\n}\n\nfunction getIrohRemoteWorkspaceNameValidationError(value: string, label: string): string | undefined {\n\tif (value.length === 0) {\n\t\treturn `${label} must be a non-empty string`;\n\t}\n\tif (hasAsciiControlCharacter(value)) {\n\t\treturn `${label} must not contain ASCII control characters`;\n\t}\n\tif (Array.from(value).length > 255 || Buffer.byteLength(value, \"utf8\") > 1024) {\n\t\treturn `${label} exceeds maximum length`;\n\t}\n\treturn undefined;\n}\n\nfunction hasAsciiControlCharacter(value: string): boolean {\n\tfor (const char of value) {\n\t\tconst code = char.charCodeAt(0);\n\t\tif (code <= 0x1f || code === 0x7f) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nexport function isIrohRemoteSessionId(value: unknown): value is string {\n\treturn typeof value === \"string\" && IROH_REMOTE_SESSION_ID_PATTERN.test(value);\n}\n\nfunction parseIrohRemoteHelloMode(hello: Record<string, unknown>): IrohRemoteHelloMode {\n\tconst modeKeys = ([\"conversation\", \"workspaceDiscovery\", \"workspaceManagement\"] as const).filter(\n\t\t(key) => hello[key] !== undefined,\n\t);\n\tif (modeKeys.length !== 1) {\n\t\tthrow new IrohRemoteHandshakeError(\n\t\t\t\"invalid_conversation_target\",\n\t\t\t\"Iroh remote hello must include exactly one stream mode\",\n\t\t);\n\t}\n\tconst modeKey = modeKeys[0];\n\tif (modeKey === \"conversation\") {\n\t\treturn { mode: \"conversation\", conversation: parseConversationTarget(hello.conversation) };\n\t}\n\tif (modeKey === \"workspaceDiscovery\") {\n\t\treturn {\n\t\t\tmode: \"workspaceDiscovery\",\n\t\t\tworkspaceDiscovery: parseWorkspaceDiscoveryTarget(hello.workspaceDiscovery),\n\t\t};\n\t}\n\treturn {\n\t\tmode: \"workspaceManagement\",\n\t\tworkspaceManagement: parseWorkspaceManagementTarget(hello.workspaceManagement),\n\t};\n}\n\nfunction parseConversationTarget(value: unknown): IrohRemoteConversationTarget {\n\tconst target = expectRecordForOutcome(value, \"handshake conversation\", \"invalid_conversation_target\");\n\texpectKnownFields(target, \"handshake conversation\", [\"target\", \"sessionId\", \"worktreeId\", \"workingDirectory\"]);\n\tconst targetKind = expectStringForOutcome(\n\t\ttarget.target,\n\t\t\"handshake conversation target\",\n\t\t\"invalid_conversation_target\",\n\t);\n\t// worktreeId is only accepted on target \"new\": resume targets derive the\n\t// worktree from the persisted binding, never from the client.\n\tif (targetKind !== \"new\" && target.worktreeId !== undefined) {\n\t\tthrow new IrohRemoteHandshakeError(\n\t\t\t\"invalid_conversation_target\",\n\t\t\t`handshake conversation ${targetKind} target must not include worktreeId`,\n\t\t);\n\t}\n\tif (targetKind !== \"new\" && target.workingDirectory !== undefined) {\n\t\tthrow new IrohRemoteHandshakeError(\n\t\t\t\"invalid_conversation_target\",\n\t\t\t`handshake conversation ${targetKind} target must not include workingDirectory`,\n\t\t);\n\t}\n\tif (targetKind === \"last\" || targetKind === \"new\") {\n\t\tif (target.sessionId !== undefined) {\n\t\t\tthrow new IrohRemoteHandshakeError(\n\t\t\t\t\"invalid_conversation_target\",\n\t\t\t\t`handshake conversation ${targetKind} target must not include sessionId`,\n\t\t\t);\n\t\t}\n\t\tif (targetKind === \"new\") {\n\t\t\tconst worktreeId =\n\t\t\t\ttarget.worktreeId === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: expectWorktreeId(target.worktreeId, \"handshake conversation worktreeId\");\n\t\t\tconst workingDirectory =\n\t\t\t\ttarget.workingDirectory === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: expectWorkingDirectory(target.workingDirectory, \"handshake conversation workingDirectory\");\n\t\t\treturn {\n\t\t\t\ttarget: \"new\",\n\t\t\t\t...(worktreeId === undefined ? {} : { worktreeId }),\n\t\t\t\t...(workingDirectory === undefined ? {} : { workingDirectory }),\n\t\t\t};\n\t\t}\n\t\treturn { target: targetKind };\n\t}\n\tif (targetKind === \"session\") {\n\t\treturn {\n\t\t\ttarget: \"session\",\n\t\t\tsessionId: expectRemoteSessionId(target.sessionId, \"handshake conversation sessionId\"),\n\t\t};\n\t}\n\tthrow new IrohRemoteHandshakeError(\"invalid_conversation_target\", \"unsupported conversation target\");\n}\n\nfunction parseWorkspaceDiscoveryTarget(value: unknown): IrohRemoteWorkspaceDiscoveryTarget {\n\tconst target = expectRecordForOutcome(value, \"handshake workspaceDiscovery\", \"invalid_conversation_target\");\n\texpectKnownFields(target, \"handshake workspaceDiscovery\", [\"purpose\"]);\n\tconst purpose = expectStringForOutcome(\n\t\ttarget.purpose,\n\t\t\"handshake workspaceDiscovery purpose\",\n\t\t\"invalid_conversation_target\",\n\t);\n\tif (purpose !== \"list_sessions\") {\n\t\tthrow new IrohRemoteHandshakeError(\"invalid_conversation_target\", \"unsupported workspaceDiscovery purpose\");\n\t}\n\treturn { purpose };\n}\n\nfunction parseWorkspaceManagementTarget(value: unknown): IrohRemoteWorkspaceManagementTarget {\n\tconst target = expectRecordForOutcome(value, \"handshake workspaceManagement\", \"invalid_conversation_target\");\n\texpectKnownFields(target, \"handshake workspaceManagement\", [\"purpose\"]);\n\tconst purpose = expectStringForOutcome(\n\t\ttarget.purpose,\n\t\t\"handshake workspaceManagement purpose\",\n\t\t\"invalid_conversation_target\",\n\t);\n\tif (purpose !== \"unregister_workspace\" && purpose !== \"manage_worktrees\") {\n\t\tthrow new IrohRemoteHandshakeError(\"invalid_conversation_target\", \"unsupported workspaceManagement purpose\");\n\t}\n\treturn { purpose };\n}\n\nfunction expectKnownFields(value: Record<string, unknown>, label: string, allowedFields: readonly string[]): void {\n\tconst allowed = new Set(allowedFields);\n\tfor (const field of Object.keys(value)) {\n\t\tif (!allowed.has(field)) {\n\t\t\tthrow new IrohRemoteHandshakeError(\"invalid_conversation_target\", `${label} has unexpected field ${field}`);\n\t\t}\n\t}\n}\n\nfunction expectKnownResponseFields(\n\tvalue: Record<string, unknown>,\n\tlabel: string,\n\tallowedFields: readonly string[],\n): void {\n\tconst allowed = new Set(allowedFields);\n\tfor (const field of Object.keys(value)) {\n\t\tif (!allowed.has(field)) {\n\t\t\tthrow new Error(`${label} has unexpected field ${field}`);\n\t\t}\n\t}\n}\n\nfunction expectRemoteSessionId(value: unknown, label: string): string {\n\tconst sessionId = expectStringForOutcome(value, label, \"invalid_conversation_target\");\n\tif (!isIrohRemoteSessionId(sessionId)) {\n\t\tthrow new IrohRemoteHandshakeError(\n\t\t\t\"invalid_conversation_target\",\n\t\t\t`${label} must match lowercase remote session ID syntax`,\n\t\t);\n\t}\n\treturn sessionId;\n}\n\nfunction expectWorktreeId(value: unknown, label: string): string {\n\tconst worktreeId = expectStringForOutcome(value, label, \"invalid_conversation_target\");\n\tif (!isIrohRemoteWorktreeId(worktreeId)) {\n\t\tthrow new IrohRemoteHandshakeError(\n\t\t\t\"invalid_conversation_target\",\n\t\t\t`${label} must match lowercase worktree id syntax`,\n\t\t);\n\t}\n\treturn worktreeId;\n}\n\nfunction expectWorkingDirectory(value: unknown, label: string): string {\n\tconst workingDirectory = expectStringForOutcome(value, label, \"invalid_conversation_target\");\n\tif (!isIrohRemoteWorkingDirectory(workingDirectory)) {\n\t\tthrow new IrohRemoteHandshakeError(\n\t\t\t\"invalid_conversation_target\",\n\t\t\t`${label} must be a relative POSIX path inside the workspace`,\n\t\t);\n\t}\n\treturn workingDirectory;\n}\n\nfunction expectOptionalRemoteSessionId(value: unknown, label: string): string | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\treturn expectRemoteSessionIdForResponse(value, label);\n}\n\nfunction expectOptionalOutcome(value: unknown, label: string): IrohRemoteOutcome | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tif (!isIrohRemoteOutcome(value)) {\n\t\tthrow new Error(`${label} must be a known Iroh remote outcome`);\n\t}\n\treturn value;\n}\n\nfunction parseOptionalFeatures(value: unknown): string[] | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tif (!Array.isArray(value)) {\n\t\treturn [];\n\t}\n\tconst features: string[] = [];\n\tfor (const entry of value) {\n\t\tif (typeof entry !== \"string\" || entry.length === 0) {\n\t\t\treturn [];\n\t\t}\n\t\tfeatures.push(entry);\n\t}\n\treturn features;\n}\n\nfunction parseRequiredFeatures(value: unknown, label: string): string[] {\n\tconst features = parseOptionalFeatures(value);\n\tif (features === undefined || features.length === 0) {\n\t\tthrow new Error(`${label} must be a non-empty string array`);\n\t}\n\treturn features;\n}\n\nfunction parseOptionalRemoteHostHandshakeMetadata(value: unknown): IrohRemoteHostHandshakeMetadata | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tconst metadata = expectRecord(value, \"handshake response remoteHost\");\n\texpectKnownResponseFields(metadata, \"handshake response remoteHost\", [\n\t\t\"workspace\",\n\t\t\"workspaceNames\",\n\t\t\"workspaces\",\n\t\t\"features\",\n\t\t\"hostNodeId\",\n\t\t\"relayMode\",\n\t\t\"relayUrls\",\n\t\t\"hostName\",\n\t\t\"userName\",\n\t\t\"cwd\",\n\t]);\n\treturn {\n\t\tworkspace: expectWorkspaceNameForResponse(metadata.workspace, \"handshake response remoteHost workspace\"),\n\t\tworkspaceNames: parseRemoteHostWorkspaceNames(metadata.workspaceNames),\n\t\tworkspaces: parseRemoteHostWorkspaces(metadata.workspaces),\n\t\tfeatures: parseRequiredFeatures(metadata.features, \"handshake response remoteHost features\"),\n\t\t...(metadata.hostNodeId === undefined\n\t\t\t? {}\n\t\t\t: { hostNodeId: expectString(metadata.hostNodeId, \"handshake response remoteHost hostNodeId\") }),\n\t\t...(metadata.relayMode === undefined\n\t\t\t? {}\n\t\t\t: { relayMode: expectRelayMode(metadata.relayMode, \"handshake response remoteHost relayMode\") }),\n\t\t...(metadata.relayUrls === undefined\n\t\t\t? {}\n\t\t\t: { relayUrls: expectRelayUrls(metadata.relayUrls, \"handshake response remoteHost relayUrls\") }),\n\t\t...(metadata.hostName === undefined\n\t\t\t? {}\n\t\t\t: { hostName: expectString(metadata.hostName, \"handshake response remoteHost hostName\") }),\n\t\t...(metadata.userName === undefined\n\t\t\t? {}\n\t\t\t: { userName: expectString(metadata.userName, \"handshake response remoteHost userName\") }),\n\t\tcwd: expectString(metadata.cwd, \"handshake response remoteHost cwd\"),\n\t};\n}\n\nfunction parseRemoteHostWorkspaceNames(value: unknown): string[] {\n\tif (!Array.isArray(value)) {\n\t\tthrow new Error(\"handshake response remoteHost workspaceNames must be an array\");\n\t}\n\treturn value.map((entry) => expectWorkspaceNameForResponse(entry, \"handshake response remoteHost workspace name\"));\n}\n\nfunction parseRemoteHostWorkspaces(value: unknown): IrohRemoteWorkspaceStatus[] {\n\tif (!Array.isArray(value)) {\n\t\tthrow new Error(\"handshake response remoteHost workspaces must be an array\");\n\t}\n\treturn value.map((entry) => {\n\t\tconst workspace = expectRecord(entry, \"handshake response remoteHost workspace\");\n\t\texpectKnownResponseFields(workspace, \"handshake response remoteHost workspace\", [\"name\", \"status\"]);\n\t\treturn {\n\t\t\tname: expectWorkspaceNameForResponse(workspace.name, \"handshake response remoteHost workspace name\"),\n\t\t\tstatus: expectWorkspaceStatus(workspace.status, \"handshake response remoteHost workspace status\"),\n\t\t};\n\t});\n}\n\nfunction expectWorkspaceNameForResponse(value: unknown, label: string): string {\n\tconst workspace = expectString(value, label);\n\tconst validationError = getIrohRemoteWorkspaceNameValidationError(workspace, label);\n\tif (validationError) {\n\t\tthrow new Error(validationError);\n\t}\n\treturn workspace;\n}\n\nfunction expectWorkspaceStatus(value: unknown, label: string): IrohRemoteWorkspaceStatus[\"status\"] {\n\tconst status = expectString(value, label);\n\tif (status === \"available\" || status === \"missing\" || status === \"unavailable\") {\n\t\treturn status;\n\t}\n\tthrow new Error(`${label} must be a supported workspace status`);\n}\n\nfunction expectRelayMode(value: unknown, label: string): IrohRemoteRelayMode {\n\tif (isIrohRemoteRelayMode(value)) {\n\t\treturn value;\n\t}\n\tthrow new Error(`${label} must be a supported relay mode`);\n}\n\nfunction expectRelayUrls(value: unknown, label: string): string[] {\n\tif (isIrohRemoteRelayUrls(value)) {\n\t\treturn [...value];\n\t}\n\tthrow new Error(`${label} must be a non-empty array of relay URLs`);\n}\n\nfunction parseOptionalHandshakeSuccessMode(\n\tresponse: Record<string, unknown>,\n): Pick<IrohRemoteHandshakeSuccess, \"sessionId\" | \"conversation\" | \"workspaceDiscovery\" | \"workspaceManagement\"> {\n\tconst modeKeys = ([\"conversation\", \"workspaceDiscovery\", \"workspaceManagement\"] as const).filter(\n\t\t(key) => response[key] !== undefined,\n\t);\n\tif (modeKeys.length === 0) {\n\t\treturn {};\n\t}\n\tif (modeKeys.length !== 1) {\n\t\tthrow new Error(\"handshake response success must include exactly one stream mode\");\n\t}\n\tassertRequiredHandshakeFeatures(parseOptionalFeatures(response.features));\n\tconst modeKey = modeKeys[0];\n\tif (modeKey === \"conversation\") {\n\t\tconst sessionId = expectString(response.sessionId, \"handshake response sessionId\");\n\t\tconst conversation = parseConversationHandshakeMetadata(response.conversation);\n\t\tif (conversation.sessionId !== sessionId) {\n\t\t\tthrow new Error(\"handshake response conversation sessionId must match top-level sessionId\");\n\t\t}\n\t\treturn { sessionId, conversation };\n\t}\n\tif (response.sessionId !== undefined) {\n\t\tthrow new Error(`handshake response ${modeKey} must not include sessionId`);\n\t}\n\tif (modeKey === \"workspaceDiscovery\") {\n\t\treturn { workspaceDiscovery: parseWorkspaceDiscoveryResponseMetadata(response.workspaceDiscovery) };\n\t}\n\treturn { workspaceManagement: parseWorkspaceManagementResponseMetadata(response.workspaceManagement) };\n}\n\nfunction hasHandshakeSuccessModeMetadata(\n\tmetadata: Pick<\n\t\tIrohRemoteHandshakeSuccess,\n\t\t\"sessionId\" | \"conversation\" | \"workspaceDiscovery\" | \"workspaceManagement\"\n\t>,\n): boolean {\n\treturn (\n\t\tmetadata.conversation !== undefined ||\n\t\tmetadata.workspaceDiscovery !== undefined ||\n\t\tmetadata.workspaceManagement !== undefined\n\t);\n}\n\nfunction assertRequiredHandshakeFeatures(features: string[] | undefined): void {\n\tif (\n\t\tfeatures === undefined ||\n\t\t!features.includes(IROH_REMOTE_MULTI_STREAMS_FEATURE) ||\n\t\t!features.includes(IROH_REMOTE_CONVERSATION_STREAMS_FEATURE)\n\t) {\n\t\tthrow new Error(\"handshake response features must include required Iroh remote stream features\");\n\t}\n}\n\nfunction parseConversationHandshakeMetadata(value: unknown): IrohRemoteConversationHandshakeMetadata {\n\tconst metadata = expectRecord(value, \"handshake response conversation\");\n\texpectKnownResponseFields(metadata, \"handshake response conversation\", [\n\t\t\"target\",\n\t\t\"sessionId\",\n\t\t\"selection\",\n\t\t\"requestedSessionId\",\n\t\t\"worktreeId\",\n\t\t\"workingDirectory\",\n\t]);\n\tconst requestedSessionId = expectOptionalRemoteSessionId(\n\t\tmetadata.requestedSessionId,\n\t\t\"handshake response conversation requestedSessionId\",\n\t);\n\tconst worktreeId = expectOptionalWorktreeIdForResponse(\n\t\tmetadata.worktreeId,\n\t\t\"handshake response conversation worktreeId\",\n\t);\n\tconst workingDirectory = expectOptionalWorkingDirectoryForResponse(\n\t\tmetadata.workingDirectory,\n\t\t\"handshake response conversation workingDirectory\",\n\t);\n\tconst conversation: IrohRemoteConversationHandshakeMetadata = {\n\t\ttarget: expectConversationTargetKind(metadata.target, \"handshake response conversation target\"),\n\t\tsessionId: expectRemoteSessionIdForResponse(metadata.sessionId, \"handshake response conversation sessionId\"),\n\t\tselection: expectConversationSelection(metadata.selection, \"handshake response conversation selection\"),\n\t\t...(requestedSessionId === undefined ? {} : { requestedSessionId }),\n\t\t...(worktreeId === undefined ? {} : { worktreeId }),\n\t\t...(workingDirectory === undefined ? {} : { workingDirectory }),\n\t};\n\tassertConversationTargetSelection(conversation);\n\treturn conversation;\n}\n\nfunction expectConversationTargetKind(value: unknown, label: string): IrohRemoteConversationTarget[\"target\"] {\n\tconst target = expectString(value, label);\n\tif (target === \"last\" || target === \"new\" || target === \"session\") {\n\t\treturn target;\n\t}\n\tthrow new Error(`${label} must be a supported conversation target`);\n}\n\nfunction expectConversationSelection(value: unknown, label: string): IrohRemoteConversationSelection {\n\tconst selection = expectString(value, label);\n\tif (\n\t\tselection === \"resumed\" ||\n\t\tselection === \"created\" ||\n\t\tselection === \"created_missing_last\" ||\n\t\tselection === \"session_rekeyed\"\n\t) {\n\t\treturn selection;\n\t}\n\tthrow new Error(`${label} must be a supported conversation selection`);\n}\n\nfunction assertConversationTargetSelection(conversation: IrohRemoteConversationHandshakeMetadata): void {\n\tif (conversation.selection === \"session_rekeyed\") {\n\t\tif (conversation.target !== \"session\") {\n\t\t\tthrow new Error(\"handshake response session_rekeyed selection requires session target\");\n\t\t}\n\t\tif (conversation.requestedSessionId === undefined) {\n\t\t\tthrow new Error(\"handshake response session_rekeyed selection requires requestedSessionId\");\n\t\t}\n\t\tif (conversation.requestedSessionId === conversation.sessionId) {\n\t\t\tthrow new Error(\"handshake response session_rekeyed selection requires a different sessionId\");\n\t\t}\n\t\treturn;\n\t}\n\tif (conversation.requestedSessionId !== undefined) {\n\t\tthrow new Error(\"handshake response requestedSessionId requires session_rekeyed selection\");\n\t}\n\tif (conversation.target === \"new\" && conversation.selection !== \"created\") {\n\t\tthrow new Error(\"handshake response new target must use created selection\");\n\t}\n\tif (conversation.target === \"session\" && conversation.selection !== \"resumed\") {\n\t\tthrow new Error(\"handshake response session target must use resumed selection\");\n\t}\n}\n\nfunction expectOptionalWorkingDirectoryForResponse(value: unknown, label: string): string | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tif (!isIrohRemoteWorkingDirectory(value)) {\n\t\tthrow new Error(`${label} must be a relative POSIX path inside the workspace`);\n\t}\n\treturn value;\n}\n\nfunction expectRemoteSessionIdForResponse(value: unknown, label: string): string {\n\tconst sessionId = expectString(value, label);\n\tif (!isIrohRemoteSessionId(sessionId)) {\n\t\tthrow new Error(`${label} must match lowercase remote session ID syntax`);\n\t}\n\treturn sessionId;\n}\n\nfunction expectOptionalWorktreeIdForResponse(value: unknown, label: string): string | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tif (!isIrohRemoteWorktreeId(value)) {\n\t\tthrow new Error(`${label} must match lowercase worktree id syntax`);\n\t}\n\treturn value;\n}\n\nfunction parseWorkspaceDiscoveryResponseMetadata(value: unknown): IrohRemoteWorkspaceDiscoveryTarget {\n\tconst metadata = expectRecord(value, \"handshake response workspaceDiscovery\");\n\texpectKnownResponseFields(metadata, \"handshake response workspaceDiscovery\", [\"purpose\"]);\n\tif (metadata.purpose !== \"list_sessions\") {\n\t\tthrow new Error(\"handshake response workspaceDiscovery purpose must be list_sessions\");\n\t}\n\treturn { purpose: \"list_sessions\" };\n}\n\nfunction parseWorkspaceManagementResponseMetadata(value: unknown): IrohRemoteWorkspaceManagementTarget {\n\tconst metadata = expectRecord(value, \"handshake response workspaceManagement\");\n\texpectKnownResponseFields(metadata, \"handshake response workspaceManagement\", [\"purpose\"]);\n\tif (metadata.purpose !== \"unregister_workspace\" && metadata.purpose !== \"manage_worktrees\") {\n\t\tthrow new Error(\"handshake response workspaceManagement purpose must be a supported management purpose\");\n\t}\n\treturn { purpose: metadata.purpose };\n}\n"]}
|