@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,267 @@
|
|
|
1
|
+
import { Buffer } from "node:buffer";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { isIP } from "node:net";
|
|
4
|
+
import { IROH_REMOTE_ALPN, IROH_REMOTE_TICKET_PREFIX, IrohRemoteOutcomeError, isIrohRemoteRelayMode, isIrohRemoteRelayUrls, } from "./protocol.js";
|
|
5
|
+
/**
|
|
6
|
+
* Match the iOS pairing confirmation fingerprint: the first 128 bits of the
|
|
7
|
+
* SHA-256 digest, rendered as four uppercase 32-bit groups.
|
|
8
|
+
*/
|
|
9
|
+
export function formatIrohRemoteHostFingerprint(endpointIdBytes) {
|
|
10
|
+
if (endpointIdBytes.length !== 32) {
|
|
11
|
+
throw new Error("Iroh endpoint identity must be exactly 32 bytes");
|
|
12
|
+
}
|
|
13
|
+
const bytes = new Uint8Array(endpointIdBytes.length);
|
|
14
|
+
for (let index = 0; index < endpointIdBytes.length; index++) {
|
|
15
|
+
const value = endpointIdBytes[index];
|
|
16
|
+
if (value === undefined || !Number.isInteger(value) || value < 0 || value > 0xff) {
|
|
17
|
+
throw new Error("Iroh endpoint identity contains an invalid byte");
|
|
18
|
+
}
|
|
19
|
+
bytes[index] = value;
|
|
20
|
+
}
|
|
21
|
+
const digest = createHash("sha256").update(bytes).digest("hex").slice(0, 32).toUpperCase();
|
|
22
|
+
return digest.match(/.{8}/g).join("-");
|
|
23
|
+
}
|
|
24
|
+
/** Decode a ticket into only the values that are safe to display for comparison. */
|
|
25
|
+
export function getIrohRemotePairingVerificationDetails(ticket) {
|
|
26
|
+
const payload = decodeIrohRemoteTicketPayload(ticket);
|
|
27
|
+
if (payload.nodeId === undefined) {
|
|
28
|
+
throw new Error("ticket nodeId is required for pairing verification");
|
|
29
|
+
}
|
|
30
|
+
const hostNodeId = payload.nodeId.trim().toLowerCase();
|
|
31
|
+
if (!/^[0-9a-f]{64}$/.test(hostNodeId)) {
|
|
32
|
+
throw new Error("ticket nodeId must be a 32-byte hexadecimal Iroh endpoint identity");
|
|
33
|
+
}
|
|
34
|
+
const workspace = payload.workspace.trim();
|
|
35
|
+
if (workspace.length === 0) {
|
|
36
|
+
throw new Error("ticket workspace is required for pairing verification");
|
|
37
|
+
}
|
|
38
|
+
const relayMode = payload.relayMode ?? "disabled";
|
|
39
|
+
return {
|
|
40
|
+
...(payload.expiresAt === undefined ? {} : { expiresAt: payload.expiresAt }),
|
|
41
|
+
hostFingerprint: formatIrohRemoteHostFingerprint(Buffer.from(hostNodeId, "hex")),
|
|
42
|
+
hostNodeId,
|
|
43
|
+
relayMode,
|
|
44
|
+
relayOrigins: normalizePairingRelayOrigins(payload.relayUrls ?? [], relayMode),
|
|
45
|
+
workspace,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function normalizePairingRelayOrigins(values, relayMode) {
|
|
49
|
+
const nonEmptyValues = values.filter((value) => value.trim().length > 0);
|
|
50
|
+
if (relayMode !== "production") {
|
|
51
|
+
if (nonEmptyValues.length > 0) {
|
|
52
|
+
throw new Error("ticket relay URLs are only valid in production relay mode");
|
|
53
|
+
}
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
if (nonEmptyValues.length === 0) {
|
|
57
|
+
throw new Error("ticket production relay mode requires HTTPS relay origins");
|
|
58
|
+
}
|
|
59
|
+
return [...new Set(nonEmptyValues.map(normalizeHttpsRelayOrigin))].sort();
|
|
60
|
+
}
|
|
61
|
+
function normalizeHttpsRelayOrigin(value) {
|
|
62
|
+
let url;
|
|
63
|
+
try {
|
|
64
|
+
url = new URL(value.trim());
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
throw new Error("ticket relay URL must be a valid HTTPS origin");
|
|
68
|
+
}
|
|
69
|
+
if (url.protocol !== "https:" ||
|
|
70
|
+
url.username.length > 0 ||
|
|
71
|
+
url.password.length > 0 ||
|
|
72
|
+
url.search.length > 0 ||
|
|
73
|
+
url.hash.length > 0 ||
|
|
74
|
+
(url.pathname !== "" && url.pathname !== "/")) {
|
|
75
|
+
throw new Error("ticket relay URL must be an HTTPS origin without credentials, path, query, or fragment");
|
|
76
|
+
}
|
|
77
|
+
const bracketed = url.hostname.startsWith("[") && url.hostname.endsWith("]");
|
|
78
|
+
const rawHostname = bracketed ? url.hostname.slice(1, -1) : url.hostname;
|
|
79
|
+
const hostname = rawHostname.toLowerCase().replace(/\.+$/, "");
|
|
80
|
+
if (hostname.length === 0 || isUnsafeLocalRelayHost(hostname)) {
|
|
81
|
+
throw new Error("ticket relay URL must not target a local or private host");
|
|
82
|
+
}
|
|
83
|
+
const formattedHostname = isIP(hostname) === 6 ? `[${hostname}]` : hostname;
|
|
84
|
+
return `https://${formattedHostname}${url.port.length === 0 || url.port === "443" ? "" : `:${url.port}`}`;
|
|
85
|
+
}
|
|
86
|
+
function isUnsafeLocalRelayHost(hostname) {
|
|
87
|
+
if (hostname === "localhost" ||
|
|
88
|
+
hostname.endsWith(".localhost") ||
|
|
89
|
+
hostname === "local" ||
|
|
90
|
+
hostname.endsWith(".local") ||
|
|
91
|
+
hostname.includes("%")) {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
if (isIP(hostname) === 4) {
|
|
95
|
+
return isUnsafeIpv4(hostname.split(".").map(Number));
|
|
96
|
+
}
|
|
97
|
+
if (isIP(hostname) !== 6) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
const bytes = parseIpv6Bytes(hostname);
|
|
101
|
+
if (bytes === undefined)
|
|
102
|
+
return true;
|
|
103
|
+
const unspecified = bytes.every((byte) => byte === 0);
|
|
104
|
+
const loopback = bytes.slice(0, 15).every((byte) => byte === 0) && bytes[15] === 1;
|
|
105
|
+
const linkLocal = bytes[0] === 0xfe && (bytes[1] & 0xc0) === 0x80;
|
|
106
|
+
const uniqueLocal = (bytes[0] & 0xfe) === 0xfc;
|
|
107
|
+
const multicast = bytes[0] === 0xff;
|
|
108
|
+
if (unspecified || loopback || linkLocal || uniqueLocal || multicast)
|
|
109
|
+
return true;
|
|
110
|
+
const ipv4Mapped = bytes.slice(0, 10).every((byte) => byte === 0) && bytes[10] === 0xff && bytes[11] === 0xff;
|
|
111
|
+
return ipv4Mapped && isUnsafeIpv4(bytes.slice(12));
|
|
112
|
+
}
|
|
113
|
+
function isUnsafeIpv4(bytes) {
|
|
114
|
+
if (bytes.length !== 4 || bytes.some((byte) => !Number.isInteger(byte) || byte < 0 || byte > 0xff))
|
|
115
|
+
return true;
|
|
116
|
+
return (bytes[0] === 0 ||
|
|
117
|
+
bytes[0] === 10 ||
|
|
118
|
+
bytes[0] === 127 ||
|
|
119
|
+
(bytes[0] === 100 && bytes[1] >= 64 && bytes[1] <= 127) ||
|
|
120
|
+
(bytes[0] === 169 && bytes[1] === 254) ||
|
|
121
|
+
(bytes[0] === 172 && bytes[1] >= 16 && bytes[1] <= 31) ||
|
|
122
|
+
(bytes[0] === 192 && bytes[1] === 168) ||
|
|
123
|
+
(bytes[0] === 198 && (bytes[1] === 18 || bytes[1] === 19)) ||
|
|
124
|
+
bytes[0] >= 224);
|
|
125
|
+
}
|
|
126
|
+
function parseIpv6Bytes(address) {
|
|
127
|
+
const halves = address.split("::");
|
|
128
|
+
if (halves.length > 2)
|
|
129
|
+
return undefined;
|
|
130
|
+
const parseHalf = (value) => {
|
|
131
|
+
if (value.length === 0)
|
|
132
|
+
return [];
|
|
133
|
+
const words = [];
|
|
134
|
+
for (const part of value.split(":")) {
|
|
135
|
+
if (!/^[0-9a-f]{1,4}$/i.test(part))
|
|
136
|
+
return undefined;
|
|
137
|
+
words.push(Number.parseInt(part, 16));
|
|
138
|
+
}
|
|
139
|
+
return words;
|
|
140
|
+
};
|
|
141
|
+
const head = parseHalf(halves[0]);
|
|
142
|
+
const tail = parseHalf(halves[1] ?? "");
|
|
143
|
+
if (head === undefined || tail === undefined)
|
|
144
|
+
return undefined;
|
|
145
|
+
const omitted = 8 - head.length - tail.length;
|
|
146
|
+
if ((halves.length === 1 && omitted !== 0) || (halves.length === 2 && omitted < 1))
|
|
147
|
+
return undefined;
|
|
148
|
+
const words = [...head, ...Array.from({ length: omitted }, () => 0), ...tail];
|
|
149
|
+
if (words.length !== 8)
|
|
150
|
+
return undefined;
|
|
151
|
+
return words.flatMap((word) => [word >> 8, word & 0xff]);
|
|
152
|
+
}
|
|
153
|
+
export function encodeIrohRemoteTicketPayload(payload) {
|
|
154
|
+
return `${IROH_REMOTE_TICKET_PREFIX}${Buffer.from(JSON.stringify(payload), "utf8").toString("base64url")}`;
|
|
155
|
+
}
|
|
156
|
+
export function decodeIrohRemoteTicketPayload(ticket) {
|
|
157
|
+
if (!ticket.startsWith(IROH_REMOTE_TICKET_PREFIX)) {
|
|
158
|
+
throw new Error(`Expected ticket prefix ${IROH_REMOTE_TICKET_PREFIX}`);
|
|
159
|
+
}
|
|
160
|
+
const encoded = ticket.slice(IROH_REMOTE_TICKET_PREFIX.length);
|
|
161
|
+
let parsed;
|
|
162
|
+
try {
|
|
163
|
+
parsed = JSON.parse(Buffer.from(encoded, "base64url").toString("utf8"));
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
throw new Error(`Failed to decode Iroh remote ticket: ${error instanceof Error ? error.message : String(error)}`);
|
|
167
|
+
}
|
|
168
|
+
return parseIrohRemoteTicketPayload(parsed);
|
|
169
|
+
}
|
|
170
|
+
export function parseIrohRemoteTicketPayload(value) {
|
|
171
|
+
const payload = expectRecord(value, "Iroh remote ticket payload");
|
|
172
|
+
const alpn = expectString(payload.alpn, "ticket alpn");
|
|
173
|
+
if (alpn !== IROH_REMOTE_ALPN) {
|
|
174
|
+
throw new Error(`Unsupported ticket ALPN: ${alpn}`);
|
|
175
|
+
}
|
|
176
|
+
const expiresAt = expectOptionalNumber(payload.expiresAt, "ticket expiresAt");
|
|
177
|
+
const irohTicket = expectString(payload.irohTicket, "ticket irohTicket");
|
|
178
|
+
const nodeId = expectOptionalString(payload.nodeId, "ticket nodeId");
|
|
179
|
+
const relayModeValue = payload.relayMode;
|
|
180
|
+
if (relayModeValue !== undefined && !isIrohRemoteRelayMode(relayModeValue)) {
|
|
181
|
+
throw new Error("ticket relayMode must be disabled, development, or production");
|
|
182
|
+
}
|
|
183
|
+
const relayUrlsValue = payload.relayUrls;
|
|
184
|
+
if (relayUrlsValue !== undefined && !isIrohRemoteRelayUrls(relayUrlsValue)) {
|
|
185
|
+
throw new Error("ticket relayUrls must be a non-empty array of relay URLs");
|
|
186
|
+
}
|
|
187
|
+
if (relayModeValue === "production" && relayUrlsValue === undefined) {
|
|
188
|
+
throw new Error("ticket relayMode production requires relayUrls");
|
|
189
|
+
}
|
|
190
|
+
const relayAuthToken = expectOptionalString(payload.relayAuthToken, "ticket relayAuthToken");
|
|
191
|
+
const secret = expectOptionalString(payload.secret, "ticket secret");
|
|
192
|
+
const workspace = expectString(payload.workspace, "ticket workspace");
|
|
193
|
+
return {
|
|
194
|
+
alpn,
|
|
195
|
+
expiresAt,
|
|
196
|
+
irohTicket,
|
|
197
|
+
nodeId,
|
|
198
|
+
relayMode: relayModeValue,
|
|
199
|
+
relayUrls: relayUrlsValue,
|
|
200
|
+
relayAuthToken,
|
|
201
|
+
secret,
|
|
202
|
+
workspace,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
export function assertIrohRemoteTicketNotExpired(payload, now = Date.now()) {
|
|
206
|
+
if (payload.expiresAt !== undefined && now > payload.expiresAt) {
|
|
207
|
+
throw new Error("Pairing ticket has expired");
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
export function createIrohRemoteSanitizedReconnectTicketPayload(payload) {
|
|
211
|
+
if (payload.nodeId === undefined) {
|
|
212
|
+
throw new IrohRemoteOutcomeError("saved_host_invalid", "ticket nodeId is required for saved-host reconnect");
|
|
213
|
+
}
|
|
214
|
+
if (payload.relayMode === undefined) {
|
|
215
|
+
throw new IrohRemoteOutcomeError("saved_host_invalid", "ticket relayMode is required for saved-host reconnect");
|
|
216
|
+
}
|
|
217
|
+
if (payload.relayMode === "production" && payload.relayUrls === undefined) {
|
|
218
|
+
throw new IrohRemoteOutcomeError("saved_host_invalid", "ticket relayUrls are required for production relayMode");
|
|
219
|
+
}
|
|
220
|
+
return {
|
|
221
|
+
alpn: payload.alpn,
|
|
222
|
+
irohTicket: payload.irohTicket,
|
|
223
|
+
nodeId: payload.nodeId,
|
|
224
|
+
relayMode: payload.relayMode,
|
|
225
|
+
...(payload.relayUrls === undefined ? {} : { relayUrls: payload.relayUrls }),
|
|
226
|
+
workspace: payload.workspace,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
export function createIrohRemoteSanitizedReconnectTicket(ticket) {
|
|
230
|
+
return encodeIrohRemoteTicketPayload(createIrohRemoteSanitizedReconnectTicketPayload(decodeIrohRemoteTicketPayload(ticket)));
|
|
231
|
+
}
|
|
232
|
+
export function assertIrohRemoteTicketPayloadHostIdentity(payload, expectedHostNodeId) {
|
|
233
|
+
if (payload.nodeId === undefined) {
|
|
234
|
+
throw new IrohRemoteOutcomeError("saved_host_invalid", "ticket nodeId is required for host identity verification");
|
|
235
|
+
}
|
|
236
|
+
if (payload.nodeId !== expectedHostNodeId) {
|
|
237
|
+
throw new IrohRemoteOutcomeError("host_identity_mismatch", `expected ${expectedHostNodeId}, got ${payload.nodeId}`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
function expectRecord(value, label) {
|
|
241
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
242
|
+
throw new Error(`${label} must be an object`);
|
|
243
|
+
}
|
|
244
|
+
return value;
|
|
245
|
+
}
|
|
246
|
+
function expectString(value, label) {
|
|
247
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
248
|
+
throw new Error(`${label} must be a non-empty string`);
|
|
249
|
+
}
|
|
250
|
+
return value;
|
|
251
|
+
}
|
|
252
|
+
function expectOptionalString(value, label) {
|
|
253
|
+
if (value === undefined) {
|
|
254
|
+
return undefined;
|
|
255
|
+
}
|
|
256
|
+
return expectString(value, label);
|
|
257
|
+
}
|
|
258
|
+
function expectOptionalNumber(value, label) {
|
|
259
|
+
if (value === undefined) {
|
|
260
|
+
return undefined;
|
|
261
|
+
}
|
|
262
|
+
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
263
|
+
throw new Error(`${label} must be a finite number`);
|
|
264
|
+
}
|
|
265
|
+
return value;
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=ticket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ticket.js","sourceRoot":"","sources":["../../../../src/core/remote/iroh/ticket.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"node:buffer\";\nimport { createHash } from \"node:crypto\";\nimport { isIP } from \"node:net\";\nimport {\n\tIROH_REMOTE_ALPN,\n\tIROH_REMOTE_TICKET_PREFIX,\n\tIrohRemoteOutcomeError,\n\ttype IrohRemoteRelayMode,\n\tisIrohRemoteRelayMode,\n\tisIrohRemoteRelayUrls,\n} from \"./protocol.ts\";\n\nexport interface IrohRemoteTicketPayload {\n\talpn: typeof IROH_REMOTE_ALPN;\n\texpiresAt?: number;\n\tirohTicket: string;\n\tnodeId?: string;\n\trelayMode?: IrohRemoteRelayMode;\n\t/** Relay server URLs the client should use; required when relayMode is \"production\". */\n\trelayUrls?: string[];\n\t/**\n\t * Bearer token for relays behind access.shared_token. Secret-like: carried\n\t * in pairing tickets (clients keychain it) and stripped from sanitized\n\t * reconnect tickets.\n\t */\n\trelayAuthToken?: string;\n\tsecret?: string;\n\tworkspace: string;\n}\n\nexport interface IrohRemoteSanitizedReconnectTicketPayload extends IrohRemoteTicketPayload {\n\tnodeId: string;\n\trelayMode: IrohRemoteRelayMode;\n}\n\n/** Non-secret values a user can compare before accepting a pairing ticket. */\nexport interface IrohRemotePairingVerificationDetails {\n\texpiresAt?: number;\n\thostFingerprint: string;\n\thostNodeId: string;\n\trelayMode: IrohRemoteRelayMode;\n\trelayOrigins: string[];\n\tworkspace: string;\n}\n\n/**\n * Match the iOS pairing confirmation fingerprint: the first 128 bits of the\n * SHA-256 digest, rendered as four uppercase 32-bit groups.\n */\nexport function formatIrohRemoteHostFingerprint(endpointIdBytes: ArrayLike<number>): string {\n\tif (endpointIdBytes.length !== 32) {\n\t\tthrow new Error(\"Iroh endpoint identity must be exactly 32 bytes\");\n\t}\n\tconst bytes = new Uint8Array(endpointIdBytes.length);\n\tfor (let index = 0; index < endpointIdBytes.length; index++) {\n\t\tconst value = endpointIdBytes[index];\n\t\tif (value === undefined || !Number.isInteger(value) || value < 0 || value > 0xff) {\n\t\t\tthrow new Error(\"Iroh endpoint identity contains an invalid byte\");\n\t\t}\n\t\tbytes[index] = value;\n\t}\n\tconst digest = createHash(\"sha256\").update(bytes).digest(\"hex\").slice(0, 32).toUpperCase();\n\treturn digest.match(/.{8}/g)!.join(\"-\");\n}\n\n/** Decode a ticket into only the values that are safe to display for comparison. */\nexport function getIrohRemotePairingVerificationDetails(ticket: string): IrohRemotePairingVerificationDetails {\n\tconst payload = decodeIrohRemoteTicketPayload(ticket);\n\tif (payload.nodeId === undefined) {\n\t\tthrow new Error(\"ticket nodeId is required for pairing verification\");\n\t}\n\tconst hostNodeId = payload.nodeId.trim().toLowerCase();\n\tif (!/^[0-9a-f]{64}$/.test(hostNodeId)) {\n\t\tthrow new Error(\"ticket nodeId must be a 32-byte hexadecimal Iroh endpoint identity\");\n\t}\n\tconst workspace = payload.workspace.trim();\n\tif (workspace.length === 0) {\n\t\tthrow new Error(\"ticket workspace is required for pairing verification\");\n\t}\n\tconst relayMode = payload.relayMode ?? \"disabled\";\n\treturn {\n\t\t...(payload.expiresAt === undefined ? {} : { expiresAt: payload.expiresAt }),\n\t\thostFingerprint: formatIrohRemoteHostFingerprint(Buffer.from(hostNodeId, \"hex\")),\n\t\thostNodeId,\n\t\trelayMode,\n\t\trelayOrigins: normalizePairingRelayOrigins(payload.relayUrls ?? [], relayMode),\n\t\tworkspace,\n\t};\n}\n\nfunction normalizePairingRelayOrigins(values: string[], relayMode: IrohRemoteRelayMode): string[] {\n\tconst nonEmptyValues = values.filter((value) => value.trim().length > 0);\n\tif (relayMode !== \"production\") {\n\t\tif (nonEmptyValues.length > 0) {\n\t\t\tthrow new Error(\"ticket relay URLs are only valid in production relay mode\");\n\t\t}\n\t\treturn [];\n\t}\n\tif (nonEmptyValues.length === 0) {\n\t\tthrow new Error(\"ticket production relay mode requires HTTPS relay origins\");\n\t}\n\treturn [...new Set(nonEmptyValues.map(normalizeHttpsRelayOrigin))].sort();\n}\n\nfunction normalizeHttpsRelayOrigin(value: string): string {\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(value.trim());\n\t} catch {\n\t\tthrow new Error(\"ticket relay URL must be a valid HTTPS origin\");\n\t}\n\tif (\n\t\turl.protocol !== \"https:\" ||\n\t\turl.username.length > 0 ||\n\t\turl.password.length > 0 ||\n\t\turl.search.length > 0 ||\n\t\turl.hash.length > 0 ||\n\t\t(url.pathname !== \"\" && url.pathname !== \"/\")\n\t) {\n\t\tthrow new Error(\"ticket relay URL must be an HTTPS origin without credentials, path, query, or fragment\");\n\t}\n\n\tconst bracketed = url.hostname.startsWith(\"[\") && url.hostname.endsWith(\"]\");\n\tconst rawHostname = bracketed ? url.hostname.slice(1, -1) : url.hostname;\n\tconst hostname = rawHostname.toLowerCase().replace(/\\.+$/, \"\");\n\tif (hostname.length === 0 || isUnsafeLocalRelayHost(hostname)) {\n\t\tthrow new Error(\"ticket relay URL must not target a local or private host\");\n\t}\n\tconst formattedHostname = isIP(hostname) === 6 ? `[${hostname}]` : hostname;\n\treturn `https://${formattedHostname}${url.port.length === 0 || url.port === \"443\" ? \"\" : `:${url.port}`}`;\n}\n\nfunction isUnsafeLocalRelayHost(hostname: string): boolean {\n\tif (\n\t\thostname === \"localhost\" ||\n\t\thostname.endsWith(\".localhost\") ||\n\t\thostname === \"local\" ||\n\t\thostname.endsWith(\".local\") ||\n\t\thostname.includes(\"%\")\n\t) {\n\t\treturn true;\n\t}\n\tif (isIP(hostname) === 4) {\n\t\treturn isUnsafeIpv4(hostname.split(\".\").map(Number));\n\t}\n\tif (isIP(hostname) !== 6) {\n\t\treturn false;\n\t}\n\tconst bytes = parseIpv6Bytes(hostname);\n\tif (bytes === undefined) return true;\n\tconst unspecified = bytes.every((byte) => byte === 0);\n\tconst loopback = bytes.slice(0, 15).every((byte) => byte === 0) && bytes[15] === 1;\n\tconst linkLocal = bytes[0] === 0xfe && (bytes[1]! & 0xc0) === 0x80;\n\tconst uniqueLocal = (bytes[0]! & 0xfe) === 0xfc;\n\tconst multicast = bytes[0] === 0xff;\n\tif (unspecified || loopback || linkLocal || uniqueLocal || multicast) return true;\n\tconst ipv4Mapped = bytes.slice(0, 10).every((byte) => byte === 0) && bytes[10] === 0xff && bytes[11] === 0xff;\n\treturn ipv4Mapped && isUnsafeIpv4(bytes.slice(12));\n}\n\nfunction isUnsafeIpv4(bytes: number[]): boolean {\n\tif (bytes.length !== 4 || bytes.some((byte) => !Number.isInteger(byte) || byte < 0 || byte > 0xff)) return true;\n\treturn (\n\t\tbytes[0] === 0 ||\n\t\tbytes[0] === 10 ||\n\t\tbytes[0] === 127 ||\n\t\t(bytes[0] === 100 && bytes[1]! >= 64 && bytes[1]! <= 127) ||\n\t\t(bytes[0] === 169 && bytes[1] === 254) ||\n\t\t(bytes[0] === 172 && bytes[1]! >= 16 && bytes[1]! <= 31) ||\n\t\t(bytes[0] === 192 && bytes[1] === 168) ||\n\t\t(bytes[0] === 198 && (bytes[1] === 18 || bytes[1] === 19)) ||\n\t\tbytes[0]! >= 224\n\t);\n}\n\nfunction parseIpv6Bytes(address: string): number[] | undefined {\n\tconst halves = address.split(\"::\");\n\tif (halves.length > 2) return undefined;\n\tconst parseHalf = (value: string): number[] | undefined => {\n\t\tif (value.length === 0) return [];\n\t\tconst words: number[] = [];\n\t\tfor (const part of value.split(\":\")) {\n\t\t\tif (!/^[0-9a-f]{1,4}$/i.test(part)) return undefined;\n\t\t\twords.push(Number.parseInt(part, 16));\n\t\t}\n\t\treturn words;\n\t};\n\tconst head = parseHalf(halves[0]!);\n\tconst tail = parseHalf(halves[1] ?? \"\");\n\tif (head === undefined || tail === undefined) return undefined;\n\tconst omitted = 8 - head.length - tail.length;\n\tif ((halves.length === 1 && omitted !== 0) || (halves.length === 2 && omitted < 1)) return undefined;\n\tconst words = [...head, ...Array.from({ length: omitted }, () => 0), ...tail];\n\tif (words.length !== 8) return undefined;\n\treturn words.flatMap((word) => [word >> 8, word & 0xff]);\n}\n\nexport function encodeIrohRemoteTicketPayload(payload: IrohRemoteTicketPayload): string {\n\treturn `${IROH_REMOTE_TICKET_PREFIX}${Buffer.from(JSON.stringify(payload), \"utf8\").toString(\"base64url\")}`;\n}\n\nexport function decodeIrohRemoteTicketPayload(ticket: string): IrohRemoteTicketPayload {\n\tif (!ticket.startsWith(IROH_REMOTE_TICKET_PREFIX)) {\n\t\tthrow new Error(`Expected ticket prefix ${IROH_REMOTE_TICKET_PREFIX}`);\n\t}\n\n\tconst encoded = ticket.slice(IROH_REMOTE_TICKET_PREFIX.length);\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(Buffer.from(encoded, \"base64url\").toString(\"utf8\"));\n\t} catch (error: unknown) {\n\t\tthrow new Error(`Failed to decode Iroh remote ticket: ${error instanceof Error ? error.message : String(error)}`);\n\t}\n\treturn parseIrohRemoteTicketPayload(parsed);\n}\n\nexport function parseIrohRemoteTicketPayload(value: unknown): IrohRemoteTicketPayload {\n\tconst payload = expectRecord(value, \"Iroh remote ticket payload\");\n\tconst alpn = expectString(payload.alpn, \"ticket alpn\");\n\tif (alpn !== IROH_REMOTE_ALPN) {\n\t\tthrow new Error(`Unsupported ticket ALPN: ${alpn}`);\n\t}\n\n\tconst expiresAt = expectOptionalNumber(payload.expiresAt, \"ticket expiresAt\");\n\tconst irohTicket = expectString(payload.irohTicket, \"ticket irohTicket\");\n\tconst nodeId = expectOptionalString(payload.nodeId, \"ticket nodeId\");\n\tconst relayModeValue = payload.relayMode;\n\tif (relayModeValue !== undefined && !isIrohRemoteRelayMode(relayModeValue)) {\n\t\tthrow new Error(\"ticket relayMode must be disabled, development, or production\");\n\t}\n\tconst relayUrlsValue = payload.relayUrls;\n\tif (relayUrlsValue !== undefined && !isIrohRemoteRelayUrls(relayUrlsValue)) {\n\t\tthrow new Error(\"ticket relayUrls must be a non-empty array of relay URLs\");\n\t}\n\tif (relayModeValue === \"production\" && relayUrlsValue === undefined) {\n\t\tthrow new Error(\"ticket relayMode production requires relayUrls\");\n\t}\n\tconst relayAuthToken = expectOptionalString(payload.relayAuthToken, \"ticket relayAuthToken\");\n\tconst secret = expectOptionalString(payload.secret, \"ticket secret\");\n\tconst workspace = expectString(payload.workspace, \"ticket workspace\");\n\n\treturn {\n\t\talpn,\n\t\texpiresAt,\n\t\tirohTicket,\n\t\tnodeId,\n\t\trelayMode: relayModeValue,\n\t\trelayUrls: relayUrlsValue,\n\t\trelayAuthToken,\n\t\tsecret,\n\t\tworkspace,\n\t};\n}\n\nexport function assertIrohRemoteTicketNotExpired(payload: IrohRemoteTicketPayload, now = Date.now()): void {\n\tif (payload.expiresAt !== undefined && now > payload.expiresAt) {\n\t\tthrow new Error(\"Pairing ticket has expired\");\n\t}\n}\n\nexport function createIrohRemoteSanitizedReconnectTicketPayload(\n\tpayload: IrohRemoteTicketPayload,\n): IrohRemoteSanitizedReconnectTicketPayload {\n\tif (payload.nodeId === undefined) {\n\t\tthrow new IrohRemoteOutcomeError(\"saved_host_invalid\", \"ticket nodeId is required for saved-host reconnect\");\n\t}\n\tif (payload.relayMode === undefined) {\n\t\tthrow new IrohRemoteOutcomeError(\"saved_host_invalid\", \"ticket relayMode is required for saved-host reconnect\");\n\t}\n\tif (payload.relayMode === \"production\" && payload.relayUrls === undefined) {\n\t\tthrow new IrohRemoteOutcomeError(\"saved_host_invalid\", \"ticket relayUrls are required for production relayMode\");\n\t}\n\treturn {\n\t\talpn: payload.alpn,\n\t\tirohTicket: payload.irohTicket,\n\t\tnodeId: payload.nodeId,\n\t\trelayMode: payload.relayMode,\n\t\t...(payload.relayUrls === undefined ? {} : { relayUrls: payload.relayUrls }),\n\t\tworkspace: payload.workspace,\n\t};\n}\n\nexport function createIrohRemoteSanitizedReconnectTicket(ticket: string): string {\n\treturn encodeIrohRemoteTicketPayload(\n\t\tcreateIrohRemoteSanitizedReconnectTicketPayload(decodeIrohRemoteTicketPayload(ticket)),\n\t);\n}\n\nexport function assertIrohRemoteTicketPayloadHostIdentity(\n\tpayload: IrohRemoteTicketPayload,\n\texpectedHostNodeId: string,\n): void {\n\tif (payload.nodeId === undefined) {\n\t\tthrow new IrohRemoteOutcomeError(\n\t\t\t\"saved_host_invalid\",\n\t\t\t\"ticket nodeId is required for host identity verification\",\n\t\t);\n\t}\n\tif (payload.nodeId !== expectedHostNodeId) {\n\t\tthrow new IrohRemoteOutcomeError(\n\t\t\t\"host_identity_mismatch\",\n\t\t\t`expected ${expectedHostNodeId}, got ${payload.nodeId}`,\n\t\t);\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 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 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"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type IrohRemoteOutboundSanitizerOptions } from "./outbound-filter.ts";
|
|
2
|
+
export type IrohRemoteTranscriptTextLayout = "preserve" | "summary";
|
|
3
|
+
export interface IrohRemoteSanitizedTranscriptText {
|
|
4
|
+
text: string;
|
|
5
|
+
truncated: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function sanitizeIrohRemoteTranscriptText(value: string, options: IrohRemoteOutboundSanitizerOptions, layout?: IrohRemoteTranscriptTextLayout): IrohRemoteSanitizedTranscriptText;
|
|
8
|
+
//# sourceMappingURL=transcript-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-text.d.ts","sourceRoot":"","sources":["../../../../src/core/remote/iroh/transcript-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kCAAkC,EAA8B,MAAM,sBAAsB,CAAC;AAI3G,MAAM,MAAM,8BAA8B,GAAG,UAAU,GAAG,SAAS,CAAC;AAEpE,MAAM,WAAW,iCAAiC;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,gCAAgC,CAC/C,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,kCAAkC,EAC3C,MAAM,GAAE,8BAA2C,GACjD,iCAAiC,CAanC","sourcesContent":["import { type IrohRemoteOutboundSanitizerOptions, sanitizeIrohRemoteOutbound } from \"./outbound-filter.ts\";\n\nconst IROH_REMOTE_TRANSCRIPT_TEXT_MAX_SCALARS = 12_000;\n\nexport type IrohRemoteTranscriptTextLayout = \"preserve\" | \"summary\";\n\nexport interface IrohRemoteSanitizedTranscriptText {\n\ttext: string;\n\ttruncated: boolean;\n}\n\nexport function sanitizeIrohRemoteTranscriptText(\n\tvalue: string,\n\toptions: IrohRemoteOutboundSanitizerOptions,\n\tlayout: IrohRemoteTranscriptTextLayout = \"preserve\",\n): IrohRemoteSanitizedTranscriptText {\n\tconst normalized = normalizeIrohRemoteTranscriptText(value, layout);\n\tconst sanitizedValue = sanitizeIrohRemoteOutbound({ value: normalized }, options) as { value?: unknown };\n\tconst sanitized = sanitizedValue.value;\n\tconst text = normalizeIrohRemoteTranscriptText(typeof sanitized === \"string\" ? sanitized : \"\", layout);\n\tconst scalars = Array.from(text);\n\tif (scalars.length <= IROH_REMOTE_TRANSCRIPT_TEXT_MAX_SCALARS) {\n\t\treturn { text, truncated: false };\n\t}\n\treturn {\n\t\ttext: scalars.slice(0, IROH_REMOTE_TRANSCRIPT_TEXT_MAX_SCALARS).join(\"\"),\n\t\ttruncated: true,\n\t};\n}\n\nfunction normalizeIrohRemoteTranscriptText(value: string, layout: IrohRemoteTranscriptTextLayout): string {\n\tconst normalized = value.replace(/\\r\\n?/g, \"\\n\").replace(/[\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f]/g, \"\");\n\treturn layout === \"summary\"\n\t\t? normalized\n\t\t\t\t.replace(/[\\n\\t]/g, \" \")\n\t\t\t\t.replace(/\\s+/gu, \" \")\n\t\t\t\t.trim()\n\t\t: normalized;\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { sanitizeIrohRemoteOutbound } from "./outbound-filter.js";
|
|
2
|
+
const IROH_REMOTE_TRANSCRIPT_TEXT_MAX_SCALARS = 12_000;
|
|
3
|
+
export function sanitizeIrohRemoteTranscriptText(value, options, layout = "preserve") {
|
|
4
|
+
const normalized = normalizeIrohRemoteTranscriptText(value, layout);
|
|
5
|
+
const sanitizedValue = sanitizeIrohRemoteOutbound({ value: normalized }, options);
|
|
6
|
+
const sanitized = sanitizedValue.value;
|
|
7
|
+
const text = normalizeIrohRemoteTranscriptText(typeof sanitized === "string" ? sanitized : "", layout);
|
|
8
|
+
const scalars = Array.from(text);
|
|
9
|
+
if (scalars.length <= IROH_REMOTE_TRANSCRIPT_TEXT_MAX_SCALARS) {
|
|
10
|
+
return { text, truncated: false };
|
|
11
|
+
}
|
|
12
|
+
return {
|
|
13
|
+
text: scalars.slice(0, IROH_REMOTE_TRANSCRIPT_TEXT_MAX_SCALARS).join(""),
|
|
14
|
+
truncated: true,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function normalizeIrohRemoteTranscriptText(value, layout) {
|
|
18
|
+
const normalized = value.replace(/\r\n?/g, "\n").replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/g, "");
|
|
19
|
+
return layout === "summary"
|
|
20
|
+
? normalized
|
|
21
|
+
.replace(/[\n\t]/g, " ")
|
|
22
|
+
.replace(/\s+/gu, " ")
|
|
23
|
+
.trim()
|
|
24
|
+
: normalized;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=transcript-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-text.js","sourceRoot":"","sources":["../../../../src/core/remote/iroh/transcript-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAE3G,MAAM,uCAAuC,GAAG,MAAM,CAAC;AASvD,MAAM,UAAU,gCAAgC,CAC/C,KAAa,EACb,OAA2C,EAC3C,MAAM,GAAmC,UAAU,EACf;IACpC,MAAM,UAAU,GAAG,iCAAiC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,0BAA0B,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,OAAO,CAAwB,CAAC;IACzG,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC;IACvC,MAAM,IAAI,GAAG,iCAAiC,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACvG,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,OAAO,CAAC,MAAM,IAAI,uCAAuC,EAAE,CAAC;QAC/D,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IACD,OAAO;QACN,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,uCAAuC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,SAAS,EAAE,IAAI;KACf,CAAC;AAAA,CACF;AAED,SAAS,iCAAiC,CAAC,KAAa,EAAE,MAAsC,EAAU;IACzG,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,iDAAiD,EAAE,EAAE,CAAC,CAAC;IAChH,OAAO,MAAM,KAAK,SAAS;QAC1B,CAAC,CAAC,UAAU;aACT,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;aACvB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;aACrB,IAAI,EAAE;QACT,CAAC,CAAC,UAAU,CAAC;AAAA,CACd","sourcesContent":["import { type IrohRemoteOutboundSanitizerOptions, sanitizeIrohRemoteOutbound } from \"./outbound-filter.ts\";\n\nconst IROH_REMOTE_TRANSCRIPT_TEXT_MAX_SCALARS = 12_000;\n\nexport type IrohRemoteTranscriptTextLayout = \"preserve\" | \"summary\";\n\nexport interface IrohRemoteSanitizedTranscriptText {\n\ttext: string;\n\ttruncated: boolean;\n}\n\nexport function sanitizeIrohRemoteTranscriptText(\n\tvalue: string,\n\toptions: IrohRemoteOutboundSanitizerOptions,\n\tlayout: IrohRemoteTranscriptTextLayout = \"preserve\",\n): IrohRemoteSanitizedTranscriptText {\n\tconst normalized = normalizeIrohRemoteTranscriptText(value, layout);\n\tconst sanitizedValue = sanitizeIrohRemoteOutbound({ value: normalized }, options) as { value?: unknown };\n\tconst sanitized = sanitizedValue.value;\n\tconst text = normalizeIrohRemoteTranscriptText(typeof sanitized === \"string\" ? sanitized : \"\", layout);\n\tconst scalars = Array.from(text);\n\tif (scalars.length <= IROH_REMOTE_TRANSCRIPT_TEXT_MAX_SCALARS) {\n\t\treturn { text, truncated: false };\n\t}\n\treturn {\n\t\ttext: scalars.slice(0, IROH_REMOTE_TRANSCRIPT_TEXT_MAX_SCALARS).join(\"\"),\n\t\ttruncated: true,\n\t};\n}\n\nfunction normalizeIrohRemoteTranscriptText(value: string, layout: IrohRemoteTranscriptTextLayout): string {\n\tconst normalized = value.replace(/\\r\\n?/g, \"\\n\").replace(/[\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f]/g, \"\");\n\treturn layout === \"summary\"\n\t\t? normalized\n\t\t\t\t.replace(/[\\n\\t]/g, \" \")\n\t\t\t\t.replace(/\\s+/gu, \" \")\n\t\t\t\t.trim()\n\t\t: normalized;\n}\n"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type IrohRemoteRpcErrorResponse } from "./rpc-command-filter.ts";
|
|
2
|
+
import { type IrohRemoteHostStateManager } from "./state-manager.ts";
|
|
3
|
+
import { type IrohRemoteWorkspaceAvailabilityClassifier, type IrohRemoteWorkspaceStatus } from "./workspace.ts";
|
|
4
|
+
export declare const IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE = "unregister_workspace";
|
|
5
|
+
export interface IrohRemoteWorkspaceMetadataSnapshot {
|
|
6
|
+
workspaceNames: string[];
|
|
7
|
+
workspaces: IrohRemoteWorkspaceStatus[];
|
|
8
|
+
}
|
|
9
|
+
export interface IrohRemoteWorkspaceUnregisterRpcData extends IrohRemoteWorkspaceMetadataSnapshot {
|
|
10
|
+
removedWorkspace: string;
|
|
11
|
+
}
|
|
12
|
+
export type IrohRemoteWorkspaceUnregisterRpcResponse = {
|
|
13
|
+
id?: string;
|
|
14
|
+
type: "response";
|
|
15
|
+
command: typeof IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE;
|
|
16
|
+
success: true;
|
|
17
|
+
data: IrohRemoteWorkspaceUnregisterRpcData;
|
|
18
|
+
} | IrohRemoteRpcErrorResponse;
|
|
19
|
+
export type IrohRemoteWorkspaceUnregisterRpcResult = {
|
|
20
|
+
handled: false;
|
|
21
|
+
} | {
|
|
22
|
+
handled: true;
|
|
23
|
+
metadata?: IrohRemoteWorkspaceMetadataSnapshot;
|
|
24
|
+
response: IrohRemoteWorkspaceUnregisterRpcResponse;
|
|
25
|
+
};
|
|
26
|
+
export interface HandleIrohRemoteWorkspaceUnregisterRpcCommandOptions {
|
|
27
|
+
classifyWorkspaceAvailability?: IrohRemoteWorkspaceAvailabilityClassifier;
|
|
28
|
+
stateManager: IrohRemoteHostStateManager;
|
|
29
|
+
}
|
|
30
|
+
export declare function handleIrohRemoteWorkspaceUnregisterRpcCommand(command: Record<string, unknown>, options: HandleIrohRemoteWorkspaceUnregisterRpcCommandOptions): Promise<IrohRemoteWorkspaceUnregisterRpcResult>;
|
|
31
|
+
//# sourceMappingURL=workspace-rpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-rpc.d.ts","sourceRoot":"","sources":["../../../../src/core/remote/iroh/workspace-rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC5G,OAAO,EAEN,KAAK,0BAA0B,EAE/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEN,KAAK,yCAAyC,EAC9C,KAAK,yBAAyB,EAC9B,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,yCAAyC,yBAAyB,CAAC;AAEhF,MAAM,WAAW,mCAAmC;IACnD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,yBAAyB,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,oCAAqC,SAAQ,mCAAmC;IAChG,gBAAgB,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,wCAAwC,GACjD;IACA,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,OAAO,yCAAyC,CAAC;IAC1D,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,oCAAoC,CAAC;CAC1C,GACD,0BAA0B,CAAC;AAE9B,MAAM,MAAM,sCAAsC,GAC/C;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,GAClB;IACA,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,CAAC,EAAE,mCAAmC,CAAC;IAC/C,QAAQ,EAAE,wCAAwC,CAAC;CAClD,CAAC;AAEL,MAAM,WAAW,oDAAoD;IACpE,6BAA6B,CAAC,EAAE,yCAAyC,CAAC;IAC1E,YAAY,EAAE,0BAA0B,CAAC;CACzC;AAED,wBAAsB,6CAA6C,CAClE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,oDAAoD,GAC3D,OAAO,CAAC,sCAAsC,CAAC,CA8DjD","sourcesContent":["import { createIrohRemoteRpcErrorResponse, type IrohRemoteRpcErrorResponse } from \"./rpc-command-filter.ts\";\nimport {\n\tIROH_REMOTE_WORKSPACE_HAS_WORKTREES_ERROR,\n\ttype IrohRemoteHostStateManager,\n\tisIrohRemoteWorkspaceHasWorktreesError,\n} from \"./state-manager.ts\";\nimport {\n\tgetAvailableIrohRemoteWorkspaceNames,\n\ttype IrohRemoteWorkspaceAvailabilityClassifier,\n\ttype IrohRemoteWorkspaceStatus,\n} from \"./workspace.ts\";\n\nexport const IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE = \"unregister_workspace\";\n\nexport interface IrohRemoteWorkspaceMetadataSnapshot {\n\tworkspaceNames: string[];\n\tworkspaces: IrohRemoteWorkspaceStatus[];\n}\n\nexport interface IrohRemoteWorkspaceUnregisterRpcData extends IrohRemoteWorkspaceMetadataSnapshot {\n\tremovedWorkspace: string;\n}\n\nexport type IrohRemoteWorkspaceUnregisterRpcResponse =\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: typeof IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE;\n\t\t\tsuccess: true;\n\t\t\tdata: IrohRemoteWorkspaceUnregisterRpcData;\n\t }\n\t| IrohRemoteRpcErrorResponse;\n\nexport type IrohRemoteWorkspaceUnregisterRpcResult =\n\t| { handled: false }\n\t| {\n\t\t\thandled: true;\n\t\t\tmetadata?: IrohRemoteWorkspaceMetadataSnapshot;\n\t\t\tresponse: IrohRemoteWorkspaceUnregisterRpcResponse;\n\t };\n\nexport interface HandleIrohRemoteWorkspaceUnregisterRpcCommandOptions {\n\tclassifyWorkspaceAvailability?: IrohRemoteWorkspaceAvailabilityClassifier;\n\tstateManager: IrohRemoteHostStateManager;\n}\n\nexport async function handleIrohRemoteWorkspaceUnregisterRpcCommand(\n\tcommand: Record<string, unknown>,\n\toptions: HandleIrohRemoteWorkspaceUnregisterRpcCommandOptions,\n): Promise<IrohRemoteWorkspaceUnregisterRpcResult> {\n\tif (command.type !== IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE) {\n\t\treturn { handled: false };\n\t}\n\n\tconst id = typeof command.id === \"string\" ? command.id : undefined;\n\tconst name = parseIrohRemoteWorkspaceUnregisterName(command);\n\tif (!name.ok) {\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tresponse: createIrohRemoteRpcErrorResponse(id, IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE, name.error),\n\t\t};\n\t}\n\n\tlet removedWorkspace: Awaited<ReturnType<IrohRemoteHostStateManager[\"unregisterWorkspace\"]>>;\n\ttry {\n\t\tremovedWorkspace = await options.stateManager.unregisterWorkspace(name.value);\n\t} catch (error) {\n\t\tif (!isIrohRemoteWorkspaceHasWorktreesError(error)) {\n\t\t\tthrow error;\n\t\t}\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tresponse: createIrohRemoteRpcErrorResponse(\n\t\t\t\tid,\n\t\t\t\tIROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE,\n\t\t\t\tIROH_REMOTE_WORKSPACE_HAS_WORKTREES_ERROR,\n\t\t\t),\n\t\t};\n\t}\n\tif (!removedWorkspace) {\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tresponse: createIrohRemoteRpcErrorResponse(\n\t\t\t\tid,\n\t\t\t\tIROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE,\n\t\t\t\t`No registered Iroh remote workspace named ${name.value}`,\n\t\t\t),\n\t\t};\n\t}\n\n\tconst workspaces = await options.stateManager.listWorkspaceStatuses({\n\t\tclassifyWorkspaceAvailability: options.classifyWorkspaceAvailability,\n\t});\n\tconst metadata: IrohRemoteWorkspaceMetadataSnapshot = {\n\t\tworkspaceNames: getAvailableIrohRemoteWorkspaceNames(workspaces),\n\t\tworkspaces,\n\t};\n\treturn {\n\t\thandled: true,\n\t\tmetadata,\n\t\tresponse: {\n\t\t\tid,\n\t\t\ttype: \"response\",\n\t\t\tcommand: IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE,\n\t\t\tsuccess: true,\n\t\t\tdata: {\n\t\t\t\tremovedWorkspace: removedWorkspace.name,\n\t\t\t\t...metadata,\n\t\t\t},\n\t\t},\n\t};\n}\n\nfunction parseIrohRemoteWorkspaceUnregisterName(\n\tcommand: Record<string, unknown>,\n): { ok: true; value: string } | { ok: false; error: string } {\n\tif (command.path !== undefined || command.workspacePath !== undefined) {\n\t\treturn { ok: false, error: \"Workspace unregister accepts a workspace name only, not a path\" };\n\t}\n\t// The wire contract (iroh-remote-protocol.md) uses `workspaceName`, matching the\n\t// workspaceManagement stream; the legacy `name` field is not part of the protocol.\n\tif (typeof command.workspaceName !== \"string\") {\n\t\treturn { ok: false, error: 'Invalid RPC command payload: \"workspaceName\" must be a non-empty workspace name' };\n\t}\n\tconst name = command.workspaceName.trim();\n\tif (name.length === 0) {\n\t\treturn { ok: false, error: 'Invalid RPC command payload: \"workspaceName\" must be a non-empty workspace name' };\n\t}\n\treturn { ok: true, value: name };\n}\n"]}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { createIrohRemoteRpcErrorResponse } from "./rpc-command-filter.js";
|
|
2
|
+
import { IROH_REMOTE_WORKSPACE_HAS_WORKTREES_ERROR, isIrohRemoteWorkspaceHasWorktreesError, } from "./state-manager.js";
|
|
3
|
+
import { getAvailableIrohRemoteWorkspaceNames, } from "./workspace.js";
|
|
4
|
+
export const IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE = "unregister_workspace";
|
|
5
|
+
export async function handleIrohRemoteWorkspaceUnregisterRpcCommand(command, options) {
|
|
6
|
+
if (command.type !== IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE) {
|
|
7
|
+
return { handled: false };
|
|
8
|
+
}
|
|
9
|
+
const id = typeof command.id === "string" ? command.id : undefined;
|
|
10
|
+
const name = parseIrohRemoteWorkspaceUnregisterName(command);
|
|
11
|
+
if (!name.ok) {
|
|
12
|
+
return {
|
|
13
|
+
handled: true,
|
|
14
|
+
response: createIrohRemoteRpcErrorResponse(id, IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE, name.error),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
let removedWorkspace;
|
|
18
|
+
try {
|
|
19
|
+
removedWorkspace = await options.stateManager.unregisterWorkspace(name.value);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
if (!isIrohRemoteWorkspaceHasWorktreesError(error)) {
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
handled: true,
|
|
27
|
+
response: createIrohRemoteRpcErrorResponse(id, IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE, IROH_REMOTE_WORKSPACE_HAS_WORKTREES_ERROR),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
if (!removedWorkspace) {
|
|
31
|
+
return {
|
|
32
|
+
handled: true,
|
|
33
|
+
response: createIrohRemoteRpcErrorResponse(id, IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE, `No registered Iroh remote workspace named ${name.value}`),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const workspaces = await options.stateManager.listWorkspaceStatuses({
|
|
37
|
+
classifyWorkspaceAvailability: options.classifyWorkspaceAvailability,
|
|
38
|
+
});
|
|
39
|
+
const metadata = {
|
|
40
|
+
workspaceNames: getAvailableIrohRemoteWorkspaceNames(workspaces),
|
|
41
|
+
workspaces,
|
|
42
|
+
};
|
|
43
|
+
return {
|
|
44
|
+
handled: true,
|
|
45
|
+
metadata,
|
|
46
|
+
response: {
|
|
47
|
+
id,
|
|
48
|
+
type: "response",
|
|
49
|
+
command: IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE,
|
|
50
|
+
success: true,
|
|
51
|
+
data: {
|
|
52
|
+
removedWorkspace: removedWorkspace.name,
|
|
53
|
+
...metadata,
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function parseIrohRemoteWorkspaceUnregisterName(command) {
|
|
59
|
+
if (command.path !== undefined || command.workspacePath !== undefined) {
|
|
60
|
+
return { ok: false, error: "Workspace unregister accepts a workspace name only, not a path" };
|
|
61
|
+
}
|
|
62
|
+
// The wire contract (iroh-remote-protocol.md) uses `workspaceName`, matching the
|
|
63
|
+
// workspaceManagement stream; the legacy `name` field is not part of the protocol.
|
|
64
|
+
if (typeof command.workspaceName !== "string") {
|
|
65
|
+
return { ok: false, error: 'Invalid RPC command payload: "workspaceName" must be a non-empty workspace name' };
|
|
66
|
+
}
|
|
67
|
+
const name = command.workspaceName.trim();
|
|
68
|
+
if (name.length === 0) {
|
|
69
|
+
return { ok: false, error: 'Invalid RPC command payload: "workspaceName" must be a non-empty workspace name' };
|
|
70
|
+
}
|
|
71
|
+
return { ok: true, value: name };
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=workspace-rpc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-rpc.js","sourceRoot":"","sources":["../../../../src/core/remote/iroh/workspace-rpc.ts"],"names":[],"mappings":"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","sourcesContent":["import { createIrohRemoteRpcErrorResponse, type IrohRemoteRpcErrorResponse } from \"./rpc-command-filter.ts\";\nimport {\n\tIROH_REMOTE_WORKSPACE_HAS_WORKTREES_ERROR,\n\ttype IrohRemoteHostStateManager,\n\tisIrohRemoteWorkspaceHasWorktreesError,\n} from \"./state-manager.ts\";\nimport {\n\tgetAvailableIrohRemoteWorkspaceNames,\n\ttype IrohRemoteWorkspaceAvailabilityClassifier,\n\ttype IrohRemoteWorkspaceStatus,\n} from \"./workspace.ts\";\n\nexport const IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE = \"unregister_workspace\";\n\nexport interface IrohRemoteWorkspaceMetadataSnapshot {\n\tworkspaceNames: string[];\n\tworkspaces: IrohRemoteWorkspaceStatus[];\n}\n\nexport interface IrohRemoteWorkspaceUnregisterRpcData extends IrohRemoteWorkspaceMetadataSnapshot {\n\tremovedWorkspace: string;\n}\n\nexport type IrohRemoteWorkspaceUnregisterRpcResponse =\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: typeof IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE;\n\t\t\tsuccess: true;\n\t\t\tdata: IrohRemoteWorkspaceUnregisterRpcData;\n\t }\n\t| IrohRemoteRpcErrorResponse;\n\nexport type IrohRemoteWorkspaceUnregisterRpcResult =\n\t| { handled: false }\n\t| {\n\t\t\thandled: true;\n\t\t\tmetadata?: IrohRemoteWorkspaceMetadataSnapshot;\n\t\t\tresponse: IrohRemoteWorkspaceUnregisterRpcResponse;\n\t };\n\nexport interface HandleIrohRemoteWorkspaceUnregisterRpcCommandOptions {\n\tclassifyWorkspaceAvailability?: IrohRemoteWorkspaceAvailabilityClassifier;\n\tstateManager: IrohRemoteHostStateManager;\n}\n\nexport async function handleIrohRemoteWorkspaceUnregisterRpcCommand(\n\tcommand: Record<string, unknown>,\n\toptions: HandleIrohRemoteWorkspaceUnregisterRpcCommandOptions,\n): Promise<IrohRemoteWorkspaceUnregisterRpcResult> {\n\tif (command.type !== IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE) {\n\t\treturn { handled: false };\n\t}\n\n\tconst id = typeof command.id === \"string\" ? command.id : undefined;\n\tconst name = parseIrohRemoteWorkspaceUnregisterName(command);\n\tif (!name.ok) {\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tresponse: createIrohRemoteRpcErrorResponse(id, IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE, name.error),\n\t\t};\n\t}\n\n\tlet removedWorkspace: Awaited<ReturnType<IrohRemoteHostStateManager[\"unregisterWorkspace\"]>>;\n\ttry {\n\t\tremovedWorkspace = await options.stateManager.unregisterWorkspace(name.value);\n\t} catch (error) {\n\t\tif (!isIrohRemoteWorkspaceHasWorktreesError(error)) {\n\t\t\tthrow error;\n\t\t}\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tresponse: createIrohRemoteRpcErrorResponse(\n\t\t\t\tid,\n\t\t\t\tIROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE,\n\t\t\t\tIROH_REMOTE_WORKSPACE_HAS_WORKTREES_ERROR,\n\t\t\t),\n\t\t};\n\t}\n\tif (!removedWorkspace) {\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tresponse: createIrohRemoteRpcErrorResponse(\n\t\t\t\tid,\n\t\t\t\tIROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE,\n\t\t\t\t`No registered Iroh remote workspace named ${name.value}`,\n\t\t\t),\n\t\t};\n\t}\n\n\tconst workspaces = await options.stateManager.listWorkspaceStatuses({\n\t\tclassifyWorkspaceAvailability: options.classifyWorkspaceAvailability,\n\t});\n\tconst metadata: IrohRemoteWorkspaceMetadataSnapshot = {\n\t\tworkspaceNames: getAvailableIrohRemoteWorkspaceNames(workspaces),\n\t\tworkspaces,\n\t};\n\treturn {\n\t\thandled: true,\n\t\tmetadata,\n\t\tresponse: {\n\t\t\tid,\n\t\t\ttype: \"response\",\n\t\t\tcommand: IROH_REMOTE_UNREGISTER_WORKSPACE_RPC_TYPE,\n\t\t\tsuccess: true,\n\t\t\tdata: {\n\t\t\t\tremovedWorkspace: removedWorkspace.name,\n\t\t\t\t...metadata,\n\t\t\t},\n\t\t},\n\t};\n}\n\nfunction parseIrohRemoteWorkspaceUnregisterName(\n\tcommand: Record<string, unknown>,\n): { ok: true; value: string } | { ok: false; error: string } {\n\tif (command.path !== undefined || command.workspacePath !== undefined) {\n\t\treturn { ok: false, error: \"Workspace unregister accepts a workspace name only, not a path\" };\n\t}\n\t// The wire contract (iroh-remote-protocol.md) uses `workspaceName`, matching the\n\t// workspaceManagement stream; the legacy `name` field is not part of the protocol.\n\tif (typeof command.workspaceName !== \"string\") {\n\t\treturn { ok: false, error: 'Invalid RPC command payload: \"workspaceName\" must be a non-empty workspace name' };\n\t}\n\tconst name = command.workspaceName.trim();\n\tif (name.length === 0) {\n\t\treturn { ok: false, error: 'Invalid RPC command payload: \"workspaceName\" must be a non-empty workspace name' };\n\t}\n\treturn { ok: true, value: name };\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { IrohRemoteHostState, IrohRemoteWorkspace } from "./state.ts";
|
|
2
|
+
export type IrohRemoteWorkspaceAvailabilityStatus = "available" | "missing" | "unavailable";
|
|
3
|
+
export interface IrohRemoteWorkspaceStatus {
|
|
4
|
+
name: string;
|
|
5
|
+
status: IrohRemoteWorkspaceAvailabilityStatus;
|
|
6
|
+
}
|
|
7
|
+
export type IrohRemoteWorkspaceAvailabilityClassifier = (workspace: IrohRemoteWorkspace) => IrohRemoteWorkspaceAvailabilityStatus | Promise<IrohRemoteWorkspaceAvailabilityStatus>;
|
|
8
|
+
export declare function parseIrohRemoteWorkspaceSpec(value?: string, cwd?: string): IrohRemoteWorkspace;
|
|
9
|
+
export declare function getIrohRemoteWorkspaceAvailabilityStatus(workspace: IrohRemoteWorkspace): Promise<IrohRemoteWorkspaceAvailabilityStatus>;
|
|
10
|
+
export declare function upsertIrohRemoteWorkspace(state: IrohRemoteHostState, workspace: IrohRemoteWorkspace, allowTools?: string): IrohRemoteWorkspace;
|
|
11
|
+
export declare function getIrohRemoteWorkspaceNameAlias(name: string): string;
|
|
12
|
+
export declare function getIrohRemoteWorkspaceStatuses(state: IrohRemoteHostState, classifier?: IrohRemoteWorkspaceAvailabilityClassifier): Promise<IrohRemoteWorkspaceStatus[]>;
|
|
13
|
+
export declare function getAvailableIrohRemoteWorkspaceNames(workspaces: readonly IrohRemoteWorkspaceStatus[]): string[];
|
|
14
|
+
export declare function findIrohRemoteWorkspace(state: IrohRemoteHostState, workspaceName: string): IrohRemoteWorkspace | undefined;
|
|
15
|
+
export declare function selectIrohRemoteWorkspace(state: IrohRemoteHostState, workspaceSpec: string | undefined, allowTools?: string, cwd?: string): IrohRemoteWorkspace;
|
|
16
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../../src/core/remote/iroh/workspace.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE3E,MAAM,MAAM,qCAAqC,GAAG,WAAW,GAAG,SAAS,GAAG,aAAa,CAAC;AAE5F,MAAM,WAAW,yBAAyB;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,qCAAqC,CAAC;CAC9C;AAED,MAAM,MAAM,yCAAyC,GAAG,CACvD,SAAS,EAAE,mBAAmB,KAC1B,qCAAqC,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC;AAE5F,wBAAgB,4BAA4B,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,SAAgB,GAAG,mBAAmB,CAsBrG;AAED,wBAAsB,wCAAwC,CAC7D,SAAS,EAAE,mBAAmB,GAC5B,OAAO,CAAC,qCAAqC,CAAC,CAOhD;AAED,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,mBAAmB,EAC1B,SAAS,EAAE,mBAAmB,EAC9B,UAAU,CAAC,EAAE,MAAM,GACjB,mBAAmB,CA0BrB;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpE;AAQD,wBAAsB,8BAA8B,CACnD,KAAK,EAAE,mBAAmB,EAC1B,UAAU,CAAC,EAAE,yCAAyC,GACpD,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAOtC;AAED,wBAAgB,oCAAoC,CAAC,UAAU,EAAE,SAAS,yBAAyB,EAAE,GAAG,MAAM,EAAE,CAE/G;AAgBD,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,MAAM,GACnB,mBAAmB,GAAG,SAAS,CAEjC;AAED,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,UAAU,CAAC,EAAE,MAAM,EACnB,GAAG,SAAgB,GACjB,mBAAmB,CAarB","sourcesContent":["import { stat } from \"node:fs/promises\";\nimport { basename, resolve } from \"node:path\";\nimport { isIrohRemoteWorkspaceName } from \"./handshake.ts\";\nimport { normalizeIrohRemoteAllowTools } from \"./protocol.ts\";\nimport type { IrohRemoteHostState, IrohRemoteWorkspace } from \"./state.ts\";\n\nexport type IrohRemoteWorkspaceAvailabilityStatus = \"available\" | \"missing\" | \"unavailable\";\n\nexport interface IrohRemoteWorkspaceStatus {\n\tname: string;\n\tstatus: IrohRemoteWorkspaceAvailabilityStatus;\n}\n\nexport type IrohRemoteWorkspaceAvailabilityClassifier = (\n\tworkspace: IrohRemoteWorkspace,\n) => IrohRemoteWorkspaceAvailabilityStatus | Promise<IrohRemoteWorkspaceAvailabilityStatus>;\n\nexport function parseIrohRemoteWorkspaceSpec(value?: string, cwd = process.cwd()): IrohRemoteWorkspace {\n\tif (!value) {\n\t\tconst name = basename(cwd) || \"workspace\";\n\t\tassertIrohRemoteWorkspaceName(name);\n\t\treturn { name, path: cwd };\n\t}\n\n\tconst separatorIndex = value.indexOf(\"=\");\n\tif (separatorIndex === -1) {\n\t\tconst path = resolve(cwd, value);\n\t\tconst name = basename(path) || \"workspace\";\n\t\tassertIrohRemoteWorkspaceName(name);\n\t\treturn { name, path };\n\t}\n\n\tconst name = value.slice(0, separatorIndex).trim();\n\tconst path = resolve(cwd, value.slice(separatorIndex + 1));\n\tif (!name) {\n\t\tthrow new Error(\"Workspace name cannot be empty\");\n\t}\n\tassertIrohRemoteWorkspaceName(name);\n\treturn { name, path };\n}\n\nexport async function getIrohRemoteWorkspaceAvailabilityStatus(\n\tworkspace: IrohRemoteWorkspace,\n): Promise<IrohRemoteWorkspaceAvailabilityStatus> {\n\ttry {\n\t\tconst workspaceStat = await stat(workspace.path);\n\t\treturn workspaceStat.isDirectory() ? \"available\" : \"unavailable\";\n\t} catch (error) {\n\t\treturn error instanceof Error && \"code\" in error && error.code === \"ENOENT\" ? \"missing\" : \"unavailable\";\n\t}\n}\n\nexport function upsertIrohRemoteWorkspace(\n\tstate: IrohRemoteHostState,\n\tworkspace: IrohRemoteWorkspace,\n\tallowTools?: string,\n): IrohRemoteWorkspace {\n\tassertIrohRemoteWorkspaceName(workspace.name);\n\tconst nameAlias = getIrohRemoteWorkspaceNameAlias(workspace.name);\n\tconst aliasConflict = state.workspaces.find(\n\t\t(entry) => entry.name !== workspace.name && getIrohRemoteWorkspaceNameAlias(entry.name) === nameAlias,\n\t);\n\tif (aliasConflict) {\n\t\tthrow new Error(`Workspace name collides with existing registered workspace: ${aliasConflict.name}`);\n\t}\n\tconst savedAllowedTools = allowTools ?? workspace.allowedTools;\n\tconst savedWorkspace: IrohRemoteWorkspace = {\n\t\tname: workspace.name,\n\t\tpath: workspace.path,\n\t\t...(savedAllowedTools === undefined ? {} : { allowedTools: normalizeIrohRemoteAllowTools(savedAllowedTools) }),\n\t};\n\tconst existing = state.workspaces.find((entry) => entry.name === workspace.name);\n\tif (!existing) {\n\t\tstate.workspaces.push(savedWorkspace);\n\t\treturn savedWorkspace;\n\t}\n\n\texisting.path = savedWorkspace.path;\n\tif (savedAllowedTools !== undefined) {\n\t\texisting.allowedTools = savedAllowedTools;\n\t}\n\treturn existing;\n}\n\nexport function getIrohRemoteWorkspaceNameAlias(name: string): string {\n\treturn name.normalize(\"NFC\").toLowerCase();\n}\n\nfunction assertIrohRemoteWorkspaceName(name: string): void {\n\tif (!isIrohRemoteWorkspaceName(name)) {\n\t\tthrow new Error(\"Workspace name is invalid\");\n\t}\n}\n\nexport async function getIrohRemoteWorkspaceStatuses(\n\tstate: IrohRemoteHostState,\n\tclassifier?: IrohRemoteWorkspaceAvailabilityClassifier,\n): Promise<IrohRemoteWorkspaceStatus[]> {\n\treturn await Promise.all(\n\t\tstate.workspaces.map(async (workspace) => ({\n\t\t\tname: workspace.name,\n\t\t\tstatus: await getIrohRemoteWorkspaceStatus(workspace, classifier),\n\t\t})),\n\t);\n}\n\nexport function getAvailableIrohRemoteWorkspaceNames(workspaces: readonly IrohRemoteWorkspaceStatus[]): string[] {\n\treturn workspaces.filter((entry) => entry.status === \"available\").map((entry) => entry.name);\n}\n\nasync function getIrohRemoteWorkspaceStatus(\n\tworkspace: IrohRemoteWorkspace,\n\tclassifier: IrohRemoteWorkspaceAvailabilityClassifier | undefined,\n): Promise<IrohRemoteWorkspaceAvailabilityStatus> {\n\tif (classifier === undefined) {\n\t\treturn \"available\";\n\t}\n\ttry {\n\t\treturn await classifier(workspace);\n\t} catch {\n\t\treturn \"unavailable\";\n\t}\n}\n\nexport function findIrohRemoteWorkspace(\n\tstate: IrohRemoteHostState,\n\tworkspaceName: string,\n): IrohRemoteWorkspace | undefined {\n\treturn state.workspaces.find((entry) => entry.name === workspaceName);\n}\n\nexport function selectIrohRemoteWorkspace(\n\tstate: IrohRemoteHostState,\n\tworkspaceSpec: string | undefined,\n\tallowTools?: string,\n\tcwd = process.cwd(),\n): IrohRemoteWorkspace {\n\tif (workspaceSpec) {\n\t\treturn upsertIrohRemoteWorkspace(state, parseIrohRemoteWorkspaceSpec(workspaceSpec, cwd), allowTools);\n\t}\n\tconst cwdWorkspace = parseIrohRemoteWorkspaceSpec(undefined, cwd);\n\tconst workspace = state.workspaces.find((entry) => entry.path === cwdWorkspace.path);\n\tif (workspace) {\n\t\tif (allowTools !== undefined) {\n\t\t\tworkspace.allowedTools = allowTools;\n\t\t}\n\t\treturn workspace;\n\t}\n\treturn upsertIrohRemoteWorkspace(state, cwdWorkspace, allowTools);\n}\n"]}
|