@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
package/docs/tla/PLAN.md
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
# Volt formal specification — full modeling plan
|
|
2
|
+
|
|
3
|
+
This is the deeper reference behind [`README.md`](README.md): the complete module
|
|
4
|
+
decomposition, the per-module invariant/property catalogs for the modules still to
|
|
5
|
+
be written, and the shared abstraction strategy. Predicates are written in
|
|
6
|
+
near-TLA prose; each ties back to a named prose invariant (I1…I7) or a §4.8 race
|
|
7
|
+
row from the RFC.
|
|
8
|
+
|
|
9
|
+
> Plain-first: every module below starts from one question a user would
|
|
10
|
+
> recognize ("did my phone reconnect to the right chat?", "why did two things run
|
|
11
|
+
> at once?"). The formal invariants are just those questions written precisely
|
|
12
|
+
> enough for a checker.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 1. Module decomposition
|
|
17
|
+
|
|
18
|
+
Each module is its own `.tla` + `.cfg`. Shared datatypes (node ids, keys, close
|
|
19
|
+
reasons, handshake selections) will live in a `Common.tla` the others `EXTENDS`.
|
|
20
|
+
Build highest-value-first; `LeaseBroker` is the spine and everything else refers
|
|
21
|
+
to its states and the close reasons it mints.
|
|
22
|
+
|
|
23
|
+
| # | Module | Plain question it answers | Key state | Bug classes |
|
|
24
|
+
|---|--------|---------------------------|-----------|-------------|
|
|
25
|
+
| 1 | **`LeaseBroker`** | Who's doing the work for this chat, and how does it hand off? | lease state, owner, streamCount, relays, drain, `runtimeEntry`, pendingAttaches | split-brain runtime (I1), runtime/state coherence (I2), stuck hand-off (I5), lost turn (I6), rekey orphan (I7), relays-only-in-tui (I3), grant never settled (I4). **Written — see README.** |
|
|
26
|
+
| 2 | **`RelayViewer`** | While handing off, does the relay token stay single-use and does "watch the turn finish" ever leak or wedge? | relay `{Pending,Active,Invalidated,Settled}` + `used`/`expiresAt`; feed `{Buffering,Truncated,Live,Ended}` + `subscribed`/`seq`/`connId` | lost turn (event after end; silent-cancel emits nothing), token replay/expiry, double-settle, viewer feed leaking to a non-owner, stuck drain. |
|
|
27
|
+
| 3 | **`SessionTarget`** | On connect, does the phone pin the *right* session — never a stale one? | `target ∈ {last_noId,last_withId,new,session}`; `hostSession ∈ {exists,missing,liveMoved}`; wire `selection`; `requestedId?`; client `{Validated,StreamOpened,PinCommitted,RolledBack}` | ghost pin (pinned to requested vs canonical id), rekey without requestedId, requestedId leaking onto created/resumed, `target=session` silently creating a session, producer/validator tuple mismatch. |
|
|
28
|
+
| 4 | **`ClientAuth`** | Can a revoked or stale phone ever get back in? Is a one-time secret really one-time? | `clients`; `revoked[node]`; `pending[secretHash]`; `tomb ∈ {consumed(node),expired}`; logical `clock`; per-hello workspace authz | revoked-client re-entry, one-time secret replayed to a *different* node, expired-secret pairing, workspace-authz cached-at-pairing, check-order regressions. |
|
|
29
|
+
| 5 | **`ClientConn`** | Does the phone reconnect exactly once, never when the user said disconnect, and never confuse abort with detach? | app status; `userRequestedDisconnect`; background flag; per-pin status lattice; closure ledger; monotonic `operationToken`/`reconnectGen`/`attemptId` | ghost reconnect while user-disconnected, double reconnect loop, expected-closure marker mis-consume, abort-conflated-with-detach, stale continuation commit. |
|
|
30
|
+
| 6 | **`PushOrdering`** | Is `register_live_activity` ever accepted before its delivery channel exists? | `pushTarget ∈ {None,Enabled,Disabled}`; `laChannel ∈ {none,pendingAck,confirmed}`; `laReg`; `queuedUnreg` (TTL) | push-ordering violation, stale channel gating a send, reentrant flush dropping a queued unregister, cross-client channel scoping. |
|
|
31
|
+
|
|
32
|
+
**Build order.** `LeaseBroker` → `RelayViewer` (shares the connection-drop
|
|
33
|
+
trigger; compose the two once each is green solo) → `SessionTarget` → `ClientAuth`
|
|
34
|
+
→ `ClientConn` (largest state space; consumes close reasons from 1–3 as an
|
|
35
|
+
abstract input alphabet) → `PushOrdering`.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 2. `LeaseBroker` (written)
|
|
40
|
+
|
|
41
|
+
Full detail is in [`README.md`](README.md#the-leasebroker-module) and the header
|
|
42
|
+
comment of `LeaseBroker.tla`. Summary of what it checks:
|
|
43
|
+
|
|
44
|
+
- **Safety:** `OwnershipUnique` (I1), `RuntimeIffDaemon` (I2), `TuiOwnerWellFormed`
|
|
45
|
+
(I3a), `DisposePendingOnlyTui`, `RelaysOnlyWhenTui` (I3b), `DrainHasAcquirer`
|
|
46
|
+
(I4), `StreamingCoherent`, `DrainNoNewTurn` (I6), and the off-by-default
|
|
47
|
+
`NoStreamLeak` bug detector.
|
|
48
|
+
- **Liveness:** `DrainConverges` (I5), `EventualSettle` (I4), under per-key weak
|
|
49
|
+
fairness on the drain pump.
|
|
50
|
+
- **Key modeling move:** `runtimeEntry` is an independent variable and the
|
|
51
|
+
idle-acquire disposal is a two-step `flip → disposeDone/disposeFail`, so the
|
|
52
|
+
flip-before-dispose split-brain window is a reachable state (otherwise I1/I2 are
|
|
53
|
+
vacuous). This is the fix the review forced on the first draft.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 3. Invariant & property catalogs — planned modules
|
|
58
|
+
|
|
59
|
+
Unless noted, assume **weak fairness (WF)** on the daemon's internal steps (drain
|
|
60
|
+
runner, disposal, ack handlers) and on "the environment eventually satisfies the
|
|
61
|
+
network / eventually idles"; revocation and user-disconnect are adversarial (no
|
|
62
|
+
fairness — they are choices, not obligations).
|
|
63
|
+
|
|
64
|
+
### 3.2 `RelayViewer` — written + verified green
|
|
65
|
+
|
|
66
|
+
Implemented in `RelayViewer.tla` (207,025 states). The prose below is the design
|
|
67
|
+
intent; the shipped module realizes it with `FeedOwnerSet`, `BufferCoherent`,
|
|
68
|
+
`RelayUsedCoherent` (safety) and `NoEmitAfterEnd`, `EndedIsTerminal`,
|
|
69
|
+
`SeqMonotone`, `RelayNoResurrect`, `FeedConverges`, `RelaySettleConverges`
|
|
70
|
+
(temporal). The daemon-side relay byte pump and the drain trigger are abstracted;
|
|
71
|
+
composition with `LeaseBroker` is future work.
|
|
72
|
+
|
|
73
|
+
**Safety**
|
|
74
|
+
|
|
75
|
+
- `RelayTokenRedeemableAtMostOnce` — `admit` succeeds ≤ once per relayId; the
|
|
76
|
+
shared `used` bit is flipped by both `admit` and `invalidatePending`, so a
|
|
77
|
+
rekey-invalidate and a concurrent admit cannot both win.
|
|
78
|
+
- `RelayTokenExpiryEnforced` — `admit` rejects `now > expiresAt` at redeem time.
|
|
79
|
+
- `AdmitAtomicityUnderReject` — a failing `admit` mutates neither `pending` nor `active`.
|
|
80
|
+
- `RelaySettleExactlyOnce` — `finish()` settles and deletes exactly once; daemon
|
|
81
|
+
`closeReason` takes precedence over a socket-derived reason.
|
|
82
|
+
- `NoViewerEventAfterViewerEnd` — once a feed ended, no `viewer_event` is emitted.
|
|
83
|
+
- `ViewerFeedToRequesterOnly` — emit/subscribe/abort check `feed.connId`; the
|
|
84
|
+
draining transcript never leaks to another connection.
|
|
85
|
+
- `ViewerBufferBounded` — the pre-subscribe buffer is capped; overflow yields
|
|
86
|
+
exactly one `truncated` marker and no partial transcript.
|
|
87
|
+
- `SilentCancelEmitsNothing` (§4.8 row 2) — if the requester drops between
|
|
88
|
+
`lease_pending` and `drain_end`, the grant rejects internally and **no** wire
|
|
89
|
+
frame is sent (distinct from granted/error which do emit). Getting "nothing is
|
|
90
|
+
sent" wrong is the likely wedge.
|
|
91
|
+
|
|
92
|
+
**Liveness** — `PendingOfferResolves`, `ActiveRelaySettles`, `ViewerFeedEnds`
|
|
93
|
+
(every started feed reaches granted/cancelled/error; `unsubscribe` doesn't strand it).
|
|
94
|
+
|
|
95
|
+
### 3.3 `SessionTarget` — written + verified green
|
|
96
|
+
|
|
97
|
+
Implemented in `SessionTarget.tla` (28 states). Models the daemon producer
|
|
98
|
+
(`session-target.ts` + rekey overlay) and the phone validator as a
|
|
99
|
+
resolve → validate → commit/reject pipeline, checking `NoGhostSession`,
|
|
100
|
+
`CanonicalPinOnly`, `ProducerSubsetOfValidator` (the compatibility proof),
|
|
101
|
+
`RekeyWellFormed`, `SessionResumedMatches`, `RequestedOnlyForRekey`, and
|
|
102
|
+
`HandshakeTerminates`. The prose below is the original design intent.
|
|
103
|
+
|
|
104
|
+
**Safety**
|
|
105
|
+
|
|
106
|
+
- `CanonicalPinOnly` — the app commits a pin only against the canonical
|
|
107
|
+
`metadata.sessionId`, never `requestedSessionId`. The strongest one: TLC must be
|
|
108
|
+
unable to reach a `PinCommitted` whose id = the requested id on a rekey.
|
|
109
|
+
- `RequestedIdImpliesRekey` — `requestedSessionId` on the wire ⇔ `selection =
|
|
110
|
+
session_rekeyed` ⇔ `target = session`; no created/resumed carries a requested id.
|
|
111
|
+
- `SessionTargetNoCreate` — `target=session ∧ hostSession=missing ⇒
|
|
112
|
+
session_unavailable`, never `created_after_missing`.
|
|
113
|
+
- `NewTargetCreatedOnly` — `target=new ⇒ selection=created`.
|
|
114
|
+
- `ProducerSubsetOfValidator` (refinement) — the `(target, selection, requestedId)`
|
|
115
|
+
tuples the host emits are a subset of what the Swift validator accepts. A genuine
|
|
116
|
+
cross-language compatibility proof no test gives us.
|
|
117
|
+
|
|
118
|
+
**Liveness** — `HandshakeTerminates` (every valid target reaches exactly one of
|
|
119
|
+
`PinCommitted` / `RolledBack`; no partial pin persists), `RekeySurfacesToClient`.
|
|
120
|
+
|
|
121
|
+
### 3.4 `ClientAuth` — written + verified green
|
|
122
|
+
|
|
123
|
+
Implemented in `ClientAuth.tla` (9,678 states). Models the host authorization
|
|
124
|
+
decision (`authorization.ts`) evolving through pair / revoke / approve-re-pair /
|
|
125
|
+
expire-secret and a clock that moves backwards, checking `NoIllegitimatePairing`
|
|
126
|
+
(covers revoked re-entry, one-time-secret replay by another node, expired-secret
|
|
127
|
+
pairing, and the fail-closed backwards-clock case) and `WorkspacePerRequest`. The
|
|
128
|
+
prose below is the original design intent.
|
|
129
|
+
|
|
130
|
+
**Safety**
|
|
131
|
+
|
|
132
|
+
- `AuthoritativeIdentityIsNodeId` — all keying uses the transport `remoteNodeId`;
|
|
133
|
+
`hello.clientNodeId` is never consulted.
|
|
134
|
+
- `RevokedNeedsApprovedRePair` — a revoked node is rejected unless re-pair approval
|
|
135
|
+
is active (0 ≤ now−approvedAt ≤ 30min, **fail-closed on negative**) *and* a live,
|
|
136
|
+
non-consumed, non-expired secret. A generic new ticket alone never re-admits.
|
|
137
|
+
- `ConsumedSecretBindsOneNode` — a `consumed(node)` tombstone rejects any *other*
|
|
138
|
+
node presenting the same secret hash.
|
|
139
|
+
- `ExpiredSecretNeverPairs` — expiry dominates in check order; re-pair approval
|
|
140
|
+
can't rescue an expired secret.
|
|
141
|
+
- `WorkspaceAuthzPerRequest` — even a paired client is authz-checked against
|
|
142
|
+
*current* host state every handshake, never cached at pairing.
|
|
143
|
+
- `CheckOrderPreserved` — outcomes match the load-bearing order (revoked → expired
|
|
144
|
+
→ workspace_unregistered → workspace_unavailable → workspace_authorization_removed
|
|
145
|
+
→ consumed → client_unknown).
|
|
146
|
+
- `RetiredOutcomesUnreachable` — the authorization-state model cannot produce
|
|
147
|
+
`conversation_in_use` or `workspace_forbidden`; runtime attach may separately
|
|
148
|
+
emit `conversation_in_use` for incompatible client tool grants.
|
|
149
|
+
|
|
150
|
+
**Adversarial-clock note.** Model the logical clock as able to move **backward**
|
|
151
|
+
and assert `RevokedNeedsApprovedRePair` still holds — a future-dated approval must
|
|
152
|
+
fail closed. **Liveness** — `PendingTicketResolves`, `TombstonesReclaimed`.
|
|
153
|
+
|
|
154
|
+
### 3.5 `ClientConn` — written + verified green
|
|
155
|
+
|
|
156
|
+
Implemented in `ClientConn.tla` (176 states). Models the phone reconnect loop and
|
|
157
|
+
network-path handling, checking `SingleReconnectDial` (the anti-double-loop race:
|
|
158
|
+
a network blip during a dial never spawns a second concurrent dial),
|
|
159
|
+
`UserDiscSuppresses`, `TerminalAbsorbing`, and `AbortKeepsLive`. The generation
|
|
160
|
+
guards, snapshots, and backoff timing are abstracted; the prose below is the fuller
|
|
161
|
+
design intent.
|
|
162
|
+
|
|
163
|
+
**Safety**
|
|
164
|
+
|
|
165
|
+
- `UserDisconnectSuppressesAutoReconnect` — while `userRequestedDisconnect`, no
|
|
166
|
+
automatic reconnect runs; the flag clears only on an explicit user connect. Holds
|
|
167
|
+
across app-active, network-flap, and background-return.
|
|
168
|
+
- `AbortKeepsStreamOpen` — a successful abort does not close the stream, arm a
|
|
169
|
+
closure marker, schedule reconnect, or reselect. Abort and detach are disjoint.
|
|
170
|
+
- `ExpectedClosureNeverReportsDisconnect` — an EOF whose `(ws,sid)` marker is in
|
|
171
|
+
the ledger is consumed exactly once and never reports a disconnect or schedules
|
|
172
|
+
reconnect. Only `lease_transferred` / `session_rekeyed_reconnect` (+ terminal
|
|
173
|
+
revoke/workspace-removal) arm markers.
|
|
174
|
+
- `SingleReconnectLoop` — ≤ one live reconnect loop (generation guard);
|
|
175
|
+
`networkPathStatusDidChange` never clobbers an in-flight dial.
|
|
176
|
+
- `StaleContinuationBails` — any await-resumption whose captured
|
|
177
|
+
`operationToken`/`reconnectGen`/`attemptId` no longer matches is a no-op.
|
|
178
|
+
- `TerminalIsAbsorbing` — nothing auto-escapes a terminal `Failed` state.
|
|
179
|
+
|
|
180
|
+
**Suspected bugs to try to break:** closure-marker key collision (ledger keyed by
|
|
181
|
+
`ws` vs `(ws,sid)`); double reconnect across `networkPathStatusDidChange` vs
|
|
182
|
+
`beginForegroundReconnect` when `status=.connecting`; `reconnectGen` orphaning.
|
|
183
|
+
|
|
184
|
+
**Liveness** — `ReconnectMakesProgress`, `LeaseHandoffSelfHeals` (a
|
|
185
|
+
`lease_transferred` on the selected agent re-establishes a live stream — ties back
|
|
186
|
+
to `LeaseBroker`/`RelayViewer` close reasons), `BoundedRetryLoops` (duplicate ≤5,
|
|
187
|
+
lease_draining ≤3 both terminate).
|
|
188
|
+
|
|
189
|
+
### 3.6 `PushOrdering` — written + verified green
|
|
190
|
+
|
|
191
|
+
Implemented in `PushOrdering.tla` (63 states). Models the phone/daemon two-phase
|
|
192
|
+
registration, checking `OrderingGate` (the daemon never registers a Live Activity
|
|
193
|
+
without a matching stored delivery channel), `SendAfterConfirm` (the phone never
|
|
194
|
+
sends the LA registration before its channel is confirmed), and
|
|
195
|
+
`StaleChannelInvalidated`. The prose below is the original design intent.
|
|
196
|
+
|
|
197
|
+
**Safety**
|
|
198
|
+
|
|
199
|
+
- `DeliveryChannelPrecedesLiveActivity` — `register_live_activity` is sent only
|
|
200
|
+
when a confirmed delivery channel exists, and the host accepts it only if it
|
|
201
|
+
resolves the token hash to a stored channel. No LA registration without a prior
|
|
202
|
+
acked `register_push_target`.
|
|
203
|
+
- `StaleChannelInvalidated` — a channel change clears confirmed/pending so a stale
|
|
204
|
+
channel can never gate an LA send.
|
|
205
|
+
- `AuthoritativeClientScoping` — every registration is keyed to the authoritative
|
|
206
|
+
node id on both the direct and `relay_rpc` paths.
|
|
207
|
+
- `UnregisterIdempotent` — unregister removes exactly the matching
|
|
208
|
+
`(ws,sid,activityId)` and is a no-op otherwise.
|
|
209
|
+
|
|
210
|
+
**Liveness** — `RegistrationConverges`, `QueuedUnregisterResolves` (queued
|
|
211
|
+
unregister is sent, re-queued, or dropped at its 24h TTL — never lingers),
|
|
212
|
+
`ReentrantEnqueueNotDropped` (a reentrant enqueue during a flush `await` is merged
|
|
213
|
+
back, not silently dropped).
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## 4. Abstraction strategy (shared)
|
|
218
|
+
|
|
219
|
+
**Keep concrete (load-bearing):** the lease states and exact transition guards;
|
|
220
|
+
the relay `used` single-use bit shared across admit/invalidate; relay/viewer state
|
|
221
|
+
labels and the settled/ended guards; the close-reason enum (model the
|
|
222
|
+
control-protocol superset); the handshake `(target, selection, requestedId)` tuple
|
|
223
|
+
space; the auth check order and the four disjoint state sets keyed by node/secret;
|
|
224
|
+
the app anti-race counters as monotonic tokens with a first-class "stale
|
|
225
|
+
continuation bails" step; the push two-phase ack chain.
|
|
226
|
+
|
|
227
|
+
**Abstract away:** turns → a boolean `isStreaming` with a nondeterministic end;
|
|
228
|
+
the session file → a version counter; the byte relay → an opaque connected/settled
|
|
229
|
+
channel; the viewer buffer → one bounded capacity + a nondeterministic overflow;
|
|
230
|
+
time/TTL → a small logical clock or fireable expire events (clock may move backward
|
|
231
|
+
only in `ClientAuth`); tokens → opaque identities with equality only; transcript
|
|
232
|
+
content, push payloads, model catalog, migrations, audit.
|
|
233
|
+
|
|
234
|
+
**Symmetry & bounds.** Clients, workspaces, and sessions are interchangeable →
|
|
235
|
+
symmetry sets. Suggested starting CONSTANTS: 2 nodes, 1 workspace, 2 sessions, 1
|
|
236
|
+
TUI + 1 phone connection, `MaxStreamCount=2`, retry bounds 2 (smaller than
|
|
237
|
+
production 5/3 — liveness that holds at 2 holds at N). Add a state constraint to
|
|
238
|
+
cap the logical clock and counters so TLC's graph stays finite. Symmetry is
|
|
239
|
+
unsound with liveness in TLC, so use it for invariant-only runs and drop it (as the
|
|
240
|
+
shipped `LeaseBroker.cfg` does) when checking properties.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
\* TLC configuration for PushOrdering.tla
|
|
2
|
+
\* ./check.sh PushOrdering
|
|
3
|
+
\* Checks the register_push_target -> register_live_activity ordering and stale-
|
|
4
|
+
\* channel invalidation across the phone/daemon two-phase registration.
|
|
5
|
+
|
|
6
|
+
SPECIFICATION Spec
|
|
7
|
+
|
|
8
|
+
CONSTANTS
|
|
9
|
+
Channels = {c1, c2}
|
|
10
|
+
NONE = NONE
|
|
11
|
+
|
|
12
|
+
INVARIANT
|
|
13
|
+
POTypeOK
|
|
14
|
+
OrderingGate
|
|
15
|
+
SendAfterConfirm
|
|
16
|
+
StaleChannelInvalidated
|
|
17
|
+
RegisteredLAHadStoredChannel
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
------------------------------- MODULE PushOrdering -------------------------------
|
|
2
|
+
\* In plain terms
|
|
3
|
+
\*
|
|
4
|
+
\* A Live Activity (the lock-screen/Dynamic Island progress pill) can only be
|
|
5
|
+
\* delivered if the phone first told the daemon HOW to reach it. So there is a
|
|
6
|
+
\* strict order: the phone registers a push target (which carries the Live
|
|
7
|
+
\* Activity delivery channel) and waits for the ack; only then does it register
|
|
8
|
+
\* the Live Activity. The daemon likewise refuses a Live Activity registration
|
|
9
|
+
\* whose token it can't resolve to a stored channel (`unknown_live_activity_token`).
|
|
10
|
+
\*
|
|
11
|
+
\* The other subtlety: if the delivery channel CHANGES (new token / session), any
|
|
12
|
+
\* previously "confirmed" channel must be thrown away, so a stale confirmation can
|
|
13
|
+
\* never wave through a Live Activity for the wrong channel.
|
|
14
|
+
\*
|
|
15
|
+
\* Source of truth:
|
|
16
|
+
\* volt-app .../VoltSession+LiveActivity.swift (phone two-phase send + confirm)
|
|
17
|
+
\* src/daemon/conversation-commands.ts (register_live_activity gate)
|
|
18
|
+
\* src/core/remote/iroh/push.ts (host delivery via stored channel)
|
|
19
|
+
\*
|
|
20
|
+
\* Properties: the daemon never registers a Live Activity without a matching
|
|
21
|
+
\* stored delivery channel; the phone never sends the Live Activity registration
|
|
22
|
+
\* before its channel is confirmed; and a confirmed channel always matches the
|
|
23
|
+
\* current one (stale confirmations are invalidated).
|
|
24
|
+
|
|
25
|
+
EXTENDS Naturals
|
|
26
|
+
|
|
27
|
+
CONSTANTS
|
|
28
|
+
Channels, \* delivery channel identities (symmetric); small, e.g. {c1, c2}
|
|
29
|
+
NONE \* sentinel: no channel
|
|
30
|
+
|
|
31
|
+
ASSUME NONE \notin Channels
|
|
32
|
+
|
|
33
|
+
ChannelOrNone == Channels \cup {NONE}
|
|
34
|
+
PushPhases == {"idle", "sent", "confirmed"}
|
|
35
|
+
LAPhases == {"idle", "sent", "registered"}
|
|
36
|
+
|
|
37
|
+
VARIABLES
|
|
38
|
+
currentChannel, \* the channel the phone currently wants a Live Activity on
|
|
39
|
+
pushPhase, \* register_push_target progress
|
|
40
|
+
pushSentChannel, \* channel carried by the in-flight push registration
|
|
41
|
+
confirmedChannel, \* channel confirmed by a push-target ack (gates the LA send)
|
|
42
|
+
laPhase, \* register_live_activity progress
|
|
43
|
+
laSentChannel, \* channel of the in-flight LA registration
|
|
44
|
+
storedChannel, \* daemon's stored delivery channel (from register_push_target)
|
|
45
|
+
hostLAChannel, \* channel of the daemon's accepted LA registration
|
|
46
|
+
badHostAccept, \* daemon accepted an LA with no matching stored channel (sticky)
|
|
47
|
+
badPhoneSend \* phone sent an LA registration before its channel was confirmed (sticky)
|
|
48
|
+
|
|
49
|
+
vars == << currentChannel, pushPhase, pushSentChannel, confirmedChannel, laPhase,
|
|
50
|
+
laSentChannel, storedChannel, hostLAChannel, badHostAccept, badPhoneSend >>
|
|
51
|
+
|
|
52
|
+
-----------------------------------------------------------------------------
|
|
53
|
+
POTypeOK ==
|
|
54
|
+
/\ currentChannel \in ChannelOrNone
|
|
55
|
+
/\ pushPhase \in PushPhases
|
|
56
|
+
/\ pushSentChannel \in ChannelOrNone
|
|
57
|
+
/\ confirmedChannel \in ChannelOrNone
|
|
58
|
+
/\ laPhase \in LAPhases
|
|
59
|
+
/\ laSentChannel \in ChannelOrNone
|
|
60
|
+
/\ storedChannel \in ChannelOrNone
|
|
61
|
+
/\ hostLAChannel \in ChannelOrNone
|
|
62
|
+
/\ badHostAccept \in BOOLEAN
|
|
63
|
+
/\ badPhoneSend \in BOOLEAN
|
|
64
|
+
|
|
65
|
+
Init ==
|
|
66
|
+
/\ currentChannel = NONE
|
|
67
|
+
/\ pushPhase = "idle"
|
|
68
|
+
/\ pushSentChannel = NONE
|
|
69
|
+
/\ confirmedChannel = NONE
|
|
70
|
+
/\ laPhase = "idle"
|
|
71
|
+
/\ laSentChannel = NONE
|
|
72
|
+
/\ storedChannel = NONE
|
|
73
|
+
/\ hostLAChannel = NONE
|
|
74
|
+
/\ badHostAccept = FALSE
|
|
75
|
+
/\ badPhoneSend = FALSE
|
|
76
|
+
|
|
77
|
+
-----------------------------------------------------------------------------
|
|
78
|
+
\* The desired channel changes (new token / session, or Live Activity cleared).
|
|
79
|
+
\* resetLiveActivityDeliveryStateIfNeeded: a stale confirmed / pending push
|
|
80
|
+
\* channel is thrown away, and the LA registration is invalidated.
|
|
81
|
+
SetChannel(c) ==
|
|
82
|
+
/\ c # currentChannel
|
|
83
|
+
/\ currentChannel' = c
|
|
84
|
+
/\ confirmedChannel' = IF confirmedChannel = c THEN confirmedChannel ELSE NONE
|
|
85
|
+
/\ pushPhase' = IF pushSentChannel = c THEN pushPhase ELSE "idle"
|
|
86
|
+
/\ pushSentChannel' = IF pushSentChannel = c THEN pushSentChannel ELSE NONE
|
|
87
|
+
/\ laPhase' = "idle"
|
|
88
|
+
/\ laSentChannel' = NONE
|
|
89
|
+
/\ UNCHANGED << storedChannel, hostLAChannel, badHostAccept, badPhoneSend >>
|
|
90
|
+
|
|
91
|
+
\* Phone sends register_push_target for the current channel; clears confirmation.
|
|
92
|
+
PhoneSendPush ==
|
|
93
|
+
/\ currentChannel # NONE
|
|
94
|
+
/\ pushPhase' = "sent"
|
|
95
|
+
/\ pushSentChannel' = currentChannel
|
|
96
|
+
/\ confirmedChannel' = NONE
|
|
97
|
+
/\ UNCHANGED << currentChannel, laPhase, laSentChannel, storedChannel,
|
|
98
|
+
hostLAChannel, badHostAccept, badPhoneSend >>
|
|
99
|
+
|
|
100
|
+
\* Daemon receives register_push_target and stores the delivery channel.
|
|
101
|
+
HostStorePush ==
|
|
102
|
+
/\ pushPhase = "sent"
|
|
103
|
+
/\ storedChannel' = pushSentChannel
|
|
104
|
+
/\ UNCHANGED << currentChannel, pushPhase, pushSentChannel, confirmedChannel,
|
|
105
|
+
laPhase, laSentChannel, hostLAChannel, badHostAccept, badPhoneSend >>
|
|
106
|
+
|
|
107
|
+
\* Phone processes the push-target ack (after the daemon stored it): confirm the
|
|
108
|
+
\* channel only if it still matches what the phone currently wants.
|
|
109
|
+
PhoneAckPush ==
|
|
110
|
+
/\ pushPhase = "sent"
|
|
111
|
+
/\ storedChannel = pushSentChannel \* the ack follows the daemon storing it
|
|
112
|
+
/\ pushPhase' = "confirmed"
|
|
113
|
+
/\ confirmedChannel' = IF pushSentChannel = currentChannel THEN pushSentChannel ELSE NONE
|
|
114
|
+
/\ pushSentChannel' = NONE
|
|
115
|
+
/\ UNCHANGED << currentChannel, laPhase, laSentChannel, storedChannel,
|
|
116
|
+
hostLAChannel, badHostAccept, badPhoneSend >>
|
|
117
|
+
|
|
118
|
+
\* Phone sends register_live_activity -- ONLY when the channel is confirmed.
|
|
119
|
+
PhoneSendLA ==
|
|
120
|
+
/\ laPhase = "idle"
|
|
121
|
+
/\ currentChannel # NONE
|
|
122
|
+
/\ confirmedChannel = currentChannel
|
|
123
|
+
/\ laPhase' = "sent"
|
|
124
|
+
/\ laSentChannel' = currentChannel
|
|
125
|
+
/\ badPhoneSend' = badPhoneSend \/ (confirmedChannel # currentChannel)
|
|
126
|
+
/\ UNCHANGED << currentChannel, pushPhase, pushSentChannel, confirmedChannel,
|
|
127
|
+
storedChannel, hostLAChannel, badHostAccept >>
|
|
128
|
+
|
|
129
|
+
\* Daemon processes register_live_activity: accept iff it has a matching stored
|
|
130
|
+
\* channel, else reject (unknown_live_activity_token).
|
|
131
|
+
HostProcessLA ==
|
|
132
|
+
/\ laPhase = "sent"
|
|
133
|
+
/\ IF storedChannel = laSentChannel
|
|
134
|
+
THEN /\ laPhase' = "registered"
|
|
135
|
+
/\ hostLAChannel' = laSentChannel
|
|
136
|
+
/\ badHostAccept' = badHostAccept
|
|
137
|
+
/\ UNCHANGED laSentChannel
|
|
138
|
+
ELSE /\ laPhase' = "idle" \* rejected
|
|
139
|
+
/\ laSentChannel' = NONE
|
|
140
|
+
/\ hostLAChannel' = hostLAChannel
|
|
141
|
+
/\ badHostAccept' = badHostAccept \/ FALSE
|
|
142
|
+
/\ UNCHANGED << currentChannel, pushPhase, pushSentChannel, confirmedChannel,
|
|
143
|
+
storedChannel, badPhoneSend >>
|
|
144
|
+
|
|
145
|
+
\* Cleanup: unregister the Live Activity (disable / replace / close / abort).
|
|
146
|
+
Unregister ==
|
|
147
|
+
/\ laPhase = "registered"
|
|
148
|
+
/\ laPhase' = "idle"
|
|
149
|
+
/\ laSentChannel' = NONE
|
|
150
|
+
/\ hostLAChannel' = NONE
|
|
151
|
+
/\ UNCHANGED << currentChannel, pushPhase, pushSentChannel, confirmedChannel,
|
|
152
|
+
storedChannel, badHostAccept, badPhoneSend >>
|
|
153
|
+
|
|
154
|
+
Next ==
|
|
155
|
+
\/ \E c \in ChannelOrNone : SetChannel(c)
|
|
156
|
+
\/ PhoneSendPush
|
|
157
|
+
\/ HostStorePush
|
|
158
|
+
\/ PhoneAckPush
|
|
159
|
+
\/ PhoneSendLA
|
|
160
|
+
\/ HostProcessLA
|
|
161
|
+
\/ Unregister
|
|
162
|
+
|
|
163
|
+
Spec == Init /\ [][Next]_vars
|
|
164
|
+
|
|
165
|
+
-----------------------------------------------------------------------------
|
|
166
|
+
\* The daemon never registers a Live Activity without a matching stored delivery
|
|
167
|
+
\* channel (the register_push_target-before-register_live_activity ordering).
|
|
168
|
+
OrderingGate == badHostAccept = FALSE
|
|
169
|
+
|
|
170
|
+
\* The phone never sends the Live Activity registration before its channel is
|
|
171
|
+
\* confirmed by a push-target ack.
|
|
172
|
+
SendAfterConfirm == badPhoneSend = FALSE
|
|
173
|
+
|
|
174
|
+
\* A confirmed delivery channel always matches the current one; stale confirmations
|
|
175
|
+
\* are invalidated on a channel change (so they can't gate the wrong Live Activity).
|
|
176
|
+
StaleChannelInvalidated ==
|
|
177
|
+
(confirmedChannel # NONE) => (confirmedChannel = currentChannel)
|
|
178
|
+
|
|
179
|
+
\* A daemon-registered Live Activity is always for the currently stored channel at
|
|
180
|
+
\* the time it was accepted (follows from OrderingGate).
|
|
181
|
+
RegisteredLAHadStoredChannel ==
|
|
182
|
+
(laPhase = "registered") => (hostLAChannel # NONE)
|
|
183
|
+
=============================================================================
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Volt live-shared-session — formal (TLA+) specification
|
|
2
|
+
|
|
3
|
+
## In plain terms
|
|
4
|
+
|
|
5
|
+
Volt's hardest bugs aren't in any one function — they're in *who owns a
|
|
6
|
+
conversation* as it moves between the desktop terminal, the background daemon,
|
|
7
|
+
and the phone, and in *what order* things get closed and handed off. Those are
|
|
8
|
+
exactly the bugs ordinary tests miss, because they only show up in a specific
|
|
9
|
+
interleaving of events across three programs.
|
|
10
|
+
|
|
11
|
+
This directory holds a formal model of that behavior. A model is a precise,
|
|
12
|
+
executable description of the rules; a checker (TLC) then explores **every**
|
|
13
|
+
reachable interleaving and reports the first one that breaks a rule. It's a way
|
|
14
|
+
to test the *design* exhaustively before trusting it in code.
|
|
15
|
+
|
|
16
|
+
All six modules are now written and model-checked green with TLC. The suite spans
|
|
17
|
+
the daemon, the TUI, and the phone; each module is checkable on its own in seconds
|
|
18
|
+
via `./check.sh <Module>`.
|
|
19
|
+
|
|
20
|
+
> Keep these files beside the RFC (`docs/live-shared-session-daemon-design.md`).
|
|
21
|
+
> When the design changes, change the model first, watch the check break, then
|
|
22
|
+
> change the code. If they drift, the model stops meaning anything.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Status
|
|
27
|
+
|
|
28
|
+
| Module | What it covers (plain) | State |
|
|
29
|
+
|--------|------------------------|-------|
|
|
30
|
+
| **`LeaseBroker`** | Who holds a conversation (daemon vs terminal) and how it hands off. | **Verified green** (40,804 states). `LeaseBroker.tla` / `.cfg` |
|
|
31
|
+
| **`RelayViewer`** | The relay token + the "watch the turn finish" viewer feed during a hand-off. | **Verified green** (207,025 states). `RelayViewer.tla` / `.cfg` |
|
|
32
|
+
| **`SessionTarget`** | Picking the right session on connect, so a phone never pins the wrong one. | **Verified green** (28 states). `SessionTarget.tla` / `.cfg` |
|
|
33
|
+
| **`ClientAuth`** | Pairing, revoking, and re-pairing a phone. | **Verified green** (9,678 states). `ClientAuth.tla` / `.cfg` |
|
|
34
|
+
| **`ClientConn`** | The phone's own connect / reconnect / detach / abort behavior. | **Verified green** (176 states). `ClientConn.tla` / `.cfg` |
|
|
35
|
+
| **`PushOrdering`** | Push + Live Activity registration must happen in the right order. | **Verified green** (63 states). `PushOrdering.tla` / `.cfg` |
|
|
36
|
+
|
|
37
|
+
**Running the checker.** `./check.sh` runs TLC on `LeaseBroker` (it auto-downloads
|
|
38
|
+
`tla2tools.jar` on first run; needs a JDK 17+ via `JAVA_HOME` or `java` on PATH).
|
|
39
|
+
The baseline has been **verified green with TLC**: 40,804 distinct states, depth
|
|
40
|
+
27, all invariants and both liveness properties hold. See [How to run](#how-to-run).
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## What we already found
|
|
45
|
+
|
|
46
|
+
Modeling `LeaseBroker` surfaced **two real issues** in `lease-broker.ts`, each
|
|
47
|
+
reproduced by TLC as a concrete trace (both invariants ship in `LeaseBroker.tla`,
|
|
48
|
+
off by default so the baseline stays green; add either to the `.cfg` to see it):
|
|
49
|
+
|
|
50
|
+
**1 — `streamCount` leak (fixed).**
|
|
51
|
+
In `runDrain`'s disposal-error recovery (~L388–408), the cancelled branch dropped
|
|
52
|
+
the lease to `unowned` but **never zeroed `record.streamCount`** — unlike the
|
|
53
|
+
success path (L409). Since `dropIfUnowned` requires `streamCount === 0`, the
|
|
54
|
+
record could never be dropped: a leaked `unowned` ghost that handed a phantom
|
|
55
|
+
stream count to the next acquirer. TLC trace: `CommitDaemonAttach →
|
|
56
|
+
PhoneStreamAttach → RuntimeStartTurn → AcquireDrainStart → DrainRuntimeIdle →
|
|
57
|
+
DrainCancelDisposing → DrainDisposeError`, ending in `unowned` with
|
|
58
|
+
`streamCount = 1`. **Fixed** in `lease-broker.ts` (zero `streamCount` in that catch
|
|
59
|
+
branch) with a regression test; `NoStreamLeak` is now in the baseline `.cfg` so it
|
|
60
|
+
stays fixed.
|
|
61
|
+
|
|
62
|
+
**2 — turn killed on TUI open after the phone walks away (resolved: intended).**
|
|
63
|
+
`acquireForTui` only *drains* when the state is `daemon-active` (L296). A turn
|
|
64
|
+
keeps running after the last phone detaches (RFC: "the prompt continues on the
|
|
65
|
+
host"), leaving a `daemon-detached` runtime that is still mid-turn; opening the TUI
|
|
66
|
+
then disposes it, killing that turn instead of draining it. The model surfaced this
|
|
67
|
+
(`IdleAcquireOnlyWhenIdle`, TLC trace `RuntimeStartTurn → PhoneStreamDetach →
|
|
68
|
+
AcquireIdleFlip`), and the decision came back: **this is intended** — once no
|
|
69
|
+
device is receiving the turn there is nothing to watch, so it is abandonable (the
|
|
70
|
+
same as closing a TUI mid-turn). Documented in the RFC §4.2 and the
|
|
71
|
+
`lease-broker.ts` comment; `IdleAcquireOnlyWhenIdle` stays off in the baseline as a
|
|
72
|
+
marker of that deliberate choice.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## The `LeaseBroker` module
|
|
77
|
+
|
|
78
|
+
### The five states (who holds the conversation)
|
|
79
|
+
|
|
80
|
+
`unowned` · `daemon-active` · `daemon-detached` · `daemon-draining` · `tui-owned`,
|
|
81
|
+
keyed on `(workspaceName, sessionId)` — `clientNodeId` is deliberately dropped, so
|
|
82
|
+
two phones are the *same* conversation, not two. See the header comment in
|
|
83
|
+
`LeaseBroker.tla` for the plain-English description of each.
|
|
84
|
+
|
|
85
|
+
### The one design decision that makes the check meaningful
|
|
86
|
+
|
|
87
|
+
The RFC's headline invariant is "one live runtime per conversation, and a daemon
|
|
88
|
+
runtime exists **iff** the state is `daemon-*`." The tempting way to model that —
|
|
89
|
+
define "runtime alive" as "state is `daemon-*`" — makes the invariant `X ⇔ X`: it
|
|
90
|
+
passes while proving nothing. (The first draft did exactly this; the review
|
|
91
|
+
caught it.)
|
|
92
|
+
|
|
93
|
+
The real code flips the lease to `tui-owned` **before** it finishes disposing the
|
|
94
|
+
daemon runtime, so there's a genuine window where the lease says `tui-owned`
|
|
95
|
+
while the daemon runtime is still alive. That window *is* the split-brain the
|
|
96
|
+
invariant is meant to rule out. So the model tracks `runtimeEntry` as an
|
|
97
|
+
**independent** variable (set on attach, cleared only when disposal *completes*)
|
|
98
|
+
and splits the idle-acquire into `flip → disposeDone / disposeFail`. Now the
|
|
99
|
+
window is a reachable state and the invariants can actually fail — which is the
|
|
100
|
+
whole point.
|
|
101
|
+
|
|
102
|
+
### Invariants checked (safety)
|
|
103
|
+
|
|
104
|
+
Each maps to a real prose invariant or a §4.8 race row. Names match
|
|
105
|
+
`LeaseBroker.tla` exactly.
|
|
106
|
+
|
|
107
|
+
| Invariant | Plain meaning |
|
|
108
|
+
|-----------|---------------|
|
|
109
|
+
| `OwnershipUnique` (I1) | The daemon runtime and a serving terminal never both exist for one conversation — no split-brain. |
|
|
110
|
+
| `RuntimeIffDaemon` (I2) | A daemon runtime exists exactly in the daemon states, plus the brief disposal window. |
|
|
111
|
+
| `TuiOwnerWellFormed` (I3a) | A terminal connection is recorded exactly when a terminal holds or is acquiring the lease. |
|
|
112
|
+
| `DisposePendingOnlyTui` | The disposal window only exists under `tui-owned`. |
|
|
113
|
+
| `RelaysOnlyWhenTui` (I3b) | Relays exist only while a terminal holds the lease. |
|
|
114
|
+
| `DrainHasAcquirer` (I4) | A draining conversation always has a waiting acquirer and a live pump. |
|
|
115
|
+
| `StreamingCoherent` | A turn only runs while the daemon owns a live runtime. |
|
|
116
|
+
| `DrainNoNewTurn` (I6) | Once a hand-off is disposing, no new turn can start (the `lease_draining` rejection). |
|
|
117
|
+
| `NoStreamLeak` | a stream count implies a live runtime — guards the finding-1 fix (in the baseline). |
|
|
118
|
+
| `IdleAcquireOnlyWhenIdle` | *(off by default)* an idle-acquire never disposes a mid-turn runtime — intentionally does **not** hold; detached turns are abandonable (RFC §4.2). |
|
|
119
|
+
|
|
120
|
+
### Properties checked (liveness, needs fairness)
|
|
121
|
+
|
|
122
|
+
| Property | Plain meaning |
|
|
123
|
+
|----------|---------------|
|
|
124
|
+
| `DrainConverges` (I5) | A hand-off never wedges: a draining conversation always leaves that state. |
|
|
125
|
+
| `EventualSettle` (I4) | The acquirer's grant is always settled (granted, cancelled, or errored) — nobody waits forever. |
|
|
126
|
+
|
|
127
|
+
Both rely on weak fairness on the drain pump, applied **per key** so one
|
|
128
|
+
conversation's hand-off can't starve another's. The adversarial branches
|
|
129
|
+
(cancel, disposal error) get *no* fairness, so they can't manufacture a fake
|
|
130
|
+
liveness violation.
|
|
131
|
+
|
|
132
|
+
### What the model deliberately simplifies
|
|
133
|
+
|
|
134
|
+
A turn is a boolean (`runtimeStreaming`) with a nondeterministic end, not
|
|
135
|
+
token-by-token streaming. The byte relay is a count, not a pump. Time/TTL is a
|
|
136
|
+
fireable event, not a clock. Counts are bounded (`MaxStreams`, `MaxRelays=2`,
|
|
137
|
+
`MaxPending=1`) so the state space is finite. These are the standard
|
|
138
|
+
abstractions; the ownership logic itself is kept exact.
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## How to run
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
./check.sh # LeaseBroker, baseline config (auto-fetches tla2tools.jar)
|
|
146
|
+
./check.sh RelayViewer # the relay + viewer-feed module
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
`check.sh` needs a JDK 17+ (via `JAVA_HOME` or `java` on PATH). Equivalently, by hand:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
java -XX:+UseParallelGC -jar tla2tools.jar -workers auto \
|
|
153
|
+
-config LeaseBroker.cfg LeaseBroker.tla
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
A clean run prints `Model checking completed. No error has been found.` To see a
|
|
157
|
+
bug trace instead, uncomment `NoStreamLeak` in `LeaseBroker.cfg` and re-run: TLC
|
|
158
|
+
prints the shortest sequence of states + action names that reaches the leak.
|
|
159
|
+
|
|
160
|
+
**Reading a counterexample as a Volt bug.** TLC gives you an ordered list of
|
|
161
|
+
states with the action name between each. Translate directly: an
|
|
162
|
+
`OwnershipUnique` trace ending in `tui-owned ∧ runtimeEntry = TRUE` after an
|
|
163
|
+
`AcquireIdleFlip → AcquireIdleDisposeFail` sequence would be a split-brain in the
|
|
164
|
+
idle-acquire revert path; a `NoStreamLeak` trace ending after
|
|
165
|
+
`AcquireDrainStart → DrainRuntimeIdle → DrainCancelDisposing → DrainDisposeError`
|
|
166
|
+
is the stream-count leak, and points at the exact `lease-broker.ts` catch branch.
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## What a green check does and does not prove
|
|
171
|
+
|
|
172
|
+
A green run proves that **the model**, at these bounds and abstractions, cannot
|
|
173
|
+
reach a state that breaks the listed invariants and satisfies the liveness
|
|
174
|
+
properties under the stated fairness. That's strong evidence the *design* of the
|
|
175
|
+
hand-off is internally consistent and free of the specific race classes encoded.
|
|
176
|
+
|
|
177
|
+
It does **not** prove:
|
|
178
|
+
|
|
179
|
+
- **That the code matches the model.** The TS/Swift isn't generated from the
|
|
180
|
+
spec; a correct model over a buggy implementation still checks green. The spec
|
|
181
|
+
is a design artifact — it found the `streamCount` leak because we modeled the
|
|
182
|
+
code's *intent* and asserted more than the code guarantees, not automatically.
|
|
183
|
+
- **Correctness beyond the bounds.** 2 keys / 2 terminals / small counts is
|
|
184
|
+
strong evidence via symmetry and small-model reasoning, not a proof for all N.
|
|
185
|
+
- **Anything abstracted away** — byte-level relay framing, real timers, transcript
|
|
186
|
+
content, full async scheduling beyond the modeled windows.
|
|
187
|
+
- **Freedom from drift.** The biggest risk is the spec rotting as the RFC and code
|
|
188
|
+
evolve. Cross-reference invariant names both ways (RFC I1–I7 ↔ the names above)
|
|
189
|
+
and re-run whenever a lease / handshake / close-reason change lands.
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Build order for the remaining modules
|
|
194
|
+
|
|
195
|
+
`LeaseBroker` first (done) — it's the spine, and it mints the close reasons
|
|
196
|
+
(`lease_transferred`, `session_rekeyed_reconnect`) the others consume.
|
|
197
|
+
Then `RelayViewer` (shares the connection-drop trigger; where "lost turn" and
|
|
198
|
+
"stuck drain" actually manifest) → `SessionTarget` (small, high value: the
|
|
199
|
+
wrong-pin class) → `ClientAuth` (self-contained, security-critical) → `ClientConn`
|
|
200
|
+
(largest state space; consumes the close reasons above as inputs) → `PushOrdering`
|
|
201
|
+
(narrowest, orthogonal). Model one at a time; only compose `LeaseBroker` +
|
|
202
|
+
`RelayViewer` once each is green solo.
|
|
203
|
+
|
|
204
|
+
Full module scope, per-module invariant/property catalogs, and the shared
|
|
205
|
+
abstraction strategy live in [`PLAN.md`](PLAN.md).
|