@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":"state-manager.js","sourceRoot":"","sources":["../../../../src/core/remote/iroh/state-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdir } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport lockfile from \"proper-lockfile\";\nimport { cloneIrohRemoteRpcGrant, type IrohRemoteRpcGrant, parseIrohRemoteRpcGrant } from \"./access-grant.ts\";\nimport {\n\ttype AuthorizeIrohRemoteClientOptions,\n\tauthorizeIrohRemoteClient,\n\ttype IrohRemoteClientAuthorizationResult,\n} from \"./authorization.ts\";\nimport type { IrohRemoteHello } from \"./handshake.ts\";\nimport {\n\tcreateEmptyIrohRemoteHostState,\n\ttype IrohRemoteClient,\n\ttype IrohRemoteGrantedClient,\n\ttype IrohRemoteGrantedRevokedClient,\n\ttype IrohRemoteHostState,\n\ttype IrohRemoteLiveActivityRegistration,\n\ttype IrohRemotePairingSecretTombstone,\n\ttype IrohRemotePendingPairingTicket,\n\ttype IrohRemotePushTarget,\n\ttype IrohRemotePushTargetPlatform,\n\ttype IrohRemotePushTokenEnvironment,\n\ttype IrohRemoteRevokedClient,\n\ttype IrohRemoteWorkspace,\n\ttype IrohRemoteWorkspaceWorktree,\n\tnormalizeIrohRemoteLiveActivityRegistrations,\n\tparseIrohRemoteLiveActivityRegistration,\n\treadIrohRemoteHostState,\n\twriteIrohRemoteHostState,\n} from \"./state.ts\";\nimport {\n\tfindIrohRemoteWorkspace,\n\tgetIrohRemoteWorkspaceStatuses,\n\ttype IrohRemoteWorkspaceAvailabilityClassifier,\n\ttype IrohRemoteWorkspaceStatus,\n\tupsertIrohRemoteWorkspace,\n} from \"./workspace.ts\";\n\nexport interface IrohRemoteHostStateStore {\n\tread(): IrohRemoteHostState | Promise<IrohRemoteHostState>;\n\t/** Resolve only after the supplied snapshot is durably persisted. */\n\twrite(state: IrohRemoteHostState): void | Promise<void>;\n}\n\nexport interface IrohRemoteHostStateManagerOptions {\n\tinitialState?: IrohRemoteHostState;\n\tstatePath?: string;\n\t/** Custom persistence (e.g. the voltd state envelope); mutually exclusive with statePath. */\n\tstore?: IrohRemoteHostStateStore;\n}\n\nexport interface IrohRemoteClientRevocationResult {\n\trevoked: boolean;\n\tclient?: IrohRemoteClient;\n\trevokedClient?: IrohRemoteRevokedClient;\n}\n\nexport interface IrohRemoteClientRePairApprovalResult {\n\tapproved: boolean;\n\trevokedClient?: IrohRemoteRevokedClient;\n}\n\nexport type IrohRemoteClientAccessUpdateResult =\n\t| { ok: true; client: IrohRemoteGrantedClient }\n\t| {\n\t\t\tok: false;\n\t\t\treason: \"not_found\" | \"revision_conflict\" | \"revision_exhausted\";\n\t\t\tcurrentRevision?: number;\n\t };\n\nexport interface IrohRemoteLiveActivityDeliveryChannelLookup {\n\ttokenHash: string;\n\ttokenEnvironment: IrohRemotePushTokenEnvironment;\n\tplatform: IrohRemotePushTargetPlatform;\n}\n\nexport interface IrohRemoteLiveActivityRegistrationResult {\n\tclient?: IrohRemoteClient;\n\tregistration?: IrohRemoteLiveActivityRegistration;\n\treplacedRegistration?: IrohRemoteLiveActivityRegistration;\n}\n\nexport interface IrohRemoteLiveActivityPruneResult {\n\tliveActivityRemoved: boolean;\n\tregistrationsRemoved: number;\n\tpushTarget?: IrohRemotePushTarget;\n}\n\nexport interface IrohRemoteWorkspaceWorktreeLifecycleContext {\n\tworkspace: IrohRemoteWorkspace;\n\tworktrees: IrohRemoteWorkspaceWorktree[];\n}\n\nexport interface IrohRemoteWorkspaceWorktreeLifecycleOutcome<T> {\n\tresult: T;\n\tworktree?: IrohRemoteWorkspaceWorktree;\n}\n\nexport const IROH_REMOTE_WORKSPACE_HAS_WORKTREES_ERROR = \"workspace_has_worktrees\";\nexport const IROH_REMOTE_WORKTREE_PARENT_WORKSPACE_NOT_FOUND_ERROR = \"worktree_parent_workspace_not_found\";\nexport const IROH_REMOTE_WORKTREE_PERSISTENCE_ERROR = \"worktree_persistence_failed\";\n\n/**\n * A workspace with persisted worktree children cannot be unregistered. This\n * typed conflict is thrown from the state mutation itself so every caller,\n * including lower-level ones, gets the same non-destructive invariant.\n */\nexport class IrohRemoteWorkspaceHasWorktreesError extends Error {\n\treadonly code = IROH_REMOTE_WORKSPACE_HAS_WORKTREES_ERROR;\n\treadonly workspaceName: string;\n\treadonly worktreeIds: string[];\n\n\tconstructor(workspaceName: string, worktrees: readonly IrohRemoteWorkspaceWorktree[]) {\n\t\tconst worktreeIds = worktrees.map((worktree) => worktree.id).sort();\n\t\tconst noun = worktreeIds.length === 1 ? \"worktree\" : \"worktrees\";\n\t\tsuper(\n\t\t\t`Workspace ${workspaceName} has ${worktreeIds.length} daemon-managed ${noun} (${worktreeIds.join(\", \")}). ` +\n\t\t\t\t`Remove each with \"volt remote worktree remove <id> --workspace ${workspaceName}\" before unregistering; ` +\n\t\t\t\t\"use --force only to explicitly discard dirty or busy worktrees.\",\n\t\t);\n\t\tthis.name = \"IrohRemoteWorkspaceHasWorktreesError\";\n\t\tthis.workspaceName = workspaceName;\n\t\tthis.worktreeIds = worktreeIds;\n\t}\n}\n\nexport function isIrohRemoteWorkspaceHasWorktreesError(error: unknown): error is IrohRemoteWorkspaceHasWorktreesError {\n\treturn error instanceof IrohRemoteWorkspaceHasWorktreesError;\n}\n\nexport class IrohRemoteWorktreeParentWorkspaceNotFoundError extends Error {\n\treadonly code = IROH_REMOTE_WORKTREE_PARENT_WORKSPACE_NOT_FOUND_ERROR;\n\treadonly workspaceName: string;\n\n\tconstructor(workspaceName: string) {\n\t\tsuper(`Cannot persist a worktree for unregistered workspace ${workspaceName}`);\n\t\tthis.name = \"IrohRemoteWorktreeParentWorkspaceNotFoundError\";\n\t\tthis.workspaceName = workspaceName;\n\t}\n}\n\nexport function isIrohRemoteWorktreeParentWorkspaceNotFoundError(\n\terror: unknown,\n): error is IrohRemoteWorktreeParentWorkspaceNotFoundError {\n\treturn error instanceof IrohRemoteWorktreeParentWorkspaceNotFoundError;\n}\n\nexport class IrohRemoteWorktreePersistenceError extends Error {\n\treadonly code = IROH_REMOTE_WORKTREE_PERSISTENCE_ERROR;\n\treadonly workspaceName: string;\n\treadonly worktreeId: string;\n\n\tconstructor(workspaceName: string, worktreeId: string, cause: unknown) {\n\t\tsuper(`Failed to persist worktree ${worktreeId} for workspace ${workspaceName}`, { cause });\n\t\tthis.name = \"IrohRemoteWorktreePersistenceError\";\n\t\tthis.workspaceName = workspaceName;\n\t\tthis.worktreeId = worktreeId;\n\t}\n}\n\nexport function isIrohRemoteWorktreePersistenceError(error: unknown): error is IrohRemoteWorktreePersistenceError {\n\treturn error instanceof IrohRemoteWorktreePersistenceError;\n}\n\nexport class IrohRemoteHostStateManager {\n\tprivate readonly statePath: string | undefined;\n\tprivate readonly store: IrohRemoteHostStateStore | undefined;\n\tprivate operationQueue: Promise<void> = Promise.resolve();\n\tprivate state: IrohRemoteHostState | undefined;\n\n\tconstructor(options: IrohRemoteHostStateManagerOptions = {}) {\n\t\tif (options.initialState && options.statePath) {\n\t\t\tthrow new Error(\"Cannot provide both initialState and statePath for Iroh remote host state manager\");\n\t\t}\n\t\tif (options.store && (options.statePath || options.initialState)) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Cannot combine a custom store with statePath/initialState for Iroh remote host state manager\",\n\t\t\t);\n\t\t}\n\t\tthis.statePath = options.statePath;\n\t\tthis.store = options.store;\n\t\tthis.state = options.initialState ? cloneHostState(options.initialState) : undefined;\n\t}\n\n\tasync load(): Promise<IrohRemoteHostState> {\n\t\treturn this.runExclusive(async () => cloneHostState(await this.loadUnlocked()));\n\t}\n\n\tasync save(state?: IrohRemoteHostState): Promise<void> {\n\t\tawait this.runExclusive(async () => {\n\t\t\tif (state !== undefined && this.statePath) {\n\t\t\t\tthrow new Error(\"Cannot save explicit Iroh remote host state snapshots for file-backed state\");\n\t\t\t}\n\t\t\tif (state === undefined && this.statePath) {\n\t\t\t\tthis.state = await this.loadUnlocked();\n\t\t\t}\n\t\t\tawait this.saveUnlocked(state !== undefined ? cloneHostState(state) : this.state);\n\t\t});\n\t}\n\n\tasync getState(): Promise<IrohRemoteHostState> {\n\t\treturn this.runExclusive(async () => cloneHostState(await this.loadUnlocked()));\n\t}\n\n\tasync upsertWorkspace(workspace: IrohRemoteWorkspace, allowTools?: string): Promise<IrohRemoteWorkspace> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst savedWorkspace = upsertIrohRemoteWorkspace(state, workspace, allowTools);\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn cloneWorkspace(savedWorkspace);\n\t\t});\n\t}\n\n\tasync unregisterWorkspace(name: string): Promise<IrohRemoteWorkspace | undefined> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst index = state.workspaces.findIndex((workspace) => workspace.name === name);\n\t\t\tif (index === -1) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst worktrees = (state.worktrees ?? []).filter((worktree) => worktree.workspaceName === name);\n\t\t\tif (worktrees.length > 0) {\n\t\t\t\tthrow new IrohRemoteWorkspaceHasWorktreesError(name, worktrees);\n\t\t\t}\n\t\t\tconst [removedWorkspace] = state.workspaces.splice(index, 1);\n\t\t\tstate.pendingPairingTickets = (state.pendingPairingTickets ?? []).filter(\n\t\t\t\t(ticket) => ticket.workspace !== name,\n\t\t\t);\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn removedWorkspace ? cloneWorkspace(removedWorkspace) : undefined;\n\t\t});\n\t}\n\n\t/**\n\t * Serialize a worktree create/adopt side effect with workspace unregister and\n\t * commit its child record in the same state transaction. The operation runs\n\t * while the state lock is held so an unregister cannot observe the gap between\n\t * `git worktree add` and durable child persistence.\n\t */\n\tasync runWorkspaceWorktreeLifecycle<T>(\n\t\tworkspaceName: string,\n\t\toperation: (\n\t\t\tcontext: IrohRemoteWorkspaceWorktreeLifecycleContext,\n\t\t) => Promise<IrohRemoteWorkspaceWorktreeLifecycleOutcome<T>>,\n\t): Promise<T> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst workspace = state.workspaces.find((entry) => entry.name === workspaceName);\n\t\t\tif (!workspace) {\n\t\t\t\tthrow new IrohRemoteWorktreeParentWorkspaceNotFoundError(workspaceName);\n\t\t\t}\n\t\t\tconst outcome = await operation({\n\t\t\t\tworkspace: cloneWorkspace(workspace),\n\t\t\t\tworktrees: (state.worktrees ?? [])\n\t\t\t\t\t.filter((worktree) => worktree.workspaceName === workspaceName)\n\t\t\t\t\t.map((worktree) => cloneWorktree(worktree)),\n\t\t\t});\n\t\t\tif (!outcome.worktree) {\n\t\t\t\treturn outcome.result;\n\t\t\t}\n\t\t\tif (outcome.worktree.workspaceName !== workspaceName) {\n\t\t\t\tthrow new Error(\"Worktree lifecycle result does not match its parent workspace\");\n\t\t\t}\n\n\t\t\tconst previousState = cloneHostState(state);\n\t\t\tstate.worktrees = [\n\t\t\t\t...(state.worktrees ?? []).filter(\n\t\t\t\t\t(entry) => entry.workspaceName !== workspaceName || entry.id !== outcome.worktree?.id,\n\t\t\t\t),\n\t\t\t\tcloneWorktree(outcome.worktree),\n\t\t\t];\n\t\t\ttry {\n\t\t\t\tawait this.saveUnlocked(state);\n\t\t\t} catch (error) {\n\t\t\t\tawait this.restoreAfterFailedWorktreePersistence(previousState);\n\t\t\t\tthrow new IrohRemoteWorktreePersistenceError(workspaceName, outcome.worktree.id, error);\n\t\t\t}\n\t\t\treturn outcome.result;\n\t\t});\n\t}\n\n\tasync upsertWorktree(worktree: IrohRemoteWorkspaceWorktree): Promise<IrohRemoteWorkspaceWorktree> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tif (!state.workspaces.some((workspace) => workspace.name === worktree.workspaceName)) {\n\t\t\t\tthrow new IrohRemoteWorktreeParentWorkspaceNotFoundError(worktree.workspaceName);\n\t\t\t}\n\t\t\tconst previousState = cloneHostState(state);\n\t\t\tstate.worktrees = [\n\t\t\t\t...(state.worktrees ?? []).filter(\n\t\t\t\t\t(entry) => entry.workspaceName !== worktree.workspaceName || entry.id !== worktree.id,\n\t\t\t\t),\n\t\t\t\tcloneWorktree(worktree),\n\t\t\t];\n\t\t\ttry {\n\t\t\t\tawait this.saveUnlocked(state);\n\t\t\t} catch (error) {\n\t\t\t\tawait this.restoreAfterFailedWorktreePersistence(previousState);\n\t\t\t\tthrow new IrohRemoteWorktreePersistenceError(worktree.workspaceName, worktree.id, error);\n\t\t\t}\n\t\t\treturn cloneWorktree(worktree);\n\t\t});\n\t}\n\n\tasync removeWorktree(workspaceName: string, worktreeId: string): Promise<IrohRemoteWorkspaceWorktree | undefined> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst worktrees = state.worktrees ?? [];\n\t\t\tconst removed = worktrees.find((entry) => entry.workspaceName === workspaceName && entry.id === worktreeId);\n\t\t\tif (!removed) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tstate.worktrees = worktrees.filter((entry) => entry !== removed);\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn cloneWorktree(removed);\n\t\t});\n\t}\n\n\tasync listWorktrees(workspaceName?: string): Promise<IrohRemoteWorkspaceWorktree[]> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\treturn (state.worktrees ?? [])\n\t\t\t\t.filter((entry) => workspaceName === undefined || entry.workspaceName === workspaceName)\n\t\t\t\t.map((entry) => cloneWorktree(entry));\n\t\t});\n\t}\n\n\tasync bindWorktreeSession(workspaceName: string, worktreeId: string, sessionId: string): Promise<void> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst worktree = (state.worktrees ?? []).find(\n\t\t\t\t(entry) => entry.workspaceName === workspaceName && entry.id === worktreeId,\n\t\t\t);\n\t\t\tif (!worktree || worktree.sessionIds.includes(sessionId)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tworktree.sessionIds = [...worktree.sessionIds, sessionId];\n\t\t\tawait this.saveUnlocked(state);\n\t\t});\n\t}\n\n\tasync findWorktreeForSession(\n\t\tworkspaceName: string,\n\t\tsessionId: string,\n\t): Promise<IrohRemoteWorkspaceWorktree | undefined> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst worktree = (state.worktrees ?? []).find(\n\t\t\t\t(entry) => entry.workspaceName === workspaceName && entry.sessionIds.includes(sessionId),\n\t\t\t);\n\t\t\treturn worktree ? cloneWorktree(worktree) : undefined;\n\t\t});\n\t}\n\n\tasync listWorkspaceStatuses(\n\t\toptions: { classifyWorkspaceAvailability?: IrohRemoteWorkspaceAvailabilityClassifier } = {},\n\t): Promise<IrohRemoteWorkspaceStatus[]> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\treturn await getIrohRemoteWorkspaceStatuses(state, options.classifyWorkspaceAvailability);\n\t\t});\n\t}\n\n\tasync addPendingPairingTicket(ticket: IrohRemotePendingPairingTicket): Promise<IrohRemotePendingPairingTicket> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tstate.pendingPairingTickets = [\n\t\t\t\t...(state.pendingPairingTickets ?? []).filter((entry) => entry.secretHash !== ticket.secretHash),\n\t\t\t\tclonePendingPairingTicket(ticket),\n\t\t\t];\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn clonePendingPairingTicket(ticket);\n\t\t});\n\t}\n\n\tasync removePendingPairingTicket(secretHash: string): Promise<boolean> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst pending = state.pendingPairingTickets ?? [];\n\t\t\tconst remaining = pending.filter((entry) => entry.secretHash !== secretHash);\n\t\t\tif (remaining.length === pending.length) return false;\n\t\t\tstate.pendingPairingTickets = remaining;\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tasync authorizeClient(\n\t\thello: IrohRemoteHello,\n\t\tremoteNodeId: string,\n\t\toptions: AuthorizeIrohRemoteClientOptions,\n\t): Promise<IrohRemoteClientAuthorizationResult> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst workspaceStatuses = await this.getWorkspaceStatuses(state, options);\n\t\t\tconst workspace = findIrohRemoteWorkspace(state, hello.workspace);\n\t\t\tconst workspaceStatus = workspaceStatuses.find((entry) => entry.name === hello.workspace)?.status;\n\t\t\tconst workspaceAvailable =\n\t\t\t\tworkspace !== undefined &&\n\t\t\t\tworkspaceStatus === \"available\" &&\n\t\t\t\t(options.validateWorkspace === undefined || (await options.validateWorkspace(workspace)));\n\t\t\tconst result = authorizeIrohRemoteClient(state, hello, remoteNodeId, {\n\t\t\t\t...options,\n\t\t\t\tworkspace: workspaceAvailable ? workspace : undefined,\n\t\t\t\tworkspaceStatuses,\n\t\t\t});\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn cloneAuthorizationResult(result);\n\t\t});\n\t}\n\n\tasync listClients(): Promise<IrohRemoteGrantedClient[]> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\treturn state.clients.map((client) => cloneClient(client));\n\t\t});\n\t}\n\n\tasync getClient(nodeId: string): Promise<IrohRemoteGrantedClient | undefined> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\treturn client ? cloneClient(client) : undefined;\n\t\t});\n\t}\n\n\tasync updateClientAccess(\n\t\tnodeId: string,\n\t\texpectedRevision: number,\n\t\taccess: { allowedTools: string; rpcGrant: IrohRemoteRpcGrant },\n\t): Promise<IrohRemoteClientAccessUpdateResult> {\n\t\tif (!Number.isSafeInteger(expectedRevision) || expectedRevision < 1) {\n\t\t\tthrow new Error(\"expected RPC grant revision must be a safe integer greater than or equal to 1\");\n\t\t}\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tif (!client) {\n\t\t\t\treturn { ok: false, reason: \"not_found\" };\n\t\t\t}\n\t\t\tconst currentGrant = parseIrohRemoteRpcGrant(client.rpcGrant, \"client rpcGrant\");\n\t\t\tif (currentGrant.revision !== expectedRevision) {\n\t\t\t\treturn { ok: false, reason: \"revision_conflict\", currentRevision: currentGrant.revision };\n\t\t\t}\n\t\t\tif (currentGrant.revision === Number.MAX_SAFE_INTEGER) {\n\t\t\t\treturn { ok: false, reason: \"revision_exhausted\", currentRevision: currentGrant.revision };\n\t\t\t}\n\t\t\tclient.allowedTools = access.allowedTools;\n\t\t\tclient.rpcGrant = {\n\t\t\t\t...cloneIrohRemoteRpcGrant(access.rpcGrant),\n\t\t\t\trevision: expectedRevision + 1,\n\t\t\t};\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn { ok: true, client: cloneClient(client) };\n\t\t});\n\t}\n\n\tasync listRevokedClients(): Promise<IrohRemoteRevokedClient[]> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\treturn getRevokedClients(state).map((client) => cloneRevokedClient(client));\n\t\t});\n\t}\n\n\tasync setClientLastSessionId(\n\t\tnodeId: string,\n\t\tworkspace: string,\n\t\tsessionId: string,\n\t): Promise<IrohRemoteClient | undefined> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tif (!client) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tclient.lastSessionIdByWorkspace = {\n\t\t\t\t...(client.lastSessionIdByWorkspace ?? {}),\n\t\t\t\t[workspace]: sessionId,\n\t\t\t};\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn cloneClient(client);\n\t\t});\n\t}\n\n\tasync upsertClientPushTarget(\n\t\tnodeId: string,\n\t\tpushTarget: IrohRemotePushTarget,\n\t): Promise<IrohRemoteClient | undefined> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tif (!client) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tlet createdAt = pushTarget.createdAt;\n\t\t\tconst retainedTargets: IrohRemotePushTarget[] = [];\n\t\t\tfor (const existingTarget of client.pushTargets ?? []) {\n\t\t\t\tif (isSamePushTargetSlot(existingTarget, pushTarget)) {\n\t\t\t\t\tcreatedAt = existingTarget.createdAt;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tretainedTargets.push(existingTarget);\n\t\t\t}\n\t\t\tclient.pushTargets = [...retainedTargets, { ...pushTarget, createdAt }];\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn cloneClient(client);\n\t\t});\n\t}\n\n\tasync disableClientPushTarget(\n\t\tnodeId: string,\n\t\tpushTargetId: string,\n\t\tnow = Date.now(),\n\t): Promise<IrohRemotePushTarget | undefined> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tconst pushTarget = client?.pushTargets?.find((entry) => entry.id === pushTargetId);\n\t\t\tif (!pushTarget) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tpushTarget.enabled = false;\n\t\t\tdelete pushTarget.liveActivity;\n\t\t\tpushTarget.updatedAt = now;\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn clonePushTarget(pushTarget);\n\t\t});\n\t}\n\n\tasync findClientLiveActivityDeliveryChannel(\n\t\tnodeId: string,\n\t\tlookup: IrohRemoteLiveActivityDeliveryChannelLookup,\n\t): Promise<IrohRemotePushTarget | undefined> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tconst pushTarget = client?.pushTargets?.find(\n\t\t\t\t(entry) =>\n\t\t\t\t\tentry.platform === lookup.platform &&\n\t\t\t\t\tentry.liveActivity?.tokenHash === lookup.tokenHash &&\n\t\t\t\t\tentry.liveActivity.tokenEnvironment === lookup.tokenEnvironment,\n\t\t\t);\n\t\t\treturn pushTarget ? clonePushTarget(pushTarget) : undefined;\n\t\t});\n\t}\n\n\tasync registerClientLiveActivity(\n\t\tnodeId: string,\n\t\tregistration: IrohRemoteLiveActivityRegistration,\n\t): Promise<IrohRemoteLiveActivityRegistrationResult> {\n\t\tconst validatedRegistration = parseIrohRemoteLiveActivityRegistration(registration);\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tif (!client) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\tlet createdAt = validatedRegistration.createdAt;\n\t\t\tlet replacedRegistration: IrohRemoteLiveActivityRegistration | undefined;\n\t\t\tconst retainedRegistrations: IrohRemoteLiveActivityRegistration[] = [];\n\t\t\tfor (const existingRegistration of client.liveActivities ?? []) {\n\t\t\t\tif (\n\t\t\t\t\t(existingRegistration.workspaceName === validatedRegistration.workspaceName &&\n\t\t\t\t\t\texistingRegistration.sessionId === validatedRegistration.sessionId) ||\n\t\t\t\t\texistingRegistration.activityId === validatedRegistration.activityId\n\t\t\t\t) {\n\t\t\t\t\tcreatedAt = existingRegistration.createdAt;\n\t\t\t\t\treplacedRegistration = existingRegistration;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tretainedRegistrations.push(existingRegistration);\n\t\t\t}\n\t\t\tconst savedRegistration = { ...validatedRegistration, createdAt };\n\t\t\tclient.liveActivities = normalizeIrohRemoteLiveActivityRegistrations([\n\t\t\t\t...retainedRegistrations,\n\t\t\t\tsavedRegistration,\n\t\t\t]);\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn {\n\t\t\t\tclient: cloneClient(client),\n\t\t\t\tregistration: cloneLiveActivityRegistration(savedRegistration),\n\t\t\t\t...(replacedRegistration\n\t\t\t\t\t? { replacedRegistration: cloneLiveActivityRegistration(replacedRegistration) }\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\t});\n\t}\n\n\tasync unregisterClientLiveActivity(\n\t\tnodeId: string,\n\t\tworkspaceName: string,\n\t\tsessionId: string,\n\t\tactivityId: string,\n\t): Promise<boolean> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tif (!client?.liveActivities) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst beforeCount = client.liveActivities.length;\n\t\t\tclient.liveActivities = client.liveActivities.filter(\n\t\t\t\t(entry) =>\n\t\t\t\t\tentry.workspaceName !== workspaceName ||\n\t\t\t\t\tentry.sessionId !== sessionId ||\n\t\t\t\t\tentry.activityId !== activityId,\n\t\t\t);\n\t\t\tconst removed = client.liveActivities.length !== beforeCount;\n\t\t\tif (client.liveActivities.length === 0) {\n\t\t\t\tdelete client.liveActivities;\n\t\t\t}\n\t\t\tif (removed) {\n\t\t\t\tawait this.saveUnlocked(state);\n\t\t\t}\n\t\t\treturn removed;\n\t\t});\n\t}\n\n\tasync pruneClientLiveActivityDeliveryChannel(\n\t\tnodeId: string,\n\t\tregistration: IrohRemoteLiveActivityRegistration,\n\t\tnow = Date.now(),\n\t): Promise<IrohRemoteLiveActivityPruneResult> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tif (!client) {\n\t\t\t\treturn { liveActivityRemoved: false, registrationsRemoved: 0 };\n\t\t\t}\n\n\t\t\tlet registrationsRemoved = 0;\n\t\t\tif (client.liveActivities) {\n\t\t\t\tconst beforeCount = client.liveActivities.length;\n\t\t\t\tclient.liveActivities = client.liveActivities.filter(\n\t\t\t\t\t(entry) => !isSameLiveActivityRegistration(entry, registration),\n\t\t\t\t);\n\t\t\t\tregistrationsRemoved = beforeCount - client.liveActivities.length;\n\t\t\t\tif (client.liveActivities.length === 0) {\n\t\t\t\t\tdelete client.liveActivities;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst pushTarget = client.pushTargets?.find((entry) => {\n\t\t\t\treturn (\n\t\t\t\t\tentry.id === registration.pushTargetId &&\n\t\t\t\t\tentry.platform === registration.platform &&\n\t\t\t\t\tentry.liveActivity?.tokenHash === registration.tokenHash &&\n\t\t\t\t\tentry.liveActivity.tokenEnvironment === registration.tokenEnvironment\n\t\t\t\t);\n\t\t\t});\n\t\t\tconst liveActivityRemoved = pushTarget?.liveActivity !== undefined;\n\t\t\tif (liveActivityRemoved && pushTarget) {\n\t\t\t\tdelete pushTarget.liveActivity;\n\t\t\t\tpushTarget.updatedAt = now;\n\t\t\t}\n\n\t\t\tif (registrationsRemoved > 0 || liveActivityRemoved) {\n\t\t\t\tawait this.saveUnlocked(state);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tliveActivityRemoved,\n\t\t\t\tregistrationsRemoved,\n\t\t\t\t...(pushTarget ? { pushTarget: clonePushTarget(pushTarget) } : {}),\n\t\t\t};\n\t\t});\n\t}\n\n\tasync removeClientLiveActivitiesForSession(\n\t\tnodeId: string,\n\t\tworkspaceName: string,\n\t\tsessionId: string,\n\t): Promise<number> {\n\t\treturn this.removeClientLiveActivities(nodeId, (entry) => {\n\t\t\treturn entry.workspaceName === workspaceName && entry.sessionId === sessionId;\n\t\t});\n\t}\n\n\tasync removeClientLiveActivitiesForWorkspace(nodeId: string, workspaceName: string): Promise<number> {\n\t\treturn this.removeClientLiveActivities(nodeId, (entry) => entry.workspaceName === workspaceName);\n\t}\n\n\tasync removeLiveActivitiesForWorkspace(workspaceName: string): Promise<number> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tlet removedCount = 0;\n\t\t\tfor (const client of state.clients) {\n\t\t\t\tif (!client.liveActivities) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst beforeCount = client.liveActivities.length;\n\t\t\t\tclient.liveActivities = client.liveActivities.filter((entry) => entry.workspaceName !== workspaceName);\n\t\t\t\tremovedCount += beforeCount - client.liveActivities.length;\n\t\t\t\tif (client.liveActivities.length === 0) {\n\t\t\t\t\tdelete client.liveActivities;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (removedCount > 0) {\n\t\t\t\tawait this.saveUnlocked(state);\n\t\t\t}\n\t\t\treturn removedCount;\n\t\t});\n\t}\n\n\tasync revokeClient(nodeId: string, now = Date.now()): Promise<IrohRemoteClientRevocationResult> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst clientIndex = state.clients.findIndex((client) => client.nodeId === nodeId);\n\t\t\tif (clientIndex === -1) {\n\t\t\t\tconst revokedClient = getRevokedClients(state).find((client) => client.nodeId === nodeId);\n\t\t\t\treturn {\n\t\t\t\t\trevoked: false,\n\t\t\t\t\t...(revokedClient ? { revokedClient: cloneRevokedClient(revokedClient) } : {}),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst [client] = state.clients.splice(clientIndex, 1);\n\t\t\tconst revokedClient: IrohRemoteRevokedClient = {\n\t\t\t\tnodeId: client.nodeId,\n\t\t\t\tlabel: client.label,\n\t\t\t\tallowedWorkspaces: [...client.allowedWorkspaces],\n\t\t\t\tallowedTools: client.allowedTools,\n\t\t\t\trpcGrant: parseIrohRemoteRpcGrant(client.rpcGrant, \"client rpcGrant\"),\n\t\t\t\tpairedAt: client.pairedAt,\n\t\t\t\tlastSeenAt: client.lastSeenAt,\n\t\t\t\trevokedAt: now,\n\t\t\t\t...(client.lastSessionIdByWorkspace\n\t\t\t\t\t? { lastSessionIdByWorkspace: { ...client.lastSessionIdByWorkspace } }\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\t\tstate.revokedClients = [...getRevokedClients(state).filter((entry) => entry.nodeId !== nodeId), revokedClient];\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn { revoked: true, client: cloneClient(client), revokedClient: cloneRevokedClient(revokedClient) };\n\t\t});\n\t}\n\n\tasync approveClientRePair(nodeId: string, now = Date.now()): Promise<IrohRemoteClientRePairApprovalResult> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst revokedClient = getRevokedClients(state).find((client) => client.nodeId === nodeId);\n\t\t\tif (!revokedClient) {\n\t\t\t\treturn { approved: false };\n\t\t\t}\n\t\t\trevokedClient.rePairApprovedAt = now;\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn { approved: true, revokedClient: cloneRevokedClient(revokedClient) };\n\t\t});\n\t}\n\n\tprivate async getWorkspaceStatuses(\n\t\tstate: IrohRemoteHostState,\n\t\toptions: AuthorizeIrohRemoteClientOptions,\n\t): Promise<IrohRemoteWorkspaceStatus[]> {\n\t\treturn await getIrohRemoteWorkspaceStatuses(state, options.classifyWorkspaceAvailability);\n\t}\n\n\tprivate runExclusive<T>(operation: () => T | Promise<T>): Promise<T> {\n\t\tconst run = this.operationQueue.then(\n\t\t\t() => this.withStateFileLock(operation),\n\t\t\t() => this.withStateFileLock(operation),\n\t\t);\n\t\tthis.operationQueue = run.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\treturn run;\n\t}\n\n\tprivate async withStateFileLock<T>(operation: () => T | Promise<T>): Promise<T> {\n\t\tif (!this.statePath) {\n\t\t\treturn await operation();\n\t\t}\n\n\t\tawait mkdir(dirname(this.statePath), { recursive: true });\n\t\tlet release: (() => Promise<void>) | undefined;\n\t\tlet lockCompromised = false;\n\t\tlet lockCompromisedError: Error | undefined;\n\t\tconst throwIfCompromised = () => {\n\t\t\tif (lockCompromised) {\n\t\t\t\tthrow lockCompromisedError ?? new Error(\"Iroh remote host state lock was compromised\");\n\t\t\t}\n\t\t};\n\n\t\ttry {\n\t\t\trelease = await lockfile.lock(this.statePath, {\n\t\t\t\tlockfilePath: `${this.statePath}.lock`,\n\t\t\t\trealpath: false,\n\t\t\t\tretries: {\n\t\t\t\t\tretries: 10,\n\t\t\t\t\tfactor: 2,\n\t\t\t\t\tminTimeout: 100,\n\t\t\t\t\tmaxTimeout: 10000,\n\t\t\t\t\trandomize: true,\n\t\t\t\t},\n\t\t\t\tstale: 30000,\n\t\t\t\tonCompromised: (error) => {\n\t\t\t\t\tlockCompromised = true;\n\t\t\t\t\tlockCompromisedError = error;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tthrowIfCompromised();\n\t\t\tconst result = await operation();\n\t\t\tthrowIfCompromised();\n\t\t\treturn result;\n\t\t} finally {\n\t\t\tif (release) {\n\t\t\t\ttry {\n\t\t\t\t\tawait release();\n\t\t\t\t} catch {\n\t\t\t\t\t// Ignore unlock errors after a compromised lock.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async loadUnlocked(): Promise<IrohRemoteHostState> {\n\t\tif (this.store) {\n\t\t\tthis.state = cloneHostState(await this.store.read());\n\t\t\treturn this.state;\n\t\t}\n\t\tif (this.statePath) {\n\t\t\tthis.state = await readIrohRemoteHostState(this.statePath);\n\t\t\treturn this.state;\n\t\t}\n\t\tthis.state ??= createEmptyIrohRemoteHostState();\n\t\treturn this.state;\n\t}\n\n\tprivate async saveUnlocked(state: IrohRemoteHostState | undefined): Promise<void> {\n\t\tconst stateToSave = state ? cloneHostState(state) : createEmptyIrohRemoteHostState();\n\t\tthis.state = stateToSave;\n\t\tif (this.store) {\n\t\t\tawait this.store.write(cloneHostState(stateToSave));\n\t\t\treturn;\n\t\t}\n\t\tif (this.statePath) {\n\t\t\tawait writeIrohRemoteHostState(this.statePath, stateToSave);\n\t\t}\n\t}\n\n\tprivate async restoreAfterFailedWorktreePersistence(previousState: IrohRemoteHostState): Promise<void> {\n\t\tconst restoredState = cloneHostState(previousState);\n\t\tthis.state = restoredState;\n\t\tif (!this.store) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait this.store.write(cloneHostState(restoredState));\n\t\t\tthis.state = restoredState;\n\t\t} catch {\n\t\t\t// A failed rollback may leave the child record in the custom store, which\n\t\t\t// is safer than deleting a checkout whose persistence outcome is unknown.\n\t\t}\n\t}\n\n\tprivate async removeClientLiveActivities(\n\t\tnodeId: string,\n\t\tshouldRemove: (registration: IrohRemoteLiveActivityRegistration) => boolean,\n\t): Promise<number> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tif (!client?.liveActivities) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tconst beforeCount = client.liveActivities.length;\n\t\t\tclient.liveActivities = client.liveActivities.filter((entry) => !shouldRemove(entry));\n\t\t\tconst removedCount = beforeCount - client.liveActivities.length;\n\t\t\tif (client.liveActivities.length === 0) {\n\t\t\t\tdelete client.liveActivities;\n\t\t\t}\n\t\t\tif (removedCount > 0) {\n\t\t\t\tawait this.saveUnlocked(state);\n\t\t\t}\n\t\t\treturn removedCount;\n\t\t});\n\t}\n}\n\nfunction cloneAuthorizationResult(result: IrohRemoteClientAuthorizationResult): IrohRemoteClientAuthorizationResult {\n\tif (!result.ok) {\n\t\treturn {\n\t\t\t...result,\n\t\t\t...(result.client ? { client: cloneClient(result.client) } : {}),\n\t\t\t...(result.expiredPairingTickets\n\t\t\t\t? { expiredPairingTickets: result.expiredPairingTickets.map((ticket) => clonePendingPairingTicket(ticket)) }\n\t\t\t\t: {}),\n\t\t\t...(result.workspace ? { workspace: cloneWorkspace(result.workspace) } : {}),\n\t\t};\n\t}\n\treturn {\n\t\t...result,\n\t\tclient: cloneClient(result.client),\n\t\t...(result.consumedPairingTicket\n\t\t\t? { consumedPairingTicket: clonePendingPairingTicket(result.consumedPairingTicket) }\n\t\t\t: {}),\n\t\t...(result.expiredPairingTickets\n\t\t\t? { expiredPairingTickets: result.expiredPairingTickets.map((ticket) => clonePendingPairingTicket(ticket)) }\n\t\t\t: {}),\n\t\tworkspace: cloneWorkspace(result.workspace),\n\t\tworkspaceNames: [...result.workspaceNames],\n\t\tworkspaces: result.workspaces.map((workspace) => ({ ...workspace })),\n\t};\n}\n\nfunction cloneClient(client: IrohRemoteClient): IrohRemoteGrantedClient {\n\treturn {\n\t\t...client,\n\t\tallowedWorkspaces: [...client.allowedWorkspaces],\n\t\trpcGrant: parseIrohRemoteRpcGrant(client.rpcGrant, \"client rpcGrant\"),\n\t\t...(client.lastSessionIdByWorkspace ? { lastSessionIdByWorkspace: { ...client.lastSessionIdByWorkspace } } : {}),\n\t\t...(client.pushTargets ? { pushTargets: client.pushTargets.map((target) => clonePushTarget(target)) } : {}),\n\t\t...(client.liveActivities\n\t\t\t? { liveActivities: client.liveActivities.map((registration) => cloneLiveActivityRegistration(registration)) }\n\t\t\t: {}),\n\t};\n}\n\nfunction cloneHostState(state: IrohRemoteHostState): IrohRemoteHostState {\n\treturn {\n\t\thostSecretKey: state.hostSecretKey ? [...state.hostSecretKey] : undefined,\n\t\tpairingSecretTombstones: (state.pairingSecretTombstones ?? []).map((tombstone) =>\n\t\t\tclonePairingSecretTombstone(tombstone),\n\t\t),\n\t\tworkspaces: state.workspaces.map((workspace) => cloneWorkspace(workspace)),\n\t\tworktrees: (state.worktrees ?? []).map((worktree) => cloneWorktree(worktree)),\n\t\tclients: state.clients.map((client) => cloneClient(client)),\n\t\trevokedClients: (state.revokedClients ?? []).map((client) => cloneRevokedClient(client)),\n\t\tpendingPairingTickets: (state.pendingPairingTickets ?? []).map((ticket) => clonePendingPairingTicket(ticket)),\n\t};\n}\n\nfunction clonePairingSecretTombstone(tombstone: IrohRemotePairingSecretTombstone): IrohRemotePairingSecretTombstone {\n\treturn { ...tombstone };\n}\n\nfunction clonePendingPairingTicket(ticket: IrohRemotePendingPairingTicket): IrohRemotePendingPairingTicket {\n\treturn {\n\t\t...ticket,\n\t\t...(ticket.rpcGrant === undefined ? {} : { rpcGrant: cloneIrohRemoteRpcGrant(ticket.rpcGrant) }),\n\t};\n}\n\nfunction clonePushTarget(pushTarget: IrohRemotePushTarget): IrohRemotePushTarget {\n\treturn {\n\t\t...pushTarget,\n\t\t...(pushTarget.liveActivity ? { liveActivity: { ...pushTarget.liveActivity } } : {}),\n\t};\n}\n\nfunction cloneLiveActivityRegistration(\n\tregistration: IrohRemoteLiveActivityRegistration,\n): IrohRemoteLiveActivityRegistration {\n\treturn { ...registration };\n}\n\nfunction cloneRevokedClient(client: IrohRemoteRevokedClient): IrohRemoteGrantedRevokedClient {\n\treturn {\n\t\t...client,\n\t\tallowedWorkspaces: [...client.allowedWorkspaces],\n\t\trpcGrant: parseIrohRemoteRpcGrant(client.rpcGrant, \"revoked client rpcGrant\"),\n\t\t...(client.lastSessionIdByWorkspace ? { lastSessionIdByWorkspace: { ...client.lastSessionIdByWorkspace } } : {}),\n\t};\n}\n\nfunction cloneWorkspace(workspace: IrohRemoteWorkspace): IrohRemoteWorkspace {\n\treturn { ...workspace };\n}\n\nfunction cloneWorktree(worktree: IrohRemoteWorkspaceWorktree): IrohRemoteWorkspaceWorktree {\n\treturn { ...worktree, sessionIds: [...worktree.sessionIds] };\n}\n\nfunction getRevokedClients(state: IrohRemoteHostState): IrohRemoteRevokedClient[] {\n\tstate.revokedClients ??= [];\n\treturn state.revokedClients;\n}\n\nfunction isSamePushTargetSlot(a: IrohRemotePushTarget, b: IrohRemotePushTarget): boolean {\n\treturn a.id === b.id || (a.provider === b.provider && a.platform === b.platform);\n}\n\nfunction isSameLiveActivityRegistration(\n\ta: IrohRemoteLiveActivityRegistration,\n\tb: IrohRemoteLiveActivityRegistration,\n): boolean {\n\treturn (\n\t\ta.workspaceName === b.workspaceName &&\n\t\ta.sessionId === b.sessionId &&\n\t\ta.activityId === b.activityId &&\n\t\ta.tokenHash === b.tokenHash &&\n\t\ta.tokenEnvironment === b.tokenEnvironment &&\n\t\ta.platform === b.platform &&\n\t\ta.pushTargetId === b.pushTargetId\n\t);\n}\n"]}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { type IrohRemoteRpcGrant } from "./access-grant.ts";
|
|
2
|
+
export interface IrohRemoteWorkspace {
|
|
3
|
+
name: string;
|
|
4
|
+
path: string;
|
|
5
|
+
allowedTools?: string;
|
|
6
|
+
}
|
|
7
|
+
/** A daemon-managed git worktree, keyed under its parent workspace. */
|
|
8
|
+
export interface IrohRemoteWorkspaceWorktree {
|
|
9
|
+
/** ^[a-z0-9][a-z0-9._-]{0,63}$ — unique per workspace. */
|
|
10
|
+
id: string;
|
|
11
|
+
workspaceName: string;
|
|
12
|
+
/** Absolute checkout path; host-local, never sent on the wire. */
|
|
13
|
+
path: string;
|
|
14
|
+
/** Registered-workspace-relative git repo root this worktree was created from. Omitted for the workspace root. */
|
|
15
|
+
sourceRootRelativePath?: string;
|
|
16
|
+
branch: string;
|
|
17
|
+
baseRef?: string;
|
|
18
|
+
createdAt: number;
|
|
19
|
+
/** Sessions bound to this worktree (usually exactly one). */
|
|
20
|
+
sessionIds: string[];
|
|
21
|
+
}
|
|
22
|
+
export type IrohRemotePushTargetProvider = "fcm";
|
|
23
|
+
export type IrohRemotePushTargetPlatform = "ios";
|
|
24
|
+
export type IrohRemotePushTokenEnvironment = "development" | "production";
|
|
25
|
+
export interface IrohRemoteLiveActivityTarget {
|
|
26
|
+
activityId: string;
|
|
27
|
+
pushToken: string;
|
|
28
|
+
tokenHash?: string;
|
|
29
|
+
tokenEnvironment?: IrohRemotePushTokenEnvironment;
|
|
30
|
+
updatedAt: number;
|
|
31
|
+
}
|
|
32
|
+
export interface IrohRemotePushTarget {
|
|
33
|
+
id: string;
|
|
34
|
+
provider: IrohRemotePushTargetProvider;
|
|
35
|
+
platform: IrohRemotePushTargetPlatform;
|
|
36
|
+
pushTargetAuthToken: string;
|
|
37
|
+
relayUrl?: string;
|
|
38
|
+
tokenHash?: string;
|
|
39
|
+
liveActivity?: IrohRemoteLiveActivityTarget;
|
|
40
|
+
enabled: boolean;
|
|
41
|
+
createdAt: number;
|
|
42
|
+
updatedAt: number;
|
|
43
|
+
}
|
|
44
|
+
export interface IrohRemoteLiveActivityRegistration {
|
|
45
|
+
workspaceName: string;
|
|
46
|
+
sessionId: string;
|
|
47
|
+
activityId: string;
|
|
48
|
+
tokenHash: string;
|
|
49
|
+
tokenEnvironment: IrohRemotePushTokenEnvironment;
|
|
50
|
+
platform: IrohRemotePushTargetPlatform;
|
|
51
|
+
pushTargetId: string;
|
|
52
|
+
createdAt: number;
|
|
53
|
+
updatedAt: number;
|
|
54
|
+
}
|
|
55
|
+
export declare const MAX_IROH_REMOTE_LIVE_ACTIVITIES_PER_CLIENT = 32;
|
|
56
|
+
export declare const MAX_IROH_REMOTE_LIVE_ACTIVITY_SCOPE_BYTES = 512;
|
|
57
|
+
export declare const MAX_IROH_REMOTE_LIVE_ACTIVITY_ID_BYTES = 512;
|
|
58
|
+
export declare const MAX_IROH_REMOTE_LIVE_ACTIVITY_ID_CODE_POINTS = 128;
|
|
59
|
+
export interface IrohRemoteClient {
|
|
60
|
+
nodeId: string;
|
|
61
|
+
label: string;
|
|
62
|
+
allowedWorkspaces: string[];
|
|
63
|
+
allowedTools: string;
|
|
64
|
+
rpcGrant?: IrohRemoteRpcGrant;
|
|
65
|
+
pairedAt: number;
|
|
66
|
+
lastSeenAt: number;
|
|
67
|
+
lastSessionIdByWorkspace?: Record<string, string>;
|
|
68
|
+
pushTargets?: IrohRemotePushTarget[];
|
|
69
|
+
liveActivities?: IrohRemoteLiveActivityRegistration[];
|
|
70
|
+
}
|
|
71
|
+
export type IrohRemoteGrantedClient = IrohRemoteClient & {
|
|
72
|
+
rpcGrant: IrohRemoteRpcGrant;
|
|
73
|
+
};
|
|
74
|
+
export interface IrohRemoteRevokedClient {
|
|
75
|
+
nodeId: string;
|
|
76
|
+
label: string;
|
|
77
|
+
allowedWorkspaces: string[];
|
|
78
|
+
allowedTools: string;
|
|
79
|
+
rpcGrant?: IrohRemoteRpcGrant;
|
|
80
|
+
pairedAt: number;
|
|
81
|
+
lastSeenAt: number;
|
|
82
|
+
revokedAt: number;
|
|
83
|
+
lastSessionIdByWorkspace?: Record<string, string>;
|
|
84
|
+
rePairApprovedAt?: number;
|
|
85
|
+
}
|
|
86
|
+
export type IrohRemoteGrantedRevokedClient = IrohRemoteRevokedClient & {
|
|
87
|
+
rpcGrant: IrohRemoteRpcGrant;
|
|
88
|
+
};
|
|
89
|
+
export interface IrohRemotePendingPairingTicket {
|
|
90
|
+
secretHash: string;
|
|
91
|
+
workspace: string;
|
|
92
|
+
allowedTools: string;
|
|
93
|
+
rpcGrant?: IrohRemoteRpcGrant;
|
|
94
|
+
expiresAt: number;
|
|
95
|
+
createdAt: number;
|
|
96
|
+
labelHint?: string;
|
|
97
|
+
}
|
|
98
|
+
export type IrohRemoteGrantedPendingPairingTicket = IrohRemotePendingPairingTicket & {
|
|
99
|
+
rpcGrant: IrohRemoteRpcGrant;
|
|
100
|
+
};
|
|
101
|
+
export type IrohRemotePairingSecretTombstoneOutcome = "pairing_secret_consumed" | "pairing_secret_expired";
|
|
102
|
+
export interface IrohRemotePairingSecretTombstone {
|
|
103
|
+
secretHash: string;
|
|
104
|
+
workspace: string;
|
|
105
|
+
outcome: IrohRemotePairingSecretTombstoneOutcome;
|
|
106
|
+
retainUntil: number;
|
|
107
|
+
createdAt?: number;
|
|
108
|
+
expiresAt?: number;
|
|
109
|
+
labelHint?: string;
|
|
110
|
+
consumedAt?: number;
|
|
111
|
+
clientNodeId?: string;
|
|
112
|
+
expiredAt?: number;
|
|
113
|
+
}
|
|
114
|
+
export interface IrohRemoteHostState {
|
|
115
|
+
hostSecretKey?: number[];
|
|
116
|
+
pairingSecretTombstones?: IrohRemotePairingSecretTombstone[];
|
|
117
|
+
workspaces: IrohRemoteWorkspace[];
|
|
118
|
+
worktrees?: IrohRemoteWorkspaceWorktree[];
|
|
119
|
+
clients: IrohRemoteClient[];
|
|
120
|
+
revokedClients?: IrohRemoteRevokedClient[];
|
|
121
|
+
pendingPairingTickets?: IrohRemotePendingPairingTicket[];
|
|
122
|
+
}
|
|
123
|
+
export declare function createEmptyIrohRemoteHostState(): IrohRemoteHostState;
|
|
124
|
+
export declare function readIrohRemoteHostState(path: string): Promise<IrohRemoteHostState>;
|
|
125
|
+
export declare function writeIrohRemoteHostState(path: string, state: IrohRemoteHostState): Promise<void>;
|
|
126
|
+
export declare function parseIrohRemoteHostState(value: unknown): IrohRemoteHostState;
|
|
127
|
+
export declare function parseIrohRemoteWorkspace(value: unknown): IrohRemoteWorkspace;
|
|
128
|
+
export declare function parseIrohRemoteWorkspaceWorktree(value: unknown): IrohRemoteWorkspaceWorktree;
|
|
129
|
+
export declare function parseIrohRemoteClient(value: unknown): IrohRemoteClient;
|
|
130
|
+
export declare function parseIrohRemotePushTarget(value: unknown): IrohRemotePushTarget;
|
|
131
|
+
export declare function parseIrohRemoteLiveActivityRegistration(value: unknown): IrohRemoteLiveActivityRegistration;
|
|
132
|
+
/**
|
|
133
|
+
* Normalize legacy registration arrays into the same bounded shape enforced at
|
|
134
|
+
* mutation time: one newest entry per workspace/session and the newest 32
|
|
135
|
+
* sessions overall, ordered oldest-first for deterministic future eviction.
|
|
136
|
+
*/
|
|
137
|
+
export declare function normalizeIrohRemoteLiveActivityRegistrations(registrations: readonly IrohRemoteLiveActivityRegistration[]): IrohRemoteLiveActivityRegistration[];
|
|
138
|
+
export declare function parseIrohRemoteRevokedClient(value: unknown): IrohRemoteRevokedClient;
|
|
139
|
+
export declare function parseIrohRemotePairingSecretTombstone(value: unknown): IrohRemotePairingSecretTombstone;
|
|
140
|
+
export declare function parseIrohRemotePendingPairingTicket(value: unknown): IrohRemotePendingPairingTicket;
|
|
141
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../src/core/remote/iroh/state.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"node:buffer\";\nimport { readFile } from \"node:fs/promises\";\nimport { writeDurableAtomicFile } from \"../../../utils/durable-atomic-write.ts\";\nimport { cloneIrohRemoteRpcGrant, type IrohRemoteRpcGrant, parseIrohRemoteRpcGrant } from \"./access-grant.ts\";\nimport {\n\tDEFAULT_IROH_REMOTE_ALLOW_TOOLS,\n\tisIrohRemoteWorkingDirectory,\n\tisIrohRemoteWorktreeId,\n\tnormalizeIrohRemoteAllowTools,\n} from \"./protocol.ts\";\n\nexport interface IrohRemoteWorkspace {\n\tname: string;\n\tpath: string;\n\tallowedTools?: string;\n}\n\n/** A daemon-managed git worktree, keyed under its parent workspace. */\nexport interface IrohRemoteWorkspaceWorktree {\n\t/** ^[a-z0-9][a-z0-9._-]{0,63}$ — unique per workspace. */\n\tid: string;\n\tworkspaceName: string;\n\t/** Absolute checkout path; host-local, never sent on the wire. */\n\tpath: string;\n\t/** Registered-workspace-relative git repo root this worktree was created from. Omitted for the workspace root. */\n\tsourceRootRelativePath?: string;\n\tbranch: string;\n\tbaseRef?: string;\n\tcreatedAt: number;\n\t/** Sessions bound to this worktree (usually exactly one). */\n\tsessionIds: string[];\n}\n\nexport type IrohRemotePushTargetProvider = \"fcm\";\nexport type IrohRemotePushTargetPlatform = \"ios\";\nexport type IrohRemotePushTokenEnvironment = \"development\" | \"production\";\n\nexport interface IrohRemoteLiveActivityTarget {\n\tactivityId: string;\n\tpushToken: string;\n\ttokenHash?: string;\n\ttokenEnvironment?: IrohRemotePushTokenEnvironment;\n\tupdatedAt: number;\n}\n\nexport interface IrohRemotePushTarget {\n\tid: string;\n\tprovider: IrohRemotePushTargetProvider;\n\tplatform: IrohRemotePushTargetPlatform;\n\tpushTargetAuthToken: string;\n\trelayUrl?: string;\n\ttokenHash?: string;\n\tliveActivity?: IrohRemoteLiveActivityTarget;\n\tenabled: boolean;\n\tcreatedAt: number;\n\tupdatedAt: number;\n}\n\nexport interface IrohRemoteLiveActivityRegistration {\n\tworkspaceName: string;\n\tsessionId: string;\n\tactivityId: string;\n\ttokenHash: string;\n\ttokenEnvironment: IrohRemotePushTokenEnvironment;\n\tplatform: IrohRemotePushTargetPlatform;\n\tpushTargetId: string;\n\tcreatedAt: number;\n\tupdatedAt: number;\n}\n\nexport const MAX_IROH_REMOTE_LIVE_ACTIVITIES_PER_CLIENT = 32;\nexport const MAX_IROH_REMOTE_LIVE_ACTIVITY_SCOPE_BYTES = 512;\nexport const MAX_IROH_REMOTE_LIVE_ACTIVITY_ID_BYTES = 512;\nexport const MAX_IROH_REMOTE_LIVE_ACTIVITY_ID_CODE_POINTS = 128;\n\nexport interface IrohRemoteClient {\n\tnodeId: string;\n\tlabel: string;\n\tallowedWorkspaces: string[];\n\tallowedTools: string;\n\trpcGrant?: IrohRemoteRpcGrant;\n\tpairedAt: number;\n\tlastSeenAt: number;\n\tlastSessionIdByWorkspace?: Record<string, string>;\n\tpushTargets?: IrohRemotePushTarget[];\n\tliveActivities?: IrohRemoteLiveActivityRegistration[];\n}\n\nexport type IrohRemoteGrantedClient = IrohRemoteClient & { rpcGrant: IrohRemoteRpcGrant };\n\nexport interface IrohRemoteRevokedClient {\n\tnodeId: string;\n\tlabel: string;\n\tallowedWorkspaces: string[];\n\tallowedTools: string;\n\trpcGrant?: IrohRemoteRpcGrant;\n\tpairedAt: number;\n\tlastSeenAt: number;\n\trevokedAt: number;\n\tlastSessionIdByWorkspace?: Record<string, string>;\n\trePairApprovedAt?: number;\n}\n\nexport type IrohRemoteGrantedRevokedClient = IrohRemoteRevokedClient & { rpcGrant: IrohRemoteRpcGrant };\n\nexport interface IrohRemotePendingPairingTicket {\n\tsecretHash: string;\n\tworkspace: string;\n\tallowedTools: string;\n\trpcGrant?: IrohRemoteRpcGrant;\n\texpiresAt: number;\n\tcreatedAt: number;\n\tlabelHint?: string;\n}\n\nexport type IrohRemoteGrantedPendingPairingTicket = IrohRemotePendingPairingTicket & {\n\trpcGrant: IrohRemoteRpcGrant;\n};\n\nexport type IrohRemotePairingSecretTombstoneOutcome = \"pairing_secret_consumed\" | \"pairing_secret_expired\";\n\nexport interface IrohRemotePairingSecretTombstone {\n\tsecretHash: string;\n\tworkspace: string;\n\toutcome: IrohRemotePairingSecretTombstoneOutcome;\n\tretainUntil: number;\n\tcreatedAt?: number;\n\texpiresAt?: number;\n\tlabelHint?: string;\n\tconsumedAt?: number;\n\tclientNodeId?: string;\n\texpiredAt?: number;\n}\n\nexport interface IrohRemoteHostState {\n\thostSecretKey?: number[];\n\tpairingSecretTombstones?: IrohRemotePairingSecretTombstone[];\n\tworkspaces: IrohRemoteWorkspace[];\n\tworktrees?: IrohRemoteWorkspaceWorktree[];\n\tclients: IrohRemoteClient[];\n\trevokedClients?: IrohRemoteRevokedClient[];\n\tpendingPairingTickets?: IrohRemotePendingPairingTicket[];\n}\n\nexport function createEmptyIrohRemoteHostState(): IrohRemoteHostState {\n\treturn {\n\t\thostSecretKey: undefined,\n\t\tpairingSecretTombstones: [],\n\t\tworkspaces: [],\n\t\tworktrees: [],\n\t\tclients: [],\n\t\trevokedClients: [],\n\t\tpendingPairingTickets: [],\n\t};\n}\n\nexport async function readIrohRemoteHostState(path: string): Promise<IrohRemoteHostState> {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(await readFile(path, \"utf8\"));\n\t} catch (error: unknown) {\n\t\tif (isNodeErrorWithCode(error, \"ENOENT\")) {\n\t\t\treturn createEmptyIrohRemoteHostState();\n\t\t}\n\t\tthrow error;\n\t}\n\treturn parseIrohRemoteHostState(parsed);\n}\n\nexport async function writeIrohRemoteHostState(path: string, state: IrohRemoteHostState): Promise<void> {\n\tawait writeDurableAtomicFile(path, `${JSON.stringify(serializeIrohRemoteHostState(state), null, 2)}\\n`);\n}\n\nexport function parseIrohRemoteHostState(value: unknown): IrohRemoteHostState {\n\tconst state = expectRecord(value, \"Iroh remote host state\");\n\treturn {\n\t\thostSecretKey: parseOptionalByteArray(state.hostSecretKey, \"hostSecretKey\"),\n\t\tpairingSecretTombstones: parseOptionalArray(\n\t\t\tstate.pairingSecretTombstones,\n\t\t\t\"pairingSecretTombstones\",\n\t\t\tparseIrohRemotePairingSecretTombstone,\n\t\t),\n\t\tworkspaces: parseArray(state.workspaces, \"workspaces\", parseIrohRemoteWorkspace),\n\t\tworktrees: parseOptionalArray(state.worktrees, \"worktrees\", parseIrohRemoteWorkspaceWorktree),\n\t\tclients: parseArray(state.clients, \"clients\", parseIrohRemoteClient),\n\t\trevokedClients: parseOptionalArray(state.revokedClients, \"revokedClients\", parseIrohRemoteRevokedClient),\n\t\tpendingPairingTickets: parseOptionalArray(\n\t\t\tstate.pendingPairingTickets,\n\t\t\t\"pendingPairingTickets\",\n\t\t\tparseIrohRemotePendingPairingTicket,\n\t\t),\n\t};\n}\n\nfunction serializeIrohRemoteHostState(state: IrohRemoteHostState): IrohRemoteHostState {\n\treturn {\n\t\thostSecretKey: state.hostSecretKey ? [...state.hostSecretKey] : undefined,\n\t\tpairingSecretTombstones: (state.pairingSecretTombstones ?? []).map((tombstone) => ({ ...tombstone })),\n\t\tworkspaces: state.workspaces.map((workspace) => ({ ...workspace })),\n\t\tworktrees: (state.worktrees ?? []).map((worktree) => ({ ...worktree, sessionIds: [...worktree.sessionIds] })),\n\t\tclients: state.clients.map((client) => ({\n\t\t\t...client,\n\t\t\tallowedWorkspaces: [...client.allowedWorkspaces],\n\t\t\t...(client.rpcGrant === undefined ? {} : { rpcGrant: cloneIrohRemoteRpcGrant(client.rpcGrant) }),\n\t\t\t...(client.lastSessionIdByWorkspace\n\t\t\t\t? { lastSessionIdByWorkspace: { ...client.lastSessionIdByWorkspace } }\n\t\t\t\t: {}),\n\t\t\t...(client.pushTargets\n\t\t\t\t? {\n\t\t\t\t\t\tpushTargets: client.pushTargets.map((target) => ({\n\t\t\t\t\t\t\t...target,\n\t\t\t\t\t\t\t...(target.liveActivity ? { liveActivity: { ...target.liveActivity } } : {}),\n\t\t\t\t\t\t})),\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(client.liveActivities\n\t\t\t\t? { liveActivities: client.liveActivities.map((registration) => ({ ...registration })) }\n\t\t\t\t: {}),\n\t\t})),\n\t\trevokedClients: (state.revokedClients ?? []).map((client) => ({\n\t\t\t...client,\n\t\t\tallowedWorkspaces: [...client.allowedWorkspaces],\n\t\t\t...(client.rpcGrant === undefined ? {} : { rpcGrant: cloneIrohRemoteRpcGrant(client.rpcGrant) }),\n\t\t\t...(client.lastSessionIdByWorkspace\n\t\t\t\t? { lastSessionIdByWorkspace: { ...client.lastSessionIdByWorkspace } }\n\t\t\t\t: {}),\n\t\t})),\n\t\tpendingPairingTickets: (state.pendingPairingTickets ?? []).map((ticket) => ({\n\t\t\t...ticket,\n\t\t\t...(ticket.rpcGrant === undefined ? {} : { rpcGrant: cloneIrohRemoteRpcGrant(ticket.rpcGrant) }),\n\t\t})),\n\t};\n}\n\nexport function parseIrohRemoteWorkspace(value: unknown): IrohRemoteWorkspace {\n\tconst workspace = expectRecord(value, \"Iroh remote workspace\");\n\tconst allowedTools = expectOptionalAllowTools(workspace.allowedTools, \"workspace allowedTools\");\n\treturn {\n\t\tname: expectString(workspace.name, \"workspace name\"),\n\t\tpath: expectString(workspace.path, \"workspace path\"),\n\t\tallowedTools: allowedTools === undefined ? undefined : normalizeIrohRemoteAllowTools(allowedTools),\n\t};\n}\n\nexport function parseIrohRemoteWorkspaceWorktree(value: unknown): IrohRemoteWorkspaceWorktree {\n\tconst worktree = expectRecord(value, \"Iroh remote worktree\");\n\tconst baseRef = expectOptionalString(worktree.baseRef, \"worktree baseRef\");\n\tconst sourceRootRelativePath = expectOptionalWorkspaceRelativePath(\n\t\tworktree.sourceRootRelativePath,\n\t\t\"worktree sourceRootRelativePath\",\n\t);\n\treturn {\n\t\tid: expectWorktreeId(worktree.id),\n\t\tworkspaceName: expectString(worktree.workspaceName, \"worktree workspaceName\"),\n\t\tpath: expectString(worktree.path, \"worktree path\"),\n\t\t...(sourceRootRelativePath === undefined ? {} : { sourceRootRelativePath }),\n\t\tbranch: expectString(worktree.branch, \"worktree branch\"),\n\t\t...(baseRef === undefined ? {} : { baseRef }),\n\t\tcreatedAt: expectNumber(worktree.createdAt, \"worktree createdAt\"),\n\t\tsessionIds: parseArray(worktree.sessionIds, \"worktree sessionIds\", (entry) =>\n\t\t\texpectString(entry, \"worktree session id\"),\n\t\t),\n\t};\n}\n\nfunction expectWorktreeId(value: unknown): string {\n\tif (!isIrohRemoteWorktreeId(value)) {\n\t\tthrow new Error(\"worktree id must match lowercase worktree id syntax\");\n\t}\n\treturn value;\n}\n\nfunction expectOptionalWorkspaceRelativePath(value: unknown, label: string): string | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tif (!isIrohRemoteWorkingDirectory(value)) {\n\t\tthrow new Error(`${label} must be a relative workspace path`);\n\t}\n\treturn value;\n}\n\nexport function parseIrohRemoteClient(value: unknown): IrohRemoteClient {\n\tconst client = expectRecord(value, \"Iroh remote client\");\n\treturn {\n\t\tnodeId: expectString(client.nodeId, \"client nodeId\"),\n\t\tlabel: expectString(client.label, \"client label\"),\n\t\tallowedWorkspaces: parseArray(client.allowedWorkspaces, \"client allowedWorkspaces\", (entry) =>\n\t\t\texpectString(entry, \"client allowed workspace\"),\n\t\t),\n\t\tallowedTools: normalizeIrohRemoteAllowTools(\n\t\t\texpectOptionalAllowTools(client.allowedTools, \"client allowedTools\") ?? DEFAULT_IROH_REMOTE_ALLOW_TOOLS,\n\t\t),\n\t\trpcGrant: parseIrohRemoteRpcGrant(client.rpcGrant, \"client rpcGrant\"),\n\t\tpairedAt: expectNumber(client.pairedAt, \"client pairedAt\"),\n\t\tlastSeenAt: expectNumber(client.lastSeenAt, \"client lastSeenAt\"),\n\t\t...parseOptionalStringRecordProperty(\n\t\t\tclient.lastSessionIdByWorkspace,\n\t\t\t\"client lastSessionIdByWorkspace\",\n\t\t\t\"client last session workspace\",\n\t\t\t\"client last session id\",\n\t\t),\n\t\t...parseOptionalPushTargetsProperty(client.pushTargets, \"client pushTargets\"),\n\t\t...parseOptionalLiveActivityRegistrationsProperty(client.liveActivities, \"client liveActivities\"),\n\t};\n}\n\nexport function parseIrohRemotePushTarget(value: unknown): IrohRemotePushTarget {\n\tconst target = expectRecord(value, \"push target\");\n\treturn {\n\t\tid: expectString(target.id, \"push target id\"),\n\t\tprovider: expectPushTargetProvider(target.provider, \"push target provider\"),\n\t\tplatform: expectPushTargetPlatform(target.platform, \"push target platform\"),\n\t\tpushTargetAuthToken: expectString(target.pushTargetAuthToken, \"push target pushTargetAuthToken\"),\n\t\trelayUrl: expectOptionalString(target.relayUrl, \"push target relayUrl\"),\n\t\ttokenHash: expectOptionalString(target.tokenHash, \"push target tokenHash\"),\n\t\tliveActivity: parseOptionalIrohRemoteLiveActivityTarget(target.liveActivity, \"push target liveActivity\"),\n\t\tenabled: expectBoolean(target.enabled, \"push target enabled\"),\n\t\tcreatedAt: expectNumber(target.createdAt, \"push target createdAt\"),\n\t\tupdatedAt: expectNumber(target.updatedAt, \"push target updatedAt\"),\n\t};\n}\n\nfunction parseOptionalIrohRemoteLiveActivityTarget(\n\tvalue: unknown,\n\tlabel: string,\n): IrohRemoteLiveActivityTarget | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tconst target = expectRecord(value, label);\n\treturn {\n\t\tactivityId: expectString(target.activityId, `${label} activityId`),\n\t\tpushToken: expectString(target.pushToken, `${label} pushToken`),\n\t\ttokenHash: expectOptionalString(target.tokenHash, `${label} tokenHash`),\n\t\ttokenEnvironment: expectOptionalPushTokenEnvironment(target.tokenEnvironment, `${label} tokenEnvironment`),\n\t\tupdatedAt: expectNumber(target.updatedAt, `${label} updatedAt`),\n\t};\n}\n\nexport function parseIrohRemoteLiveActivityRegistration(value: unknown): IrohRemoteLiveActivityRegistration {\n\tconst registration = expectRecord(value, \"live activity registration\");\n\treturn {\n\t\tworkspaceName: expectBoundedUtf8String(\n\t\t\tregistration.workspaceName,\n\t\t\t\"live activity workspaceName\",\n\t\t\tMAX_IROH_REMOTE_LIVE_ACTIVITY_SCOPE_BYTES,\n\t\t),\n\t\tsessionId: expectBoundedUtf8String(\n\t\t\tregistration.sessionId,\n\t\t\t\"live activity sessionId\",\n\t\t\tMAX_IROH_REMOTE_LIVE_ACTIVITY_SCOPE_BYTES,\n\t\t),\n\t\tactivityId: expectBoundedUtf8String(\n\t\t\tregistration.activityId,\n\t\t\t\"live activity activityId\",\n\t\t\tMAX_IROH_REMOTE_LIVE_ACTIVITY_ID_BYTES,\n\t\t\tMAX_IROH_REMOTE_LIVE_ACTIVITY_ID_CODE_POINTS,\n\t\t),\n\t\ttokenHash: expectSha256Hex(registration.tokenHash, \"live activity tokenHash\"),\n\t\ttokenEnvironment: expectPushTokenEnvironment(registration.tokenEnvironment, \"live activity tokenEnvironment\"),\n\t\tplatform: expectPushTargetPlatform(registration.platform, \"live activity platform\"),\n\t\tpushTargetId: expectBoundedUtf8String(\n\t\t\tregistration.pushTargetId,\n\t\t\t\"live activity pushTargetId\",\n\t\t\tMAX_IROH_REMOTE_LIVE_ACTIVITY_SCOPE_BYTES,\n\t\t),\n\t\tcreatedAt: expectNonNegativeSafeInteger(registration.createdAt, \"live activity createdAt\"),\n\t\tupdatedAt: expectNonNegativeSafeInteger(registration.updatedAt, \"live activity updatedAt\"),\n\t};\n}\n\n/**\n * Normalize legacy registration arrays into the same bounded shape enforced at\n * mutation time: one newest entry per workspace/session and the newest 32\n * sessions overall, ordered oldest-first for deterministic future eviction.\n */\nexport function normalizeIrohRemoteLiveActivityRegistrations(\n\tregistrations: readonly IrohRemoteLiveActivityRegistration[],\n): IrohRemoteLiveActivityRegistration[] {\n\tinterface IndexedRegistration {\n\t\tregistration: IrohRemoteLiveActivityRegistration;\n\t\tindex: number;\n\t}\n\n\tconst newestBySession = new Map<string, IndexedRegistration>();\n\tfor (const [index, registration] of registrations.entries()) {\n\t\tconst candidate = { registration, index };\n\t\tconst key = JSON.stringify([registration.workspaceName, registration.sessionId]);\n\t\tconst existing = newestBySession.get(key);\n\t\tif (!existing || compareLiveActivityRecency(existing, candidate) <= 0) {\n\t\t\tnewestBySession.set(key, candidate);\n\t\t}\n\t}\n\n\tconst normalized = [...newestBySession.values()].sort(compareLiveActivityAge);\n\treturn normalized\n\t\t.slice(Math.max(0, normalized.length - MAX_IROH_REMOTE_LIVE_ACTIVITIES_PER_CLIENT))\n\t\t.map(({ registration }) => registration);\n}\n\nfunction compareLiveActivityRecency(\n\tleft: { registration: IrohRemoteLiveActivityRegistration; index: number },\n\tright: { registration: IrohRemoteLiveActivityRegistration; index: number },\n): number {\n\treturn (\n\t\tcompareNumbers(left.registration.updatedAt, right.registration.updatedAt) ||\n\t\tcompareNumbers(left.registration.createdAt, right.registration.createdAt) ||\n\t\tcompareNumbers(left.index, right.index)\n\t);\n}\n\nfunction compareLiveActivityAge(\n\tleft: { registration: IrohRemoteLiveActivityRegistration; index: number },\n\tright: { registration: IrohRemoteLiveActivityRegistration; index: number },\n): number {\n\treturn (\n\t\tcompareNumbers(left.registration.createdAt, right.registration.createdAt) ||\n\t\tcompareNumbers(left.registration.updatedAt, right.registration.updatedAt) ||\n\t\tcompareStrings(left.registration.workspaceName, right.registration.workspaceName) ||\n\t\tcompareStrings(left.registration.sessionId, right.registration.sessionId) ||\n\t\tcompareStrings(left.registration.activityId, right.registration.activityId) ||\n\t\tcompareNumbers(left.index, right.index)\n\t);\n}\n\nexport function parseIrohRemoteRevokedClient(value: unknown): IrohRemoteRevokedClient {\n\tconst client = expectRecord(value, \"Iroh remote revoked client\");\n\tconst rePairApprovedAt = expectOptionalNumber(client.rePairApprovedAt, \"revoked client rePairApprovedAt\");\n\treturn {\n\t\tnodeId: expectString(client.nodeId, \"revoked client nodeId\"),\n\t\tlabel: expectString(client.label, \"revoked client label\"),\n\t\tallowedWorkspaces: parseArray(client.allowedWorkspaces, \"revoked client allowedWorkspaces\", (entry) =>\n\t\t\texpectString(entry, \"revoked client allowed workspace\"),\n\t\t),\n\t\tallowedTools: normalizeIrohRemoteAllowTools(\n\t\t\texpectOptionalAllowTools(client.allowedTools, \"revoked client allowedTools\") ??\n\t\t\t\tDEFAULT_IROH_REMOTE_ALLOW_TOOLS,\n\t\t),\n\t\trpcGrant: parseIrohRemoteRpcGrant(client.rpcGrant, \"revoked client rpcGrant\"),\n\t\tpairedAt: expectNumber(client.pairedAt, \"revoked client pairedAt\"),\n\t\tlastSeenAt: expectNumber(client.lastSeenAt, \"revoked client lastSeenAt\"),\n\t\trevokedAt: expectNumber(client.revokedAt, \"revoked client revokedAt\"),\n\t\t...parseOptionalStringRecordProperty(\n\t\t\tclient.lastSessionIdByWorkspace,\n\t\t\t\"revoked client lastSessionIdByWorkspace\",\n\t\t\t\"revoked client last session workspace\",\n\t\t\t\"revoked client last session id\",\n\t\t),\n\t\t...(rePairApprovedAt === undefined ? {} : { rePairApprovedAt }),\n\t};\n}\n\nexport function parseIrohRemotePairingSecretTombstone(value: unknown): IrohRemotePairingSecretTombstone {\n\tconst tombstone = expectRecord(value, \"Iroh remote pairing secret tombstone\");\n\tconst outcome = expectPairingSecretTombstoneOutcome(tombstone.outcome);\n\tconst createdAt = expectOptionalNumber(tombstone.createdAt, \"pairing secret tombstone createdAt\");\n\tconst expiresAt = expectOptionalNumber(tombstone.expiresAt, \"pairing secret tombstone expiresAt\");\n\tconst labelHint = expectOptionalString(tombstone.labelHint, \"pairing secret tombstone labelHint\");\n\tconst common = {\n\t\tsecretHash: expectString(tombstone.secretHash, \"pairing secret tombstone secretHash\"),\n\t\tworkspace: expectString(tombstone.workspace, \"pairing secret tombstone workspace\"),\n\t\toutcome,\n\t\tretainUntil: expectNumber(tombstone.retainUntil, \"pairing secret tombstone retainUntil\"),\n\t\t...(createdAt === undefined ? {} : { createdAt }),\n\t\t...(expiresAt === undefined ? {} : { expiresAt }),\n\t\t...(labelHint === undefined ? {} : { labelHint }),\n\t};\n\tif (outcome === \"pairing_secret_consumed\") {\n\t\treturn {\n\t\t\t...common,\n\t\t\tconsumedAt: expectNumber(tombstone.consumedAt, \"pairing secret tombstone consumedAt\"),\n\t\t\tclientNodeId: expectString(tombstone.clientNodeId, \"pairing secret tombstone clientNodeId\"),\n\t\t};\n\t}\n\treturn {\n\t\t...common,\n\t\texpiredAt: expectNumber(tombstone.expiredAt, \"pairing secret tombstone expiredAt\"),\n\t};\n}\n\nexport function parseIrohRemotePendingPairingTicket(value: unknown): IrohRemotePendingPairingTicket {\n\tconst ticket = expectRecord(value, \"Iroh remote pending pairing ticket\");\n\tconst labelHint = expectOptionalString(ticket.labelHint, \"pending pairing ticket labelHint\");\n\treturn {\n\t\tsecretHash: expectString(ticket.secretHash, \"pending pairing ticket secretHash\"),\n\t\tworkspace: expectString(ticket.workspace, \"pending pairing ticket workspace\"),\n\t\tallowedTools: normalizeIrohRemoteAllowTools(\n\t\t\texpectAllowTools(ticket.allowedTools, \"pending pairing ticket allowedTools\"),\n\t\t),\n\t\trpcGrant: parseIrohRemoteRpcGrant(ticket.rpcGrant, \"pending pairing ticket rpcGrant\"),\n\t\texpiresAt: expectNumber(ticket.expiresAt, \"pending pairing ticket expiresAt\"),\n\t\tcreatedAt: expectNumber(ticket.createdAt, \"pending pairing ticket createdAt\"),\n\t\t...(labelHint === undefined ? {} : { labelHint }),\n\t};\n}\n\nfunction parseArray<T>(value: unknown, label: string, parseEntry: (value: unknown) => T): T[] {\n\tif (!Array.isArray(value)) {\n\t\tthrow new Error(`${label} must be an array`);\n\t}\n\treturn value.map((entry) => parseEntry(entry));\n}\n\nfunction parseOptionalArray<T>(value: unknown, label: string, parseEntry: (value: unknown) => T): T[] {\n\tif (value === undefined) {\n\t\treturn [];\n\t}\n\treturn parseArray(value, label, parseEntry);\n}\n\nfunction parseOptionalByteArray(value: unknown, label: string): number[] | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\treturn parseArray(value, label, (entry) => {\n\t\tif (typeof entry !== \"number\" || !Number.isInteger(entry) || entry < 0 || entry > 255) {\n\t\t\tthrow new Error(`${label} must contain byte values`);\n\t\t}\n\t\treturn entry;\n\t});\n}\n\nfunction parseOptionalStringRecordProperty(\n\tvalue: unknown,\n\tlabel: string,\n\tkeyLabel: string,\n\tvalueLabel: string,\n): { lastSessionIdByWorkspace?: Record<string, string> } {\n\tif (value === undefined) {\n\t\treturn {};\n\t}\n\tconst record = expectRecord(value, label);\n\tconst parsed: Record<string, string> = {};\n\tfor (const [key, entry] of Object.entries(record)) {\n\t\tif (key.length === 0) {\n\t\t\tthrow new Error(`${keyLabel} must be a non-empty string`);\n\t\t}\n\t\tparsed[key] = expectString(entry, valueLabel);\n\t}\n\treturn { lastSessionIdByWorkspace: parsed };\n}\n\nfunction parseOptionalPushTargetsProperty(value: unknown, label: string): { pushTargets?: IrohRemotePushTarget[] } {\n\tif (value === undefined) {\n\t\treturn {};\n\t}\n\treturn { pushTargets: parseArray(value, label, parseIrohRemotePushTarget) };\n}\n\nfunction parseOptionalLiveActivityRegistrationsProperty(\n\tvalue: unknown,\n\tlabel: string,\n): { liveActivities?: IrohRemoteLiveActivityRegistration[] } {\n\tif (value === undefined) {\n\t\treturn {};\n\t}\n\tconst registrations = parseArray(value, label, parseIrohRemoteLiveActivityRegistration);\n\tconst normalized = normalizeIrohRemoteLiveActivityRegistrations(registrations);\n\treturn normalized.length === 0 ? {} : { liveActivities: normalized };\n}\n\nfunction expectPairingSecretTombstoneOutcome(value: unknown): IrohRemotePairingSecretTombstoneOutcome {\n\tif (value === \"pairing_secret_consumed\" || value === \"pairing_secret_expired\") {\n\t\treturn value;\n\t}\n\tthrow new Error(\"pairing secret tombstone outcome must be pairing_secret_consumed or pairing_secret_expired\");\n}\n\nfunction expectPushTargetProvider(value: unknown, label: string): IrohRemotePushTargetProvider {\n\tif (value === \"fcm\") {\n\t\treturn value;\n\t}\n\tthrow new Error(`${label} must be fcm`);\n}\n\nfunction expectPushTargetPlatform(value: unknown, label: string): IrohRemotePushTargetPlatform {\n\tif (value === \"ios\") {\n\t\treturn value;\n\t}\n\tthrow new Error(`${label} must be ios`);\n}\n\nfunction expectPushTokenEnvironment(value: unknown, label: string): IrohRemotePushTokenEnvironment {\n\tif (value === \"development\" || value === \"production\") {\n\t\treturn value;\n\t}\n\tthrow new Error(`${label} must be development or production`);\n}\n\nfunction expectOptionalPushTokenEnvironment(value: unknown, label: string): IrohRemotePushTokenEnvironment | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\treturn expectPushTokenEnvironment(value, label);\n}\n\nfunction expectRecord(value: unknown, label: string): Record<string, unknown> {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tthrow new Error(`${label} must be an object`);\n\t}\n\treturn value as Record<string, unknown>;\n}\n\nfunction expectString(value: unknown, label: string): string {\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`${label} must be a non-empty string`);\n\t}\n\treturn value;\n}\n\nfunction expectBoundedUtf8String(value: unknown, label: string, maxBytes: number, maxCodePoints?: number): string {\n\tconst parsed = expectString(value, label);\n\tif (Buffer.byteLength(parsed, \"utf8\") > maxBytes) {\n\t\tthrow new Error(`${label} must be at most ${maxBytes} UTF-8 bytes`);\n\t}\n\tif (maxCodePoints !== undefined && Array.from(parsed).length > maxCodePoints) {\n\t\tthrow new Error(`${label} must contain at most ${maxCodePoints} characters`);\n\t}\n\treturn parsed;\n}\n\nfunction expectSha256Hex(value: unknown, label: string): string {\n\tconst parsed = expectString(value, label);\n\tif (!/^[0-9a-f]{64}$/.test(parsed)) {\n\t\tthrow new Error(`${label} must be a lowercase SHA-256 hex digest`);\n\t}\n\treturn parsed;\n}\n\nfunction expectOptionalString(value: unknown, label: string): string | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\treturn expectString(value, label);\n}\n\nfunction expectAllowTools(value: unknown, label: string): string {\n\tif (typeof value !== \"string\") {\n\t\tthrow new Error(`${label} must be a string`);\n\t}\n\treturn value;\n}\n\nfunction expectOptionalAllowTools(value: unknown, label: string): string | undefined {\n\treturn value === undefined ? undefined : expectAllowTools(value, label);\n}\n\nfunction expectOptionalNumber(value: unknown, label: string): number | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\treturn expectNumber(value, label);\n}\n\nfunction expectBoolean(value: unknown, label: string): boolean {\n\tif (typeof value !== \"boolean\") {\n\t\tthrow new Error(`${label} must be a boolean`);\n\t}\n\treturn value;\n}\n\nfunction expectNumber(value: unknown, label: string): number {\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) {\n\t\tthrow new Error(`${label} must be a finite number`);\n\t}\n\treturn value;\n}\n\nfunction expectNonNegativeSafeInteger(value: unknown, label: string): number {\n\tconst parsed = expectNumber(value, label);\n\tif (!Number.isSafeInteger(parsed) || parsed < 0) {\n\t\tthrow new Error(`${label} must be a non-negative safe integer`);\n\t}\n\treturn parsed;\n}\n\nfunction compareNumbers(left: number, right: number): number {\n\treturn left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction compareStrings(left: string, right: string): number {\n\treturn left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction isNodeErrorWithCode(error: unknown, code: string): error is NodeJS.ErrnoException {\n\treturn error instanceof Error && \"code\" in error && error.code === code;\n}\n"]}
|