@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,454 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
2
|
+
import { rename } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { createEmptyIrohRemoteHostState, parseIrohRemoteHostState, } from "../core/remote/iroh/state.js";
|
|
5
|
+
import { DEFAULT_INTEGRATED_DETACHED_RUNTIME_TTL_MS } from "../remote/integrated-runtime-retention.js";
|
|
6
|
+
import { writeDurableAtomicFile } from "../utils/durable-atomic-write.js";
|
|
7
|
+
/** Apply worktree-cleanup defaults: retention off, pruneOnStart on. */
|
|
8
|
+
export function resolveWorktreeCleanupPolicy(settings) {
|
|
9
|
+
const cleanup = settings.worktreeCleanup;
|
|
10
|
+
const retention = cleanup?.retention?.enabled && cleanup.retention.ttlMs > 0
|
|
11
|
+
? { enabled: true, ttlMs: cleanup.retention.ttlMs }
|
|
12
|
+
: undefined;
|
|
13
|
+
return { retention, pruneOnStart: cleanup?.pruneOnStart !== false };
|
|
14
|
+
}
|
|
15
|
+
function parseWorktreeCleanupSettings(value) {
|
|
16
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
const record = value;
|
|
20
|
+
const retentionRecord = typeof record.retention === "object" && record.retention !== null && !Array.isArray(record.retention)
|
|
21
|
+
? record.retention
|
|
22
|
+
: undefined;
|
|
23
|
+
const retention = retentionRecord !== undefined &&
|
|
24
|
+
typeof retentionRecord.enabled === "boolean" &&
|
|
25
|
+
typeof retentionRecord.ttlMs === "number" &&
|
|
26
|
+
Number.isInteger(retentionRecord.ttlMs) &&
|
|
27
|
+
retentionRecord.ttlMs > 0
|
|
28
|
+
? { enabled: retentionRecord.enabled, ttlMs: retentionRecord.ttlMs }
|
|
29
|
+
: undefined;
|
|
30
|
+
const pruneOnStart = typeof record.pruneOnStart === "boolean" ? record.pruneOnStart : undefined;
|
|
31
|
+
if (retention === undefined && pruneOnStart === undefined) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
...(retention === undefined ? {} : { retention }),
|
|
36
|
+
...(pruneOnStart === undefined ? {} : { pruneOnStart }),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function createEmptyVoltdState() {
|
|
40
|
+
return {
|
|
41
|
+
version: 1,
|
|
42
|
+
irohSecretKey: undefined,
|
|
43
|
+
clients: [],
|
|
44
|
+
revokedClients: [],
|
|
45
|
+
workspaces: [],
|
|
46
|
+
worktrees: [],
|
|
47
|
+
pendingPairingTickets: [],
|
|
48
|
+
pairingSecretTombstones: [],
|
|
49
|
+
settings: {
|
|
50
|
+
detachedRuntimeTtlMs: DEFAULT_INTEGRATED_DETACHED_RUNTIME_TTL_MS,
|
|
51
|
+
allowTools: null,
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export function voltdStateToHostState(state) {
|
|
56
|
+
return {
|
|
57
|
+
hostSecretKey: state.irohSecretKey,
|
|
58
|
+
clients: state.clients,
|
|
59
|
+
revokedClients: state.revokedClients,
|
|
60
|
+
workspaces: state.workspaces,
|
|
61
|
+
worktrees: state.worktrees,
|
|
62
|
+
pendingPairingTickets: state.pendingPairingTickets,
|
|
63
|
+
pairingSecretTombstones: state.pairingSecretTombstones,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export function hostStateToVoltdState(hostState, settings) {
|
|
67
|
+
return {
|
|
68
|
+
version: 1,
|
|
69
|
+
irohSecretKey: hostState.hostSecretKey,
|
|
70
|
+
clients: hostState.clients,
|
|
71
|
+
revokedClients: hostState.revokedClients ?? [],
|
|
72
|
+
workspaces: hostState.workspaces,
|
|
73
|
+
worktrees: hostState.worktrees ?? [],
|
|
74
|
+
pendingPairingTickets: hostState.pendingPairingTickets ?? [],
|
|
75
|
+
pairingSecretTombstones: hostState.pairingSecretTombstones ?? [],
|
|
76
|
+
settings,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export function parseVoltdState(value) {
|
|
80
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
81
|
+
throw new Error("voltd state must be an object");
|
|
82
|
+
}
|
|
83
|
+
const record = value;
|
|
84
|
+
if (record.version !== 1) {
|
|
85
|
+
throw new Error(`unsupported voltd state version: ${String(record.version)}`);
|
|
86
|
+
}
|
|
87
|
+
const hostState = parseIrohRemoteHostState({
|
|
88
|
+
...record,
|
|
89
|
+
hostSecretKey: record.irohSecretKey,
|
|
90
|
+
});
|
|
91
|
+
const settings = typeof record.settings === "object" && record.settings !== null ? record.settings : {};
|
|
92
|
+
const settingsRecord = settings;
|
|
93
|
+
const detachedRuntimeTtlMs = typeof settingsRecord.detachedRuntimeTtlMs === "number" &&
|
|
94
|
+
Number.isInteger(settingsRecord.detachedRuntimeTtlMs) &&
|
|
95
|
+
settingsRecord.detachedRuntimeTtlMs > 0
|
|
96
|
+
? settingsRecord.detachedRuntimeTtlMs
|
|
97
|
+
: DEFAULT_INTEGRATED_DETACHED_RUNTIME_TTL_MS;
|
|
98
|
+
const allowTools = Array.isArray(settingsRecord.allowTools)
|
|
99
|
+
? settingsRecord.allowTools.filter((tool) => typeof tool === "string")
|
|
100
|
+
: null;
|
|
101
|
+
const themeName = typeof settingsRecord.themeName === "string" ? settingsRecord.themeName : undefined;
|
|
102
|
+
const themeTokenPush = settingsRecord.themeTokenPush === true;
|
|
103
|
+
const keepAwakeEnabled = settingsRecord.keepAwakeEnabled === true;
|
|
104
|
+
const relayAuthToken = typeof settingsRecord.relayAuthToken === "string" && settingsRecord.relayAuthToken.length > 0
|
|
105
|
+
? settingsRecord.relayAuthToken
|
|
106
|
+
: undefined;
|
|
107
|
+
const worktreeCleanup = parseWorktreeCleanupSettings(settingsRecord.worktreeCleanup);
|
|
108
|
+
return hostStateToVoltdState(hostState, {
|
|
109
|
+
detachedRuntimeTtlMs,
|
|
110
|
+
allowTools,
|
|
111
|
+
...(themeName === undefined ? {} : { themeName }),
|
|
112
|
+
...(themeTokenPush ? { themeTokenPush } : {}),
|
|
113
|
+
...(keepAwakeEnabled ? { keepAwakeEnabled } : {}),
|
|
114
|
+
...(relayAuthToken === undefined ? {} : { relayAuthToken }),
|
|
115
|
+
...(worktreeCleanup === undefined ? {} : { worktreeCleanup }),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
export function getLegacyRemoteStatePath(agentDir) {
|
|
119
|
+
return join(agentDir, "remote", "iroh-host.json");
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* One-time migration from remote/iroh-host.json. A pre-grant file keeps the
|
|
123
|
+
* Iroh identity plus validated workspace/worktree metadata, but deliberately
|
|
124
|
+
* drops every old authority-bearing record. Those clients must pair again
|
|
125
|
+
* under an explicit RPC grant; expected pre-grant migration is not corruption.
|
|
126
|
+
*/
|
|
127
|
+
export function migrateLegacyRemoteState(agentDir, statePath) {
|
|
128
|
+
if (existsSync(statePath)) {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
const legacyPath = getLegacyRemoteStatePath(agentDir);
|
|
132
|
+
if (!existsSync(legacyPath)) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
const parsedJson = JSON.parse(readFileSync(legacyPath, "utf8"));
|
|
136
|
+
let legacyState;
|
|
137
|
+
let droppedAccess = { clients: 0, revokedClients: 0, pendingPairingTickets: 0 };
|
|
138
|
+
try {
|
|
139
|
+
legacyState = parseIrohRemoteHostState(parsedJson);
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
if (!isPreGrantLegacyHostState(parsedJson)) {
|
|
143
|
+
throw error;
|
|
144
|
+
}
|
|
145
|
+
const record = parsedJson;
|
|
146
|
+
droppedAccess = {
|
|
147
|
+
clients: Array.isArray(record.clients) ? record.clients.length : 0,
|
|
148
|
+
revokedClients: Array.isArray(record.revokedClients) ? record.revokedClients.length : 0,
|
|
149
|
+
pendingPairingTickets: Array.isArray(record.pendingPairingTickets) ? record.pendingPairingTickets.length : 0,
|
|
150
|
+
};
|
|
151
|
+
legacyState = parseIrohRemoteHostState({
|
|
152
|
+
...record,
|
|
153
|
+
clients: [],
|
|
154
|
+
revokedClients: [],
|
|
155
|
+
pendingPairingTickets: [],
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
state: hostStateToVoltdState(legacyState, createEmptyVoltdState().settings),
|
|
160
|
+
droppedAccess,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
function isPreGrantLegacyHostState(value) {
|
|
164
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
const record = value;
|
|
168
|
+
for (const field of ["clients", "revokedClients", "pendingPairingTickets"]) {
|
|
169
|
+
const entries = record[field];
|
|
170
|
+
if (!Array.isArray(entries)) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if (entries.some((entry) => typeof entry === "object" && entry !== null && !Array.isArray(entry) && !("rpcGrant" in entry))) {
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
const DEFAULT_STATE_DEBOUNCE_MS = 250;
|
|
180
|
+
function stateFileErrorMessage(path, error) {
|
|
181
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
182
|
+
return `Daemon state file ${path} is invalid or incompatible: ${reason}`;
|
|
183
|
+
}
|
|
184
|
+
function invalidStateFileError(path, error) {
|
|
185
|
+
return new Error(`${stateFileErrorMessage(path, error)}. Confirm regeneration from /remote or run ` +
|
|
186
|
+
"`volt daemon regenerate-state`; existing phones will need to pair again.");
|
|
187
|
+
}
|
|
188
|
+
/** Inspect persisted daemon state without modifying or migrating it. */
|
|
189
|
+
export function inspectVoltdStateFiles(agentDir) {
|
|
190
|
+
const statePath = join(agentDir, "daemon", "state.json");
|
|
191
|
+
if (existsSync(statePath)) {
|
|
192
|
+
try {
|
|
193
|
+
parseVoltdState(JSON.parse(readFileSync(statePath, "utf8")));
|
|
194
|
+
return undefined;
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
return { path: statePath, error: stateFileErrorMessage(statePath, error) };
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const legacyPath = getLegacyRemoteStatePath(agentDir);
|
|
201
|
+
if (!existsSync(legacyPath)) {
|
|
202
|
+
return undefined;
|
|
203
|
+
}
|
|
204
|
+
try {
|
|
205
|
+
migrateLegacyRemoteState(agentDir, statePath);
|
|
206
|
+
return undefined;
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
return { path: legacyPath, error: stateFileErrorMessage(legacyPath, error) };
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
function regeneratePreGrantVoltdState(value) {
|
|
213
|
+
if (!isPreGrantLegacyHostState(value)) {
|
|
214
|
+
return undefined;
|
|
215
|
+
}
|
|
216
|
+
const record = value;
|
|
217
|
+
try {
|
|
218
|
+
return parseVoltdState({
|
|
219
|
+
...record,
|
|
220
|
+
clients: [],
|
|
221
|
+
revokedClients: [],
|
|
222
|
+
pendingPairingTickets: [],
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
function readRecoverableVoltdState(path) {
|
|
230
|
+
try {
|
|
231
|
+
const value = JSON.parse(readFileSync(path, "utf8"));
|
|
232
|
+
try {
|
|
233
|
+
return parseVoltdState(value);
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
return regeneratePreGrantVoltdState(value);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
return undefined;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
/** Find the newest validated daemon-state backup that can be safely regenerated. */
|
|
244
|
+
export function findRecoverableVoltdStateBackup(agentDir) {
|
|
245
|
+
const daemonDir = join(agentDir, "daemon");
|
|
246
|
+
if (!existsSync(daemonDir)) {
|
|
247
|
+
return undefined;
|
|
248
|
+
}
|
|
249
|
+
const candidates = readdirSync(daemonDir)
|
|
250
|
+
.filter((name) => /^state\.json\.(?:corrupt|invalid)-\d+$/.test(name))
|
|
251
|
+
.map((name) => {
|
|
252
|
+
const path = join(daemonDir, name);
|
|
253
|
+
return { path, modifiedAtMs: statSync(path).mtimeMs, state: readRecoverableVoltdState(path) };
|
|
254
|
+
})
|
|
255
|
+
.filter((candidate) => candidate.state !== undefined)
|
|
256
|
+
.sort((left, right) => right.modifiedAtMs - left.modifiedAtMs);
|
|
257
|
+
const candidate = candidates[0];
|
|
258
|
+
return candidate
|
|
259
|
+
? { path: candidate.path, preservedIdentity: candidate.state.irohSecretKey !== undefined }
|
|
260
|
+
: undefined;
|
|
261
|
+
}
|
|
262
|
+
/** Replace current state from a validated backup, preserving the source and backing up the current file. */
|
|
263
|
+
export async function recoverVoltdStateFromBackup(agentDir, backupPath) {
|
|
264
|
+
const candidate = findRecoverableVoltdStateBackup(agentDir);
|
|
265
|
+
if (!candidate || candidate.path !== backupPath) {
|
|
266
|
+
throw new Error("The selected daemon-state recovery backup is no longer available.");
|
|
267
|
+
}
|
|
268
|
+
const recovered = readRecoverableVoltdState(backupPath);
|
|
269
|
+
if (!recovered) {
|
|
270
|
+
throw new Error("The selected daemon-state backup is no longer recoverable.");
|
|
271
|
+
}
|
|
272
|
+
const statePath = join(agentDir, "daemon", "state.json");
|
|
273
|
+
let previousStateBackupPath;
|
|
274
|
+
if (existsSync(statePath)) {
|
|
275
|
+
previousStateBackupPath = `${statePath}.invalid-${Date.now()}`;
|
|
276
|
+
await rename(statePath, previousStateBackupPath);
|
|
277
|
+
}
|
|
278
|
+
await writeDurableAtomicFile(statePath, `${JSON.stringify(recovered, null, 2)}\n`);
|
|
279
|
+
return {
|
|
280
|
+
...(previousStateBackupPath === undefined ? {} : { previousStateBackupPath }),
|
|
281
|
+
preservedIdentity: recovered.irohSecretKey !== undefined,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
/** Back up invalid state and regenerate validated non-authority data when possible. */
|
|
285
|
+
export async function regenerateInvalidVoltdState(agentDir) {
|
|
286
|
+
const invalid = inspectVoltdStateFiles(agentDir);
|
|
287
|
+
if (!invalid) {
|
|
288
|
+
throw new Error("Daemon state is valid; regeneration is not needed.");
|
|
289
|
+
}
|
|
290
|
+
let regenerated;
|
|
291
|
+
if (invalid.path === join(agentDir, "daemon", "state.json")) {
|
|
292
|
+
try {
|
|
293
|
+
regenerated = regeneratePreGrantVoltdState(JSON.parse(readFileSync(invalid.path, "utf8")));
|
|
294
|
+
}
|
|
295
|
+
catch {
|
|
296
|
+
// Malformed JSON cannot be partially recovered. The original is still backed up below.
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
const backupPath = `${invalid.path}.invalid-${Date.now()}`;
|
|
300
|
+
await rename(invalid.path, backupPath);
|
|
301
|
+
if (regenerated) {
|
|
302
|
+
await writeDurableAtomicFile(invalid.path, `${JSON.stringify(regenerated, null, 2)}\n`);
|
|
303
|
+
}
|
|
304
|
+
return { backupPath, preservedIdentity: regenerated?.irohSecretKey !== undefined };
|
|
305
|
+
}
|
|
306
|
+
/** Debounced, atomic (tmp + rename, 0600) persistence for VoltdStateFileV1. */
|
|
307
|
+
export class VoltdStateStore {
|
|
308
|
+
statePath;
|
|
309
|
+
agentDir;
|
|
310
|
+
debounceMs;
|
|
311
|
+
writeStateFile;
|
|
312
|
+
current;
|
|
313
|
+
flushTimer;
|
|
314
|
+
pendingFlush = Promise.resolve();
|
|
315
|
+
stateRevision = 0;
|
|
316
|
+
persistedRevision = 0;
|
|
317
|
+
migrated = false;
|
|
318
|
+
legacyDroppedAccess;
|
|
319
|
+
constructor(options) {
|
|
320
|
+
this.statePath = options.statePath;
|
|
321
|
+
this.agentDir = options.agentDir;
|
|
322
|
+
this.debounceMs = options.debounceMs ?? DEFAULT_STATE_DEBOUNCE_MS;
|
|
323
|
+
this.writeStateFile = options.writeStateFile ?? writeDurableAtomicFile;
|
|
324
|
+
}
|
|
325
|
+
async load() {
|
|
326
|
+
if (this.current) {
|
|
327
|
+
return {
|
|
328
|
+
state: this.current,
|
|
329
|
+
migratedFromLegacyState: this.migrated,
|
|
330
|
+
...(this.legacyDroppedAccess === undefined ? {} : { legacyDroppedAccess: this.legacyDroppedAccess }),
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
let migration;
|
|
334
|
+
try {
|
|
335
|
+
migration = migrateLegacyRemoteState(this.agentDir, this.statePath);
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
throw invalidStateFileError(getLegacyRemoteStatePath(this.agentDir), error);
|
|
339
|
+
}
|
|
340
|
+
if (migration) {
|
|
341
|
+
this.current = migration.state;
|
|
342
|
+
this.markStateChanged();
|
|
343
|
+
this.migrated = true;
|
|
344
|
+
this.legacyDroppedAccess = migration.droppedAccess;
|
|
345
|
+
await this.enqueueWrite();
|
|
346
|
+
const legacyPath = getLegacyRemoteStatePath(this.agentDir);
|
|
347
|
+
try {
|
|
348
|
+
await rename(legacyPath, `${legacyPath}.migrated`);
|
|
349
|
+
}
|
|
350
|
+
catch (error) {
|
|
351
|
+
// A daemon started concurrently (before the single-instance socket bind)
|
|
352
|
+
// may have already migrated and renamed the legacy file. Its absence is
|
|
353
|
+
// benign: the migrated content is identical and already persisted, so a
|
|
354
|
+
// racing start must not crash here — it will fail cleanly at the socket
|
|
355
|
+
// bind instead.
|
|
356
|
+
if (error.code !== "ENOENT") {
|
|
357
|
+
throw error;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
return {
|
|
361
|
+
state: this.current,
|
|
362
|
+
migratedFromLegacyState: true,
|
|
363
|
+
legacyDroppedAccess: migration.droppedAccess,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
if (existsSync(this.statePath)) {
|
|
367
|
+
try {
|
|
368
|
+
this.current = parseVoltdState(JSON.parse(readFileSync(this.statePath, "utf8")));
|
|
369
|
+
}
|
|
370
|
+
catch (error) {
|
|
371
|
+
throw invalidStateFileError(this.statePath, error);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
this.current = createEmptyVoltdState();
|
|
376
|
+
this.markStateChanged();
|
|
377
|
+
await this.enqueueWrite();
|
|
378
|
+
}
|
|
379
|
+
return { state: this.current, migratedFromLegacyState: false };
|
|
380
|
+
}
|
|
381
|
+
get state() {
|
|
382
|
+
if (!this.current) {
|
|
383
|
+
throw new Error("voltd state not loaded");
|
|
384
|
+
}
|
|
385
|
+
return this.current;
|
|
386
|
+
}
|
|
387
|
+
/** Replace the host-state portion (used as the state-manager write hook). */
|
|
388
|
+
setHostState(hostState) {
|
|
389
|
+
this.current = hostStateToVoltdState(hostState, this.state.settings);
|
|
390
|
+
this.scheduleFlush();
|
|
391
|
+
}
|
|
392
|
+
getHostState() {
|
|
393
|
+
return this.current ? voltdStateToHostState(this.current) : createEmptyIrohRemoteHostState();
|
|
394
|
+
}
|
|
395
|
+
updateSettings(settings) {
|
|
396
|
+
this.current = { ...this.state, settings: { ...this.state.settings, ...settings } };
|
|
397
|
+
this.scheduleFlush();
|
|
398
|
+
}
|
|
399
|
+
scheduleFlush() {
|
|
400
|
+
this.markStateChanged();
|
|
401
|
+
if (this.flushTimer) {
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
this.flushTimer = setTimeout(() => {
|
|
405
|
+
this.flushTimer = undefined;
|
|
406
|
+
void this.enqueueWrite().catch(() => { });
|
|
407
|
+
}, this.debounceMs);
|
|
408
|
+
this.flushTimer.unref?.();
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Force an immediate durable write, cancelling any pending debounce. Use after
|
|
412
|
+
* minting state that must survive a crash the moment it exists (e.g. the freshly
|
|
413
|
+
* generated Iroh identity, before the endpoint starts accepting pairings).
|
|
414
|
+
*/
|
|
415
|
+
async flush() {
|
|
416
|
+
if (this.flushTimer) {
|
|
417
|
+
clearTimeout(this.flushTimer);
|
|
418
|
+
this.flushTimer = undefined;
|
|
419
|
+
}
|
|
420
|
+
if (this.current) {
|
|
421
|
+
// Force an explicit current-snapshot revision. Besides preserving flush's
|
|
422
|
+
// historical semantics, this catches callers that deliberately mutate the
|
|
423
|
+
// loaded state object before requesting durability.
|
|
424
|
+
this.markStateChanged();
|
|
425
|
+
await this.enqueueWrite();
|
|
426
|
+
}
|
|
427
|
+
else {
|
|
428
|
+
await this.pendingFlush;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
/** Flush pending changes and stop the debounce timer (graceful shutdown). */
|
|
432
|
+
async close() {
|
|
433
|
+
await this.flush();
|
|
434
|
+
}
|
|
435
|
+
markStateChanged() {
|
|
436
|
+
this.stateRevision++;
|
|
437
|
+
}
|
|
438
|
+
enqueueWrite() {
|
|
439
|
+
const write = this.pendingFlush.then(() => this.writeNow());
|
|
440
|
+
this.pendingFlush = write.catch(() => { });
|
|
441
|
+
return write;
|
|
442
|
+
}
|
|
443
|
+
/** Must only be invoked through enqueueWrite so atomic renames cannot overtake one another. */
|
|
444
|
+
async writeNow() {
|
|
445
|
+
if (!this.current || this.persistedRevision >= this.stateRevision) {
|
|
446
|
+
return;
|
|
447
|
+
}
|
|
448
|
+
const revision = this.stateRevision;
|
|
449
|
+
const content = `${JSON.stringify(this.current, null, 2)}\n`;
|
|
450
|
+
await this.writeStateFile(this.statePath, content);
|
|
451
|
+
this.persistedRevision = Math.max(this.persistedRevision, revision);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/daemon/state.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readdirSync, readFileSync, statSync } from \"node:fs\";\nimport { rename } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n\tcreateEmptyIrohRemoteHostState,\n\ttype IrohRemoteClient,\n\ttype IrohRemoteHostState,\n\ttype IrohRemotePairingSecretTombstone,\n\ttype IrohRemotePendingPairingTicket,\n\ttype IrohRemoteRevokedClient,\n\ttype IrohRemoteWorkspace,\n\ttype IrohRemoteWorkspaceWorktree,\n\tparseIrohRemoteHostState,\n} from \"../core/remote/iroh/state.ts\";\nimport { DEFAULT_INTEGRATED_DETACHED_RUNTIME_TTL_MS } from \"../remote/integrated-runtime-retention.ts\";\nimport { writeDurableAtomicFile } from \"../utils/durable-atomic-write.ts\";\n\n/**\n * Persistent daemon state. The pairing/client sections reuse the legacy host\n * state shapes verbatim (push targets and live-activity registrations stay\n * embedded in each client, as `src/core/remote/iroh/push.ts` expects). The Iroh\n * identity survives migration; pre-grant client authority is intentionally not imported.\n */\nexport interface VoltdStateFileV1 {\n\tversion: 1;\n\t/** Iroh secret key bytes; MUST survive migration so the saved host identity remains stable. */\n\tirohSecretKey?: number[];\n\tclients: IrohRemoteClient[];\n\trevokedClients: IrohRemoteRevokedClient[];\n\tworkspaces: IrohRemoteWorkspace[];\n\tworktrees: IrohRemoteWorkspaceWorktree[];\n\tpendingPairingTickets: IrohRemotePendingPairingTicket[];\n\tpairingSecretTombstones: IrohRemotePairingSecretTombstone[];\n\tsettings: {\n\t\t/** Detached headless runtime retention TTL. */\n\t\tdetachedRuntimeTtlMs: number;\n\t\t/** Tool allowlist applied ONLY to daemon-owned headless runtimes. */\n\t\tallowTools: string[] | null;\n\t\t/** Active daemon theme (theme_set); undefined falls back to the default theme. */\n\t\tthemeName?: string;\n\t\t/** Push sanitized resolved theme tokens to capable phones (§9.5); OFF by default. */\n\t\tthemeTokenPush?: boolean;\n\t\t/** Hold a keep-awake (prevent system sleep) assertion while the daemon runs; OFF by default. */\n\t\tkeepAwakeEnabled?: boolean;\n\t\t/**\n\t\t * Bearer token presented to relay servers (access.shared_token). Seeded\n\t\t * from VOLT_IROH_RELAY_AUTH_TOKEN and persisted so bare restarts keep\n\t\t * authenticating; pairing tickets carry it to phones.\n\t\t */\n\t\trelayAuthToken?: string;\n\t\t/** Worktree cleanup policies (design §5.3); all opt-in except pruneOnStart. */\n\t\tworktreeCleanup?: WorktreeCleanupSettings;\n\t};\n}\n\nexport interface WorktreeCleanupSettings {\n\t/** Remove clean, fully merged worktrees after the TTL once their runtime is disposed. */\n\tretention?: { enabled: boolean; ttlMs: number };\n\t/** Reconcile worktree records/checkouts during daemon startup (default true). */\n\tpruneOnStart?: boolean;\n}\n\nexport interface ResolvedWorktreeCleanupPolicy {\n\tretention: { enabled: boolean; ttlMs: number } | undefined;\n\tpruneOnStart: boolean;\n}\n\n/** Apply worktree-cleanup defaults: retention off, pruneOnStart on. */\nexport function resolveWorktreeCleanupPolicy(\n\tsettings: Pick<VoltdStateFileV1[\"settings\"], \"worktreeCleanup\">,\n): ResolvedWorktreeCleanupPolicy {\n\tconst cleanup = settings.worktreeCleanup;\n\tconst retention =\n\t\tcleanup?.retention?.enabled && cleanup.retention.ttlMs > 0\n\t\t\t? { enabled: true, ttlMs: cleanup.retention.ttlMs }\n\t\t\t: undefined;\n\treturn { retention, pruneOnStart: cleanup?.pruneOnStart !== false };\n}\n\nfunction parseWorktreeCleanupSettings(value: unknown): WorktreeCleanupSettings | undefined {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\tconst record = value as Record<string, unknown>;\n\tconst retentionRecord =\n\t\ttypeof record.retention === \"object\" && record.retention !== null && !Array.isArray(record.retention)\n\t\t\t? (record.retention as Record<string, unknown>)\n\t\t\t: undefined;\n\tconst retention =\n\t\tretentionRecord !== undefined &&\n\t\ttypeof retentionRecord.enabled === \"boolean\" &&\n\t\ttypeof retentionRecord.ttlMs === \"number\" &&\n\t\tNumber.isInteger(retentionRecord.ttlMs) &&\n\t\tretentionRecord.ttlMs > 0\n\t\t\t? { enabled: retentionRecord.enabled, ttlMs: retentionRecord.ttlMs }\n\t\t\t: undefined;\n\tconst pruneOnStart = typeof record.pruneOnStart === \"boolean\" ? record.pruneOnStart : undefined;\n\tif (retention === undefined && pruneOnStart === undefined) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\t...(retention === undefined ? {} : { retention }),\n\t\t...(pruneOnStart === undefined ? {} : { pruneOnStart }),\n\t};\n}\n\nexport function createEmptyVoltdState(): VoltdStateFileV1 {\n\treturn {\n\t\tversion: 1,\n\t\tirohSecretKey: undefined,\n\t\tclients: [],\n\t\trevokedClients: [],\n\t\tworkspaces: [],\n\t\tworktrees: [],\n\t\tpendingPairingTickets: [],\n\t\tpairingSecretTombstones: [],\n\t\tsettings: {\n\t\t\tdetachedRuntimeTtlMs: DEFAULT_INTEGRATED_DETACHED_RUNTIME_TTL_MS,\n\t\t\tallowTools: null,\n\t\t},\n\t};\n}\n\nexport function voltdStateToHostState(state: VoltdStateFileV1): IrohRemoteHostState {\n\treturn {\n\t\thostSecretKey: state.irohSecretKey,\n\t\tclients: state.clients,\n\t\trevokedClients: state.revokedClients,\n\t\tworkspaces: state.workspaces,\n\t\tworktrees: state.worktrees,\n\t\tpendingPairingTickets: state.pendingPairingTickets,\n\t\tpairingSecretTombstones: state.pairingSecretTombstones,\n\t};\n}\n\nexport function hostStateToVoltdState(\n\thostState: IrohRemoteHostState,\n\tsettings: VoltdStateFileV1[\"settings\"],\n): VoltdStateFileV1 {\n\treturn {\n\t\tversion: 1,\n\t\tirohSecretKey: hostState.hostSecretKey,\n\t\tclients: hostState.clients,\n\t\trevokedClients: hostState.revokedClients ?? [],\n\t\tworkspaces: hostState.workspaces,\n\t\tworktrees: hostState.worktrees ?? [],\n\t\tpendingPairingTickets: hostState.pendingPairingTickets ?? [],\n\t\tpairingSecretTombstones: hostState.pairingSecretTombstones ?? [],\n\t\tsettings,\n\t};\n}\n\nexport function parseVoltdState(value: unknown): VoltdStateFileV1 {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tthrow new Error(\"voltd state must be an object\");\n\t}\n\tconst record = value as Record<string, unknown>;\n\tif (record.version !== 1) {\n\t\tthrow new Error(`unsupported voltd state version: ${String(record.version)}`);\n\t}\n\tconst hostState = parseIrohRemoteHostState({\n\t\t...record,\n\t\thostSecretKey: record.irohSecretKey,\n\t});\n\tconst settings = typeof record.settings === \"object\" && record.settings !== null ? record.settings : {};\n\tconst settingsRecord = settings as Record<string, unknown>;\n\tconst detachedRuntimeTtlMs =\n\t\ttypeof settingsRecord.detachedRuntimeTtlMs === \"number\" &&\n\t\tNumber.isInteger(settingsRecord.detachedRuntimeTtlMs) &&\n\t\tsettingsRecord.detachedRuntimeTtlMs > 0\n\t\t\t? settingsRecord.detachedRuntimeTtlMs\n\t\t\t: DEFAULT_INTEGRATED_DETACHED_RUNTIME_TTL_MS;\n\tconst allowTools = Array.isArray(settingsRecord.allowTools)\n\t\t? settingsRecord.allowTools.filter((tool): tool is string => typeof tool === \"string\")\n\t\t: null;\n\tconst themeName = typeof settingsRecord.themeName === \"string\" ? settingsRecord.themeName : undefined;\n\tconst themeTokenPush = settingsRecord.themeTokenPush === true;\n\tconst keepAwakeEnabled = settingsRecord.keepAwakeEnabled === true;\n\tconst relayAuthToken =\n\t\ttypeof settingsRecord.relayAuthToken === \"string\" && settingsRecord.relayAuthToken.length > 0\n\t\t\t? settingsRecord.relayAuthToken\n\t\t\t: undefined;\n\tconst worktreeCleanup = parseWorktreeCleanupSettings(settingsRecord.worktreeCleanup);\n\treturn hostStateToVoltdState(hostState, {\n\t\tdetachedRuntimeTtlMs,\n\t\tallowTools,\n\t\t...(themeName === undefined ? {} : { themeName }),\n\t\t...(themeTokenPush ? { themeTokenPush } : {}),\n\t\t...(keepAwakeEnabled ? { keepAwakeEnabled } : {}),\n\t\t...(relayAuthToken === undefined ? {} : { relayAuthToken }),\n\t\t...(worktreeCleanup === undefined ? {} : { worktreeCleanup }),\n\t});\n}\n\nexport function getLegacyRemoteStatePath(agentDir: string): string {\n\treturn join(agentDir, \"remote\", \"iroh-host.json\");\n}\n\nexport interface LegacyRemoteStateMigration {\n\tstate: VoltdStateFileV1;\n\tdroppedAccess: {\n\t\tclients: number;\n\t\trevokedClients: number;\n\t\tpendingPairingTickets: number;\n\t};\n}\n\n/**\n * One-time migration from remote/iroh-host.json. A pre-grant file keeps the\n * Iroh identity plus validated workspace/worktree metadata, but deliberately\n * drops every old authority-bearing record. Those clients must pair again\n * under an explicit RPC grant; expected pre-grant migration is not corruption.\n */\nexport function migrateLegacyRemoteState(agentDir: string, statePath: string): LegacyRemoteStateMigration | null {\n\tif (existsSync(statePath)) {\n\t\treturn null;\n\t}\n\tconst legacyPath = getLegacyRemoteStatePath(agentDir);\n\tif (!existsSync(legacyPath)) {\n\t\treturn null;\n\t}\n\tconst parsedJson: unknown = JSON.parse(readFileSync(legacyPath, \"utf8\"));\n\tlet legacyState: IrohRemoteHostState;\n\tlet droppedAccess = { clients: 0, revokedClients: 0, pendingPairingTickets: 0 };\n\ttry {\n\t\tlegacyState = parseIrohRemoteHostState(parsedJson);\n\t} catch (error) {\n\t\tif (!isPreGrantLegacyHostState(parsedJson)) {\n\t\t\tthrow error;\n\t\t}\n\t\tconst record = parsedJson as Record<string, unknown>;\n\t\tdroppedAccess = {\n\t\t\tclients: Array.isArray(record.clients) ? record.clients.length : 0,\n\t\t\trevokedClients: Array.isArray(record.revokedClients) ? record.revokedClients.length : 0,\n\t\t\tpendingPairingTickets: Array.isArray(record.pendingPairingTickets) ? record.pendingPairingTickets.length : 0,\n\t\t};\n\t\tlegacyState = parseIrohRemoteHostState({\n\t\t\t...record,\n\t\t\tclients: [],\n\t\t\trevokedClients: [],\n\t\t\tpendingPairingTickets: [],\n\t\t});\n\t}\n\treturn {\n\t\tstate: hostStateToVoltdState(legacyState, createEmptyVoltdState().settings),\n\t\tdroppedAccess,\n\t};\n}\n\nfunction isPreGrantLegacyHostState(value: unknown): value is Record<string, unknown> {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\treturn false;\n\t}\n\tconst record = value as Record<string, unknown>;\n\tfor (const field of [\"clients\", \"revokedClients\", \"pendingPairingTickets\"] as const) {\n\t\tconst entries = record[field];\n\t\tif (!Array.isArray(entries)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\tentries.some(\n\t\t\t\t(entry) => typeof entry === \"object\" && entry !== null && !Array.isArray(entry) && !(\"rpcGrant\" in entry),\n\t\t\t)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nexport interface VoltdStateStoreOptions {\n\tagentDir: string;\n\tstatePath: string;\n\t/** Debounce for coalescing writes; flushes synchronously on close(). */\n\tdebounceMs?: number;\n\t/** Durable writer seam for deterministic persistence-concurrency tests. */\n\twriteStateFile?: (path: string, content: string) => Promise<void>;\n}\n\nexport interface LoadVoltdStateResult {\n\tstate: VoltdStateFileV1;\n\tmigratedFromLegacyState: boolean;\n\tlegacyDroppedAccess?: LegacyRemoteStateMigration[\"droppedAccess\"];\n}\n\nconst DEFAULT_STATE_DEBOUNCE_MS = 250;\n\nexport interface InvalidVoltdStateFile {\n\tpath: string;\n\terror: string;\n}\n\nfunction stateFileErrorMessage(path: string, error: unknown): string {\n\tconst reason = error instanceof Error ? error.message : String(error);\n\treturn `Daemon state file ${path} is invalid or incompatible: ${reason}`;\n}\n\nfunction invalidStateFileError(path: string, error: unknown): Error {\n\treturn new Error(\n\t\t`${stateFileErrorMessage(path, error)}. Confirm regeneration from /remote or run ` +\n\t\t\t\"`volt daemon regenerate-state`; existing phones will need to pair again.\",\n\t);\n}\n\n/** Inspect persisted daemon state without modifying or migrating it. */\nexport function inspectVoltdStateFiles(agentDir: string): InvalidVoltdStateFile | undefined {\n\tconst statePath = join(agentDir, \"daemon\", \"state.json\");\n\tif (existsSync(statePath)) {\n\t\ttry {\n\t\t\tparseVoltdState(JSON.parse(readFileSync(statePath, \"utf8\")));\n\t\t\treturn undefined;\n\t\t} catch (error) {\n\t\t\treturn { path: statePath, error: stateFileErrorMessage(statePath, error) };\n\t\t}\n\t}\n\tconst legacyPath = getLegacyRemoteStatePath(agentDir);\n\tif (!existsSync(legacyPath)) {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\tmigrateLegacyRemoteState(agentDir, statePath);\n\t\treturn undefined;\n\t} catch (error) {\n\t\treturn { path: legacyPath, error: stateFileErrorMessage(legacyPath, error) };\n\t}\n}\n\nfunction regeneratePreGrantVoltdState(value: unknown): VoltdStateFileV1 | undefined {\n\tif (!isPreGrantLegacyHostState(value)) {\n\t\treturn undefined;\n\t}\n\tconst record = value as Record<string, unknown>;\n\ttry {\n\t\treturn parseVoltdState({\n\t\t\t...record,\n\t\t\tclients: [],\n\t\t\trevokedClients: [],\n\t\t\tpendingPairingTickets: [],\n\t\t});\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction readRecoverableVoltdState(path: string): VoltdStateFileV1 | undefined {\n\ttry {\n\t\tconst value: unknown = JSON.parse(readFileSync(path, \"utf8\"));\n\t\ttry {\n\t\t\treturn parseVoltdState(value);\n\t\t} catch {\n\t\t\treturn regeneratePreGrantVoltdState(value);\n\t\t}\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport interface RecoverableVoltdStateBackup {\n\tpath: string;\n\tpreservedIdentity: boolean;\n}\n\n/** Find the newest validated daemon-state backup that can be safely regenerated. */\nexport function findRecoverableVoltdStateBackup(agentDir: string): RecoverableVoltdStateBackup | undefined {\n\tconst daemonDir = join(agentDir, \"daemon\");\n\tif (!existsSync(daemonDir)) {\n\t\treturn undefined;\n\t}\n\tconst candidates = readdirSync(daemonDir)\n\t\t.filter((name) => /^state\\.json\\.(?:corrupt|invalid)-\\d+$/.test(name))\n\t\t.map((name) => {\n\t\t\tconst path = join(daemonDir, name);\n\t\t\treturn { path, modifiedAtMs: statSync(path).mtimeMs, state: readRecoverableVoltdState(path) };\n\t\t})\n\t\t.filter((candidate): candidate is typeof candidate & { state: VoltdStateFileV1 } => candidate.state !== undefined)\n\t\t.sort((left, right) => right.modifiedAtMs - left.modifiedAtMs);\n\tconst candidate = candidates[0];\n\treturn candidate\n\t\t? { path: candidate.path, preservedIdentity: candidate.state.irohSecretKey !== undefined }\n\t\t: undefined;\n}\n\n/** Replace current state from a validated backup, preserving the source and backing up the current file. */\nexport async function recoverVoltdStateFromBackup(\n\tagentDir: string,\n\tbackupPath: string,\n): Promise<{ previousStateBackupPath?: string; preservedIdentity: boolean }> {\n\tconst candidate = findRecoverableVoltdStateBackup(agentDir);\n\tif (!candidate || candidate.path !== backupPath) {\n\t\tthrow new Error(\"The selected daemon-state recovery backup is no longer available.\");\n\t}\n\tconst recovered = readRecoverableVoltdState(backupPath);\n\tif (!recovered) {\n\t\tthrow new Error(\"The selected daemon-state backup is no longer recoverable.\");\n\t}\n\tconst statePath = join(agentDir, \"daemon\", \"state.json\");\n\tlet previousStateBackupPath: string | undefined;\n\tif (existsSync(statePath)) {\n\t\tpreviousStateBackupPath = `${statePath}.invalid-${Date.now()}`;\n\t\tawait rename(statePath, previousStateBackupPath);\n\t}\n\tawait writeDurableAtomicFile(statePath, `${JSON.stringify(recovered, null, 2)}\\n`);\n\treturn {\n\t\t...(previousStateBackupPath === undefined ? {} : { previousStateBackupPath }),\n\t\tpreservedIdentity: recovered.irohSecretKey !== undefined,\n\t};\n}\n\n/** Back up invalid state and regenerate validated non-authority data when possible. */\nexport async function regenerateInvalidVoltdState(\n\tagentDir: string,\n): Promise<{ backupPath: string; preservedIdentity: boolean }> {\n\tconst invalid = inspectVoltdStateFiles(agentDir);\n\tif (!invalid) {\n\t\tthrow new Error(\"Daemon state is valid; regeneration is not needed.\");\n\t}\n\tlet regenerated: VoltdStateFileV1 | undefined;\n\tif (invalid.path === join(agentDir, \"daemon\", \"state.json\")) {\n\t\ttry {\n\t\t\tregenerated = regeneratePreGrantVoltdState(JSON.parse(readFileSync(invalid.path, \"utf8\")));\n\t\t} catch {\n\t\t\t// Malformed JSON cannot be partially recovered. The original is still backed up below.\n\t\t}\n\t}\n\tconst backupPath = `${invalid.path}.invalid-${Date.now()}`;\n\tawait rename(invalid.path, backupPath);\n\tif (regenerated) {\n\t\tawait writeDurableAtomicFile(invalid.path, `${JSON.stringify(regenerated, null, 2)}\\n`);\n\t}\n\treturn { backupPath, preservedIdentity: regenerated?.irohSecretKey !== undefined };\n}\n\n/** Debounced, atomic (tmp + rename, 0600) persistence for VoltdStateFileV1. */\nexport class VoltdStateStore {\n\tprivate readonly statePath: string;\n\tprivate readonly agentDir: string;\n\tprivate readonly debounceMs: number;\n\tprivate readonly writeStateFile: (path: string, content: string) => Promise<void>;\n\tprivate current: VoltdStateFileV1 | undefined;\n\tprivate flushTimer: NodeJS.Timeout | undefined;\n\tprivate pendingFlush: Promise<void> = Promise.resolve();\n\tprivate stateRevision = 0;\n\tprivate persistedRevision = 0;\n\tprivate migrated = false;\n\tprivate legacyDroppedAccess: LegacyRemoteStateMigration[\"droppedAccess\"] | undefined;\n\n\tconstructor(options: VoltdStateStoreOptions) {\n\t\tthis.statePath = options.statePath;\n\t\tthis.agentDir = options.agentDir;\n\t\tthis.debounceMs = options.debounceMs ?? DEFAULT_STATE_DEBOUNCE_MS;\n\t\tthis.writeStateFile = options.writeStateFile ?? writeDurableAtomicFile;\n\t}\n\n\tasync load(): Promise<LoadVoltdStateResult> {\n\t\tif (this.current) {\n\t\t\treturn {\n\t\t\t\tstate: this.current,\n\t\t\t\tmigratedFromLegacyState: this.migrated,\n\t\t\t\t...(this.legacyDroppedAccess === undefined ? {} : { legacyDroppedAccess: this.legacyDroppedAccess }),\n\t\t\t};\n\t\t}\n\t\tlet migration: LegacyRemoteStateMigration | null;\n\t\ttry {\n\t\t\tmigration = migrateLegacyRemoteState(this.agentDir, this.statePath);\n\t\t} catch (error) {\n\t\t\tthrow invalidStateFileError(getLegacyRemoteStatePath(this.agentDir), error);\n\t\t}\n\t\tif (migration) {\n\t\t\tthis.current = migration.state;\n\t\t\tthis.markStateChanged();\n\t\t\tthis.migrated = true;\n\t\t\tthis.legacyDroppedAccess = migration.droppedAccess;\n\t\t\tawait this.enqueueWrite();\n\t\t\tconst legacyPath = getLegacyRemoteStatePath(this.agentDir);\n\t\t\ttry {\n\t\t\t\tawait rename(legacyPath, `${legacyPath}.migrated`);\n\t\t\t} catch (error) {\n\t\t\t\t// A daemon started concurrently (before the single-instance socket bind)\n\t\t\t\t// may have already migrated and renamed the legacy file. Its absence is\n\t\t\t\t// benign: the migrated content is identical and already persisted, so a\n\t\t\t\t// racing start must not crash here — it will fail cleanly at the socket\n\t\t\t\t// bind instead.\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tstate: this.current,\n\t\t\t\tmigratedFromLegacyState: true,\n\t\t\t\tlegacyDroppedAccess: migration.droppedAccess,\n\t\t\t};\n\t\t}\n\t\tif (existsSync(this.statePath)) {\n\t\t\ttry {\n\t\t\t\tthis.current = parseVoltdState(JSON.parse(readFileSync(this.statePath, \"utf8\")));\n\t\t\t} catch (error) {\n\t\t\t\tthrow invalidStateFileError(this.statePath, error);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.current = createEmptyVoltdState();\n\t\t\tthis.markStateChanged();\n\t\t\tawait this.enqueueWrite();\n\t\t}\n\t\treturn { state: this.current, migratedFromLegacyState: false };\n\t}\n\n\tget state(): VoltdStateFileV1 {\n\t\tif (!this.current) {\n\t\t\tthrow new Error(\"voltd state not loaded\");\n\t\t}\n\t\treturn this.current;\n\t}\n\n\t/** Replace the host-state portion (used as the state-manager write hook). */\n\tsetHostState(hostState: IrohRemoteHostState): void {\n\t\tthis.current = hostStateToVoltdState(hostState, this.state.settings);\n\t\tthis.scheduleFlush();\n\t}\n\n\tgetHostState(): IrohRemoteHostState {\n\t\treturn this.current ? voltdStateToHostState(this.current) : createEmptyIrohRemoteHostState();\n\t}\n\n\tupdateSettings(settings: Partial<VoltdStateFileV1[\"settings\"]>): void {\n\t\tthis.current = { ...this.state, settings: { ...this.state.settings, ...settings } };\n\t\tthis.scheduleFlush();\n\t}\n\n\tscheduleFlush(): void {\n\t\tthis.markStateChanged();\n\t\tif (this.flushTimer) {\n\t\t\treturn;\n\t\t}\n\t\tthis.flushTimer = setTimeout(() => {\n\t\t\tthis.flushTimer = undefined;\n\t\t\tvoid this.enqueueWrite().catch(() => {});\n\t\t}, this.debounceMs);\n\t\tthis.flushTimer.unref?.();\n\t}\n\n\t/**\n\t * Force an immediate durable write, cancelling any pending debounce. Use after\n\t * minting state that must survive a crash the moment it exists (e.g. the freshly\n\t * generated Iroh identity, before the endpoint starts accepting pairings).\n\t */\n\tasync flush(): Promise<void> {\n\t\tif (this.flushTimer) {\n\t\t\tclearTimeout(this.flushTimer);\n\t\t\tthis.flushTimer = undefined;\n\t\t}\n\t\tif (this.current) {\n\t\t\t// Force an explicit current-snapshot revision. Besides preserving flush's\n\t\t\t// historical semantics, this catches callers that deliberately mutate the\n\t\t\t// loaded state object before requesting durability.\n\t\t\tthis.markStateChanged();\n\t\t\tawait this.enqueueWrite();\n\t\t} else {\n\t\t\tawait this.pendingFlush;\n\t\t}\n\t}\n\n\t/** Flush pending changes and stop the debounce timer (graceful shutdown). */\n\tasync close(): Promise<void> {\n\t\tawait this.flush();\n\t}\n\n\tprivate markStateChanged(): void {\n\t\tthis.stateRevision++;\n\t}\n\n\tprivate enqueueWrite(): Promise<void> {\n\t\tconst write = this.pendingFlush.then(() => this.writeNow());\n\t\tthis.pendingFlush = write.catch(() => {});\n\t\treturn write;\n\t}\n\n\t/** Must only be invoked through enqueueWrite so atomic renames cannot overtake one another. */\n\tprivate async writeNow(): Promise<void> {\n\t\tif (!this.current || this.persistedRevision >= this.stateRevision) {\n\t\t\treturn;\n\t\t}\n\t\tconst revision = this.stateRevision;\n\t\tconst content = `${JSON.stringify(this.current, null, 2)}\\n`;\n\t\tawait this.writeStateFile(this.statePath, content);\n\t\tthis.persistedRevision = Math.max(this.persistedRevision, revision);\n\t}\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* iOS theme token push (§9.5, M11): the daemon can push its resolved theme
|
|
3
|
+
* tokens to phones as a `host_theme_tokens` frame on conversation streams.
|
|
4
|
+
* Ships OFF by default (voltd settings.themeTokenPush or VOLT_HOST_THEME_TOKENS=1)
|
|
5
|
+
* and is additionally gated on the phone advertising the capability string;
|
|
6
|
+
* clients that ignore the frame are fully supported.
|
|
7
|
+
*/
|
|
8
|
+
export declare const HOST_THEME_TOKENS_FEATURE = "host_theme_tokens.v1";
|
|
9
|
+
/**
|
|
10
|
+
* Keep only plain hex color values. Anything else — var refs that failed to
|
|
11
|
+
* resolve, ansi escape fragments, and especially anything path-like — is
|
|
12
|
+
* dropped so no host-local information can leak onto the wire.
|
|
13
|
+
*/
|
|
14
|
+
export declare function sanitizeHostThemeTokens(tokens: Record<string, string>): Record<string, string>;
|
|
15
|
+
export interface HostThemeTokensFrame {
|
|
16
|
+
type: "host_theme_tokens";
|
|
17
|
+
data: {
|
|
18
|
+
themeName: string;
|
|
19
|
+
tokens: Record<string, string>;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export declare function createHostThemeTokensFrame(themeName: string, tokens: Record<string, string>): HostThemeTokensFrame;
|
|
23
|
+
//# sourceMappingURL=theme-push.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-push.d.ts","sourceRoot":"","sources":["../../src/daemon/theme-push.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,yBAAyB,yBAAyB,CAAC;AAIhE;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ9F;AAED,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC;CACF;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,oBAAoB,CAKlH","sourcesContent":["/**\n * iOS theme token push (§9.5, M11): the daemon can push its resolved theme\n * tokens to phones as a `host_theme_tokens` frame on conversation streams.\n * Ships OFF by default (voltd settings.themeTokenPush or VOLT_HOST_THEME_TOKENS=1)\n * and is additionally gated on the phone advertising the capability string;\n * clients that ignore the frame are fully supported.\n */\n\nexport const HOST_THEME_TOKENS_FEATURE = \"host_theme_tokens.v1\";\n\nconst HEX_COLOR_PATTERN = /^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;\n\n/**\n * Keep only plain hex color values. Anything else — var refs that failed to\n * resolve, ansi escape fragments, and especially anything path-like — is\n * dropped so no host-local information can leak onto the wire.\n */\nexport function sanitizeHostThemeTokens(tokens: Record<string, string>): Record<string, string> {\n\tconst sanitized: Record<string, string> = {};\n\tfor (const [name, value] of Object.entries(tokens)) {\n\t\tif (typeof value === \"string\" && HEX_COLOR_PATTERN.test(value)) {\n\t\t\tsanitized[name] = value;\n\t\t}\n\t}\n\treturn sanitized;\n}\n\nexport interface HostThemeTokensFrame {\n\ttype: \"host_theme_tokens\";\n\tdata: {\n\t\tthemeName: string;\n\t\ttokens: Record<string, string>;\n\t};\n}\n\nexport function createHostThemeTokensFrame(themeName: string, tokens: Record<string, string>): HostThemeTokensFrame {\n\treturn {\n\t\ttype: \"host_theme_tokens\",\n\t\tdata: { themeName, tokens: sanitizeHostThemeTokens(tokens) },\n\t};\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* iOS theme token push (§9.5, M11): the daemon can push its resolved theme
|
|
3
|
+
* tokens to phones as a `host_theme_tokens` frame on conversation streams.
|
|
4
|
+
* Ships OFF by default (voltd settings.themeTokenPush or VOLT_HOST_THEME_TOKENS=1)
|
|
5
|
+
* and is additionally gated on the phone advertising the capability string;
|
|
6
|
+
* clients that ignore the frame are fully supported.
|
|
7
|
+
*/
|
|
8
|
+
export const HOST_THEME_TOKENS_FEATURE = "host_theme_tokens.v1";
|
|
9
|
+
const HEX_COLOR_PATTERN = /^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;
|
|
10
|
+
/**
|
|
11
|
+
* Keep only plain hex color values. Anything else — var refs that failed to
|
|
12
|
+
* resolve, ansi escape fragments, and especially anything path-like — is
|
|
13
|
+
* dropped so no host-local information can leak onto the wire.
|
|
14
|
+
*/
|
|
15
|
+
export function sanitizeHostThemeTokens(tokens) {
|
|
16
|
+
const sanitized = {};
|
|
17
|
+
for (const [name, value] of Object.entries(tokens)) {
|
|
18
|
+
if (typeof value === "string" && HEX_COLOR_PATTERN.test(value)) {
|
|
19
|
+
sanitized[name] = value;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return sanitized;
|
|
23
|
+
}
|
|
24
|
+
export function createHostThemeTokensFrame(themeName, tokens) {
|
|
25
|
+
return {
|
|
26
|
+
type: "host_theme_tokens",
|
|
27
|
+
data: { themeName, tokens: sanitizeHostThemeTokens(tokens) },
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=theme-push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-push.js","sourceRoot":"","sources":["../../src/daemon/theme-push.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,sBAAsB,CAAC;AAEhE,MAAM,iBAAiB,GAAG,uDAAuD,CAAC;AAElF;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAA8B,EAA0B;IAC/F,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACzB,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAC;AAAA,CACjB;AAUD,MAAM,UAAU,0BAA0B,CAAC,SAAiB,EAAE,MAA8B,EAAwB;IACnH,OAAO;QACN,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,uBAAuB,CAAC,MAAM,CAAC,EAAE;KAC5D,CAAC;AAAA,CACF","sourcesContent":["/**\n * iOS theme token push (§9.5, M11): the daemon can push its resolved theme\n * tokens to phones as a `host_theme_tokens` frame on conversation streams.\n * Ships OFF by default (voltd settings.themeTokenPush or VOLT_HOST_THEME_TOKENS=1)\n * and is additionally gated on the phone advertising the capability string;\n * clients that ignore the frame are fully supported.\n */\n\nexport const HOST_THEME_TOKENS_FEATURE = \"host_theme_tokens.v1\";\n\nconst HEX_COLOR_PATTERN = /^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;\n\n/**\n * Keep only plain hex color values. Anything else — var refs that failed to\n * resolve, ansi escape fragments, and especially anything path-like — is\n * dropped so no host-local information can leak onto the wire.\n */\nexport function sanitizeHostThemeTokens(tokens: Record<string, string>): Record<string, string> {\n\tconst sanitized: Record<string, string> = {};\n\tfor (const [name, value] of Object.entries(tokens)) {\n\t\tif (typeof value === \"string\" && HEX_COLOR_PATTERN.test(value)) {\n\t\t\tsanitized[name] = value;\n\t\t}\n\t}\n\treturn sanitized;\n}\n\nexport interface HostThemeTokensFrame {\n\ttype: \"host_theme_tokens\";\n\tdata: {\n\t\tthemeName: string;\n\t\ttokens: Record<string, string>;\n\t};\n}\n\nexport function createHostThemeTokensFrame(themeName: string, tokens: Record<string, string>): HostThemeTokensFrame {\n\treturn {\n\t\ttype: \"host_theme_tokens\",\n\t\tdata: { themeName, tokens: sanitizeHostThemeTokens(tokens) },\n\t};\n}\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ControlEvent } from "./control-protocol.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Read-only viewer feeds for lease drains (§4.3): from drain start, every
|
|
4
|
+
* AgentSessionEvent of the draining runtime is captured; events are buffered
|
|
5
|
+
* until the acquiring TUI sends viewer_subscribe, then flushed and streamed
|
|
6
|
+
* live as viewer_event control messages. The feed is delivered only to the
|
|
7
|
+
* drain requester's control connection.
|
|
8
|
+
*/
|
|
9
|
+
export declare const VIEWER_BUFFER_MAX_EVENTS = 2000;
|
|
10
|
+
export declare const VIEWER_BUFFER_MAX_BYTES: number;
|
|
11
|
+
/** Structural view of AgentSession as the feed needs it. */
|
|
12
|
+
export interface ViewerFeedSession {
|
|
13
|
+
subscribe(handler: (event: unknown) => void): () => void;
|
|
14
|
+
abort(): Promise<void> | void;
|
|
15
|
+
}
|
|
16
|
+
export interface ViewerFeedEffects {
|
|
17
|
+
/** Deliver a control event to a specific connection; false when it is gone. */
|
|
18
|
+
sendTo(connectionId: string, event: ControlEvent): boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare class ViewerFeedRegistry {
|
|
21
|
+
private readonly effects;
|
|
22
|
+
private readonly feeds;
|
|
23
|
+
constructor(effects: ViewerFeedEffects);
|
|
24
|
+
/** Begin capturing the draining runtime's events for the requesting connection. */
|
|
25
|
+
start(viewerFeedId: string, connectionId: string, session: ViewerFeedSession): void;
|
|
26
|
+
private onSessionEvent;
|
|
27
|
+
private emit;
|
|
28
|
+
/**
|
|
29
|
+
* viewer_subscribe from the drain requester: flush the buffer (or the
|
|
30
|
+
* truncation marker) and switch to live forwarding. Returns false for an
|
|
31
|
+
* unknown feed or a connection that is not the drain requester.
|
|
32
|
+
*/
|
|
33
|
+
subscribe(viewerFeedId: string, connectionId: string): boolean;
|
|
34
|
+
/** Stop forwarding without ending the drain (TUI dismissed the overlay). */
|
|
35
|
+
unsubscribe(viewerFeedId: string, connectionId: string): boolean;
|
|
36
|
+
/** viewer_abort: stop the draining turn (non-destructive abort, §7.4). */
|
|
37
|
+
abort(viewerFeedId: string, connectionId: string): Promise<boolean>;
|
|
38
|
+
/** Drain ended: emit viewer_end (best-effort) and tear the feed down. */
|
|
39
|
+
end(viewerFeedId: string, reason: "granted" | "cancelled" | "error"): void;
|
|
40
|
+
has(viewerFeedId: string): boolean;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=viewer-feed.d.ts.map
|