@hansjm10/volt-coding-agent 0.0.0-bootstrap.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BINARY-CAPABILITIES.md +28 -0
- package/CHANGELOG.md +4845 -0
- package/LICENSE +1 -1
- package/README.md +716 -3
- package/THIRD-PARTY-NOTICES.md +55 -0
- package/dist/LICENSES/clipboard-image-MIT.txt +9 -0
- package/dist/LICENSES/highlight.js-10.7.3-BSD-3-Clause.txt +29 -0
- package/dist/LICENSES/highlight.js-11.9.0-BSD-3-Clause.txt +29 -0
- package/dist/LICENSES/marked-18.0.5-LICENSE.txt +44 -0
- package/dist/LICENSES/run-jxa-MIT.txt +9 -0
- package/dist/cli/args.d.ts +60 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +414 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/config-selector.d.ts +14 -0
- package/dist/cli/config-selector.d.ts.map +1 -0
- package/dist/cli/config-selector.js +31 -0
- package/dist/cli/config-selector.js.map +1 -0
- package/dist/cli/file-processor.d.ts +15 -0
- package/dist/cli/file-processor.d.ts.map +1 -0
- package/dist/cli/file-processor.js +85 -0
- package/dist/cli/file-processor.js.map +1 -0
- package/dist/cli/initial-message.d.ts +18 -0
- package/dist/cli/initial-message.d.ts.map +1 -0
- package/dist/cli/initial-message.js +22 -0
- package/dist/cli/initial-message.js.map +1 -0
- package/dist/cli/list-models.d.ts +9 -0
- package/dist/cli/list-models.d.ts.map +1 -0
- package/dist/cli/list-models.js +98 -0
- package/dist/cli/list-models.js.map +1 -0
- package/dist/cli/project-trust.d.ts +10 -0
- package/dist/cli/project-trust.d.ts.map +1 -0
- package/dist/cli/project-trust.js +48 -0
- package/dist/cli/project-trust.js.map +1 -0
- package/dist/cli/session-picker.d.ts +9 -0
- package/dist/cli/session-picker.d.ts.map +1 -0
- package/dist/cli/session-picker.js +35 -0
- package/dist/cli/session-picker.js.map +1 -0
- package/dist/cli/startup-ui.d.ts +17 -0
- package/dist/cli/startup-ui.d.ts.map +1 -0
- package/dist/cli/startup-ui.js +133 -0
- package/dist/cli/startup-ui.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +18 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +85 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +487 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-session-runtime.d.ts +160 -0
- package/dist/core/agent-session-runtime.d.ts.map +1 -0
- package/dist/core/agent-session-runtime.js +397 -0
- package/dist/core/agent-session-runtime.js.map +1 -0
- package/dist/core/agent-session-services.d.ts +98 -0
- package/dist/core/agent-session-services.d.ts.map +1 -0
- package/dist/core/agent-session-services.js +125 -0
- package/dist/core/agent-session-services.js.map +1 -0
- package/dist/core/agent-session.d.ts +739 -0
- package/dist/core/agent-session.d.ts.map +1 -0
- package/dist/core/agent-session.js +3158 -0
- package/dist/core/agent-session.js.map +1 -0
- package/dist/core/auth-guidance.d.ts +5 -0
- package/dist/core/auth-guidance.d.ts.map +1 -0
- package/dist/core/auth-guidance.js +21 -0
- package/dist/core/auth-guidance.js.map +1 -0
- package/dist/core/auth-storage.d.ts +159 -0
- package/dist/core/auth-storage.d.ts.map +1 -0
- package/dist/core/auth-storage.js +509 -0
- package/dist/core/auth-storage.js.map +1 -0
- package/dist/core/bash-executor.d.ts +32 -0
- package/dist/core/bash-executor.d.ts.map +1 -0
- package/dist/core/bash-executor.js +111 -0
- package/dist/core/bash-executor.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +92 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
- package/dist/core/compaction/branch-summarization.js +257 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +121 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -0
- package/dist/core/compaction/compaction.js +658 -0
- package/dist/core/compaction/compaction.js.map +1 -0
- package/dist/core/compaction/index.d.ts +7 -0
- package/dist/core/compaction/index.d.ts.map +1 -0
- package/dist/core/compaction/index.js +7 -0
- package/dist/core/compaction/index.js.map +1 -0
- package/dist/core/compaction/utils.d.ts +56 -0
- package/dist/core/compaction/utils.d.ts.map +1 -0
- package/dist/core/compaction/utils.js +271 -0
- package/dist/core/compaction/utils.js.map +1 -0
- package/dist/core/defaults.d.ts +3 -0
- package/dist/core/defaults.d.ts.map +1 -0
- package/dist/core/defaults.js +2 -0
- package/dist/core/defaults.js.map +1 -0
- package/dist/core/diagnostics.d.ts +15 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +2 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/event-bus.d.ts +9 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +25 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/exec.d.ts +29 -0
- package/dist/core/exec.d.ts.map +1 -0
- package/dist/core/exec.js +75 -0
- package/dist/core/exec.js.map +1 -0
- package/dist/core/experimental.d.ts +2 -0
- package/dist/core/experimental.d.ts.map +1 -0
- package/dist/core/experimental.js +4 -0
- package/dist/core/experimental.js.map +1 -0
- package/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
- package/dist/core/export-html/ansi-to-html.js +249 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -0
- package/dist/core/export-html/index.d.ts +37 -0
- package/dist/core/export-html/index.d.ts.map +1 -0
- package/dist/core/export-html/index.js +234 -0
- package/dist/core/export-html/index.js.map +1 -0
- package/dist/core/export-html/template.css +1066 -0
- package/dist/core/export-html/template.html +55 -0
- package/dist/core/export-html/template.js +1864 -0
- package/dist/core/export-html/tool-renderer.d.ts +34 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
- package/dist/core/export-html/tool-renderer.js +108 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -0
- package/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/dist/core/export-html/vendor/marked.min.js +78 -0
- package/dist/core/extensions/index.d.ts +12 -0
- package/dist/core/extensions/index.d.ts.map +1 -0
- package/dist/core/extensions/index.js +9 -0
- package/dist/core/extensions/index.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +25 -0
- package/dist/core/extensions/loader.d.ts.map +1 -0
- package/dist/core/extensions/loader.js +516 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +180 -0
- package/dist/core/extensions/runner.d.ts.map +1 -0
- package/dist/core/extensions/runner.js +938 -0
- package/dist/core/extensions/runner.js.map +1 -0
- package/dist/core/extensions/types.d.ts +1215 -0
- package/dist/core/extensions/types.d.ts.map +1 -0
- package/dist/core/extensions/types.js +48 -0
- package/dist/core/extensions/types.js.map +1 -0
- package/dist/core/extensions/wrapper.d.ts +20 -0
- package/dist/core/extensions/wrapper.d.ts.map +1 -0
- package/dist/core/extensions/wrapper.js +22 -0
- package/dist/core/extensions/wrapper.js.map +1 -0
- package/dist/core/footer-data-provider.d.ts +54 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -0
- package/dist/core/footer-data-provider.js +338 -0
- package/dist/core/footer-data-provider.js.map +1 -0
- package/dist/core/host-actions.d.ts +107 -0
- package/dist/core/host-actions.d.ts.map +1 -0
- package/dist/core/host-actions.js +632 -0
- package/dist/core/host-actions.js.map +1 -0
- package/dist/core/host-interaction.d.ts +35 -0
- package/dist/core/host-interaction.d.ts.map +1 -0
- package/dist/core/host-interaction.js +2 -0
- package/dist/core/host-interaction.js.map +1 -0
- package/dist/core/http-dispatcher.d.ts +22 -0
- package/dist/core/http-dispatcher.d.ts.map +1 -0
- package/dist/core/http-dispatcher.js +64 -0
- package/dist/core/http-dispatcher.js.map +1 -0
- package/dist/core/index.d.ts +18 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +17 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/keybindings.d.ts +373 -0
- package/dist/core/keybindings.d.ts.map +1 -0
- package/dist/core/keybindings.js +303 -0
- package/dist/core/keybindings.js.map +1 -0
- package/dist/core/lsp/client.d.ts +119 -0
- package/dist/core/lsp/client.d.ts.map +1 -0
- package/dist/core/lsp/client.js +711 -0
- package/dist/core/lsp/client.js.map +1 -0
- package/dist/core/lsp/config.d.ts +96 -0
- package/dist/core/lsp/config.d.ts.map +1 -0
- package/dist/core/lsp/config.js +206 -0
- package/dist/core/lsp/config.js.map +1 -0
- package/dist/core/lsp/index.d.ts +6 -0
- package/dist/core/lsp/index.d.ts.map +1 -0
- package/dist/core/lsp/index.js +6 -0
- package/dist/core/lsp/index.js.map +1 -0
- package/dist/core/lsp/manager.d.ts +122 -0
- package/dist/core/lsp/manager.d.ts.map +1 -0
- package/dist/core/lsp/manager.js +1136 -0
- package/dist/core/lsp/manager.js.map +1 -0
- package/dist/core/lsp/trace.d.ts +26 -0
- package/dist/core/lsp/trace.d.ts.map +1 -0
- package/dist/core/lsp/trace.js +98 -0
- package/dist/core/lsp/trace.js.map +1 -0
- package/dist/core/lsp/workspace-edit.d.ts +60 -0
- package/dist/core/lsp/workspace-edit.d.ts.map +1 -0
- package/dist/core/lsp/workspace-edit.js +71 -0
- package/dist/core/lsp/workspace-edit.js.map +1 -0
- package/dist/core/mcp/audit.d.ts +39 -0
- package/dist/core/mcp/audit.d.ts.map +1 -0
- package/dist/core/mcp/audit.js +35 -0
- package/dist/core/mcp/audit.js.map +1 -0
- package/dist/core/mcp/auth.d.ts +7 -0
- package/dist/core/mcp/auth.d.ts.map +1 -0
- package/dist/core/mcp/auth.js +56 -0
- package/dist/core/mcp/auth.js.map +1 -0
- package/dist/core/mcp/client-factory.d.ts +20 -0
- package/dist/core/mcp/client-factory.d.ts.map +1 -0
- package/dist/core/mcp/client-factory.js +200 -0
- package/dist/core/mcp/client-factory.js.map +1 -0
- package/dist/core/mcp/config-loader.d.ts +9 -0
- package/dist/core/mcp/config-loader.d.ts.map +1 -0
- package/dist/core/mcp/config-loader.js +104 -0
- package/dist/core/mcp/config-loader.js.map +1 -0
- package/dist/core/mcp/config-writer.d.ts +21 -0
- package/dist/core/mcp/config-writer.d.ts.map +1 -0
- package/dist/core/mcp/config-writer.js +124 -0
- package/dist/core/mcp/config-writer.js.map +1 -0
- package/dist/core/mcp/config.d.ts +32 -0
- package/dist/core/mcp/config.d.ts.map +1 -0
- package/dist/core/mcp/config.js +385 -0
- package/dist/core/mcp/config.js.map +1 -0
- package/dist/core/mcp/direct-tools.d.ts +11 -0
- package/dist/core/mcp/direct-tools.d.ts.map +1 -0
- package/dist/core/mcp/direct-tools.js +47 -0
- package/dist/core/mcp/direct-tools.js.map +1 -0
- package/dist/core/mcp/gateway-tool.d.ts +29 -0
- package/dist/core/mcp/gateway-tool.d.ts.map +1 -0
- package/dist/core/mcp/gateway-tool.js +108 -0
- package/dist/core/mcp/gateway-tool.js.map +1 -0
- package/dist/core/mcp/index.d.ts +19 -0
- package/dist/core/mcp/index.d.ts.map +1 -0
- package/dist/core/mcp/index.js +18 -0
- package/dist/core/mcp/index.js.map +1 -0
- package/dist/core/mcp/manager.d.ts +117 -0
- package/dist/core/mcp/manager.d.ts.map +1 -0
- package/dist/core/mcp/manager.js +819 -0
- package/dist/core/mcp/manager.js.map +1 -0
- package/dist/core/mcp/metadata-cache.d.ts +27 -0
- package/dist/core/mcp/metadata-cache.d.ts.map +1 -0
- package/dist/core/mcp/metadata-cache.js +152 -0
- package/dist/core/mcp/metadata-cache.js.map +1 -0
- package/dist/core/mcp/oauth-flow.d.ts +94 -0
- package/dist/core/mcp/oauth-flow.d.ts.map +1 -0
- package/dist/core/mcp/oauth-flow.js +473 -0
- package/dist/core/mcp/oauth-flow.js.map +1 -0
- package/dist/core/mcp/oauth-provider.d.ts +39 -0
- package/dist/core/mcp/oauth-provider.d.ts.map +1 -0
- package/dist/core/mcp/oauth-provider.js +149 -0
- package/dist/core/mcp/oauth-provider.js.map +1 -0
- package/dist/core/mcp/oauth-store.d.ts +27 -0
- package/dist/core/mcp/oauth-store.d.ts.map +1 -0
- package/dist/core/mcp/oauth-store.js +111 -0
- package/dist/core/mcp/oauth-store.js.map +1 -0
- package/dist/core/mcp/output-store.d.ts +55 -0
- package/dist/core/mcp/output-store.d.ts.map +1 -0
- package/dist/core/mcp/output-store.js +206 -0
- package/dist/core/mcp/output-store.js.map +1 -0
- package/dist/core/mcp/rpc.d.ts +13 -0
- package/dist/core/mcp/rpc.d.ts.map +1 -0
- package/dist/core/mcp/rpc.js +29 -0
- package/dist/core/mcp/rpc.js.map +1 -0
- package/dist/core/mcp/safety.d.ts +6 -0
- package/dist/core/mcp/safety.d.ts.map +1 -0
- package/dist/core/mcp/safety.js +65 -0
- package/dist/core/mcp/safety.js.map +1 -0
- package/dist/core/mcp/search.d.ts +8 -0
- package/dist/core/mcp/search.d.ts.map +1 -0
- package/dist/core/mcp/search.js +85 -0
- package/dist/core/mcp/search.js.map +1 -0
- package/dist/core/mcp/server-supervisor.d.ts +59 -0
- package/dist/core/mcp/server-supervisor.d.ts.map +1 -0
- package/dist/core/mcp/server-supervisor.js +331 -0
- package/dist/core/mcp/server-supervisor.js.map +1 -0
- package/dist/core/mcp/types.d.ts +321 -0
- package/dist/core/mcp/types.d.ts.map +1 -0
- package/dist/core/mcp/types.js +2 -0
- package/dist/core/mcp/types.js.map +1 -0
- package/dist/core/messages.d.ts +78 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +138 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/model-catalog-watcher.d.ts +36 -0
- package/dist/core/model-catalog-watcher.d.ts.map +1 -0
- package/dist/core/model-catalog-watcher.js +101 -0
- package/dist/core/model-catalog-watcher.js.map +1 -0
- package/dist/core/model-registry.d.ts +160 -0
- package/dist/core/model-registry.d.ts.map +1 -0
- package/dist/core/model-registry.js +754 -0
- package/dist/core/model-registry.js.map +1 -0
- package/dist/core/model-resolver.d.ts +111 -0
- package/dist/core/model-resolver.d.ts.map +1 -0
- package/dist/core/model-resolver.js +534 -0
- package/dist/core/model-resolver.js.map +1 -0
- package/dist/core/output-guard.d.ts +7 -0
- package/dist/core/output-guard.d.ts.map +1 -0
- package/dist/core/output-guard.js +89 -0
- package/dist/core/output-guard.js.map +1 -0
- package/dist/core/package-manager.d.ts +220 -0
- package/dist/core/package-manager.d.ts.map +1 -0
- package/dist/core/package-manager.js +2217 -0
- package/dist/core/package-manager.js.map +1 -0
- package/dist/core/project-trust.d.ts +15 -0
- package/dist/core/project-trust.d.ts.map +1 -0
- package/dist/core/project-trust.js +58 -0
- package/dist/core/project-trust.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +53 -0
- package/dist/core/prompt-templates.d.ts.map +1 -0
- package/dist/core/prompt-templates.js +236 -0
- package/dist/core/prompt-templates.js.map +1 -0
- package/dist/core/provider-attribution.d.ts +4 -0
- package/dist/core/provider-attribution.d.ts.map +1 -0
- package/dist/core/provider-attribution.js +81 -0
- package/dist/core/provider-attribution.js.map +1 -0
- package/dist/core/provider-display-names.d.ts +2 -0
- package/dist/core/provider-display-names.d.ts.map +1 -0
- package/dist/core/provider-display-names.js +36 -0
- package/dist/core/provider-display-names.js.map +1 -0
- package/dist/core/remote/iroh/access-grant.d.ts +40 -0
- package/dist/core/remote/iroh/access-grant.d.ts.map +1 -0
- package/dist/core/remote/iroh/access-grant.js +199 -0
- package/dist/core/remote/iroh/access-grant.js.map +1 -0
- package/dist/core/remote/iroh/active-stream-registry.d.ts +39 -0
- package/dist/core/remote/iroh/active-stream-registry.d.ts.map +1 -0
- package/dist/core/remote/iroh/active-stream-registry.js +109 -0
- package/dist/core/remote/iroh/active-stream-registry.js.map +1 -0
- package/dist/core/remote/iroh/audit.d.ts +67 -0
- package/dist/core/remote/iroh/audit.d.ts.map +1 -0
- package/dist/core/remote/iroh/audit.js +274 -0
- package/dist/core/remote/iroh/audit.js.map +1 -0
- package/dist/core/remote/iroh/authorization.d.ts +46 -0
- package/dist/core/remote/iroh/authorization.d.ts.map +1 -0
- package/dist/core/remote/iroh/authorization.js +327 -0
- package/dist/core/remote/iroh/authorization.js.map +1 -0
- package/dist/core/remote/iroh/control.d.ts +64 -0
- package/dist/core/remote/iroh/control.d.ts.map +1 -0
- package/dist/core/remote/iroh/control.js +326 -0
- package/dist/core/remote/iroh/control.js.map +1 -0
- package/dist/core/remote/iroh/device-log-rpc.d.ts +22 -0
- package/dist/core/remote/iroh/device-log-rpc.d.ts.map +1 -0
- package/dist/core/remote/iroh/device-log-rpc.js +152 -0
- package/dist/core/remote/iroh/device-log-rpc.js.map +1 -0
- package/dist/core/remote/iroh/engine.d.ts +148 -0
- package/dist/core/remote/iroh/engine.d.ts.map +1 -0
- package/dist/core/remote/iroh/engine.js +499 -0
- package/dist/core/remote/iroh/engine.js.map +1 -0
- package/dist/core/remote/iroh/handshake-reader.d.ts +19 -0
- package/dist/core/remote/iroh/handshake-reader.d.ts.map +1 -0
- package/dist/core/remote/iroh/handshake-reader.js +91 -0
- package/dist/core/remote/iroh/handshake-reader.js.map +1 -0
- package/dist/core/remote/iroh/handshake.d.ts +119 -0
- package/dist/core/remote/iroh/handshake.d.ts.map +1 -0
- package/dist/core/remote/iroh/handshake.js +621 -0
- package/dist/core/remote/iroh/handshake.js.map +1 -0
- package/dist/core/remote/iroh/host-policy.d.ts +13 -0
- package/dist/core/remote/iroh/host-policy.d.ts.map +1 -0
- package/dist/core/remote/iroh/host-policy.js +15 -0
- package/dist/core/remote/iroh/host-policy.js.map +1 -0
- package/dist/core/remote/iroh/index.d.ts +25 -0
- package/dist/core/remote/iroh/index.d.ts.map +1 -0
- package/dist/core/remote/iroh/index.js +25 -0
- package/dist/core/remote/iroh/index.js.map +1 -0
- package/dist/core/remote/iroh/metadata.d.ts +28 -0
- package/dist/core/remote/iroh/metadata.d.ts.map +1 -0
- package/dist/core/remote/iroh/metadata.js +16 -0
- package/dist/core/remote/iroh/metadata.js.map +1 -0
- package/dist/core/remote/iroh/outbound-filter.d.ts +29 -0
- package/dist/core/remote/iroh/outbound-filter.d.ts.map +1 -0
- package/dist/core/remote/iroh/outbound-filter.js +692 -0
- package/dist/core/remote/iroh/outbound-filter.js.map +1 -0
- package/dist/core/remote/iroh/protocol.d.ts +60 -0
- package/dist/core/remote/iroh/protocol.d.ts.map +1 -0
- package/dist/core/remote/iroh/protocol.js +204 -0
- package/dist/core/remote/iroh/protocol.js.map +1 -0
- package/dist/core/remote/iroh/push.d.ts +179 -0
- package/dist/core/remote/iroh/push.d.ts.map +1 -0
- package/dist/core/remote/iroh/push.js +662 -0
- package/dist/core/remote/iroh/push.js.map +1 -0
- package/dist/core/remote/iroh/qr.d.ts +12 -0
- package/dist/core/remote/iroh/qr.d.ts.map +1 -0
- package/dist/core/remote/iroh/qr.js +27 -0
- package/dist/core/remote/iroh/qr.js.map +1 -0
- package/dist/core/remote/iroh/rpc-command-filter.d.ts +47 -0
- package/dist/core/remote/iroh/rpc-command-filter.d.ts.map +1 -0
- package/dist/core/remote/iroh/rpc-command-filter.js +188 -0
- package/dist/core/remote/iroh/rpc-command-filter.js.map +1 -0
- package/dist/core/remote/iroh/rpc-transport.d.ts +21 -0
- package/dist/core/remote/iroh/rpc-transport.d.ts.map +1 -0
- package/dist/core/remote/iroh/rpc-transport.js +106 -0
- package/dist/core/remote/iroh/rpc-transport.js.map +1 -0
- package/dist/core/remote/iroh/state-manager.d.ts +141 -0
- package/dist/core/remote/iroh/state-manager.d.ts.map +1 -0
- package/dist/core/remote/iroh/state-manager.js +744 -0
- package/dist/core/remote/iroh/state-manager.js.map +1 -0
- package/dist/core/remote/iroh/state.d.ts +141 -0
- package/dist/core/remote/iroh/state.d.ts.map +1 -0
- package/dist/core/remote/iroh/state.js +433 -0
- package/dist/core/remote/iroh/state.js.map +1 -0
- package/dist/core/remote/iroh/ticket.d.ts +46 -0
- package/dist/core/remote/iroh/ticket.d.ts.map +1 -0
- package/dist/core/remote/iroh/ticket.js +267 -0
- package/dist/core/remote/iroh/ticket.js.map +1 -0
- package/dist/core/remote/iroh/transcript-text.d.ts +8 -0
- package/dist/core/remote/iroh/transcript-text.d.ts.map +1 -0
- package/dist/core/remote/iroh/transcript-text.js +26 -0
- package/dist/core/remote/iroh/transcript-text.js.map +1 -0
- package/dist/core/remote/iroh/workspace-rpc.d.ts +31 -0
- package/dist/core/remote/iroh/workspace-rpc.d.ts.map +1 -0
- package/dist/core/remote/iroh/workspace-rpc.js +73 -0
- package/dist/core/remote/iroh/workspace-rpc.js.map +1 -0
- package/dist/core/remote/iroh/workspace.d.ts +16 -0
- package/dist/core/remote/iroh/workspace.d.ts.map +1 -0
- package/dist/core/remote/iroh/workspace.js +104 -0
- package/dist/core/remote/iroh/workspace.js.map +1 -0
- package/dist/core/remote/iroh/worktree-rpc.d.ts +83 -0
- package/dist/core/remote/iroh/worktree-rpc.d.ts.map +1 -0
- package/dist/core/remote/iroh/worktree-rpc.js +148 -0
- package/dist/core/remote/iroh/worktree-rpc.js.map +1 -0
- package/dist/core/resolve-config-value.d.ts +30 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -0
- package/dist/core/resolve-config-value.js +245 -0
- package/dist/core/resolve-config-value.js.map +1 -0
- package/dist/core/resource-loader.d.ts +214 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +824 -0
- package/dist/core/resource-loader.js.map +1 -0
- package/dist/core/review.d.ts +318 -0
- package/dist/core/review.d.ts.map +1 -0
- package/dist/core/review.js +1271 -0
- package/dist/core/review.js.map +1 -0
- package/dist/core/rpc/duplex-write-gate.d.ts +29 -0
- package/dist/core/rpc/duplex-write-gate.d.ts.map +1 -0
- package/dist/core/rpc/duplex-write-gate.js +124 -0
- package/dist/core/rpc/duplex-write-gate.js.map +1 -0
- package/dist/core/rpc/index.d.ts +6 -0
- package/dist/core/rpc/index.d.ts.map +1 -0
- package/dist/core/rpc/index.js +5 -0
- package/dist/core/rpc/index.js.map +1 -0
- package/dist/core/rpc/iroh-transport.d.ts +58 -0
- package/dist/core/rpc/iroh-transport.d.ts.map +1 -0
- package/dist/core/rpc/iroh-transport.js +278 -0
- package/dist/core/rpc/iroh-transport.js.map +1 -0
- package/dist/core/rpc/jsonl.d.ts +17 -0
- package/dist/core/rpc/jsonl.d.ts.map +1 -0
- package/dist/core/rpc/jsonl.js +49 -0
- package/dist/core/rpc/jsonl.js.map +1 -0
- package/dist/core/rpc/loopback-transport.d.ts +14 -0
- package/dist/core/rpc/loopback-transport.d.ts.map +1 -0
- package/dist/core/rpc/loopback-transport.js +120 -0
- package/dist/core/rpc/loopback-transport.js.map +1 -0
- package/dist/core/rpc/transcript.d.ts +37 -0
- package/dist/core/rpc/transcript.d.ts.map +1 -0
- package/dist/core/rpc/transcript.js +624 -0
- package/dist/core/rpc/transcript.js.map +1 -0
- package/dist/core/rpc/transport.d.ts +41 -0
- package/dist/core/rpc/transport.d.ts.map +1 -0
- package/dist/core/rpc/transport.js +155 -0
- package/dist/core/rpc/transport.js.map +1 -0
- package/dist/core/rpc/types.d.ts +1254 -0
- package/dist/core/rpc/types.d.ts.map +1 -0
- package/dist/core/rpc/types.js +8 -0
- package/dist/core/rpc/types.js.map +1 -0
- package/dist/core/rpc/ui-action-args.d.ts +3 -0
- package/dist/core/rpc/ui-action-args.d.ts.map +1 -0
- package/dist/core/rpc/ui-action-args.js +66 -0
- package/dist/core/rpc/ui-action-args.js.map +1 -0
- package/dist/core/rpc/ui-actions.d.ts +43 -0
- package/dist/core/rpc/ui-actions.d.ts.map +1 -0
- package/dist/core/rpc/ui-actions.js +362 -0
- package/dist/core/rpc/ui-actions.js.map +1 -0
- package/dist/core/sdk.d.ts +138 -0
- package/dist/core/sdk.d.ts.map +1 -0
- package/dist/core/sdk.js +324 -0
- package/dist/core/sdk.js.map +1 -0
- package/dist/core/session-cwd.d.ts +19 -0
- package/dist/core/session-cwd.d.ts.map +1 -0
- package/dist/core/session-cwd.js +38 -0
- package/dist/core/session-cwd.js.map +1 -0
- package/dist/core/session-manager.d.ts +346 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +1280 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/settings-manager.d.ts +359 -0
- package/dist/core/settings-manager.d.ts.map +1 -0
- package/dist/core/settings-manager.js +1277 -0
- package/dist/core/settings-manager.js.map +1 -0
- package/dist/core/skills.d.ts +60 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +387 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/slash-commands.d.ts +14 -0
- package/dist/core/slash-commands.d.ts.map +1 -0
- package/dist/core/slash-commands.js +51 -0
- package/dist/core/slash-commands.js.map +1 -0
- package/dist/core/source-info.d.ts +18 -0
- package/dist/core/source-info.d.ts.map +1 -0
- package/dist/core/source-info.js +19 -0
- package/dist/core/source-info.js.map +1 -0
- package/dist/core/subagents/delegation-scope.d.ts +47 -0
- package/dist/core/subagents/delegation-scope.d.ts.map +1 -0
- package/dist/core/subagents/delegation-scope.js +134 -0
- package/dist/core/subagents/delegation-scope.js.map +1 -0
- package/dist/core/subagents/index.d.ts +46 -0
- package/dist/core/subagents/index.d.ts.map +1 -0
- package/dist/core/subagents/index.js +369 -0
- package/dist/core/subagents/index.js.map +1 -0
- package/dist/core/subagents/manager.d.ts +183 -0
- package/dist/core/subagents/manager.d.ts.map +1 -0
- package/dist/core/subagents/manager.js +820 -0
- package/dist/core/subagents/manager.js.map +1 -0
- package/dist/core/system-prompt.d.ts +28 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +180 -0
- package/dist/core/system-prompt.js.map +1 -0
- package/dist/core/telemetry.d.ts +3 -0
- package/dist/core/telemetry.d.ts.map +1 -0
- package/dist/core/telemetry.js +9 -0
- package/dist/core/telemetry.js.map +1 -0
- package/dist/core/theme/dark.json +86 -0
- package/dist/core/theme/discovery.d.ts +48 -0
- package/dist/core/theme/discovery.d.ts.map +1 -0
- package/dist/core/theme/discovery.js +239 -0
- package/dist/core/theme/discovery.js.map +1 -0
- package/dist/core/theme/index.d.ts +6 -0
- package/dist/core/theme/index.d.ts.map +1 -0
- package/dist/core/theme/index.js +5 -0
- package/dist/core/theme/index.js.map +1 -0
- package/dist/core/theme/light.json +85 -0
- package/dist/core/theme/runtime.d.ts +55 -0
- package/dist/core/theme/runtime.d.ts.map +1 -0
- package/dist/core/theme/runtime.js +555 -0
- package/dist/core/theme/runtime.js.map +1 -0
- package/dist/core/theme/theme-schema.json +335 -0
- package/dist/core/theme/theme-service.d.ts +37 -0
- package/dist/core/theme/theme-service.d.ts.map +1 -0
- package/dist/core/theme/theme-service.js +222 -0
- package/dist/core/theme/theme-service.js.map +1 -0
- package/dist/core/theme/theme.d.ts +100 -0
- package/dist/core/theme/theme.d.ts.map +1 -0
- package/dist/core/theme/theme.js +243 -0
- package/dist/core/theme/theme.js.map +1 -0
- package/dist/core/theme/tokens.d.ts +20 -0
- package/dist/core/theme/tokens.d.ts.map +1 -0
- package/dist/core/theme/tokens.js +178 -0
- package/dist/core/theme/tokens.js.map +1 -0
- package/dist/core/theme/types.d.ts +21 -0
- package/dist/core/theme/types.d.ts.map +1 -0
- package/dist/core/theme/types.js +2 -0
- package/dist/core/theme/types.js.map +1 -0
- package/dist/core/timings.d.ts +8 -0
- package/dist/core/timings.d.ts.map +1 -0
- package/dist/core/timings.js +31 -0
- package/dist/core/timings.js.map +1 -0
- package/dist/core/tools/bash.d.ts +68 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +345 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/diagnostics-provider.d.ts +12 -0
- package/dist/core/tools/diagnostics-provider.d.ts.map +1 -0
- package/dist/core/tools/diagnostics-provider.js +2 -0
- package/dist/core/tools/diagnostics-provider.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +77 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -0
- package/dist/core/tools/edit-diff.js +506 -0
- package/dist/core/tools/edit-diff.js.map +1 -0
- package/dist/core/tools/edit.d.ts +56 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +300 -0
- package/dist/core/tools/edit.js.map +1 -0
- package/dist/core/tools/file-mutation-queue.d.ts +6 -0
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
- package/dist/core/tools/file-mutation-queue.js +52 -0
- package/dist/core/tools/file-mutation-queue.js.map +1 -0
- package/dist/core/tools/find.d.ts +35 -0
- package/dist/core/tools/find.d.ts.map +1 -0
- package/dist/core/tools/find.js +337 -0
- package/dist/core/tools/find.js.map +1 -0
- package/dist/core/tools/grep.d.ts +37 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +305 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/index.d.ts +56 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +174 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/ls.d.ts +37 -0
- package/dist/core/tools/ls.d.ts.map +1 -0
- package/dist/core/tools/ls.js +167 -0
- package/dist/core/tools/ls.js.map +1 -0
- package/dist/core/tools/lsp.d.ts +59 -0
- package/dist/core/tools/lsp.d.ts.map +1 -0
- package/dist/core/tools/lsp.js +157 -0
- package/dist/core/tools/lsp.js.map +1 -0
- package/dist/core/tools/output-accumulator.d.ts +52 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -0
- package/dist/core/tools/output-accumulator.js +184 -0
- package/dist/core/tools/output-accumulator.js.map +1 -0
- package/dist/core/tools/path-utils.d.ts +10 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -0
- package/dist/core/tools/path-utils.js +99 -0
- package/dist/core/tools/path-utils.js.map +1 -0
- package/dist/core/tools/read.d.ts +35 -0
- package/dist/core/tools/read.d.ts.map +1 -0
- package/dist/core/tools/read.js +292 -0
- package/dist/core/tools/read.js.map +1 -0
- package/dist/core/tools/render-utils.d.ts +26 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -0
- package/dist/core/tools/render-utils.js +69 -0
- package/dist/core/tools/render-utils.js.map +1 -0
- package/dist/core/tools/subagent.d.ts +219 -0
- package/dist/core/tools/subagent.d.ts.map +1 -0
- package/dist/core/tools/subagent.js +1445 -0
- package/dist/core/tools/subagent.js.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.js +34 -0
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
- package/dist/core/tools/truncate.d.ts +70 -0
- package/dist/core/tools/truncate.d.ts.map +1 -0
- package/dist/core/tools/truncate.js +215 -0
- package/dist/core/tools/truncate.js.map +1 -0
- package/dist/core/tools/web-search.d.ts +69 -0
- package/dist/core/tools/web-search.d.ts.map +1 -0
- package/dist/core/tools/web-search.js +634 -0
- package/dist/core/tools/web-search.js.map +1 -0
- package/dist/core/tools/write.d.ts +33 -0
- package/dist/core/tools/write.d.ts.map +1 -0
- package/dist/core/tools/write.js +210 -0
- package/dist/core/tools/write.js.map +1 -0
- package/dist/core/trust-manager.d.ts +36 -0
- package/dist/core/trust-manager.d.ts.map +1 -0
- package/dist/core/trust-manager.js +220 -0
- package/dist/core/trust-manager.js.map +1 -0
- package/dist/daemon/cli.d.ts +8 -0
- package/dist/daemon/cli.d.ts.map +1 -0
- package/dist/daemon/cli.js +468 -0
- package/dist/daemon/cli.js.map +1 -0
- package/dist/daemon/control-client.d.ts +60 -0
- package/dist/daemon/control-client.d.ts.map +1 -0
- package/dist/daemon/control-client.js +411 -0
- package/dist/daemon/control-client.js.map +1 -0
- package/dist/daemon/control-protocol.d.ts +507 -0
- package/dist/daemon/control-protocol.d.ts.map +1 -0
- package/dist/daemon/control-protocol.js +395 -0
- package/dist/daemon/control-protocol.js.map +1 -0
- package/dist/daemon/control-server.d.ts +77 -0
- package/dist/daemon/control-server.d.ts.map +1 -0
- package/dist/daemon/control-server.js +327 -0
- package/dist/daemon/control-server.js.map +1 -0
- package/dist/daemon/conversation-commands.d.ts +176 -0
- package/dist/daemon/conversation-commands.d.ts.map +1 -0
- package/dist/daemon/conversation-commands.js +1268 -0
- package/dist/daemon/conversation-commands.js.map +1 -0
- package/dist/daemon/daemon-lock.d.ts +27 -0
- package/dist/daemon/daemon-lock.d.ts.map +1 -0
- package/dist/daemon/daemon-lock.js +238 -0
- package/dist/daemon/daemon-lock.js.map +1 -0
- package/dist/daemon/handshake-responses.d.ts +47 -0
- package/dist/daemon/handshake-responses.d.ts.map +1 -0
- package/dist/daemon/handshake-responses.js +113 -0
- package/dist/daemon/handshake-responses.js.map +1 -0
- package/dist/daemon/integrated-runtimes.d.ts +137 -0
- package/dist/daemon/integrated-runtimes.d.ts.map +1 -0
- package/dist/daemon/integrated-runtimes.js +763 -0
- package/dist/daemon/integrated-runtimes.js.map +1 -0
- package/dist/daemon/iroh-native.d.ts +76 -0
- package/dist/daemon/iroh-native.d.ts.map +1 -0
- package/dist/daemon/iroh-native.js +18 -0
- package/dist/daemon/iroh-native.js.map +1 -0
- package/dist/daemon/iroh-resource-guard.d.ts +57 -0
- package/dist/daemon/iroh-resource-guard.d.ts.map +1 -0
- package/dist/daemon/iroh-resource-guard.js +134 -0
- package/dist/daemon/iroh-resource-guard.js.map +1 -0
- package/dist/daemon/iroh-service.d.ts +51 -0
- package/dist/daemon/iroh-service.d.ts.map +1 -0
- package/dist/daemon/iroh-service.js +2604 -0
- package/dist/daemon/iroh-service.js.map +1 -0
- package/dist/daemon/keep-awake.d.ts +62 -0
- package/dist/daemon/keep-awake.d.ts.map +1 -0
- package/dist/daemon/keep-awake.js +190 -0
- package/dist/daemon/keep-awake.js.map +1 -0
- package/dist/daemon/lease-broker.d.ts +139 -0
- package/dist/daemon/lease-broker.d.ts.map +1 -0
- package/dist/daemon/lease-broker.js +504 -0
- package/dist/daemon/lease-broker.js.map +1 -0
- package/dist/daemon/log.d.ts +16 -0
- package/dist/daemon/log.d.ts.map +1 -0
- package/dist/daemon/log.js +40 -0
- package/dist/daemon/log.js.map +1 -0
- package/dist/daemon/main.d.ts +70 -0
- package/dist/daemon/main.d.ts.map +1 -0
- package/dist/daemon/main.js +781 -0
- package/dist/daemon/main.js.map +1 -0
- package/dist/daemon/paths.d.ts +32 -0
- package/dist/daemon/paths.d.ts.map +1 -0
- package/dist/daemon/paths.js +208 -0
- package/dist/daemon/paths.js.map +1 -0
- package/dist/daemon/process-identity.d.ts +58 -0
- package/dist/daemon/process-identity.d.ts.map +1 -0
- package/dist/daemon/process-identity.js +185 -0
- package/dist/daemon/process-identity.js.map +1 -0
- package/dist/daemon/relay-stream.d.ts +89 -0
- package/dist/daemon/relay-stream.d.ts.map +1 -0
- package/dist/daemon/relay-stream.js +202 -0
- package/dist/daemon/relay-stream.js.map +1 -0
- package/dist/daemon/remote-cli.d.ts +7 -0
- package/dist/daemon/remote-cli.d.ts.map +1 -0
- package/dist/daemon/remote-cli.js +774 -0
- package/dist/daemon/remote-cli.js.map +1 -0
- package/dist/daemon/service-install.d.ts +43 -0
- package/dist/daemon/service-install.d.ts.map +1 -0
- package/dist/daemon/service-install.js +198 -0
- package/dist/daemon/service-install.js.map +1 -0
- package/dist/daemon/session-target.d.ts +62 -0
- package/dist/daemon/session-target.d.ts.map +1 -0
- package/dist/daemon/session-target.js +66 -0
- package/dist/daemon/session-target.js.map +1 -0
- package/dist/daemon/spawn.d.ts +53 -0
- package/dist/daemon/spawn.d.ts.map +1 -0
- package/dist/daemon/spawn.js +205 -0
- package/dist/daemon/spawn.js.map +1 -0
- package/dist/daemon/state.d.ts +145 -0
- package/dist/daemon/state.d.ts.map +1 -0
- package/dist/daemon/state.js +454 -0
- package/dist/daemon/state.js.map +1 -0
- package/dist/daemon/theme-push.d.ts +23 -0
- package/dist/daemon/theme-push.d.ts.map +1 -0
- package/dist/daemon/theme-push.js +30 -0
- package/dist/daemon/theme-push.js.map +1 -0
- package/dist/daemon/viewer-feed.d.ts +42 -0
- package/dist/daemon/viewer-feed.d.ts.map +1 -0
- package/dist/daemon/viewer-feed.js +138 -0
- package/dist/daemon/viewer-feed.js.map +1 -0
- package/dist/daemon/workspace-directory.d.ts +35 -0
- package/dist/daemon/workspace-directory.d.ts.map +1 -0
- package/dist/daemon/workspace-directory.js +105 -0
- package/dist/daemon/workspace-directory.js.map +1 -0
- package/dist/daemon/workspace-streams.d.ts +70 -0
- package/dist/daemon/workspace-streams.d.ts.map +1 -0
- package/dist/daemon/workspace-streams.js +289 -0
- package/dist/daemon/workspace-streams.js.map +1 -0
- package/dist/daemon/worktree-manager.d.ts +219 -0
- package/dist/daemon/worktree-manager.d.ts.map +1 -0
- package/dist/daemon/worktree-manager.js +1204 -0
- package/dist/daemon/worktree-manager.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +12 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +773 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp-cli.d.ts +6 -0
- package/dist/mcp-cli.d.ts.map +1 -0
- package/dist/mcp-cli.js +347 -0
- package/dist/mcp-cli.js.map +1 -0
- package/dist/migrations.d.ts +33 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +281 -0
- package/dist/migrations.js.map +1 -0
- package/dist/modes/index.d.ts +13 -0
- package/dist/modes/index.d.ts.map +1 -0
- package/dist/modes/index.js +12 -0
- package/dist/modes/index.js.map +1 -0
- package/dist/modes/interactive/components/armin.d.ts +34 -0
- package/dist/modes/interactive/components/armin.d.ts.map +1 -0
- package/dist/modes/interactive/components/armin.js +333 -0
- package/dist/modes/interactive/components/armin.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +22 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/assistant-message.js +129 -0
- package/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +39 -0
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/bash-execution.js +212 -0
- package/dist/modes/interactive/components/bash-execution.js.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts +17 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.js +57 -0
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.js +44 -0
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts +71 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector.js +510 -0
- package/dist/modes/interactive/components/config-selector.js.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.js +33 -0
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
- package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-editor.js +70 -0
- package/dist/modes/interactive/components/custom-editor.js.map +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +20 -0
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-message.js +76 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -0
- package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
- package/dist/modes/interactive/components/daxnuts.js +140 -0
- package/dist/modes/interactive/components/daxnuts.js.map +1 -0
- package/dist/modes/interactive/components/diff.d.ts +12 -0
- package/dist/modes/interactive/components/diff.d.ts.map +1 -0
- package/dist/modes/interactive/components/diff.js +133 -0
- package/dist/modes/interactive/components/diff.js.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.js +21 -0
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-editor.js +116 -0
- package/dist/modes/interactive/components/extension-editor.js.map +1 -0
- package/dist/modes/interactive/components/extension-input.d.ts +23 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-input.js +61 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -0
- package/dist/modes/interactive/components/extension-selector.d.ts +27 -0
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-selector.js +98 -0
- package/dist/modes/interactive/components/extension-selector.js.map +1 -0
- package/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
- package/dist/modes/interactive/components/first-time-setup.js +103 -0
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +27 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/dist/modes/interactive/components/footer.js +180 -0
- package/dist/modes/interactive/components/footer.js.map +1 -0
- package/dist/modes/interactive/components/hotkeys.d.ts +24 -0
- package/dist/modes/interactive/components/hotkeys.d.ts.map +1 -0
- package/dist/modes/interactive/components/hotkeys.js +97 -0
- package/dist/modes/interactive/components/hotkeys.js.map +1 -0
- package/dist/modes/interactive/components/index.d.ts +35 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -0
- package/dist/modes/interactive/components/index.js +36 -0
- package/dist/modes/interactive/components/index.js.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts +19 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.js +48 -0
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
- package/dist/modes/interactive/components/login-dialog.d.ts +52 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
- package/dist/modes/interactive/components/login-dialog.js +179 -0
- package/dist/modes/interactive/components/login-dialog.js.map +1 -0
- package/dist/modes/interactive/components/logo.d.ts +25 -0
- package/dist/modes/interactive/components/logo.d.ts.map +1 -0
- package/dist/modes/interactive/components/logo.js +89 -0
- package/dist/modes/interactive/components/logo.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +47 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/model-selector.js +278 -0
- package/dist/modes/interactive/components/model-selector.js.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts +31 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.js +165 -0
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
- package/dist/modes/interactive/components/remote-control-center.d.ts +110 -0
- package/dist/modes/interactive/components/remote-control-center.d.ts.map +1 -0
- package/dist/modes/interactive/components/remote-control-center.js +1217 -0
- package/dist/modes/interactive/components/remote-control-center.js.map +1 -0
- package/dist/modes/interactive/components/review-tools-selector.d.ts +24 -0
- package/dist/modes/interactive/components/review-tools-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/review-tools-selector.js +93 -0
- package/dist/modes/interactive/components/review-tools-selector.js.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +290 -0
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.js +155 -0
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +95 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector.js +856 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +77 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector.js +484 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.js +39 -0
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
- package/dist/modes/interactive/components/streaming-render-coalescer.d.ts +29 -0
- package/dist/modes/interactive/components/streaming-render-coalescer.d.ts.map +1 -0
- package/dist/modes/interactive/components/streaming-render-coalescer.js +98 -0
- package/dist/modes/interactive/components/streaming-render-coalescer.js.map +1 -0
- package/dist/modes/interactive/components/subagent-inspector.d.ts +32 -0
- package/dist/modes/interactive/components/subagent-inspector.d.ts.map +1 -0
- package/dist/modes/interactive/components/subagent-inspector.js +439 -0
- package/dist/modes/interactive/components/subagent-inspector.js.map +1 -0
- package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/theme-selector.js +50 -0
- package/dist/modes/interactive/components/theme-selector.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.js +52 -0
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +83 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution.js +421 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +89 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector.js +1208 -0
- package/dist/modes/interactive/components/tree-selector.js.map +1 -0
- package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/trust-selector.js +91 -0
- package/dist/modes/interactive/components/trust-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.js +114 -0
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message.d.ts +9 -0
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message.js +42 -0
- package/dist/modes/interactive/components/user-message.js.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.js +33 -0
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
- package/dist/modes/interactive/components/volt-announcement.d.ts +5 -0
- package/dist/modes/interactive/components/volt-announcement.d.ts.map +1 -0
- package/dist/modes/interactive/components/volt-announcement.js +15 -0
- package/dist/modes/interactive/components/volt-announcement.js.map +1 -0
- package/dist/modes/interactive/daemon-attach.d.ts +154 -0
- package/dist/modes/interactive/daemon-attach.d.ts.map +1 -0
- package/dist/modes/interactive/daemon-attach.js +552 -0
- package/dist/modes/interactive/daemon-attach.js.map +1 -0
- package/dist/modes/interactive/drain-viewer.d.ts +31 -0
- package/dist/modes/interactive/drain-viewer.d.ts.map +1 -0
- package/dist/modes/interactive/drain-viewer.js +166 -0
- package/dist/modes/interactive/drain-viewer.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +502 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode.js +7007 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -0
- package/dist/modes/interactive/prompt-image-attachments.d.ts +34 -0
- package/dist/modes/interactive/prompt-image-attachments.d.ts.map +1 -0
- package/dist/modes/interactive/prompt-image-attachments.js +120 -0
- package/dist/modes/interactive/prompt-image-attachments.js.map +1 -0
- package/dist/modes/interactive/relay-stream-adapter.d.ts +19 -0
- package/dist/modes/interactive/relay-stream-adapter.d.ts.map +1 -0
- package/dist/modes/interactive/relay-stream-adapter.js +107 -0
- package/dist/modes/interactive/relay-stream-adapter.js.map +1 -0
- package/dist/modes/print-mode.d.ts +28 -0
- package/dist/modes/print-mode.d.ts.map +1 -0
- package/dist/modes/print-mode.js +132 -0
- package/dist/modes/print-mode.js.map +1 -0
- package/dist/modes/rpc/in-process-rpc-client.d.ts +31 -0
- package/dist/modes/rpc/in-process-rpc-client.d.ts.map +1 -0
- package/dist/modes/rpc/in-process-rpc-client.js +63 -0
- package/dist/modes/rpc/in-process-rpc-client.js.map +1 -0
- package/dist/modes/rpc/iroh-remote-agent-runtime.d.ts +61 -0
- package/dist/modes/rpc/iroh-remote-agent-runtime.d.ts.map +1 -0
- package/dist/modes/rpc/iroh-remote-agent-runtime.js +155 -0
- package/dist/modes/rpc/iroh-remote-agent-runtime.js.map +1 -0
- package/dist/modes/rpc/iroh-remote-rpc-mode.d.ts +69 -0
- package/dist/modes/rpc/iroh-remote-rpc-mode.d.ts.map +1 -0
- package/dist/modes/rpc/iroh-remote-rpc-mode.js +1223 -0
- package/dist/modes/rpc/iroh-remote-rpc-mode.js.map +1 -0
- package/dist/modes/rpc/jsonl.d.ts +2 -0
- package/dist/modes/rpc/jsonl.d.ts.map +1 -0
- package/dist/modes/rpc/jsonl.js +2 -0
- package/dist/modes/rpc/jsonl.js.map +1 -0
- package/dist/modes/rpc/rpc-client-base.d.ts +209 -0
- package/dist/modes/rpc/rpc-client-base.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client-base.js +530 -0
- package/dist/modes/rpc/rpc-client-base.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +50 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client.js +190 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -0
- package/dist/modes/rpc/rpc-command-dispatcher.d.ts +43 -0
- package/dist/modes/rpc/rpc-command-dispatcher.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-command-dispatcher.js +613 -0
- package/dist/modes/rpc/rpc-command-dispatcher.js.map +1 -0
- package/dist/modes/rpc/rpc-command-validation.d.ts +2 -0
- package/dist/modes/rpc/rpc-command-validation.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-command-validation.js +207 -0
- package/dist/modes/rpc/rpc-command-validation.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts +48 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-mode.js +1089 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-transport-client.d.ts +26 -0
- package/dist/modes/rpc/rpc-transport-client.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-transport-client.js +76 -0
- package/dist/modes/rpc/rpc-transport-client.js.map +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +2 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-types.js +2 -0
- package/dist/modes/rpc/rpc-types.js.map +1 -0
- package/dist/package-manager-cli.d.ts +28 -0
- package/dist/package-manager-cli.d.ts.map +1 -0
- package/dist/package-manager-cli.js +667 -0
- package/dist/package-manager-cli.js.map +1 -0
- package/dist/remote/integrated-runtime-retention.d.ts +17 -0
- package/dist/remote/integrated-runtime-retention.d.ts.map +1 -0
- package/dist/remote/integrated-runtime-retention.js +62 -0
- package/dist/remote/integrated-runtime-retention.js.map +1 -0
- package/dist/remote/iroh-native-adapter.cjs +19 -0
- package/dist/sea/cli.d.ts +4 -0
- package/dist/sea/cli.d.ts.map +1 -0
- package/dist/sea/cli.js +4 -0
- package/dist/sea/cli.js.map +1 -0
- package/dist/sea/register-bedrock.d.ts +2 -0
- package/dist/sea/register-bedrock.d.ts.map +1 -0
- package/dist/sea/register-bedrock.js +4 -0
- package/dist/sea/register-bedrock.js.map +1 -0
- package/dist/store/catalog.d.ts +57 -0
- package/dist/store/catalog.d.ts.map +1 -0
- package/dist/store/catalog.js +331 -0
- package/dist/store/catalog.js.map +1 -0
- package/dist/store/inspector.d.ts +36 -0
- package/dist/store/inspector.d.ts.map +1 -0
- package/dist/store/inspector.js +578 -0
- package/dist/store/inspector.js.map +1 -0
- package/dist/store/install-plan.d.ts +26 -0
- package/dist/store/install-plan.d.ts.map +1 -0
- package/dist/store/install-plan.js +80 -0
- package/dist/store/install-plan.js.map +1 -0
- package/dist/store/render.d.ts +11 -0
- package/dist/store/render.d.ts.map +1 -0
- package/dist/store/render.js +153 -0
- package/dist/store/render.js.map +1 -0
- package/dist/store/resolver.d.ts +22 -0
- package/dist/store/resolver.d.ts.map +1 -0
- package/dist/store/resolver.js +207 -0
- package/dist/store/resolver.js.map +1 -0
- package/dist/store/store-cli.d.ts +7 -0
- package/dist/store/store-cli.d.ts.map +1 -0
- package/dist/store/store-cli.js +636 -0
- package/dist/store/store-cli.js.map +1 -0
- package/dist/store/targets.d.ts +21 -0
- package/dist/store/targets.d.ts.map +1 -0
- package/dist/store/targets.js +55 -0
- package/dist/store/targets.js.map +1 -0
- package/dist/utils/ansi.d.ts +2 -0
- package/dist/utils/ansi.d.ts.map +1 -0
- package/dist/utils/ansi.js +52 -0
- package/dist/utils/ansi.js.map +1 -0
- package/dist/utils/changelog.d.ts +22 -0
- package/dist/utils/changelog.d.ts.map +1 -0
- package/dist/utils/changelog.js +165 -0
- package/dist/utils/changelog.js.map +1 -0
- package/dist/utils/child-process.d.ts +18 -0
- package/dist/utils/child-process.d.ts.map +1 -0
- package/dist/utils/child-process.js +106 -0
- package/dist/utils/child-process.js.map +1 -0
- package/dist/utils/clipboard-image.d.ts +11 -0
- package/dist/utils/clipboard-image.d.ts.map +1 -0
- package/dist/utils/clipboard-image.js +245 -0
- package/dist/utils/clipboard-image.js.map +1 -0
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +94 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/deprecation.d.ts +4 -0
- package/dist/utils/deprecation.d.ts.map +1 -0
- package/dist/utils/deprecation.js +13 -0
- package/dist/utils/deprecation.js.map +1 -0
- package/dist/utils/durable-atomic-write.d.ts +46 -0
- package/dist/utils/durable-atomic-write.d.ts.map +1 -0
- package/dist/utils/durable-atomic-write.js +104 -0
- package/dist/utils/durable-atomic-write.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +8 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +26 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/fs-watch.d.ts +5 -0
- package/dist/utils/fs-watch.d.ts.map +1 -0
- package/dist/utils/fs-watch.js +25 -0
- package/dist/utils/fs-watch.js.map +1 -0
- package/dist/utils/git.d.ts +26 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +195 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/html.d.ts +7 -0
- package/dist/utils/html.d.ts.map +1 -0
- package/dist/utils/html.js +40 -0
- package/dist/utils/html.js.map +1 -0
- package/dist/utils/ignore-files.d.ts +5 -0
- package/dist/utils/ignore-files.d.ts.map +1 -0
- package/dist/utils/ignore-files.js +58 -0
- package/dist/utils/ignore-files.js.map +1 -0
- package/dist/utils/image-codec.d.ts +22 -0
- package/dist/utils/image-codec.d.ts.map +1 -0
- package/dist/utils/image-codec.js +35 -0
- package/dist/utils/image-codec.js.map +1 -0
- package/dist/utils/image-convert.d.ts +9 -0
- package/dist/utils/image-convert.d.ts.map +1 -0
- package/dist/utils/image-convert.js +26 -0
- package/dist/utils/image-convert.js.map +1 -0
- package/dist/utils/image-resize-core.d.ts +31 -0
- package/dist/utils/image-resize-core.d.ts.map +1 -0
- package/dist/utils/image-resize-core.js +181 -0
- package/dist/utils/image-resize-core.js.map +1 -0
- package/dist/utils/image-resize-worker.d.ts +2 -0
- package/dist/utils/image-resize-worker.d.ts.map +1 -0
- package/dist/utils/image-resize-worker.js +31 -0
- package/dist/utils/image-resize-worker.js.map +1 -0
- package/dist/utils/image-resize.d.ts +15 -0
- package/dist/utils/image-resize.d.ts.map +1 -0
- package/dist/utils/image-resize.js +92 -0
- package/dist/utils/image-resize.js.map +1 -0
- package/dist/utils/json.d.ts +3 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +7 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/mime.d.ts +3 -0
- package/dist/utils/mime.d.ts.map +1 -0
- package/dist/utils/mime.js +69 -0
- package/dist/utils/mime.js.map +1 -0
- package/dist/utils/npm-spec.d.ts +9 -0
- package/dist/utils/npm-spec.d.ts.map +1 -0
- package/dist/utils/npm-spec.js +15 -0
- package/dist/utils/npm-spec.js.map +1 -0
- package/dist/utils/open-browser.d.ts +9 -0
- package/dist/utils/open-browser.d.ts.map +1 -0
- package/dist/utils/open-browser.js +22 -0
- package/dist/utils/open-browser.js.map +1 -0
- package/dist/utils/paths.d.ts +31 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +92 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/private-files.d.ts +21 -0
- package/dist/utils/private-files.d.ts.map +1 -0
- package/dist/utils/private-files.js +103 -0
- package/dist/utils/private-files.js.map +1 -0
- package/dist/utils/process-env.d.ts +2 -0
- package/dist/utils/process-env.d.ts.map +1 -0
- package/dist/utils/process-env.js +31 -0
- package/dist/utils/process-env.js.map +1 -0
- package/dist/utils/shell.d.ts +30 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +195 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/sleep.d.ts +5 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +17 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/utils/syntax-highlight.d.ts +18 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -0
- package/dist/utils/syntax-highlight.js +139 -0
- package/dist/utils/syntax-highlight.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +3 -0
- package/dist/utils/tools-manager.d.ts.map +1 -0
- package/dist/utils/tools-manager.js +328 -0
- package/dist/utils/tools-manager.js.map +1 -0
- package/dist/utils/version-check.d.ts +15 -0
- package/dist/utils/version-check.d.ts.map +1 -0
- package/dist/utils/version-check.js +61 -0
- package/dist/utils/version-check.js.map +1 -0
- package/dist/utils/volt-user-agent.d.ts +2 -0
- package/dist/utils/volt-user-agent.d.ts.map +1 -0
- package/dist/utils/volt-user-agent.js +5 -0
- package/dist/utils/volt-user-agent.js.map +1 -0
- package/dist/utils/windows-self-update.d.ts +3 -0
- package/dist/utils/windows-self-update.d.ts.map +1 -0
- package/dist/utils/windows-self-update.js +77 -0
- package/dist/utils/windows-self-update.js.map +1 -0
- package/docs/compaction.md +394 -0
- package/docs/containerization.md +111 -0
- package/docs/custom-provider.md +737 -0
- package/docs/daemon.md +190 -0
- package/docs/development.md +70 -0
- package/docs/docs.json +176 -0
- package/docs/extensions.md +2692 -0
- package/docs/images/exy.png +0 -0
- package/docs/images/interactive-mode.png +0 -0
- package/docs/images/tree-view.png +0 -0
- package/docs/index.md +82 -0
- package/docs/iroh-remote-access-design.md +340 -0
- package/docs/iroh-remote-protocol.md +431 -0
- package/docs/json.md +87 -0
- package/docs/keybindings.md +200 -0
- package/docs/live-shared-session-daemon-design.md +1090 -0
- package/docs/lsp.md +143 -0
- package/docs/mcp.md +1044 -0
- package/docs/models.md +495 -0
- package/docs/packages.md +230 -0
- package/docs/prompt-templates.md +108 -0
- package/docs/providers.md +274 -0
- package/docs/quickstart.md +165 -0
- package/docs/rpc.md +2050 -0
- package/docs/sdk.md +1267 -0
- package/docs/security.md +139 -0
- package/docs/session-format.md +412 -0
- package/docs/sessions.md +145 -0
- package/docs/settings.md +371 -0
- package/docs/shell-aliases.md +13 -0
- package/docs/skills.md +243 -0
- package/docs/subagents-design.md +419 -0
- package/docs/terminal-setup.md +148 -0
- package/docs/termux.md +127 -0
- package/docs/themes.md +295 -0
- package/docs/tla/ClientAuth.cfg +16 -0
- package/docs/tla/ClientAuth.tla +205 -0
- package/docs/tla/ClientConn.cfg +16 -0
- package/docs/tla/ClientConn.tla +265 -0
- package/docs/tla/LeaseBroker.cfg +43 -0
- package/docs/tla/LeaseBroker.tla +563 -0
- package/docs/tla/PLAN.md +240 -0
- package/docs/tla/PushOrdering.cfg +17 -0
- package/docs/tla/PushOrdering.tla +183 -0
- package/docs/tla/README.md +205 -0
- package/docs/tla/RelayViewer.cfg +26 -0
- package/docs/tla/RelayViewer.tla +299 -0
- package/docs/tla/SessionTarget.cfg +18 -0
- package/docs/tla/SessionTarget.tla +192 -0
- package/docs/tla/check.sh +34 -0
- package/docs/tmux.md +63 -0
- package/docs/tui.md +949 -0
- package/docs/usage.md +482 -0
- package/docs/windows.md +17 -0
- package/docs/worktrees-design.md +605 -0
- package/examples/README.md +28 -0
- package/examples/extensions/README.md +211 -0
- package/examples/extensions/auto-commit-on-exit.ts +49 -0
- package/examples/extensions/bash-spawn-hook.ts +30 -0
- package/examples/extensions/bookmark.ts +50 -0
- package/examples/extensions/border-status-editor.ts +150 -0
- package/examples/extensions/built-in-tool-renderer.ts +249 -0
- package/examples/extensions/claude-rules.ts +86 -0
- package/examples/extensions/commands.ts +72 -0
- package/examples/extensions/confirm-destructive.ts +59 -0
- package/examples/extensions/custom-compaction.ts +127 -0
- package/examples/extensions/custom-footer.ts +64 -0
- package/examples/extensions/custom-header.ts +72 -0
- package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/examples/extensions/custom-provider-anthropic/package.json +19 -0
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +400 -0
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
- package/examples/extensions/dirty-repo-guard.ts +56 -0
- package/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/examples/extensions/dynamic-resources/dynamic.json +79 -0
- package/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/examples/extensions/dynamic-resources/index.ts +15 -0
- package/examples/extensions/dynamic-tools.ts +74 -0
- package/examples/extensions/event-bus.ts +43 -0
- package/examples/extensions/file-trigger.ts +41 -0
- package/examples/extensions/git-checkpoint.ts +53 -0
- package/examples/extensions/git-merge-and-resolve.ts +115 -0
- package/examples/extensions/github-issue-autocomplete.ts +185 -0
- package/examples/extensions/gondolin/index.ts +531 -0
- package/examples/extensions/gondolin/package-lock.json +185 -0
- package/examples/extensions/gondolin/package.json +19 -0
- package/examples/extensions/handoff.ts +191 -0
- package/examples/extensions/hello.ts +26 -0
- package/examples/extensions/hidden-thinking-label.ts +53 -0
- package/examples/extensions/inline-bash.ts +94 -0
- package/examples/extensions/input-transform-streaming.ts +39 -0
- package/examples/extensions/input-transform.ts +43 -0
- package/examples/extensions/interactive-shell.ts +196 -0
- package/examples/extensions/mac-system-theme.ts +47 -0
- package/examples/extensions/message-renderer.ts +59 -0
- package/examples/extensions/minimal-mode.ts +426 -0
- package/examples/extensions/modal-editor.ts +85 -0
- package/examples/extensions/model-status.ts +31 -0
- package/examples/extensions/notify.ts +55 -0
- package/examples/extensions/overlay-qa-tests.ts +1450 -0
- package/examples/extensions/overlay-test.ts +153 -0
- package/examples/extensions/permission-gate.ts +34 -0
- package/examples/extensions/pirate.ts +47 -0
- package/examples/extensions/plan-mode/README.md +65 -0
- package/examples/extensions/plan-mode/index.ts +340 -0
- package/examples/extensions/plan-mode/utils.ts +168 -0
- package/examples/extensions/preset.ts +436 -0
- package/examples/extensions/project-trust.ts +64 -0
- package/examples/extensions/prompt-customizer.ts +97 -0
- package/examples/extensions/protected-paths.ts +30 -0
- package/examples/extensions/provider-payload.ts +18 -0
- package/examples/extensions/qna.ts +122 -0
- package/examples/extensions/question.ts +277 -0
- package/examples/extensions/questionnaire.ts +440 -0
- package/examples/extensions/rainbow-editor.ts +88 -0
- package/examples/extensions/reload-runtime.ts +37 -0
- package/examples/extensions/rpc-demo.ts +118 -0
- package/examples/extensions/sandbox/index.ts +321 -0
- package/examples/extensions/sandbox/package-lock.json +92 -0
- package/examples/extensions/sandbox/package.json +19 -0
- package/examples/extensions/send-user-message.ts +97 -0
- package/examples/extensions/session-name.ts +27 -0
- package/examples/extensions/shutdown-command.ts +63 -0
- package/examples/extensions/snake.ts +343 -0
- package/examples/extensions/space-invaders.ts +560 -0
- package/examples/extensions/ssh.ts +220 -0
- package/examples/extensions/status-line.ts +32 -0
- package/examples/extensions/structured-output.ts +65 -0
- package/examples/extensions/subagent/README.md +175 -0
- package/examples/extensions/subagent/agents/planner.md +37 -0
- package/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/examples/extensions/subagent/agents/scout.md +50 -0
- package/examples/extensions/subagent/agents/worker.md +24 -0
- package/examples/extensions/subagent/agents.ts +126 -0
- package/examples/extensions/subagent/index.ts +1009 -0
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/examples/extensions/subagent/prompts/implement.md +10 -0
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/examples/extensions/summarize.ts +206 -0
- package/examples/extensions/system-prompt-header.ts +17 -0
- package/examples/extensions/tic-tac-toe.ts +1008 -0
- package/examples/extensions/timed-confirm.ts +70 -0
- package/examples/extensions/titlebar-spinner.ts +58 -0
- package/examples/extensions/todo.ts +297 -0
- package/examples/extensions/tool-override.ts +144 -0
- package/examples/extensions/tools.ts +146 -0
- package/examples/extensions/trigger-compact.ts +50 -0
- package/examples/extensions/truncated-tool.ts +195 -0
- package/examples/extensions/widget-placement.ts +9 -0
- package/examples/extensions/with-deps/index.ts +32 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +22 -0
- package/examples/extensions/working-indicator.ts +123 -0
- package/examples/extensions/working-message-test.ts +25 -0
- package/examples/remote/firebase-push-relay/README.md +79 -0
- package/examples/remote/firebase-push-relay/firebase.json +12 -0
- package/examples/remote/firebase-push-relay/firestore.indexes.json +11 -0
- package/examples/remote/firebase-push-relay/firestore.rules +9 -0
- package/examples/remote/firebase-push-relay/functions/core.js +511 -0
- package/examples/remote/firebase-push-relay/functions/core.test.js +273 -0
- package/examples/remote/firebase-push-relay/functions/index.js +413 -0
- package/examples/remote/firebase-push-relay/functions/package-lock.json +2974 -0
- package/examples/remote/firebase-push-relay/functions/package.json +18 -0
- package/examples/remote/iroh-sidecar/README.md +211 -0
- package/examples/remote/iroh-sidecar/client.mjs +554 -0
- package/examples/remote/iroh-sidecar/common.mjs +195 -0
- package/examples/remote/iroh-sidecar/host.mjs +4 -0
- package/examples/remote/iroh-sidecar/package-lock.json +213 -0
- package/examples/remote/iroh-sidecar/package.json +13 -0
- package/examples/remote/iroh-sidecar/source-aware-run.mjs +41 -0
- package/examples/rpc-extension-ui.ts +632 -0
- package/examples/sdk/01-minimal.ts +26 -0
- package/examples/sdk/02-custom-model.ts +53 -0
- package/examples/sdk/03-custom-prompt.ts +70 -0
- package/examples/sdk/04-skills.ts +55 -0
- package/examples/sdk/05-tools.ts +48 -0
- package/examples/sdk/06-extensions.ts +94 -0
- package/examples/sdk/07-context-files.ts +42 -0
- package/examples/sdk/08-prompt-templates.ts +51 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +52 -0
- package/examples/sdk/10-settings.ts +53 -0
- package/examples/sdk/11-sessions.ts +52 -0
- package/examples/sdk/12-full-control.ts +78 -0
- package/examples/sdk/13-session-runtime.ts +67 -0
- package/examples/sdk/README.md +147 -0
- package/npm-shrinkwrap.json +3442 -0
- package/package.json +125 -19
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbound-filter.js","sourceRoot":"","sources":["../../../../src/core/remote/iroh/outbound-filter.ts"],"names":[],"mappings":"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","sourcesContent":["import { isAbsolute, relative, resolve, sep } from \"node:path\";\nimport { TextDecoder } from \"node:util\";\nimport type { RpcCloseHandler, RpcLineHandler, RpcTransport } from \"../../rpc/index.ts\";\n\nexport const IROH_REMOTE_REDACTED_BASH_OUTPUT_PATH = \"[redacted bash output path]\";\nexport const IROH_REMOTE_REDACTED_EXPORT_PATH = \"[redacted export path]\";\nexport const IROH_REMOTE_REDACTED_SESSION_FILE = \"[redacted session file]\";\n\nconst OMIT_REMOTE_PATH_FIELDS = new Set([\"fullOutputPath\", \"sessionFile\"]);\nconst STRICT_REMOTE_PATH_FIELDS = new Set([\n\t\"cwd\",\n\t\"exportPath\",\n\t\"extensionPath\",\n\t\"filePath\",\n\t\"outputPath\",\n\t\"parentSession\",\n\t\"path\",\n\t\"sessionPath\",\n\t\"traceFile\",\n]);\nexport interface IrohRemoteOutboundFilterOptions {\n\tdecorate?: IrohRemoteOutboundValueDecorator;\n\tremoteWorkspacePath?: string;\n\ttransport: RpcTransport;\n\tworkspacePath: string;\n\t/** Extra roots (e.g. a worktree's parent checkout) redacted to remoteWorkspacePath. */\n\tadditionalRedactedPaths?: string[];\n}\n\nexport interface IrohRemoteOutboundSanitizerOptions {\n\tdecorate?: IrohRemoteOutboundValueDecorator;\n\tremoteWorkspacePath?: string;\n\tworkspacePath: string;\n\t/** Extra roots (e.g. a worktree's parent checkout) redacted to remoteWorkspacePath. */\n\tadditionalRedactedPaths?: string[];\n}\n\nexport interface IrohRemoteOutboundJsonlReadablePipeOptions extends IrohRemoteOutboundSanitizerOptions {\n\tonLine?: (line: string) => void;\n\twriteLine: (line: string) => Promise<void> | void;\n}\n\ninterface IrohRemoteOutboundSanitizerContext {\n\tremoteWorkspacePath: string;\n\tworkspacePath: string;\n\tworkspacePathVariants: string[];\n}\n\nexport type IrohRemoteOutboundValueDecorator = (value: object) => object;\n\ntype PathContinuationMode = \"text\" | \"delimited\";\n\nexport function createIrohRemoteOutboundFilteredRpcTransport(options: IrohRemoteOutboundFilterOptions): RpcTransport {\n\tconst sanitizerOptions: IrohRemoteOutboundSanitizerOptions = {\n\t\tdecorate: options.decorate,\n\t\tremoteWorkspacePath: options.remoteWorkspacePath,\n\t\tworkspacePath: options.workspacePath,\n\t\tadditionalRedactedPaths: options.additionalRedactedPaths,\n\t};\n\treturn {\n\t\twrite(value) {\n\t\t\treturn options.transport.write(sanitizeIrohRemoteOutbound(value, sanitizerOptions));\n\t\t},\n\t\tonLine(handler: RpcLineHandler): () => void {\n\t\t\treturn options.transport.onLine(handler);\n\t\t},\n\t\tonClose(handler: RpcCloseHandler): () => void {\n\t\t\treturn options.transport.onClose?.(handler) ?? (() => {});\n\t\t},\n\t\tasync waitForBackpressure() {\n\t\t\tawait options.transport.waitForBackpressure?.();\n\t\t},\n\t\tasync flush() {\n\t\t\tawait options.transport.flush?.();\n\t\t},\n\t\tclose() {\n\t\t\treturn options.transport.close();\n\t\t},\n\t};\n}\n\nexport function sanitizeIrohRemoteOutbound(value: object, options: IrohRemoteOutboundSanitizerOptions): object {\n\tconst context = createSanitizerContext(options);\n\tconst decorated = options.decorate ? options.decorate(value) : value;\n\tconst sanitized = sanitizeValue(decorated, context, undefined);\n\treturn isRecord(sanitized) || Array.isArray(sanitized) ? sanitized : {};\n}\n\nexport function sanitizeIrohRemoteOutboundJsonLine(line: string, options: IrohRemoteOutboundSanitizerOptions): string {\n\tconst context = createSanitizerContext(options);\n\tconst hasTrailingNewline = line.endsWith(\"\\n\");\n\tconst rawLine = hasTrailingNewline ? line.slice(0, -1) : line;\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(rawLine);\n\t} catch {\n\t\treturn `${sanitizeRemoteText(rawLine, context)}${hasTrailingNewline ? \"\\n\" : \"\"}`;\n\t}\n\tif (!isRecord(parsed) && !Array.isArray(parsed)) {\n\t\treturn `${sanitizeRemoteText(rawLine, context)}${hasTrailingNewline ? \"\\n\" : \"\"}`;\n\t}\n\tconst decorated = options.decorate ? options.decorate(parsed) : parsed;\n\tconst sanitized = sanitizeValue(decorated, context, undefined);\n\treturn `${JSON.stringify(sanitized)}${hasTrailingNewline ? \"\\n\" : \"\"}`;\n}\n\nexport async function pipeIrohRemoteOutboundJsonlReadable(\n\treadable: AsyncIterable<string | Uint8Array>,\n\toptions: IrohRemoteOutboundJsonlReadablePipeOptions,\n): Promise<void> {\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\n\tfor await (const chunk of readable) {\n\t\tbuffer += typeof chunk === \"string\" ? chunk : decoder.decode(chunk, { stream: true });\n\t\tawait flushBufferedLines(buffer, options, (rest) => {\n\t\t\tbuffer = rest;\n\t\t});\n\t}\n\n\tbuffer += decoder.decode();\n\tif (buffer.length > 0) {\n\t\tawait writeSanitizedJsonLine(buffer, options);\n\t}\n}\n\nfunction createSanitizerContext(options: IrohRemoteOutboundSanitizerOptions): IrohRemoteOutboundSanitizerContext {\n\tconst resolvedWorkspacePath = resolve(options.workspacePath);\n\t// Compare and redact in a Unicode-normalization-insensitive way: macOS surfaces\n\t// on-disk paths in NFD while a configured root may be NFC (or vice versa), and a\n\t// byte-exact compare would let a differently-composed form of an in-workspace path\n\t// bypass redaction and leak the real host path. Canonicalize the compared root to\n\t// NFC, and match embedded occurrences against both NFC and NFD forms.\n\tconst workspacePath = resolvedWorkspacePath.normalize(\"NFC\");\n\t// Additional roots (worktree parent checkout, worktrees root) fold into the\n\t// same variant list: every occurrence maps to remoteWorkspacePath.\n\tconst redactedRoots = [\n\t\tresolvedWorkspacePath,\n\t\t...(options.additionalRedactedPaths ?? []).map((value) => resolve(value)),\n\t];\n\tconst workspacePathVariants = [\n\t\t...new Set(\n\t\t\tredactedRoots\n\t\t\t\t.flatMap((root) => [root, toPosixPath(root), toWindowsPath(root)])\n\t\t\t\t.flatMap((value) => [value.normalize(\"NFC\"), value.normalize(\"NFD\")]),\n\t\t),\n\t]\n\t\t.filter((value) => value.length > 0)\n\t\t.sort((left, right) => right.length - left.length);\n\treturn {\n\t\tremoteWorkspacePath: options.remoteWorkspacePath ?? \"/workspace\",\n\t\tworkspacePath,\n\t\tworkspacePathVariants,\n\t};\n}\n\nfunction sanitizeValue(\n\tvalue: unknown,\n\tcontext: IrohRemoteOutboundSanitizerContext,\n\tfieldName: string | undefined,\n): unknown {\n\tif (typeof value === \"string\") {\n\t\treturn shouldTreatAsPathField(fieldName) ? sanitizePathField(value, context) : sanitizeRemoteText(value, context);\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.map((entry) => sanitizeValue(entry, context, fieldName));\n\t}\n\tif (!isRecord(value)) {\n\t\treturn value;\n\t}\n\n\tconst sanitized: Record<string, unknown> = Object.create(null);\n\tfor (const [key, entry] of Object.entries(value)) {\n\t\tif (OMIT_REMOTE_PATH_FIELDS.has(key)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst sanitizedEntry = shouldPreserveOpaqueStringEntry(value, key, entry)\n\t\t\t? entry\n\t\t\t: sanitizeValue(entry, context, key);\n\t\tif (sanitizedEntry !== undefined) {\n\t\t\tsetSanitizedObjectEntry(sanitized, sanitizeObjectKey(key, context), sanitizedEntry);\n\t\t}\n\t}\n\treturn sanitized;\n}\n\nfunction shouldPreserveOpaqueStringEntry(\n\trecord: Record<string, unknown>,\n\tkey: string,\n\tvalue: unknown,\n): value is string {\n\tif (typeof value !== \"string\") {\n\t\treturn false;\n\t}\n\treturn (\n\t\tkey === \"id\" ||\n\t\t(key === \"data\" && isImageContentRecord(record)) ||\n\t\t(key === \"textSignature\" && isTypedContentRecord(record, \"text\")) ||\n\t\t(key === \"thinkingSignature\" && isTypedContentRecord(record, \"thinking\")) ||\n\t\t(key === \"thoughtSignature\" && isTypedContentRecord(record, \"toolCall\"))\n\t);\n}\n\nfunction isImageContentRecord(record: Record<string, unknown>): boolean {\n\treturn record.type === \"image\" && typeof record.mimeType === \"string\" && record.mimeType.startsWith(\"image/\");\n}\n\nfunction isTypedContentRecord(record: Record<string, unknown>, type: string): boolean {\n\treturn record.type === type;\n}\n\nasync function flushBufferedLines(\n\tbuffer: string,\n\toptions: IrohRemoteOutboundJsonlReadablePipeOptions,\n\tsetRest: (rest: string) => void,\n): Promise<void> {\n\tlet rest = buffer;\n\twhile (true) {\n\t\tconst newlineIndex = rest.indexOf(\"\\n\");\n\t\tif (newlineIndex === -1) {\n\t\t\tsetRest(rest);\n\t\t\treturn;\n\t\t}\n\t\tconst line = rest.slice(0, newlineIndex + 1);\n\t\trest = rest.slice(newlineIndex + 1);\n\t\tawait writeSanitizedJsonLine(line, options);\n\t}\n}\n\nasync function writeSanitizedJsonLine(\n\tline: string,\n\toptions: IrohRemoteOutboundJsonlReadablePipeOptions,\n): Promise<void> {\n\tconst sanitizedLine = sanitizeIrohRemoteOutboundJsonLine(line, options);\n\tawait options.writeLine(sanitizedLine);\n\toptions.onLine?.(sanitizedLine);\n}\n\nfunction shouldTreatAsPathField(fieldName: string | undefined): boolean {\n\tif (!fieldName) {\n\t\treturn false;\n\t}\n\tif (STRICT_REMOTE_PATH_FIELDS.has(fieldName)) {\n\t\treturn true;\n\t}\n\treturn fieldName.endsWith(\"Dir\") || fieldName.endsWith(\"File\") || fieldName.endsWith(\"Path\");\n}\n\nfunction sanitizePathField(value: string, context: IrohRemoteOutboundSanitizerContext): string {\n\tif (hasPathListSeparator(value)) {\n\t\treturn redactPathOccurrences(value, context, \"text\");\n\t}\n\tconst normalized = normalizeWorkspacePath(value, context);\n\tif (normalized) {\n\t\treturn normalized;\n\t}\n\tif (isRemoteWorkspacePath(value, context)) {\n\t\treturn value;\n\t}\n\tif (isBashOutputPath(value)) {\n\t\treturn IROH_REMOTE_REDACTED_BASH_OUTPUT_PATH;\n\t}\n\tif (isSessionFilePath(value)) {\n\t\treturn IROH_REMOTE_REDACTED_SESSION_FILE;\n\t}\n\tif (isExportPath(value)) {\n\t\treturn IROH_REMOTE_REDACTED_EXPORT_PATH;\n\t}\n\tif (isTildePath(value)) {\n\t\treturn sanitizePathToken(value, context);\n\t}\n\tif (isAbsolute(value) || isWindowsAbsolutePath(value) || isWindowsUncPath(value) || isFileUrl(value)) {\n\t\treturn value;\n\t}\n\treturn sanitizeRemoteText(value, context);\n}\n\nfunction sanitizeRemoteText(value: string, context: IrohRemoteOutboundSanitizerContext): string {\n\treturn sanitizePathOccurrences(value, context, \"text\");\n}\n\nfunction sanitizeObjectKey(value: string, context: IrohRemoteOutboundSanitizerContext): string {\n\treturn redactPathOccurrences(value, context, \"delimited\");\n}\n\nfunction setSanitizedObjectEntry(target: Record<string, unknown>, key: string, value: unknown): void {\n\ttarget[getUniqueObjectKey(target, key)] = value;\n}\n\nfunction getUniqueObjectKey(target: Record<string, unknown>, key: string): string {\n\tif (!hasOwnEntry(target, key)) {\n\t\treturn key;\n\t}\n\tlet index = 2;\n\twhile (hasOwnEntry(target, `${key} (${index})`)) {\n\t\tindex++;\n\t}\n\treturn `${key} (${index})`;\n}\n\nfunction hasOwnEntry(value: object, key: string): boolean {\n\treturn Object.hasOwn(value, key);\n}\n\nfunction normalizeWorkspacePath(value: string, context: IrohRemoteOutboundSanitizerContext): string | undefined {\n\tif (!isAbsolute(value)) {\n\t\treturn undefined;\n\t}\n\tconst candidatePath = resolve(value).normalize(\"NFC\");\n\tconst relativePath = relative(context.workspacePath, candidatePath);\n\tif (relativePath === \"\") {\n\t\treturn context.remoteWorkspacePath;\n\t}\n\tif (relativePath.startsWith(`..${sep}`) || relativePath === \"..\" || isAbsolute(relativePath)) {\n\t\treturn undefined;\n\t}\n\treturn `${context.remoteWorkspacePath}/${toPosixPath(relativePath)}`;\n}\n\nfunction normalizeWorkspacePathOccurrences(value: string, context: IrohRemoteOutboundSanitizerContext): string {\n\tlet normalized = value;\n\tfor (const workspacePath of context.workspacePathVariants) {\n\t\tnormalized = normalized.replace(\n\t\t\tnew RegExp(`${escapeRegExp(workspacePath)}(?=$|[\\\\\\\\/\\\\s\"'<>),.;:!?}\\\\]])`, \"g\"),\n\t\t\tcontext.remoteWorkspacePath,\n\t\t);\n\t}\n\treturn normalized;\n}\n\nfunction redactPathOccurrences(\n\tvalue: string,\n\tcontext: IrohRemoteOutboundSanitizerContext,\n\tmode: PathContinuationMode,\n): string {\n\treturn sanitizePathOccurrences(value, context, mode);\n}\n\nfunction sanitizePathOccurrences(\n\tvalue: string,\n\tcontext: IrohRemoteOutboundSanitizerContext,\n\tmode: PathContinuationMode,\n): string {\n\tlet sanitized = \"\";\n\tlet index = 0;\n\twhile (index < value.length) {\n\t\tif (\n\t\t\tstartsFileUrlAt(value, index) ||\n\t\t\tstartsTildePathAt(value, index) ||\n\t\t\tstartsWindowsPathAt(value, index) ||\n\t\t\tstartsEscapedWindowsUncPathAt(value, index) ||\n\t\t\tstartsWindowsUncPathAt(value, index) ||\n\t\t\tstartsPosixPathAt(value, index)\n\t\t) {\n\t\t\tconst tokenMode = mode === \"delimited\" || isDelimitedPathToken(value, index) ? \"delimited\" : \"text\";\n\t\t\tconst tokenEnd = findPathTokenEnd(value, index, context, tokenMode);\n\t\t\tsanitized += sanitizePathToken(value.slice(index, tokenEnd), context);\n\t\t\tindex = tokenEnd;\n\t\t\tcontinue;\n\t\t}\n\t\tsanitized += value[index];\n\t\tindex++;\n\t}\n\treturn sanitized;\n}\n\nfunction sanitizePathToken(value: string, context: IrohRemoteOutboundSanitizerContext): string {\n\tconst { path, suffix } = splitTrailingPathPunctuation(value);\n\tif (path === \"/\") {\n\t\treturn `${path}${suffix}`;\n\t}\n\tconst normalizedPath = normalizeWorkspacePath(path, context);\n\tif (normalizedPath) {\n\t\treturn `${normalizedPath}${suffix}`;\n\t}\n\tif (isRemoteWorkspacePath(path, context)) {\n\t\treturn `${path}${suffix}`;\n\t}\n\tif (isBashOutputPath(path)) {\n\t\treturn `${IROH_REMOTE_REDACTED_BASH_OUTPUT_PATH}${suffix}`;\n\t}\n\tif (isSessionFilePath(path)) {\n\t\treturn `${IROH_REMOTE_REDACTED_SESSION_FILE}${suffix}`;\n\t}\n\tif (isExportPath(path)) {\n\t\treturn `${IROH_REMOTE_REDACTED_EXPORT_PATH}${suffix}`;\n\t}\n\tif (\n\t\tisAbsolute(path) ||\n\t\tisTildePath(path) ||\n\t\tisWindowsAbsolutePath(path) ||\n\t\tisEscapedWindowsUncPath(path) ||\n\t\tisWindowsUncPath(path) ||\n\t\tisFileUrl(path)\n\t) {\n\t\t// The path is outside the workspace (or unresolvable as a subpath), but it may\n\t\t// still embed the workspace root glued to a non-separator delimiter (e.g.\n\t\t// \"<workspace>:extra\"), which normalizeWorkspacePath treats as a sibling and\n\t\t// would otherwise leak the real host path verbatim. Redact any embedded\n\t\t// workspace-path prefix before returning.\n\t\treturn `${normalizeWorkspacePathOccurrences(path, context)}${suffix}`;\n\t}\n\treturn `${normalizeWorkspacePathOccurrences(path, context)}${suffix}`;\n}\n\nfunction splitTrailingPathPunctuation(value: string): { path: string; suffix: string } {\n\tconst match = value.match(/[),.;:!?}\\]]+$/);\n\tif (!match) {\n\t\treturn { path: value, suffix: \"\" };\n\t}\n\tconst suffix = match[0];\n\treturn { path: value.slice(0, -suffix.length), suffix };\n}\n\nfunction isRemoteWorkspacePath(value: string, context: IrohRemoteOutboundSanitizerContext): boolean {\n\treturn value === context.remoteWorkspacePath || value.startsWith(`${context.remoteWorkspacePath}/`);\n}\n\nfunction isBashOutputPath(value: string): boolean {\n\treturn /(?:^|[/\\\\])volt-bash-[A-Za-z0-9_-]+\\.log$/.test(value);\n}\n\nfunction isSessionFilePath(value: string): boolean {\n\treturn /[/\\\\]sessions[/\\\\].+\\.jsonl$/.test(value);\n}\n\nfunction isExportPath(value: string): boolean {\n\treturn /(?:^|[/\\\\])Volt-session-[^/\\\\]+\\.html$/.test(value);\n}\n\nfunction startsFileUrlAt(value: string, index: number): boolean {\n\tif (!isPathPrefixBoundary(value, index)) {\n\t\treturn false;\n\t}\n\treturn value.slice(index, index + \"file://\".length).toLowerCase() === \"file://\";\n}\n\nfunction startsTildePathAt(value: string, index: number): boolean {\n\tif (!isPathPrefixBoundary(value, index)) {\n\t\treturn false;\n\t}\n\treturn isTildePath(value.slice(index));\n}\n\nfunction startsWindowsPathAt(value: string, index: number): boolean {\n\tif (!isPathPrefixBoundary(value, index)) {\n\t\treturn false;\n\t}\n\treturn /^[A-Za-z]:[\\\\/]/.test(value.slice(index));\n}\n\nfunction startsWindowsUncPathAt(value: string, index: number): boolean {\n\tif (!isPathPrefixBoundary(value, index)) {\n\t\treturn false;\n\t}\n\treturn isWindowsUncPath(value.slice(index));\n}\n\nfunction startsEscapedWindowsUncPathAt(value: string, index: number): boolean {\n\tif (!isPathPrefixBoundary(value, index)) {\n\t\treturn false;\n\t}\n\treturn isEscapedWindowsUncPath(value.slice(index));\n}\n\nfunction startsPosixPathAt(value: string, index: number): boolean {\n\tif (value[index] !== \"/\" || !isPathPrefixBoundary(value, index)) {\n\t\treturn false;\n\t}\n\tif (value[index - 1] === \":\" && value[index + 1] === \"/\") {\n\t\treturn false;\n\t}\n\tif (isRelativePathSeparatorAt(value, index)) {\n\t\treturn false;\n\t}\n\treturn !isInsideUrlToken(value, index);\n}\n\nfunction isRelativePathSeparatorAt(value: string, index: number): boolean {\n\tconst previousIndex = findPreviousNonWhitespaceIndex(value, index - 1);\n\tconst nextIndex = findNextNonWhitespaceIndex(value, index + 1);\n\tif (previousIndex === undefined || nextIndex === undefined) {\n\t\treturn false;\n\t}\n\tif (!isRelativePathSegmentCharacter(value[previousIndex]) || !isRelativePathSegmentCharacter(value[nextIndex])) {\n\t\treturn false;\n\t}\n\tconst segmentEnd = findPathSegmentEnd(value, nextIndex);\n\tconst nextSegment = stripTrailingPathPunctuation(value.slice(nextIndex, segmentEnd));\n\tif (hasPathSeparator(nextSegment)) {\n\t\treturn false;\n\t}\n\tconst previousSegmentStart = findPathTokenStart(value, previousIndex + 1);\n\tconst previousSegment = value.slice(previousSegmentStart, previousIndex + 1);\n\treturn isPlainRelativePathSegment(previousSegment) && looksLikeRelativeFileNameSegment(nextSegment);\n}\n\nfunction isPathPrefixBoundary(value: string, index: number): boolean {\n\tif (index === 0) {\n\t\treturn true;\n\t}\n\tconst prefix = value[index - 1];\n\treturn /\\s/.test(prefix) || \"\\\"'`([{<>=,:;|\".includes(prefix);\n}\n\nfunction isDelimitedPathToken(value: string, index: number): boolean {\n\tif (index === 0) {\n\t\treturn false;\n\t}\n\treturn \"\\\"'`|\".includes(value[index - 1]);\n}\n\nfunction isInsideUrlToken(value: string, index: number): boolean {\n\tconst tokenStart = findPathTokenStart(value, index);\n\tconst prefix = value.slice(tokenStart, index);\n\treturn /^[A-Za-z][A-Za-z0-9+.-]*:\\/\\/[^\\s\"'<>]*$/.test(prefix);\n}\n\nfunction findPathTokenStart(value: string, index: number): number {\n\tlet tokenStart = index;\n\twhile (tokenStart > 0 && !isPathTokenStartDelimiter(value[tokenStart - 1])) {\n\t\ttokenStart--;\n\t}\n\treturn tokenStart;\n}\n\nfunction findPreviousNonWhitespaceIndex(value: string, index: number): number | undefined {\n\tfor (let cursor = index; cursor >= 0; cursor--) {\n\t\tif (!isPathTokenWhitespace(value[cursor])) {\n\t\t\treturn cursor;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction findNextNonWhitespaceIndex(value: string, index: number): number | undefined {\n\tfor (let cursor = index; cursor < value.length; cursor++) {\n\t\tif (!isPathTokenWhitespace(value[cursor])) {\n\t\t\treturn cursor;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction findPathTokenEnd(\n\tvalue: string,\n\tindex: number,\n\tcontext: IrohRemoteOutboundSanitizerContext,\n\tmode: PathContinuationMode,\n): number {\n\tlet tokenEnd = index;\n\twhile (tokenEnd < value.length && !isPathTokenDelimiter(value, tokenEnd)) {\n\t\tif (isPathTokenWhitespace(value[tokenEnd])) {\n\t\t\tconst continuation = findPathContinuation(value, index, tokenEnd, context, mode);\n\t\t\tif (continuation === undefined) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ttokenEnd = continuation.end;\n\t\t\tif (!continuation.canContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\ttokenEnd++;\n\t}\n\treturn tokenEnd;\n}\n\nfunction findPathContinuation(\n\tvalue: string,\n\ttokenStart: number,\n\twhitespaceStart: number,\n\tcontext: IrohRemoteOutboundSanitizerContext,\n\tmode: PathContinuationMode,\n): { canContinue: boolean; end: number } | undefined {\n\tlet continuationStart = whitespaceStart;\n\twhile (continuationStart < value.length && isPathTokenWhitespace(value[continuationStart])) {\n\t\tcontinuationStart++;\n\t}\n\tif (continuationStart === whitespaceStart || continuationStart >= value.length) {\n\t\treturn undefined;\n\t}\n\tif (\n\t\tstartsFileUrlAt(value, continuationStart) ||\n\t\tstartsTildePathAt(value, continuationStart) ||\n\t\tstartsWindowsPathAt(value, continuationStart) ||\n\t\tstartsEscapedWindowsUncPathAt(value, continuationStart) ||\n\t\tstartsWindowsUncPathAt(value, continuationStart) ||\n\t\tstartsPosixPathAt(value, continuationStart)\n\t) {\n\t\treturn undefined;\n\t}\n\tconst prefix = value.slice(tokenStart, whitespaceStart);\n\tif (endsWithPathTokenPunctuation(prefix)) {\n\t\treturn undefined;\n\t}\n\tconst segmentEnd = findPathSegmentEnd(value, continuationStart);\n\tconst segment = value.slice(continuationStart, segmentEnd);\n\tif (startsColonAdjacentPathSegment(segment)) {\n\t\treturn undefined;\n\t}\n\tif (segment.includes(\"://\")) {\n\t\treturn undefined;\n\t}\n\tif (hasPathSeparator(segment)) {\n\t\tif (!shouldContinuePathAcrossWhitespace(prefix, segment, context)) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn { canContinue: true, end: segmentEnd };\n\t}\n\tif (!shouldConsumePlainPathContinuation(prefix, segment, context, mode)) {\n\t\treturn undefined;\n\t}\n\treturn { canContinue: true, end: segmentEnd };\n}\n\nfunction findPathSegmentEnd(value: string, index: number): number {\n\tlet segmentEnd = index;\n\twhile (segmentEnd < value.length && !isPathSegmentDelimiter(value, segmentEnd)) {\n\t\tsegmentEnd++;\n\t}\n\treturn segmentEnd;\n}\n\nfunction shouldConsumePlainPathContinuation(\n\tprefix: string,\n\tsegment: string,\n\tcontext: IrohRemoteOutboundSanitizerContext,\n\tmode: PathContinuationMode,\n): boolean {\n\tconst combined = `${prefix} ${stripTrailingPathPunctuation(segment)}`;\n\tconst baseAllowed =\n\t\tnormalizeWorkspacePath(prefix, context) === undefined &&\n\t\tnormalizeWorkspacePath(combined, context) === undefined &&\n\t\tlooksLikeIncompletePathName(prefix) &&\n\t\tlooksLikePlainPathNameSegment(segment) &&\n\t\t!isProsePathContinuationWord(stripTrailingPathPunctuation(segment));\n\tif (!baseAllowed) {\n\t\treturn false;\n\t}\n\tif (looksLikeUserHomePath(prefix)) {\n\t\treturn true;\n\t}\n\treturn (\n\t\tmode === \"delimited\" ||\n\t\thasPathTokenWhitespace(prefix) ||\n\t\tisCommonPathNameSegment(segment) ||\n\t\tlooksLikeCapitalizedPathNameSegment(segment)\n\t);\n}\n\nfunction shouldContinuePathAcrossWhitespace(\n\tprefix: string,\n\tsegment: string,\n\tcontext: IrohRemoteOutboundSanitizerContext,\n): boolean {\n\treturn (\n\t\tnormalizeWorkspacePath(prefix, context) === undefined &&\n\t\tlooksLikeIncompletePathName(prefix) &&\n\t\tlooksLikePathContinuationSegment(segment)\n\t);\n}\n\nfunction looksLikeIncompletePathName(value: string): boolean {\n\tconst lastSegment = getLastPathSegment(value);\n\treturn (\n\t\t(isAbsolute(value) ||\n\t\t\tisTildePath(value) ||\n\t\t\tisWindowsAbsolutePath(value) ||\n\t\t\tisWindowsUncPath(value) ||\n\t\t\tisFileUrl(value)) &&\n\t\tlastSegment.length > 0 &&\n\t\t!lastSegment.includes(\".\")\n\t);\n}\n\nfunction looksLikePlainPathNameSegment(value: string): boolean {\n\tconst trimmed = stripTrailingPathPunctuation(value);\n\treturn /^[A-Za-z0-9._-]/.test(trimmed);\n}\n\nfunction isRelativePathSegmentCharacter(value: string | undefined): boolean {\n\treturn value !== undefined && /[A-Za-z0-9._-]/.test(value);\n}\n\nfunction isPlainRelativePathSegment(value: string): boolean {\n\treturn /^[A-Za-z0-9._-]+$/.test(value) && value !== \".\" && value !== \"..\";\n}\n\nfunction looksLikeRelativeFileNameSegment(value: string): boolean {\n\treturn isPlainRelativePathSegment(value) && /(?:^\\.|.+\\.[A-Za-z0-9]+$)/.test(value);\n}\n\nfunction looksLikeCapitalizedPathNameSegment(value: string): boolean {\n\tconst trimmed = stripTrailingPathPunctuation(value);\n\treturn /^[A-Z][A-Za-z0-9._-]*$/.test(trimmed);\n}\n\nfunction looksLikePathContinuationSegment(value: string): boolean {\n\tconst trimmed = stripTrailingPathPunctuation(value);\n\tif (/^and[/\\\\]or$/i.test(trimmed)) {\n\t\treturn false;\n\t}\n\tconst parts = trimmed.split(/[\\\\/]+/).filter((part) => part.length > 0);\n\tif (parts[0] && isProsePathContinuationWord(parts[0])) {\n\t\treturn false;\n\t}\n\treturn parts.length >= 2;\n}\n\nfunction hasPathSeparator(value: string): boolean {\n\treturn value.includes(\"/\") || value.includes(\"\\\\\");\n}\n\nfunction isProsePathContinuationWord(value: string): boolean {\n\tconst normalized = value.toLowerCase();\n\treturn (\n\t\tnormalized === \"and\" ||\n\t\tnormalized === \"badly\" ||\n\t\tnormalized === \"crashed\" ||\n\t\tnormalized === \"done\" ||\n\t\tnormalized === \"exists\" ||\n\t\tnormalized === \"failed\" ||\n\t\tnormalized === \"found\" ||\n\t\tnormalized === \"missing\" ||\n\t\tnormalized === \"not\" ||\n\t\tnormalized === \"or\" ||\n\t\tnormalized === \"suffix\"\n\t);\n}\n\nfunction isCommonPathNameSegment(value: string): boolean {\n\tconst normalized = stripTrailingPathPunctuation(value).toLowerCase();\n\treturn (\n\t\tnormalized === \"app\" ||\n\t\tnormalized === \"build\" ||\n\t\tnormalized === \"cache\" ||\n\t\tnormalized === \"config\" ||\n\t\tnormalized === \"data\" ||\n\t\tnormalized === \"dist\" ||\n\t\tnormalized === \"log\" ||\n\t\tnormalized === \"logs\" ||\n\t\tnormalized === \"project\" ||\n\t\tnormalized === \"temp\" ||\n\t\tnormalized === \"tmp\"\n\t);\n}\n\nfunction startsColonAdjacentPathSegment(value: string): boolean {\n\treturn /^[^/\\\\\\s]+:[/\\\\]/.test(value);\n}\n\nfunction getLastPathSegment(value: string): string {\n\tconst separatorIndex = Math.max(value.lastIndexOf(\"/\"), value.lastIndexOf(\"\\\\\"));\n\treturn separatorIndex === -1 ? value : value.slice(separatorIndex + 1);\n}\n\nfunction looksLikeUserHomePath(value: string): boolean {\n\treturn /^\\/Users\\/[^/]+$/.test(value) || /^[A-Za-z]:[\\\\/]Users[\\\\/][^\\\\/]+$/.test(value);\n}\n\nfunction endsWithPathTokenPunctuation(value: string): boolean {\n\treturn /[),.;:!?}\\]]$/.test(value);\n}\n\nfunction stripTrailingPathPunctuation(value: string): string {\n\treturn value.replace(/[),.;:!?}\\]]+$/, \"\");\n}\n\nfunction isPathTokenDelimiter(value: string, index: number): boolean {\n\tconst character = value[index];\n\treturn (\n\t\tcharacter === \"\\n\" ||\n\t\tcharacter === \"\\r\" ||\n\t\tcharacter === '\"' ||\n\t\tcharacter === \"`\" ||\n\t\tcharacter === \"<\" ||\n\t\tcharacter === \">\" ||\n\t\tcharacter === \"|\" ||\n\t\tisEscapedPathQuote(value, index) ||\n\t\tisPathListSeparator(value, index) ||\n\t\t(character === \"'\" && isLikelyClosingSingleQuote(value, index))\n\t);\n}\n\nfunction isPathTokenStartDelimiter(value: string): boolean {\n\treturn /\\s/.test(value) || \"\\\"'<>|\".includes(value);\n}\n\nfunction isPathSegmentDelimiter(value: string, index: number): boolean {\n\treturn isPathTokenWhitespace(value[index]) || isPathTokenDelimiter(value, index);\n}\n\nfunction isPathTokenWhitespace(value: string): boolean {\n\treturn value === \" \" || value === \"\\t\";\n}\n\nfunction hasPathTokenWhitespace(value: string): boolean {\n\treturn value.includes(\" \") || value.includes(\"\\t\");\n}\n\nfunction hasPathListSeparator(value: string): boolean {\n\tfor (let index = 0; index < value.length; index++) {\n\t\tif (isPathListSeparator(value, index)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction isEscapedPathQuote(value: string, index: number): boolean {\n\treturn value[index] === \"\\\\\" && value[index + 1] === '\"';\n}\n\nfunction isPathListSeparator(value: string, index: number): boolean {\n\tif (!\":;,\".includes(value[index])) {\n\t\treturn false;\n\t}\n\tconst pathStart = index + 1;\n\treturn (\n\t\tstartsFileUrlAt(value, pathStart) ||\n\t\tstartsTildePathAt(value, pathStart) ||\n\t\tstartsWindowsPathAt(value, pathStart) ||\n\t\tstartsEscapedWindowsUncPathAt(value, pathStart) ||\n\t\tstartsWindowsUncPathAt(value, pathStart) ||\n\t\tstartsPosixPathAt(value, pathStart)\n\t);\n}\n\nfunction isLikelyClosingSingleQuote(value: string, index: number): boolean {\n\tconst previous = value[index - 1];\n\tconst next = value[index + 1];\n\tif (next === undefined || '\"`<>),.;:!?}]'.includes(next)) {\n\t\treturn true;\n\t}\n\tif (previous !== undefined && /[A-Za-z0-9]/.test(previous)) {\n\t\tconst tokenStart = findPathTokenStart(value, index);\n\t\treturn !looksLikeIncompletePathName(value.slice(tokenStart, index));\n\t}\n\tif (!/\\s/.test(next)) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction toPosixPath(value: string): string {\n\treturn value.split(sep).join(\"/\");\n}\n\nfunction toWindowsPath(value: string): string {\n\treturn value.split(sep).join(\"\\\\\");\n}\n\nfunction isWindowsAbsolutePath(value: string): boolean {\n\treturn /^[A-Za-z]:[\\\\/]/.test(value);\n}\n\nfunction isWindowsUncPath(value: string): boolean {\n\treturn /^\\\\\\\\[^\\\\]+\\\\[^\\\\]+/.test(value);\n}\n\nfunction isEscapedWindowsUncPath(value: string): boolean {\n\treturn /^\\\\\\\\\\\\\\\\[^\\\\]+\\\\\\\\[^\\\\]+/.test(value);\n}\n\nfunction isTildePath(value: string): boolean {\n\treturn /^~[^/\\\\\\s]*(?:$|[\\\\/])/.test(value);\n}\n\nfunction isFileUrl(value: string): boolean {\n\treturn value.slice(0, \"file://\".length).toLowerCase() === \"file://\";\n}\n\nfunction escapeRegExp(value: string): string {\n\treturn value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export declare const IROH_REMOTE_ALPN = "volt-rpc/0";
|
|
2
|
+
export declare const IROH_REMOTE_TICKET_PREFIX = "volt+iroh://v1/";
|
|
3
|
+
export declare const IROH_REMOTE_HELLO_TYPE = "volt_iroh_hello";
|
|
4
|
+
export declare const IROH_REMOTE_HANDSHAKE_TYPE = "volt_iroh_handshake";
|
|
5
|
+
export declare const IROH_REMOTE_MULTI_STREAMS_FEATURE = "multi_streams.v1";
|
|
6
|
+
export declare const IROH_REMOTE_CONVERSATION_STREAMS_FEATURE = "conversation_streams.v1";
|
|
7
|
+
export declare const IROH_REMOTE_WORKTREES_FEATURE = "worktrees.v1";
|
|
8
|
+
export declare const IROH_REMOTE_WORKING_DIRECTORIES_FEATURE = "working_directories.v1";
|
|
9
|
+
export declare const IROH_REMOTE_AGENT_SETTLED_FEATURE = "agent_settled.v1";
|
|
10
|
+
export declare const IROH_REMOTE_SESSION_RUNTIME_STATE_FEATURE = "session_runtime_state.v1";
|
|
11
|
+
export declare const IROH_REMOTE_HOST_FEATURES: readonly ["multi_streams.v1", "conversation_streams.v1", "worktrees.v1", "working_directories.v1", "agent_settled.v1", "session_runtime_state.v1"];
|
|
12
|
+
/** Daemon-managed worktree ids: lowercase slug, unique per workspace. */
|
|
13
|
+
export declare const IROH_REMOTE_WORKTREE_ID_PATTERN: RegExp;
|
|
14
|
+
export declare function isIrohRemoteWorktreeId(value: unknown): value is string;
|
|
15
|
+
export declare function isIrohRemoteWorkingDirectory(value: unknown): value is string;
|
|
16
|
+
export declare function getIrohRemoteWorkingDirectoryValidationError(value: string): string | undefined;
|
|
17
|
+
export declare const DEFAULT_IROH_REMOTE_ALLOW_TOOLS = "read,bash,edit,write,web_search,grep,find,ls,subagent,mcp";
|
|
18
|
+
export declare const IROH_REMOTE_UNSAFE_TOOL_NAMES: readonly ["bash", "edit", "write", "web_search"];
|
|
19
|
+
export declare const IROH_REMOTE_OUTCOMES: readonly ["host_unreachable", "invalid_workspace", "invalid_conversation_target", "conversation_streams_unsupported", "pairing_secret_expired", "pairing_secret_consumed", "client_unknown", "client_revoked", "workspace_unavailable", "workspace_forbidden", "workspace_authorization_removed", "workspace_unregistered", "session_unavailable", "duplicate_conversation_connection", "conversation_in_use", "host_identity_mismatch", "saved_host_invalid"];
|
|
20
|
+
export declare const IROH_REMOTE_HOST_HANDSHAKE_FAILURE_OUTCOMES: readonly ["invalid_workspace", "invalid_conversation_target", "conversation_streams_unsupported", "pairing_secret_expired", "pairing_secret_consumed", "client_unknown", "client_revoked", "workspace_unavailable", "workspace_forbidden", "workspace_authorization_removed", "workspace_unregistered", "session_unavailable", "duplicate_conversation_connection", "conversation_in_use"];
|
|
21
|
+
export type IrohRemoteRelayMode = "disabled" | "development" | "production";
|
|
22
|
+
export type IrohRemoteHostFeature = (typeof IROH_REMOTE_HOST_FEATURES)[number];
|
|
23
|
+
export type IrohRemoteOutcome = (typeof IROH_REMOTE_OUTCOMES)[number];
|
|
24
|
+
export type IrohRemoteHostHandshakeFailureOutcome = (typeof IROH_REMOTE_HOST_HANDSHAKE_FAILURE_OUTCOMES)[number];
|
|
25
|
+
export declare function isIrohRemoteRelayMode(value: unknown): value is IrohRemoteRelayMode;
|
|
26
|
+
export declare function isIrohRemoteRelayUrls(value: unknown): value is string[];
|
|
27
|
+
export declare function isIrohRemoteOutcome(value: unknown): value is IrohRemoteOutcome;
|
|
28
|
+
export declare function isIrohRemoteHostHandshakeFailureOutcome(value: unknown): value is IrohRemoteHostHandshakeFailureOutcome;
|
|
29
|
+
export declare class IrohRemoteOutcomeError extends Error {
|
|
30
|
+
readonly outcome: IrohRemoteOutcome;
|
|
31
|
+
constructor(outcome: IrohRemoteOutcome, message: string);
|
|
32
|
+
}
|
|
33
|
+
export declare function normalizeIrohRemoteAllowTools(allowTools: string | undefined): string;
|
|
34
|
+
export declare function parseIrohRemoteAllowTools(allowTools: string | undefined): string[];
|
|
35
|
+
export declare function usesDefaultIrohRemoteAllowTools(allowTools: string | undefined): boolean;
|
|
36
|
+
export interface IrohRemoteRuntimeToolPolicy {
|
|
37
|
+
tools: string[];
|
|
38
|
+
allowUnlistedExtensionTools: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface ResolveIrohRemoteRuntimeToolPolicyOptions {
|
|
41
|
+
/** Persisted pair-time grant. This is always the maximum authority. */
|
|
42
|
+
clientAllowTools: string;
|
|
43
|
+
/** Optional legacy workspace ceiling. Missing means no additional restriction. */
|
|
44
|
+
workspaceAllowTools?: string;
|
|
45
|
+
/** Exact daemon ceiling. Null means unrestricted; an empty array denies every tool. */
|
|
46
|
+
daemonAllowTools: readonly string[] | null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Compose daemon-owned runtime policy without letting a host or workspace
|
|
50
|
+
* policy widen the grant persisted for a paired client.
|
|
51
|
+
*
|
|
52
|
+
* Default grants permit extension tools that are not known until resource
|
|
53
|
+
* loading. That wildcard applies only to non-default tool names, and survives
|
|
54
|
+
* only when every present policy layer has default-grant semantics.
|
|
55
|
+
*/
|
|
56
|
+
export declare function resolveIrohRemoteRuntimeToolPolicy(options: ResolveIrohRemoteRuntimeToolPolicyOptions): IrohRemoteRuntimeToolPolicy;
|
|
57
|
+
/** Return whether every tool permitted by policy is also permitted by ceiling. */
|
|
58
|
+
export declare function isIrohRemoteRuntimeToolPolicyWithin(policy: IrohRemoteRuntimeToolPolicy, ceiling: IrohRemoteRuntimeToolPolicy): boolean;
|
|
59
|
+
export declare function getIrohRemoteUnsafeAllowedTools(allowTools: string): string[];
|
|
60
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../../src/core/remote/iroh/protocol.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"node:buffer\";\n\nexport const IROH_REMOTE_ALPN = \"volt-rpc/0\";\nexport const IROH_REMOTE_TICKET_PREFIX = \"volt+iroh://v1/\";\nexport const IROH_REMOTE_HELLO_TYPE = \"volt_iroh_hello\";\nexport const IROH_REMOTE_HANDSHAKE_TYPE = \"volt_iroh_handshake\";\nexport const IROH_REMOTE_MULTI_STREAMS_FEATURE = \"multi_streams.v1\";\nexport const IROH_REMOTE_CONVERSATION_STREAMS_FEATURE = \"conversation_streams.v1\";\nexport const IROH_REMOTE_WORKTREES_FEATURE = \"worktrees.v1\";\nexport const IROH_REMOTE_WORKING_DIRECTORIES_FEATURE = \"working_directories.v1\";\nexport const IROH_REMOTE_AGENT_SETTLED_FEATURE = \"agent_settled.v1\";\nexport const IROH_REMOTE_SESSION_RUNTIME_STATE_FEATURE = \"session_runtime_state.v1\";\nexport const IROH_REMOTE_HOST_FEATURES = [\n\tIROH_REMOTE_MULTI_STREAMS_FEATURE,\n\tIROH_REMOTE_CONVERSATION_STREAMS_FEATURE,\n\tIROH_REMOTE_WORKTREES_FEATURE,\n\tIROH_REMOTE_WORKING_DIRECTORIES_FEATURE,\n\tIROH_REMOTE_AGENT_SETTLED_FEATURE,\n\tIROH_REMOTE_SESSION_RUNTIME_STATE_FEATURE,\n] as const;\n\n/** Daemon-managed worktree ids: lowercase slug, unique per workspace. */\nexport const IROH_REMOTE_WORKTREE_ID_PATTERN = /^[a-z0-9][a-z0-9._-]{0,63}$/;\n\nexport function isIrohRemoteWorktreeId(value: unknown): value is string {\n\treturn typeof value === \"string\" && IROH_REMOTE_WORKTREE_ID_PATTERN.test(value);\n}\n\nexport function isIrohRemoteWorkingDirectory(value: unknown): value is string {\n\treturn typeof value === \"string\" && getIrohRemoteWorkingDirectoryValidationError(value) === undefined;\n}\n\nexport function getIrohRemoteWorkingDirectoryValidationError(value: string): string | undefined {\n\tif (value.length === 0) {\n\t\treturn \"workingDirectory must be omitted for the workspace root\";\n\t}\n\tif (value.length > 4096 || Buffer.byteLength(value, \"utf8\") > 8192) {\n\t\treturn \"workingDirectory exceeds maximum length\";\n\t}\n\tif (value.includes(\"\\0\") || hasAsciiControlCharacter(value)) {\n\t\treturn \"workingDirectory must not contain control characters\";\n\t}\n\tif (value.startsWith(\"/\") || value.startsWith(\"//\") || value.includes(\"\\\\\") || /^[A-Za-z]:/.test(value)) {\n\t\treturn \"workingDirectory must be a relative POSIX path\";\n\t}\n\tfor (const segment of value.split(\"/\")) {\n\t\tif (segment === \"\" || segment === \".\" || segment === \"..\" || segment.toLowerCase() === \".git\") {\n\t\t\treturn \"workingDirectory must not contain empty, '.', '..', or '.git' path segments\";\n\t\t}\n\t}\n\treturn undefined;\n}\nexport const DEFAULT_IROH_REMOTE_ALLOW_TOOLS = \"read,bash,edit,write,web_search,grep,find,ls,subagent,mcp\";\nexport const IROH_REMOTE_UNSAFE_TOOL_NAMES = [\"bash\", \"edit\", \"write\", \"web_search\"] as const;\nexport const IROH_REMOTE_OUTCOMES = [\n\t\"host_unreachable\",\n\t\"invalid_workspace\",\n\t\"invalid_conversation_target\",\n\t\"conversation_streams_unsupported\",\n\t\"pairing_secret_expired\",\n\t\"pairing_secret_consumed\",\n\t\"client_unknown\",\n\t\"client_revoked\",\n\t\"workspace_unavailable\",\n\t\"workspace_forbidden\",\n\t\"workspace_authorization_removed\",\n\t\"workspace_unregistered\",\n\t\"session_unavailable\",\n\t\"duplicate_conversation_connection\",\n\t\"conversation_in_use\",\n\t\"host_identity_mismatch\",\n\t\"saved_host_invalid\",\n] as const;\nexport const IROH_REMOTE_HOST_HANDSHAKE_FAILURE_OUTCOMES = [\n\t\"invalid_workspace\",\n\t\"invalid_conversation_target\",\n\t\"conversation_streams_unsupported\",\n\t\"pairing_secret_expired\",\n\t\"pairing_secret_consumed\",\n\t\"client_unknown\",\n\t\"client_revoked\",\n\t\"workspace_unavailable\",\n\t\"workspace_forbidden\",\n\t\"workspace_authorization_removed\",\n\t\"workspace_unregistered\",\n\t\"session_unavailable\",\n\t\"duplicate_conversation_connection\",\n\t\"conversation_in_use\",\n] as const;\n\nconst IROH_REMOTE_UNSAFE_TOOL_NAME_SET = new Set<string>(IROH_REMOTE_UNSAFE_TOOL_NAMES);\nconst IROH_REMOTE_OUTCOME_SET = new Set<string>(IROH_REMOTE_OUTCOMES);\nconst IROH_REMOTE_HOST_HANDSHAKE_FAILURE_OUTCOME_SET = new Set<string>(IROH_REMOTE_HOST_HANDSHAKE_FAILURE_OUTCOMES);\n\nexport type IrohRemoteRelayMode = \"disabled\" | \"development\" | \"production\";\nexport type IrohRemoteHostFeature = (typeof IROH_REMOTE_HOST_FEATURES)[number];\nexport type IrohRemoteOutcome = (typeof IROH_REMOTE_OUTCOMES)[number];\nexport type IrohRemoteHostHandshakeFailureOutcome = (typeof IROH_REMOTE_HOST_HANDSHAKE_FAILURE_OUTCOMES)[number];\n\nexport function isIrohRemoteRelayMode(value: unknown): value is IrohRemoteRelayMode {\n\treturn value === \"disabled\" || value === \"development\" || value === \"production\";\n}\n\nexport function isIrohRemoteRelayUrls(value: unknown): value is string[] {\n\treturn Array.isArray(value) && value.length > 0 && value.every((url) => typeof url === \"string\" && url.length > 0);\n}\n\nexport function isIrohRemoteOutcome(value: unknown): value is IrohRemoteOutcome {\n\treturn typeof value === \"string\" && IROH_REMOTE_OUTCOME_SET.has(value);\n}\n\nexport function isIrohRemoteHostHandshakeFailureOutcome(\n\tvalue: unknown,\n): value is IrohRemoteHostHandshakeFailureOutcome {\n\treturn typeof value === \"string\" && IROH_REMOTE_HOST_HANDSHAKE_FAILURE_OUTCOME_SET.has(value);\n}\n\nexport class IrohRemoteOutcomeError extends Error {\n\treadonly outcome: IrohRemoteOutcome;\n\n\tconstructor(outcome: IrohRemoteOutcome, message: string) {\n\t\tsuper(`${outcome}: ${message}`);\n\t\tthis.name = \"IrohRemoteOutcomeError\";\n\t\tthis.outcome = outcome;\n\t}\n}\n\nexport function normalizeIrohRemoteAllowTools(allowTools: string | undefined): string {\n\tconst tools = parseIrohRemoteAllowToolNames(allowTools ?? DEFAULT_IROH_REMOTE_ALLOW_TOOLS);\n\treturn tools.join(\",\");\n}\n\nexport function parseIrohRemoteAllowTools(allowTools: string | undefined): string[] {\n\tconst normalized = normalizeIrohRemoteAllowTools(allowTools);\n\treturn normalized.length === 0 ? [] : normalized.split(\",\");\n}\n\nexport function usesDefaultIrohRemoteAllowTools(allowTools: string | undefined): boolean {\n\tconst tools = new Set(parseIrohRemoteAllowTools(allowTools));\n\tconst defaultTools = new Set(DEFAULT_IROH_REMOTE_ALLOW_TOOLS.split(\",\"));\n\treturn tools.size === defaultTools.size && Array.from(tools).every((tool) => defaultTools.has(tool));\n}\n\nexport interface IrohRemoteRuntimeToolPolicy {\n\ttools: string[];\n\tallowUnlistedExtensionTools: boolean;\n}\n\nexport interface ResolveIrohRemoteRuntimeToolPolicyOptions {\n\t/** Persisted pair-time grant. This is always the maximum authority. */\n\tclientAllowTools: string;\n\t/** Optional legacy workspace ceiling. Missing means no additional restriction. */\n\tworkspaceAllowTools?: string;\n\t/** Exact daemon ceiling. Null means unrestricted; an empty array denies every tool. */\n\tdaemonAllowTools: readonly string[] | null;\n}\n\n/**\n * Compose daemon-owned runtime policy without letting a host or workspace\n * policy widen the grant persisted for a paired client.\n *\n * Default grants permit extension tools that are not known until resource\n * loading. That wildcard applies only to non-default tool names, and survives\n * only when every present policy layer has default-grant semantics.\n */\nexport function resolveIrohRemoteRuntimeToolPolicy(\n\toptions: ResolveIrohRemoteRuntimeToolPolicyOptions,\n): IrohRemoteRuntimeToolPolicy {\n\tconst defaultTools = new Set(DEFAULT_IROH_REMOTE_ALLOW_TOOLS.split(\",\"));\n\tconst layers: Array<{ tools: string[]; toolSet: Set<string>; allowUnlistedExtensionTools: boolean }> = [];\n\tconst addStringLayer = (allowTools: string): void => {\n\t\tconst tools = uniqueIrohRemoteAllowToolNames(parseIrohRemoteAllowTools(allowTools));\n\t\tlayers.push({\n\t\t\ttools,\n\t\t\ttoolSet: new Set(tools),\n\t\t\tallowUnlistedExtensionTools: usesDefaultIrohRemoteAllowTools(allowTools),\n\t\t});\n\t};\n\n\taddStringLayer(options.clientAllowTools);\n\tif (options.workspaceAllowTools !== undefined) {\n\t\taddStringLayer(options.workspaceAllowTools);\n\t}\n\tif (options.daemonAllowTools !== null) {\n\t\tconst tools = uniqueIrohRemoteAllowToolNames(options.daemonAllowTools);\n\t\tlayers.push({ tools, toolSet: new Set(tools), allowUnlistedExtensionTools: false });\n\t}\n\n\tconst candidates = uniqueIrohRemoteAllowToolNames(layers.flatMap((layer) => layer.tools));\n\treturn {\n\t\ttools: candidates.filter((tool) =>\n\t\t\tlayers.every(\n\t\t\t\t(layer) => layer.toolSet.has(tool) || (layer.allowUnlistedExtensionTools && !defaultTools.has(tool)),\n\t\t\t),\n\t\t),\n\t\tallowUnlistedExtensionTools: layers.every((layer) => layer.allowUnlistedExtensionTools),\n\t};\n}\n\n/** Return whether every tool permitted by policy is also permitted by ceiling. */\nexport function isIrohRemoteRuntimeToolPolicyWithin(\n\tpolicy: IrohRemoteRuntimeToolPolicy,\n\tceiling: IrohRemoteRuntimeToolPolicy,\n): boolean {\n\tif (policy.allowUnlistedExtensionTools && !ceiling.allowUnlistedExtensionTools) {\n\t\treturn false;\n\t}\n\tconst defaultTools = new Set(DEFAULT_IROH_REMOTE_ALLOW_TOOLS.split(\",\"));\n\tconst ceilingTools = new Set(ceiling.tools);\n\treturn policy.tools.every(\n\t\t(tool) => ceilingTools.has(tool) || (ceiling.allowUnlistedExtensionTools && !defaultTools.has(tool)),\n\t);\n}\n\nfunction hasAsciiControlCharacter(value: string): boolean {\n\tfor (const char of value) {\n\t\tconst code = char.charCodeAt(0);\n\t\tif (code <= 0x1f || code === 0x7f) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction parseIrohRemoteAllowToolNames(allowTools: string): string[] {\n\treturn allowTools\n\t\t.split(\",\")\n\t\t.map((tool) => tool.trim())\n\t\t.filter((tool) => tool.length > 0);\n}\n\nfunction uniqueIrohRemoteAllowToolNames(toolNames: readonly string[]): string[] {\n\tconst tools: string[] = [];\n\tconst seen = new Set<string>();\n\tfor (const toolName of toolNames) {\n\t\tconst tool = toolName.trim();\n\t\tif (tool.length === 0 || seen.has(tool)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(tool);\n\t\ttools.push(tool);\n\t}\n\treturn tools;\n}\n\nexport function getIrohRemoteUnsafeAllowedTools(allowTools: string): string[] {\n\tconst unsafeTools: string[] = [];\n\tconst seenUnsafeTools = new Set<string>();\n\tfor (const toolName of allowTools.split(\",\")) {\n\t\tconst normalizedToolName = toolName.trim();\n\t\tif (!IROH_REMOTE_UNSAFE_TOOL_NAME_SET.has(normalizedToolName) || seenUnsafeTools.has(normalizedToolName)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseenUnsafeTools.add(normalizedToolName);\n\t\tunsafeTools.push(normalizedToolName);\n\t}\n\treturn unsafeTools;\n}\n"]}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { Buffer } from "node:buffer";
|
|
2
|
+
export const IROH_REMOTE_ALPN = "volt-rpc/0";
|
|
3
|
+
export const IROH_REMOTE_TICKET_PREFIX = "volt+iroh://v1/";
|
|
4
|
+
export const IROH_REMOTE_HELLO_TYPE = "volt_iroh_hello";
|
|
5
|
+
export const IROH_REMOTE_HANDSHAKE_TYPE = "volt_iroh_handshake";
|
|
6
|
+
export const IROH_REMOTE_MULTI_STREAMS_FEATURE = "multi_streams.v1";
|
|
7
|
+
export const IROH_REMOTE_CONVERSATION_STREAMS_FEATURE = "conversation_streams.v1";
|
|
8
|
+
export const IROH_REMOTE_WORKTREES_FEATURE = "worktrees.v1";
|
|
9
|
+
export const IROH_REMOTE_WORKING_DIRECTORIES_FEATURE = "working_directories.v1";
|
|
10
|
+
export const IROH_REMOTE_AGENT_SETTLED_FEATURE = "agent_settled.v1";
|
|
11
|
+
export const IROH_REMOTE_SESSION_RUNTIME_STATE_FEATURE = "session_runtime_state.v1";
|
|
12
|
+
export const IROH_REMOTE_HOST_FEATURES = [
|
|
13
|
+
IROH_REMOTE_MULTI_STREAMS_FEATURE,
|
|
14
|
+
IROH_REMOTE_CONVERSATION_STREAMS_FEATURE,
|
|
15
|
+
IROH_REMOTE_WORKTREES_FEATURE,
|
|
16
|
+
IROH_REMOTE_WORKING_DIRECTORIES_FEATURE,
|
|
17
|
+
IROH_REMOTE_AGENT_SETTLED_FEATURE,
|
|
18
|
+
IROH_REMOTE_SESSION_RUNTIME_STATE_FEATURE,
|
|
19
|
+
];
|
|
20
|
+
/** Daemon-managed worktree ids: lowercase slug, unique per workspace. */
|
|
21
|
+
export const IROH_REMOTE_WORKTREE_ID_PATTERN = /^[a-z0-9][a-z0-9._-]{0,63}$/;
|
|
22
|
+
export function isIrohRemoteWorktreeId(value) {
|
|
23
|
+
return typeof value === "string" && IROH_REMOTE_WORKTREE_ID_PATTERN.test(value);
|
|
24
|
+
}
|
|
25
|
+
export function isIrohRemoteWorkingDirectory(value) {
|
|
26
|
+
return typeof value === "string" && getIrohRemoteWorkingDirectoryValidationError(value) === undefined;
|
|
27
|
+
}
|
|
28
|
+
export function getIrohRemoteWorkingDirectoryValidationError(value) {
|
|
29
|
+
if (value.length === 0) {
|
|
30
|
+
return "workingDirectory must be omitted for the workspace root";
|
|
31
|
+
}
|
|
32
|
+
if (value.length > 4096 || Buffer.byteLength(value, "utf8") > 8192) {
|
|
33
|
+
return "workingDirectory exceeds maximum length";
|
|
34
|
+
}
|
|
35
|
+
if (value.includes("\0") || hasAsciiControlCharacter(value)) {
|
|
36
|
+
return "workingDirectory must not contain control characters";
|
|
37
|
+
}
|
|
38
|
+
if (value.startsWith("/") || value.startsWith("//") || value.includes("\\") || /^[A-Za-z]:/.test(value)) {
|
|
39
|
+
return "workingDirectory must be a relative POSIX path";
|
|
40
|
+
}
|
|
41
|
+
for (const segment of value.split("/")) {
|
|
42
|
+
if (segment === "" || segment === "." || segment === ".." || segment.toLowerCase() === ".git") {
|
|
43
|
+
return "workingDirectory must not contain empty, '.', '..', or '.git' path segments";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
export const DEFAULT_IROH_REMOTE_ALLOW_TOOLS = "read,bash,edit,write,web_search,grep,find,ls,subagent,mcp";
|
|
49
|
+
export const IROH_REMOTE_UNSAFE_TOOL_NAMES = ["bash", "edit", "write", "web_search"];
|
|
50
|
+
export const IROH_REMOTE_OUTCOMES = [
|
|
51
|
+
"host_unreachable",
|
|
52
|
+
"invalid_workspace",
|
|
53
|
+
"invalid_conversation_target",
|
|
54
|
+
"conversation_streams_unsupported",
|
|
55
|
+
"pairing_secret_expired",
|
|
56
|
+
"pairing_secret_consumed",
|
|
57
|
+
"client_unknown",
|
|
58
|
+
"client_revoked",
|
|
59
|
+
"workspace_unavailable",
|
|
60
|
+
"workspace_forbidden",
|
|
61
|
+
"workspace_authorization_removed",
|
|
62
|
+
"workspace_unregistered",
|
|
63
|
+
"session_unavailable",
|
|
64
|
+
"duplicate_conversation_connection",
|
|
65
|
+
"conversation_in_use",
|
|
66
|
+
"host_identity_mismatch",
|
|
67
|
+
"saved_host_invalid",
|
|
68
|
+
];
|
|
69
|
+
export const IROH_REMOTE_HOST_HANDSHAKE_FAILURE_OUTCOMES = [
|
|
70
|
+
"invalid_workspace",
|
|
71
|
+
"invalid_conversation_target",
|
|
72
|
+
"conversation_streams_unsupported",
|
|
73
|
+
"pairing_secret_expired",
|
|
74
|
+
"pairing_secret_consumed",
|
|
75
|
+
"client_unknown",
|
|
76
|
+
"client_revoked",
|
|
77
|
+
"workspace_unavailable",
|
|
78
|
+
"workspace_forbidden",
|
|
79
|
+
"workspace_authorization_removed",
|
|
80
|
+
"workspace_unregistered",
|
|
81
|
+
"session_unavailable",
|
|
82
|
+
"duplicate_conversation_connection",
|
|
83
|
+
"conversation_in_use",
|
|
84
|
+
];
|
|
85
|
+
const IROH_REMOTE_UNSAFE_TOOL_NAME_SET = new Set(IROH_REMOTE_UNSAFE_TOOL_NAMES);
|
|
86
|
+
const IROH_REMOTE_OUTCOME_SET = new Set(IROH_REMOTE_OUTCOMES);
|
|
87
|
+
const IROH_REMOTE_HOST_HANDSHAKE_FAILURE_OUTCOME_SET = new Set(IROH_REMOTE_HOST_HANDSHAKE_FAILURE_OUTCOMES);
|
|
88
|
+
export function isIrohRemoteRelayMode(value) {
|
|
89
|
+
return value === "disabled" || value === "development" || value === "production";
|
|
90
|
+
}
|
|
91
|
+
export function isIrohRemoteRelayUrls(value) {
|
|
92
|
+
return Array.isArray(value) && value.length > 0 && value.every((url) => typeof url === "string" && url.length > 0);
|
|
93
|
+
}
|
|
94
|
+
export function isIrohRemoteOutcome(value) {
|
|
95
|
+
return typeof value === "string" && IROH_REMOTE_OUTCOME_SET.has(value);
|
|
96
|
+
}
|
|
97
|
+
export function isIrohRemoteHostHandshakeFailureOutcome(value) {
|
|
98
|
+
return typeof value === "string" && IROH_REMOTE_HOST_HANDSHAKE_FAILURE_OUTCOME_SET.has(value);
|
|
99
|
+
}
|
|
100
|
+
export class IrohRemoteOutcomeError extends Error {
|
|
101
|
+
outcome;
|
|
102
|
+
constructor(outcome, message) {
|
|
103
|
+
super(`${outcome}: ${message}`);
|
|
104
|
+
this.name = "IrohRemoteOutcomeError";
|
|
105
|
+
this.outcome = outcome;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export function normalizeIrohRemoteAllowTools(allowTools) {
|
|
109
|
+
const tools = parseIrohRemoteAllowToolNames(allowTools ?? DEFAULT_IROH_REMOTE_ALLOW_TOOLS);
|
|
110
|
+
return tools.join(",");
|
|
111
|
+
}
|
|
112
|
+
export function parseIrohRemoteAllowTools(allowTools) {
|
|
113
|
+
const normalized = normalizeIrohRemoteAllowTools(allowTools);
|
|
114
|
+
return normalized.length === 0 ? [] : normalized.split(",");
|
|
115
|
+
}
|
|
116
|
+
export function usesDefaultIrohRemoteAllowTools(allowTools) {
|
|
117
|
+
const tools = new Set(parseIrohRemoteAllowTools(allowTools));
|
|
118
|
+
const defaultTools = new Set(DEFAULT_IROH_REMOTE_ALLOW_TOOLS.split(","));
|
|
119
|
+
return tools.size === defaultTools.size && Array.from(tools).every((tool) => defaultTools.has(tool));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Compose daemon-owned runtime policy without letting a host or workspace
|
|
123
|
+
* policy widen the grant persisted for a paired client.
|
|
124
|
+
*
|
|
125
|
+
* Default grants permit extension tools that are not known until resource
|
|
126
|
+
* loading. That wildcard applies only to non-default tool names, and survives
|
|
127
|
+
* only when every present policy layer has default-grant semantics.
|
|
128
|
+
*/
|
|
129
|
+
export function resolveIrohRemoteRuntimeToolPolicy(options) {
|
|
130
|
+
const defaultTools = new Set(DEFAULT_IROH_REMOTE_ALLOW_TOOLS.split(","));
|
|
131
|
+
const layers = [];
|
|
132
|
+
const addStringLayer = (allowTools) => {
|
|
133
|
+
const tools = uniqueIrohRemoteAllowToolNames(parseIrohRemoteAllowTools(allowTools));
|
|
134
|
+
layers.push({
|
|
135
|
+
tools,
|
|
136
|
+
toolSet: new Set(tools),
|
|
137
|
+
allowUnlistedExtensionTools: usesDefaultIrohRemoteAllowTools(allowTools),
|
|
138
|
+
});
|
|
139
|
+
};
|
|
140
|
+
addStringLayer(options.clientAllowTools);
|
|
141
|
+
if (options.workspaceAllowTools !== undefined) {
|
|
142
|
+
addStringLayer(options.workspaceAllowTools);
|
|
143
|
+
}
|
|
144
|
+
if (options.daemonAllowTools !== null) {
|
|
145
|
+
const tools = uniqueIrohRemoteAllowToolNames(options.daemonAllowTools);
|
|
146
|
+
layers.push({ tools, toolSet: new Set(tools), allowUnlistedExtensionTools: false });
|
|
147
|
+
}
|
|
148
|
+
const candidates = uniqueIrohRemoteAllowToolNames(layers.flatMap((layer) => layer.tools));
|
|
149
|
+
return {
|
|
150
|
+
tools: candidates.filter((tool) => layers.every((layer) => layer.toolSet.has(tool) || (layer.allowUnlistedExtensionTools && !defaultTools.has(tool)))),
|
|
151
|
+
allowUnlistedExtensionTools: layers.every((layer) => layer.allowUnlistedExtensionTools),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/** Return whether every tool permitted by policy is also permitted by ceiling. */
|
|
155
|
+
export function isIrohRemoteRuntimeToolPolicyWithin(policy, ceiling) {
|
|
156
|
+
if (policy.allowUnlistedExtensionTools && !ceiling.allowUnlistedExtensionTools) {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
const defaultTools = new Set(DEFAULT_IROH_REMOTE_ALLOW_TOOLS.split(","));
|
|
160
|
+
const ceilingTools = new Set(ceiling.tools);
|
|
161
|
+
return policy.tools.every((tool) => ceilingTools.has(tool) || (ceiling.allowUnlistedExtensionTools && !defaultTools.has(tool)));
|
|
162
|
+
}
|
|
163
|
+
function hasAsciiControlCharacter(value) {
|
|
164
|
+
for (const char of value) {
|
|
165
|
+
const code = char.charCodeAt(0);
|
|
166
|
+
if (code <= 0x1f || code === 0x7f) {
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
function parseIrohRemoteAllowToolNames(allowTools) {
|
|
173
|
+
return allowTools
|
|
174
|
+
.split(",")
|
|
175
|
+
.map((tool) => tool.trim())
|
|
176
|
+
.filter((tool) => tool.length > 0);
|
|
177
|
+
}
|
|
178
|
+
function uniqueIrohRemoteAllowToolNames(toolNames) {
|
|
179
|
+
const tools = [];
|
|
180
|
+
const seen = new Set();
|
|
181
|
+
for (const toolName of toolNames) {
|
|
182
|
+
const tool = toolName.trim();
|
|
183
|
+
if (tool.length === 0 || seen.has(tool)) {
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
seen.add(tool);
|
|
187
|
+
tools.push(tool);
|
|
188
|
+
}
|
|
189
|
+
return tools;
|
|
190
|
+
}
|
|
191
|
+
export function getIrohRemoteUnsafeAllowedTools(allowTools) {
|
|
192
|
+
const unsafeTools = [];
|
|
193
|
+
const seenUnsafeTools = new Set();
|
|
194
|
+
for (const toolName of allowTools.split(",")) {
|
|
195
|
+
const normalizedToolName = toolName.trim();
|
|
196
|
+
if (!IROH_REMOTE_UNSAFE_TOOL_NAME_SET.has(normalizedToolName) || seenUnsafeTools.has(normalizedToolName)) {
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
seenUnsafeTools.add(normalizedToolName);
|
|
200
|
+
unsafeTools.push(normalizedToolName);
|
|
201
|
+
}
|
|
202
|
+
return unsafeTools;
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../../src/core/remote/iroh/protocol.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"node:buffer\";\n\nexport const IROH_REMOTE_ALPN = \"volt-rpc/0\";\nexport const IROH_REMOTE_TICKET_PREFIX = \"volt+iroh://v1/\";\nexport const IROH_REMOTE_HELLO_TYPE = \"volt_iroh_hello\";\nexport const IROH_REMOTE_HANDSHAKE_TYPE = \"volt_iroh_handshake\";\nexport const IROH_REMOTE_MULTI_STREAMS_FEATURE = \"multi_streams.v1\";\nexport const IROH_REMOTE_CONVERSATION_STREAMS_FEATURE = \"conversation_streams.v1\";\nexport const IROH_REMOTE_WORKTREES_FEATURE = \"worktrees.v1\";\nexport const IROH_REMOTE_WORKING_DIRECTORIES_FEATURE = \"working_directories.v1\";\nexport const IROH_REMOTE_AGENT_SETTLED_FEATURE = \"agent_settled.v1\";\nexport const IROH_REMOTE_SESSION_RUNTIME_STATE_FEATURE = \"session_runtime_state.v1\";\nexport const IROH_REMOTE_HOST_FEATURES = [\n\tIROH_REMOTE_MULTI_STREAMS_FEATURE,\n\tIROH_REMOTE_CONVERSATION_STREAMS_FEATURE,\n\tIROH_REMOTE_WORKTREES_FEATURE,\n\tIROH_REMOTE_WORKING_DIRECTORIES_FEATURE,\n\tIROH_REMOTE_AGENT_SETTLED_FEATURE,\n\tIROH_REMOTE_SESSION_RUNTIME_STATE_FEATURE,\n] as const;\n\n/** Daemon-managed worktree ids: lowercase slug, unique per workspace. */\nexport const IROH_REMOTE_WORKTREE_ID_PATTERN = /^[a-z0-9][a-z0-9._-]{0,63}$/;\n\nexport function isIrohRemoteWorktreeId(value: unknown): value is string {\n\treturn typeof value === \"string\" && IROH_REMOTE_WORKTREE_ID_PATTERN.test(value);\n}\n\nexport function isIrohRemoteWorkingDirectory(value: unknown): value is string {\n\treturn typeof value === \"string\" && getIrohRemoteWorkingDirectoryValidationError(value) === undefined;\n}\n\nexport function getIrohRemoteWorkingDirectoryValidationError(value: string): string | undefined {\n\tif (value.length === 0) {\n\t\treturn \"workingDirectory must be omitted for the workspace root\";\n\t}\n\tif (value.length > 4096 || Buffer.byteLength(value, \"utf8\") > 8192) {\n\t\treturn \"workingDirectory exceeds maximum length\";\n\t}\n\tif (value.includes(\"\\0\") || hasAsciiControlCharacter(value)) {\n\t\treturn \"workingDirectory must not contain control characters\";\n\t}\n\tif (value.startsWith(\"/\") || value.startsWith(\"//\") || value.includes(\"\\\\\") || /^[A-Za-z]:/.test(value)) {\n\t\treturn \"workingDirectory must be a relative POSIX path\";\n\t}\n\tfor (const segment of value.split(\"/\")) {\n\t\tif (segment === \"\" || segment === \".\" || segment === \"..\" || segment.toLowerCase() === \".git\") {\n\t\t\treturn \"workingDirectory must not contain empty, '.', '..', or '.git' path segments\";\n\t\t}\n\t}\n\treturn undefined;\n}\nexport const DEFAULT_IROH_REMOTE_ALLOW_TOOLS = \"read,bash,edit,write,web_search,grep,find,ls,subagent,mcp\";\nexport const IROH_REMOTE_UNSAFE_TOOL_NAMES = [\"bash\", \"edit\", \"write\", \"web_search\"] as const;\nexport const IROH_REMOTE_OUTCOMES = [\n\t\"host_unreachable\",\n\t\"invalid_workspace\",\n\t\"invalid_conversation_target\",\n\t\"conversation_streams_unsupported\",\n\t\"pairing_secret_expired\",\n\t\"pairing_secret_consumed\",\n\t\"client_unknown\",\n\t\"client_revoked\",\n\t\"workspace_unavailable\",\n\t\"workspace_forbidden\",\n\t\"workspace_authorization_removed\",\n\t\"workspace_unregistered\",\n\t\"session_unavailable\",\n\t\"duplicate_conversation_connection\",\n\t\"conversation_in_use\",\n\t\"host_identity_mismatch\",\n\t\"saved_host_invalid\",\n] as const;\nexport const IROH_REMOTE_HOST_HANDSHAKE_FAILURE_OUTCOMES = [\n\t\"invalid_workspace\",\n\t\"invalid_conversation_target\",\n\t\"conversation_streams_unsupported\",\n\t\"pairing_secret_expired\",\n\t\"pairing_secret_consumed\",\n\t\"client_unknown\",\n\t\"client_revoked\",\n\t\"workspace_unavailable\",\n\t\"workspace_forbidden\",\n\t\"workspace_authorization_removed\",\n\t\"workspace_unregistered\",\n\t\"session_unavailable\",\n\t\"duplicate_conversation_connection\",\n\t\"conversation_in_use\",\n] as const;\n\nconst IROH_REMOTE_UNSAFE_TOOL_NAME_SET = new Set<string>(IROH_REMOTE_UNSAFE_TOOL_NAMES);\nconst IROH_REMOTE_OUTCOME_SET = new Set<string>(IROH_REMOTE_OUTCOMES);\nconst IROH_REMOTE_HOST_HANDSHAKE_FAILURE_OUTCOME_SET = new Set<string>(IROH_REMOTE_HOST_HANDSHAKE_FAILURE_OUTCOMES);\n\nexport type IrohRemoteRelayMode = \"disabled\" | \"development\" | \"production\";\nexport type IrohRemoteHostFeature = (typeof IROH_REMOTE_HOST_FEATURES)[number];\nexport type IrohRemoteOutcome = (typeof IROH_REMOTE_OUTCOMES)[number];\nexport type IrohRemoteHostHandshakeFailureOutcome = (typeof IROH_REMOTE_HOST_HANDSHAKE_FAILURE_OUTCOMES)[number];\n\nexport function isIrohRemoteRelayMode(value: unknown): value is IrohRemoteRelayMode {\n\treturn value === \"disabled\" || value === \"development\" || value === \"production\";\n}\n\nexport function isIrohRemoteRelayUrls(value: unknown): value is string[] {\n\treturn Array.isArray(value) && value.length > 0 && value.every((url) => typeof url === \"string\" && url.length > 0);\n}\n\nexport function isIrohRemoteOutcome(value: unknown): value is IrohRemoteOutcome {\n\treturn typeof value === \"string\" && IROH_REMOTE_OUTCOME_SET.has(value);\n}\n\nexport function isIrohRemoteHostHandshakeFailureOutcome(\n\tvalue: unknown,\n): value is IrohRemoteHostHandshakeFailureOutcome {\n\treturn typeof value === \"string\" && IROH_REMOTE_HOST_HANDSHAKE_FAILURE_OUTCOME_SET.has(value);\n}\n\nexport class IrohRemoteOutcomeError extends Error {\n\treadonly outcome: IrohRemoteOutcome;\n\n\tconstructor(outcome: IrohRemoteOutcome, message: string) {\n\t\tsuper(`${outcome}: ${message}`);\n\t\tthis.name = \"IrohRemoteOutcomeError\";\n\t\tthis.outcome = outcome;\n\t}\n}\n\nexport function normalizeIrohRemoteAllowTools(allowTools: string | undefined): string {\n\tconst tools = parseIrohRemoteAllowToolNames(allowTools ?? DEFAULT_IROH_REMOTE_ALLOW_TOOLS);\n\treturn tools.join(\",\");\n}\n\nexport function parseIrohRemoteAllowTools(allowTools: string | undefined): string[] {\n\tconst normalized = normalizeIrohRemoteAllowTools(allowTools);\n\treturn normalized.length === 0 ? [] : normalized.split(\",\");\n}\n\nexport function usesDefaultIrohRemoteAllowTools(allowTools: string | undefined): boolean {\n\tconst tools = new Set(parseIrohRemoteAllowTools(allowTools));\n\tconst defaultTools = new Set(DEFAULT_IROH_REMOTE_ALLOW_TOOLS.split(\",\"));\n\treturn tools.size === defaultTools.size && Array.from(tools).every((tool) => defaultTools.has(tool));\n}\n\nexport interface IrohRemoteRuntimeToolPolicy {\n\ttools: string[];\n\tallowUnlistedExtensionTools: boolean;\n}\n\nexport interface ResolveIrohRemoteRuntimeToolPolicyOptions {\n\t/** Persisted pair-time grant. This is always the maximum authority. */\n\tclientAllowTools: string;\n\t/** Optional legacy workspace ceiling. Missing means no additional restriction. */\n\tworkspaceAllowTools?: string;\n\t/** Exact daemon ceiling. Null means unrestricted; an empty array denies every tool. */\n\tdaemonAllowTools: readonly string[] | null;\n}\n\n/**\n * Compose daemon-owned runtime policy without letting a host or workspace\n * policy widen the grant persisted for a paired client.\n *\n * Default grants permit extension tools that are not known until resource\n * loading. That wildcard applies only to non-default tool names, and survives\n * only when every present policy layer has default-grant semantics.\n */\nexport function resolveIrohRemoteRuntimeToolPolicy(\n\toptions: ResolveIrohRemoteRuntimeToolPolicyOptions,\n): IrohRemoteRuntimeToolPolicy {\n\tconst defaultTools = new Set(DEFAULT_IROH_REMOTE_ALLOW_TOOLS.split(\",\"));\n\tconst layers: Array<{ tools: string[]; toolSet: Set<string>; allowUnlistedExtensionTools: boolean }> = [];\n\tconst addStringLayer = (allowTools: string): void => {\n\t\tconst tools = uniqueIrohRemoteAllowToolNames(parseIrohRemoteAllowTools(allowTools));\n\t\tlayers.push({\n\t\t\ttools,\n\t\t\ttoolSet: new Set(tools),\n\t\t\tallowUnlistedExtensionTools: usesDefaultIrohRemoteAllowTools(allowTools),\n\t\t});\n\t};\n\n\taddStringLayer(options.clientAllowTools);\n\tif (options.workspaceAllowTools !== undefined) {\n\t\taddStringLayer(options.workspaceAllowTools);\n\t}\n\tif (options.daemonAllowTools !== null) {\n\t\tconst tools = uniqueIrohRemoteAllowToolNames(options.daemonAllowTools);\n\t\tlayers.push({ tools, toolSet: new Set(tools), allowUnlistedExtensionTools: false });\n\t}\n\n\tconst candidates = uniqueIrohRemoteAllowToolNames(layers.flatMap((layer) => layer.tools));\n\treturn {\n\t\ttools: candidates.filter((tool) =>\n\t\t\tlayers.every(\n\t\t\t\t(layer) => layer.toolSet.has(tool) || (layer.allowUnlistedExtensionTools && !defaultTools.has(tool)),\n\t\t\t),\n\t\t),\n\t\tallowUnlistedExtensionTools: layers.every((layer) => layer.allowUnlistedExtensionTools),\n\t};\n}\n\n/** Return whether every tool permitted by policy is also permitted by ceiling. */\nexport function isIrohRemoteRuntimeToolPolicyWithin(\n\tpolicy: IrohRemoteRuntimeToolPolicy,\n\tceiling: IrohRemoteRuntimeToolPolicy,\n): boolean {\n\tif (policy.allowUnlistedExtensionTools && !ceiling.allowUnlistedExtensionTools) {\n\t\treturn false;\n\t}\n\tconst defaultTools = new Set(DEFAULT_IROH_REMOTE_ALLOW_TOOLS.split(\",\"));\n\tconst ceilingTools = new Set(ceiling.tools);\n\treturn policy.tools.every(\n\t\t(tool) => ceilingTools.has(tool) || (ceiling.allowUnlistedExtensionTools && !defaultTools.has(tool)),\n\t);\n}\n\nfunction hasAsciiControlCharacter(value: string): boolean {\n\tfor (const char of value) {\n\t\tconst code = char.charCodeAt(0);\n\t\tif (code <= 0x1f || code === 0x7f) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction parseIrohRemoteAllowToolNames(allowTools: string): string[] {\n\treturn allowTools\n\t\t.split(\",\")\n\t\t.map((tool) => tool.trim())\n\t\t.filter((tool) => tool.length > 0);\n}\n\nfunction uniqueIrohRemoteAllowToolNames(toolNames: readonly string[]): string[] {\n\tconst tools: string[] = [];\n\tconst seen = new Set<string>();\n\tfor (const toolName of toolNames) {\n\t\tconst tool = toolName.trim();\n\t\tif (tool.length === 0 || seen.has(tool)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(tool);\n\t\ttools.push(tool);\n\t}\n\treturn tools;\n}\n\nexport function getIrohRemoteUnsafeAllowedTools(allowTools: string): string[] {\n\tconst unsafeTools: string[] = [];\n\tconst seenUnsafeTools = new Set<string>();\n\tfor (const toolName of allowTools.split(\",\")) {\n\t\tconst normalizedToolName = toolName.trim();\n\t\tif (!IROH_REMOTE_UNSAFE_TOOL_NAME_SET.has(normalizedToolName) || seenUnsafeTools.has(normalizedToolName)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseenUnsafeTools.add(normalizedToolName);\n\t\tunsafeTools.push(normalizedToolName);\n\t}\n\treturn unsafeTools;\n}\n"]}
|