@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/rpc.md
ADDED
|
@@ -0,0 +1,2050 @@
|
|
|
1
|
+
# RPC Mode
|
|
2
|
+
|
|
3
|
+
RPC mode enables headless operation of the coding agent via a JSON protocol over stdin/stdout. This is useful for embedding the agent in other applications, IDEs, or custom UIs.
|
|
4
|
+
|
|
5
|
+
**Note for Node.js/TypeScript users**: If you're building a Node.js application, consider using `AgentSession` directly from `@hansjm10/volt-coding-agent` instead of spawning a subprocess. See [`src/core/agent-session.ts`](../src/core/agent-session.ts) for the API. For typed RPC clients, use [`RpcClient`](../src/modes/rpc/rpc-client.ts) for subprocess stdio, [`RpcTransportClient`](../src/modes/rpc/rpc-transport-client.ts) for caller-provided transports, or [`createInProcessRpcClient`](../src/modes/rpc/in-process-rpc-client.ts) to run RPC mode in the same process.
|
|
6
|
+
|
|
7
|
+
## Starting RPC Mode
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
volt --mode rpc [options]
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Common options:
|
|
14
|
+
- `--provider <name>`: Set the LLM provider (anthropic, openai, google, etc.)
|
|
15
|
+
- `--model <pattern>`: Model pattern or ID (supports `provider/id` and optional `:<thinking>`)
|
|
16
|
+
- `--name <name>` / `-n <name>`: Set the session display name at startup
|
|
17
|
+
- `--no-session`: Disable session persistence
|
|
18
|
+
- `--session-dir <path>`: Custom session storage directory
|
|
19
|
+
|
|
20
|
+
## Protocol Overview
|
|
21
|
+
|
|
22
|
+
- **Commands**: JSON objects sent to stdin, one per line
|
|
23
|
+
- **Responses**: JSON objects with `type: "response"` indicating command success/failure
|
|
24
|
+
- **Events**: Agent events streamed to stdout as JSON lines
|
|
25
|
+
|
|
26
|
+
All commands support an optional `id` field for request/response correlation. If provided, the corresponding response will include the same `id`.
|
|
27
|
+
|
|
28
|
+
### Framing
|
|
29
|
+
|
|
30
|
+
RPC mode uses strict JSONL semantics with LF (`\n`) as the only record delimiter.
|
|
31
|
+
|
|
32
|
+
This matters for clients:
|
|
33
|
+
- Split records on `\n` only
|
|
34
|
+
- Accept optional `\r\n` input by stripping a trailing `\r`
|
|
35
|
+
- Do not use generic line readers that treat Unicode separators as newlines
|
|
36
|
+
|
|
37
|
+
In particular, Node `readline` is not protocol-compliant for RPC mode because it also splits on `U+2028` and `U+2029`, which are valid inside JSON strings.
|
|
38
|
+
|
|
39
|
+
### Lifecycle and Cancellation
|
|
40
|
+
|
|
41
|
+
Transport lifetime is separate from cancellation semantics. A clean input close, socket close, stream EOF, or write failure is a transport event, not an RPC command, and must not be interpreted as an implicit `abort`.
|
|
42
|
+
|
|
43
|
+
Clients that intend to stop active agent work must send the `abort` command and wait for its response. Plain subprocess RPC mode still treats transport close as mode/process shutdown, and remote transports may use close as detach/reconnect; neither path changes the RPC cancellation command.
|
|
44
|
+
|
|
45
|
+
RPC mode is not durable job recovery. If the Volt process or embedding host process exits or crashes, in-memory work stops; clients can only reopen persisted session state that was written before exit.
|
|
46
|
+
|
|
47
|
+
## Commands
|
|
48
|
+
|
|
49
|
+
### Prompting
|
|
50
|
+
|
|
51
|
+
#### prompt
|
|
52
|
+
|
|
53
|
+
Send a user prompt to the agent. The command response is emitted after the prompt is accepted, queued, or handled. Events continue streaming asynchronously after acceptance.
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{"id": "req-1", "type": "prompt", "message": "Hello, world!"}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
With images:
|
|
60
|
+
```json
|
|
61
|
+
{"type": "prompt", "message": "What's in this image?", "images": [{"type": "image", "data": "base64-encoded-data", "mimeType": "image/png"}]}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**During streaming**: If the agent is already streaming, you must specify `streamingBehavior` to queue the message:
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{"type": "prompt", "message": "New instruction", "streamingBehavior": "steer"}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
- `"steer"`: Queue the message while the agent is running. It is delivered after the current assistant turn finishes executing its tool calls, before the next LLM call.
|
|
71
|
+
- `"followUp"`: Wait until the agent finishes. Message is delivered only when agent stops.
|
|
72
|
+
|
|
73
|
+
If the agent is streaming and no `streamingBehavior` is specified, the command returns an error.
|
|
74
|
+
|
|
75
|
+
**Extension commands**: If the message is an extension command (e.g., `/mycommand`), it executes immediately even during streaming. Extension commands manage their own LLM interaction via `volt.sendMessage()`.
|
|
76
|
+
|
|
77
|
+
**Input expansion**: Skill commands (`/skill:name`) and prompt templates (`/template`) are expanded before sending/queueing.
|
|
78
|
+
|
|
79
|
+
Response:
|
|
80
|
+
```json
|
|
81
|
+
{"id": "req-1", "type": "response", "command": "prompt", "success": true}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
`success: true` means the prompt was accepted, queued, or handled immediately. `success: false` means the prompt was rejected before acceptance. Failures after acceptance are reported through the normal event and message stream, not as a second `response` for the same request id.
|
|
85
|
+
|
|
86
|
+
The `images` field is optional. Each image uses `ImageContent` format: `{"type": "image", "data": "base64-encoded-data", "mimeType": "image/png"}`.
|
|
87
|
+
|
|
88
|
+
#### steer
|
|
89
|
+
|
|
90
|
+
Queue a steering message while the agent is running. It is delivered after the current assistant turn finishes executing its tool calls, before the next LLM call. Skill commands and prompt templates are expanded. Extension commands are not allowed (use `prompt` instead).
|
|
91
|
+
|
|
92
|
+
```json
|
|
93
|
+
{"type": "steer", "message": "Stop and do this instead"}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
With images:
|
|
97
|
+
```json
|
|
98
|
+
{"type": "steer", "message": "Look at this instead", "images": [{"type": "image", "data": "base64-encoded-data", "mimeType": "image/png"}]}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
The `images` field is optional. Each image uses `ImageContent` format (same as `prompt`).
|
|
102
|
+
|
|
103
|
+
Response:
|
|
104
|
+
```json
|
|
105
|
+
{"type": "response", "command": "steer", "success": true}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
See [set_steering_mode](#set_steering_mode) for controlling how steering messages are processed.
|
|
109
|
+
|
|
110
|
+
#### follow_up
|
|
111
|
+
|
|
112
|
+
Queue a follow-up message to be processed after the agent finishes. Delivered only when agent has no more tool calls or steering messages. Skill commands and prompt templates are expanded. Extension commands are not allowed (use `prompt` instead).
|
|
113
|
+
|
|
114
|
+
```json
|
|
115
|
+
{"type": "follow_up", "message": "After you're done, also do this"}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
With images:
|
|
119
|
+
```json
|
|
120
|
+
{"type": "follow_up", "message": "Also check this image", "images": [{"type": "image", "data": "base64-encoded-data", "mimeType": "image/png"}]}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The `images` field is optional. Each image uses `ImageContent` format (same as `prompt`).
|
|
124
|
+
|
|
125
|
+
Response:
|
|
126
|
+
```json
|
|
127
|
+
{"type": "response", "command": "follow_up", "success": true}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
See [set_follow_up_mode](#set_follow_up_mode) for controlling how follow-up messages are processed.
|
|
131
|
+
|
|
132
|
+
#### abort
|
|
133
|
+
|
|
134
|
+
Abort the current agent operation.
|
|
135
|
+
|
|
136
|
+
```json
|
|
137
|
+
{"type": "abort"}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Response:
|
|
141
|
+
```json
|
|
142
|
+
{"type": "response", "command": "abort", "success": true}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
`abort` is the semantic cancellation command. Closing the RPC transport without sending `abort` requests transport shutdown or remote detach according to the transport, but it does not ask Volt to cancel the active run.
|
|
146
|
+
|
|
147
|
+
#### new_session
|
|
148
|
+
|
|
149
|
+
Start a fresh session. Can be cancelled by a `session_before_switch` extension event handler.
|
|
150
|
+
|
|
151
|
+
```json
|
|
152
|
+
{"type": "new_session"}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
With optional parent session tracking:
|
|
156
|
+
```json
|
|
157
|
+
{"type": "new_session", "parentSession": "/path/to/parent-session.jsonl"}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Response:
|
|
161
|
+
```json
|
|
162
|
+
{"type": "response", "command": "new_session", "success": true, "data": {"cancelled": false}}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
If an extension cancelled:
|
|
166
|
+
```json
|
|
167
|
+
{"type": "response", "command": "new_session", "success": true, "data": {"cancelled": true}}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### State
|
|
171
|
+
|
|
172
|
+
#### get_state
|
|
173
|
+
|
|
174
|
+
Get current session state.
|
|
175
|
+
|
|
176
|
+
```json
|
|
177
|
+
{"type": "get_state"}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Response:
|
|
181
|
+
```json
|
|
182
|
+
{
|
|
183
|
+
"type": "response",
|
|
184
|
+
"command": "get_state",
|
|
185
|
+
"success": true,
|
|
186
|
+
"data": {
|
|
187
|
+
"model": {...},
|
|
188
|
+
"thinkingLevel": "medium",
|
|
189
|
+
"availableThinkingLevels": ["off", "minimal", "low", "medium", "high"],
|
|
190
|
+
"isStreaming": false,
|
|
191
|
+
"isBusy": true,
|
|
192
|
+
"isCompacting": true,
|
|
193
|
+
"steeringMode": "all",
|
|
194
|
+
"followUpMode": "one-at-a-time",
|
|
195
|
+
"sessionFile": "/path/to/session.jsonl",
|
|
196
|
+
"sessionId": "abc123",
|
|
197
|
+
"sessionName": "my-feature-work",
|
|
198
|
+
"autoCompactionEnabled": true,
|
|
199
|
+
"messageCount": 5,
|
|
200
|
+
"pendingMessageCount": 0,
|
|
201
|
+
"activeCompaction": {"reason": "threshold", "startedAt": 1782470400000}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
The `model` field is a full [Model](#model) object or `null`. `availableThinkingLevels` lists the thinking levels the current model supports (`["off"]` for non-reasoning models). `isStreaming` indicates an active provider run or session-level continuation; `isBusy` also includes asynchronous prompt preflight and standalone session operations such as manual compaction and tree navigation. The `sessionName` field is the display name set via `set_session_name`, or omitted if not set. `activeCompaction` is present only while context compaction is currently running; `startedAt` is Unix epoch milliseconds.
|
|
207
|
+
|
|
208
|
+
#### get_transcript
|
|
209
|
+
|
|
210
|
+
Get a UI-ready projected transcript for the active session. The response is ordered oldest-to-newest and omits raw provider payloads, thinking blocks, image data, raw tool output, full file contents, and session file paths. Text, summaries, and mutation previews are bounded.
|
|
211
|
+
|
|
212
|
+
```json
|
|
213
|
+
{"type": "get_transcript", "limit": 100}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Use `beforeEntryId` to request older items than the first item already loaded:
|
|
217
|
+
|
|
218
|
+
```json
|
|
219
|
+
{"type": "get_transcript", "limit": 100, "beforeEntryId": "entry-id"}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
`limit` defaults to 100 and is capped at 200.
|
|
223
|
+
|
|
224
|
+
Response:
|
|
225
|
+
```json
|
|
226
|
+
{
|
|
227
|
+
"type": "response",
|
|
228
|
+
"command": "get_transcript",
|
|
229
|
+
"success": true,
|
|
230
|
+
"data": {
|
|
231
|
+
"sessionId": "abc123",
|
|
232
|
+
"items": [
|
|
233
|
+
{"id": "entry-user", "role": "user", "text": "User prompt", "timestamp": "2026-06-22T15:00:00.000Z"},
|
|
234
|
+
{"id": "entry-assistant", "role": "assistant", "text": "Assistant response", "timestamp": "2026-06-22T15:01:00.000Z"},
|
|
235
|
+
{"id": "entry-tool", "role": "tool", "toolName": "read", "status": "completed", "path": "src/file.ts", "summary": "Read src/file.ts (completed)", "timestamp": "2026-06-22T15:01:30.000Z"},
|
|
236
|
+
{"id": "entry-summary", "role": "summary", "title": "Conversation compacted", "text": "Earlier conversation summary...", "timestamp": "2026-06-22T15:02:00.000Z"}
|
|
237
|
+
],
|
|
238
|
+
"hasMore": false,
|
|
239
|
+
"nextBeforeEntryId": null
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Tool items may include bounded `diffPreview` and `patchPreview` fields for mutation tools.
|
|
245
|
+
|
|
246
|
+
Recommended resume flow for remote or headless UI clients:
|
|
247
|
+
|
|
248
|
+
1. After a successful connection or reconnect, send `get_state`, then `get_transcript` for the active persisted session.
|
|
249
|
+
2. After a successful `switch_session_by_id`, clear or replace the visible transcript with a loading state, refresh with `get_state`, then call `get_transcript` for the selected session.
|
|
250
|
+
3. After a successful `new_session`, refresh state only and keep the fresh empty transcript; do not reuse or load older transcript from the previous session.
|
|
251
|
+
4. For pagination, keep `hasMore` and `nextBeforeEntryId`; when `hasMore` is true, request older items with `beforeEntryId` and prepend returned items by stable `id`.
|
|
252
|
+
|
|
253
|
+
#### get_messages
|
|
254
|
+
|
|
255
|
+
Get all messages in the conversation.
|
|
256
|
+
|
|
257
|
+
```json
|
|
258
|
+
{"type": "get_messages"}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Response:
|
|
262
|
+
```json
|
|
263
|
+
{
|
|
264
|
+
"type": "response",
|
|
265
|
+
"command": "get_messages",
|
|
266
|
+
"success": true,
|
|
267
|
+
"data": {"messages": [...]}
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
Messages are `AgentMessage` objects (see [Message Types](#message-types)).
|
|
272
|
+
|
|
273
|
+
### Subagents (local RPC only)
|
|
274
|
+
|
|
275
|
+
Local RPC clients can manage definition-backed subagents over the same connection. These commands are local RPC only for now; Iroh remote transports reject them until a later explicit remote policy slice.
|
|
276
|
+
|
|
277
|
+
#### list_subagents
|
|
278
|
+
|
|
279
|
+
List built-in and discovered subagent definition summaries. The response omits definition file paths, source paths, base directories, and system prompts.
|
|
280
|
+
|
|
281
|
+
```json
|
|
282
|
+
{"type": "list_subagents"}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
Response:
|
|
286
|
+
```json
|
|
287
|
+
{
|
|
288
|
+
"type": "response",
|
|
289
|
+
"command": "list_subagents",
|
|
290
|
+
"success": true,
|
|
291
|
+
"data": {
|
|
292
|
+
"subagents": [
|
|
293
|
+
{
|
|
294
|
+
"name": "scout",
|
|
295
|
+
"description": "Fast codebase reconnaissance",
|
|
296
|
+
"source": "project",
|
|
297
|
+
"sourceInfo": {"source": "local", "scope": "project", "origin": "top-level"},
|
|
298
|
+
"tools": ["read", "grep", "find", "ls"],
|
|
299
|
+
"model": "claude-haiku-4-5",
|
|
300
|
+
"thinking": "off"
|
|
301
|
+
}
|
|
302
|
+
]
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
#### subagent_start
|
|
308
|
+
|
|
309
|
+
Start a definition-backed child subagent, send its initial prompt, and return after the prompt is accepted. Child tools are clamped by the current parent/session tool policy.
|
|
310
|
+
|
|
311
|
+
```json
|
|
312
|
+
{"type": "subagent_start", "agent": "scout", "prompt": "Find auth code"}
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
Response:
|
|
316
|
+
```json
|
|
317
|
+
{
|
|
318
|
+
"type": "response",
|
|
319
|
+
"command": "subagent_start",
|
|
320
|
+
"success": true,
|
|
321
|
+
"data": {"subagentId": "sa_123", "sessionId": "child-session-id"}
|
|
322
|
+
}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
Child events are wrapped on the parent RPC stream:
|
|
326
|
+
|
|
327
|
+
```json
|
|
328
|
+
{"type": "subagent_event", "subagentId": "sa_123", "event": {"type": "agent_start"}}
|
|
329
|
+
{"type": "subagent_end", "subagentId": "sa_123", "result": {"id": "sa_123", "sessionId": "child-session-id", "event": {"type": "agent_end", "messages": [], "willRetry": false}}}
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
`subagent_event.event` is the child RPC event. `subagent_end.result` is emitted after the child session settles, including automatic retries, overflow compaction, and queued continuations. The result contains the latest low-level `agent_end` event; `willRetry` is normalized to `false` if a planned retry was cancelled before another run started.
|
|
333
|
+
|
|
334
|
+
#### subagent_abort
|
|
335
|
+
|
|
336
|
+
Abort and dispose a local RPC-managed subagent.
|
|
337
|
+
|
|
338
|
+
```json
|
|
339
|
+
{"type": "subagent_abort", "subagentId": "sa_123"}
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
Response:
|
|
343
|
+
```json
|
|
344
|
+
{"type": "response", "command": "subagent_abort", "success": true}
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
#### subagent_get_state
|
|
348
|
+
|
|
349
|
+
Get the child session state for an active local RPC-managed subagent.
|
|
350
|
+
|
|
351
|
+
```json
|
|
352
|
+
{"type": "subagent_get_state", "subagentId": "sa_123"}
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
Response data uses the same shape as [`get_state`](#get_state).
|
|
356
|
+
|
|
357
|
+
#### subagent_get_transcript
|
|
358
|
+
|
|
359
|
+
Get the child transcript projection for an active local RPC-managed subagent.
|
|
360
|
+
|
|
361
|
+
```json
|
|
362
|
+
{"type": "subagent_get_transcript", "subagentId": "sa_123", "limit": 100, "beforeEntryId": "entry-id"}
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
Response data uses the same shape as [`get_transcript`](#get_transcript).
|
|
366
|
+
|
|
367
|
+
#### subagent_dispose
|
|
368
|
+
|
|
369
|
+
Dispose a local RPC-managed subagent and remove it from this RPC connection's active subagent map. Later commands for the same `subagentId` fail with the normal RPC error shape.
|
|
370
|
+
|
|
371
|
+
```json
|
|
372
|
+
{"type": "subagent_dispose", "subagentId": "sa_123"}
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
Response:
|
|
376
|
+
```json
|
|
377
|
+
{"type": "response", "command": "subagent_dispose", "success": true}
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
Active RPC-started subagents are scoped to the RPC connection/runtime and are disposed on RPC shutdown and session replacement.
|
|
381
|
+
|
|
382
|
+
### MCP management
|
|
383
|
+
|
|
384
|
+
Local RPC clients can inspect and manage configured MCP servers. Iroh remote transports allow only the remote-safe subset: capabilities, list/get server status, recent calls, disconnect, and device-code auth start/poll/cancel.
|
|
385
|
+
|
|
386
|
+
#### get_mcp_capabilities
|
|
387
|
+
|
|
388
|
+
```json
|
|
389
|
+
{"type": "get_mcp_capabilities"}
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
Response data:
|
|
393
|
+
|
|
394
|
+
```json
|
|
395
|
+
{"protocolVersion": 1, "features": ["mcp_management.v1", "mcp_oauth.v1", "mcp_device_auth.v1", "mcp_events.v1"], "remoteSafeByDefault": ["list_mcp_servers", "get_mcp_server", "list_mcp_recent_calls", "disconnect_mcp_server", "start_mcp_server_auth", "poll_mcp_server_auth", "cancel_mcp_server_auth"]}
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
#### list_mcp_servers / get_mcp_server
|
|
399
|
+
|
|
400
|
+
```json
|
|
401
|
+
{"type": "list_mcp_servers"}
|
|
402
|
+
{"type": "get_mcp_server", "server": "github"}
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
Responses return sanitized server summaries with status, auth state, transport/lifecycle, tool counts, capabilities, and recent call summaries. File paths, raw env, headers, tokens, and schemas are omitted.
|
|
406
|
+
|
|
407
|
+
#### connect_mcp_server / refresh_mcp_server / disconnect_mcp_server / set_mcp_server_enabled
|
|
408
|
+
|
|
409
|
+
```json
|
|
410
|
+
{"type": "connect_mcp_server", "server": "github"}
|
|
411
|
+
{"type": "refresh_mcp_server", "server": "github"}
|
|
412
|
+
{"type": "disconnect_mcp_server", "server": "github"}
|
|
413
|
+
{"type": "set_mcp_server_enabled", "server": "github", "enabled": false}
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
`connect_mcp_server` and `refresh_mcp_server` connect to the MCP server and refresh cached metadata; they are local RPC only. `disconnect_mcp_server` closes a live connection. `set_mcp_server_enabled` persists an overlay in the relevant Volt-owned MCP config file and is local RPC only.
|
|
417
|
+
|
|
418
|
+
#### MCP OAuth auth
|
|
419
|
+
|
|
420
|
+
Browser auth-code + PKCE is local RPC only:
|
|
421
|
+
|
|
422
|
+
```json
|
|
423
|
+
{"type": "start_mcp_server_auth", "server": "linear", "flow": "browser", "redirectUrl": "http://127.0.0.1:49152/mcp/oauth/callback/random"}
|
|
424
|
+
{"type": "complete_mcp_server_auth", "server": "linear", "redirectUrl": "http://127.0.0.1:49152/mcp/oauth/callback/random", "code": "...", "state": "..."}
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
Device-code auth can be started and polled over local RPC or Iroh remote transports:
|
|
428
|
+
|
|
429
|
+
```json
|
|
430
|
+
{"type": "start_mcp_server_auth", "server": "linear", "flow": "device"}
|
|
431
|
+
{"type": "poll_mcp_server_auth", "server": "linear"}
|
|
432
|
+
{"type": "cancel_mcp_server_auth", "server": "linear"}
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
`start_mcp_server_auth` with `flow: "device"` returns `verificationUri`, optional `verificationUriComplete`, `userCode`, `expiresAt`, and `intervalMs`; it never returns the OAuth `device_code`. Tokens stay on the host in MCP OAuth storage. `logout_mcp_server` clears stored OAuth credentials and is local RPC only.
|
|
436
|
+
|
|
437
|
+
#### list_mcp_tools / get_mcp_tool
|
|
438
|
+
|
|
439
|
+
```json
|
|
440
|
+
{"type": "list_mcp_tools", "server": "github"}
|
|
441
|
+
{"type": "get_mcp_tool", "server": "github", "tool": "search_issues"}
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
Returns sanitized tool metadata, risk classification, metadata hash, stale flag, and whether the tool is currently promoted as a direct tool.
|
|
445
|
+
|
|
446
|
+
#### list_mcp_resources / read_mcp_resource
|
|
447
|
+
|
|
448
|
+
```json
|
|
449
|
+
{"type": "list_mcp_resources", "server": "docs"}
|
|
450
|
+
{"type": "read_mcp_resource", "server": "docs", "resourceUri": "file:///guide.md"}
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
Resource contents are returned through the same truncation/cache shaping as the `mcp` gateway. Remote transports do not expose resource listing or content reads by default because those operations can start MCP backends.
|
|
454
|
+
|
|
455
|
+
#### list_mcp_prompts / get_mcp_prompt
|
|
456
|
+
|
|
457
|
+
```json
|
|
458
|
+
{"type": "list_mcp_prompts", "server": "prompts"}
|
|
459
|
+
{"type": "get_mcp_prompt", "server": "prompts", "prompt": "review", "arguments": {"focus": "security"}}
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
Prompt content is available for user-initiated preview when prompts are not disabled; model-initiated access still requires `settings.prompts: "model"`. Remote transports do not expose prompt listing or content reads by default because those operations can start MCP backends.
|
|
463
|
+
|
|
464
|
+
#### list_mcp_recent_calls
|
|
465
|
+
|
|
466
|
+
```json
|
|
467
|
+
{"type": "list_mcp_recent_calls"}
|
|
468
|
+
{"type": "list_mcp_recent_calls", "server": "github"}
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
Returns bounded recent MCP tool-call summaries for one server or all servers.
|
|
472
|
+
|
|
473
|
+
### Native UI Actions
|
|
474
|
+
|
|
475
|
+
Native UI action commands let typed clients discover host-owned actions for native cards, buttons, toggles, pickers, and command palettes. They are distinct from raw slash command strings: slash commands are presentation aliases, while action ids are the invocation contract.
|
|
476
|
+
|
|
477
|
+
The current local RPC implementation exposes the v1 protocol shape, sanitized palette descriptors, shared built-in actions, review cards, Fast mode, and prompt-like invocation for extension commands, prompt templates, and skills. Iroh remote transports allow discovery plus `invoke_ui_action` for the currently advertised remote-safe built-in, review, Fast mode, projected extension command, prompt template, and skill actions. Local-only built-ins and unreviewed action ids remain blocked remotely.
|
|
478
|
+
|
|
479
|
+
Native clients should treat this as an optional capability:
|
|
480
|
+
|
|
481
|
+
1. Call `get_ui_capabilities`.
|
|
482
|
+
2. If `ui_actions.v1` is present, call `get_ui_actions` and render descriptors that the client supports.
|
|
483
|
+
3. If `ui_action_invocation.v1` is present, invoke by descriptor `id` with `invoke_ui_action`.
|
|
484
|
+
4. Keep raw `prompt` slash-text submission as compatibility for clients or hosts that do not expose native actions.
|
|
485
|
+
|
|
486
|
+
`scope` defaults to `"all"`. In v1, `scope: "primary"` returns built-in cards and toggles such as Review and Fast mode. `scope: "palette"` returns descriptors with `presentation.kind: "palette"`, including searchable built-ins, extension commands, prompt templates, and skills. `scope: "all"` lets a client build both surfaces from one response.
|
|
487
|
+
|
|
488
|
+
#### get_ui_capabilities
|
|
489
|
+
|
|
490
|
+
Get supported native UI action protocol features.
|
|
491
|
+
|
|
492
|
+
```json
|
|
493
|
+
{"type": "get_ui_capabilities"}
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
Response:
|
|
497
|
+
```json
|
|
498
|
+
{
|
|
499
|
+
"type": "response",
|
|
500
|
+
"command": "get_ui_capabilities",
|
|
501
|
+
"success": true,
|
|
502
|
+
"data": {
|
|
503
|
+
"protocolVersion": 1,
|
|
504
|
+
"features": ["ui_actions.v1", "ui_action_invocation.v1", "ui_action_completions.v1"],
|
|
505
|
+
"maxActions": 200,
|
|
506
|
+
"maxDescriptorBytes": 65536
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
`ui_actions.v1` means the host understands `get_ui_actions` descriptors. `ui_action_invocation.v1` means the host accepts `invoke_ui_action` for currently advertised actions. `ui_action_completions.v1` means the host accepts `get_ui_action_completions` for descriptor arguments that advertise a `completion` source. Clients must only rely on features present in this list.
|
|
512
|
+
|
|
513
|
+
#### get_ui_actions
|
|
514
|
+
|
|
515
|
+
Get native UI action descriptors. `scope` is optional, defaults to `"all"`, and may be `"primary"`, `"palette"`, or `"all"`.
|
|
516
|
+
|
|
517
|
+
```json
|
|
518
|
+
{"type": "get_ui_actions", "scope": "palette"}
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
Example response:
|
|
522
|
+
```json
|
|
523
|
+
{
|
|
524
|
+
"type": "response",
|
|
525
|
+
"command": "get_ui_actions",
|
|
526
|
+
"success": true,
|
|
527
|
+
"data": {
|
|
528
|
+
"actions": [
|
|
529
|
+
{
|
|
530
|
+
"schemaVersion": 1,
|
|
531
|
+
"id": "extension.command.ec_a1b2c3d4e5f6_1",
|
|
532
|
+
"label": "session-name",
|
|
533
|
+
"description": "Set or clear session name",
|
|
534
|
+
"source": "extension",
|
|
535
|
+
"sourceScope": "project",
|
|
536
|
+
"sourceOrigin": "top-level",
|
|
537
|
+
"sourceLabel": "Project",
|
|
538
|
+
"category": "extension",
|
|
539
|
+
"presentation": {"kind": "palette", "group": "Extensions"},
|
|
540
|
+
"args": [{"name": "arguments", "label": "Arguments", "type": "string", "required": false}],
|
|
541
|
+
"enabled": true,
|
|
542
|
+
"disabledReason": null,
|
|
543
|
+
"destructive": false,
|
|
544
|
+
"requiresConfirmation": false,
|
|
545
|
+
"streamingBehavior": "immediate",
|
|
546
|
+
"remoteSafe": true,
|
|
547
|
+
"slash": {"name": "session-name", "example": "/session-name"}
|
|
548
|
+
}
|
|
549
|
+
]
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
Each descriptor uses this v1 shape:
|
|
555
|
+
|
|
556
|
+
```json
|
|
557
|
+
{
|
|
558
|
+
"schemaVersion": 1,
|
|
559
|
+
"id": "review.uncommitted",
|
|
560
|
+
"label": "Review changes",
|
|
561
|
+
"description": "Review uncommitted workspace changes for bugs and regressions.",
|
|
562
|
+
"source": "builtin",
|
|
563
|
+
"category": "review",
|
|
564
|
+
"presentation": {
|
|
565
|
+
"kind": "card",
|
|
566
|
+
"group": "Review",
|
|
567
|
+
"priority": 100,
|
|
568
|
+
"icon": "magnifyingglass"
|
|
569
|
+
},
|
|
570
|
+
"args": [],
|
|
571
|
+
"enabled": true,
|
|
572
|
+
"disabledReason": null,
|
|
573
|
+
"destructive": false,
|
|
574
|
+
"requiresConfirmation": true,
|
|
575
|
+
"streamingBehavior": "disabled",
|
|
576
|
+
"remoteSafe": true,
|
|
577
|
+
"slash": {
|
|
578
|
+
"name": "review",
|
|
579
|
+
"example": "/review uncommitted"
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
Required fields are `schemaVersion`, `id`, `label`, `source`, `category`, `enabled`, and `remoteSafe`. Clients should ignore unknown fields, skip invalid descriptors, render unknown categories as advanced or other actions, and treat unknown presentation kinds as palette rows.
|
|
585
|
+
|
|
586
|
+
Descriptor fields are advisory snapshots. The host remains authoritative and may omit actions that are unavailable, unsafe, too large, or unsupported by the client. Dynamic action ids are session-local unless a future descriptor explicitly documents stronger stability.
|
|
587
|
+
|
|
588
|
+
Projected extension command, prompt template, and skill actions use session-local opaque ids. Descriptors include bounded display strings, source kind, source scope/origin, and a safe source label such as `"Project"`, `"User"`, `"Temporary"`, or `"Package"`. They do not include extension source paths, prompt file paths or bodies, skill file paths, skill base directories, or raw `sourceInfo`.
|
|
589
|
+
|
|
590
|
+
Built-in v1 actions currently include:
|
|
591
|
+
|
|
592
|
+
| Action id | Slash alias | Remote over Iroh | Notes |
|
|
593
|
+
| --- | --- | --- | --- |
|
|
594
|
+
| `session.new` | `/clear` | yes | Starts a fresh session through the same host path as `new_session`. |
|
|
595
|
+
| `run.cancel` | none | yes | Aborts the current agent operation through the same host path as `abort`; descriptors may be disabled when no run is active. |
|
|
596
|
+
| `context.compact` | `/compact` | no | Runs host compaction through the same handler as the local `compact` RPC command. |
|
|
597
|
+
| `session.rename` | `/name <name>` | no | Sets the current session display name through the same handler as `set_session_name`. |
|
|
598
|
+
| `thinking.fast_mode` | none | yes | Session-local, non-persistent toggle that lowers current thinking to the fastest supported host-owned level and restores the captured level when disabled. |
|
|
599
|
+
| `review.uncommitted` | `/review uncommitted` | yes | Reviews uncommitted changes against `HEAD`, requires confirmation remotely, uses host-owned git/model/session policy, and returns only bounded workflow status. |
|
|
600
|
+
| `review.branch` | `/review branch [base]` | yes | Reviews `HEAD` against a base branch; optional `base` is validated by the host and omitted values use host auto-detection. |
|
|
601
|
+
|
|
602
|
+
Slash aliases are display and compatibility metadata. Clients may show them in palettes or advanced detail views, but should not synthesize slash strings when an action id is available. The host may change slash syntax without changing a stable built-in action id.
|
|
603
|
+
|
|
604
|
+
Unsupported or deferred native surfaces in v1:
|
|
605
|
+
|
|
606
|
+
- Extension commands project as palette actions only. First-class extension cards/toggles are deferred until a future `volt.registerAction()` policy defines stable extension-owned ids, trust, descriptor validation, and remote safety.
|
|
607
|
+
- Prompt templates and skills project as palette actions; descriptors omit prompt bodies, skill bodies, file paths, and base directories.
|
|
608
|
+
- Model selection is not a native action; remote clients use the direct `get_available_models`/`set_model`/`set_thinking_level` RPC commands, which are forwarded over Iroh conversation streams. Profile switching, scoped-model editing, login/logout, package management, and local settings screens remain unexposed over Iroh.
|
|
609
|
+
- Local-only built-ins such as `context.compact` and `session.rename` may appear in local RPC descriptors but are blocked over Iroh until separate remote policy exists.
|
|
610
|
+
|
|
611
|
+
#### get_ui_action_completions
|
|
612
|
+
|
|
613
|
+
Get completion options for one action argument. Clients should only call this when the descriptor argument includes a supported `completion` value. V1 currently supports extension command argument completions via `"completion": "commandArguments"`.
|
|
614
|
+
|
|
615
|
+
```json
|
|
616
|
+
{"type": "get_ui_action_completions", "action": "extension.command.ec_a1b2c3d4e5f6_1", "argument": "arguments", "prefix": "pr"}
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
Response:
|
|
620
|
+
|
|
621
|
+
```json
|
|
622
|
+
{
|
|
623
|
+
"type": "response",
|
|
624
|
+
"command": "get_ui_action_completions",
|
|
625
|
+
"success": true,
|
|
626
|
+
"data": {
|
|
627
|
+
"completions": [
|
|
628
|
+
{"value": "prod", "label": "Production", "description": "Production target"}
|
|
629
|
+
]
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
Unknown or stale action ids fail with the normal RPC error shape. Unsupported arguments or completion kinds return an empty completion list unless the argument name itself is not present in the descriptor.
|
|
635
|
+
|
|
636
|
+
#### invoke_ui_action
|
|
637
|
+
|
|
638
|
+
Invoke a native UI action by descriptor id.
|
|
639
|
+
|
|
640
|
+
```json
|
|
641
|
+
{"type": "invoke_ui_action", "action": "review.uncommitted", "args": {}, "streamingBehavior": "followUp"}
|
|
642
|
+
```
|
|
643
|
+
|
|
644
|
+
`args` is an optional object matching the descriptor's argument metadata. V1 hosts validate the supported descriptor subset: `string` and multiline `string` values are JSON strings, `boolean` values are JSON booleans, `enum` values are strings present in `options`, and `integer` values are JSON numbers with integer values. Unknown argument names, unknown argument types, missing required values, and mismatched value types fail before invocation. `streamingBehavior` is optional and may be `"steer"` or `"followUp"` when the descriptor allows queued invocation while the agent is streaming.
|
|
645
|
+
|
|
646
|
+
Unknown, stale, disabled, unauthorized, or unavailable action ids fail with the normal RPC error shape:
|
|
647
|
+
```json
|
|
648
|
+
{
|
|
649
|
+
"type": "response",
|
|
650
|
+
"command": "invoke_ui_action",
|
|
651
|
+
"success": false,
|
|
652
|
+
"error": "UI action not available: prompt.template.pt_a1b2c3d4e5f6_1"
|
|
653
|
+
}
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
Successful response data reports the command disposition:
|
|
657
|
+
|
|
658
|
+
```json
|
|
659
|
+
{
|
|
660
|
+
"type": "response",
|
|
661
|
+
"command": "invoke_ui_action",
|
|
662
|
+
"success": true,
|
|
663
|
+
"data": {
|
|
664
|
+
"action": "review.uncommitted",
|
|
665
|
+
"status": "completed",
|
|
666
|
+
"actionsChanged": true,
|
|
667
|
+
"stateChanged": true,
|
|
668
|
+
"message": "Review complete: no issues found; fresh session created with findings"
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
```
|
|
672
|
+
|
|
673
|
+
Possible statuses:
|
|
674
|
+
- `"accepted"`: a prompt-like action was accepted while idle. Normal agent events report completion; wait for `agent_settled` for final settlement.
|
|
675
|
+
- `"queued"`: a prompt-like action was queued while another turn is streaming. `queuedAs` is `"steer"` or `"followUp"`.
|
|
676
|
+
- `"completed"`: the action finished synchronously. No `agent_end` is expected for this invocation.
|
|
677
|
+
- `"handled"`: the host, extension command, or input hook handled the action without starting an agent turn.
|
|
678
|
+
- `"cancelled"`: the action was cancelled before execution.
|
|
679
|
+
|
|
680
|
+
Only `accepted` and `queued` may require waiting for later agent events. Clients must clear pending UI immediately for `completed`, `handled`, `cancelled`, and RPC errors.
|
|
681
|
+
|
|
682
|
+
For projected dynamic actions, invocation uses the host's existing prompt semantics:
|
|
683
|
+
|
|
684
|
+
- Extension command actions invoke their registered slash command and return `handled` when the command handler completes. They do not require an `agent_end` event.
|
|
685
|
+
- Prompt template and skill actions send their slash alias through host prompt expansion. While idle they return `accepted`; while the agent is streaming they require `streamingBehavior: "steer"` or `"followUp"` and return `queued`.
|
|
686
|
+
- Dynamic action ids are opaque and tied to the current action catalog. After a reload, session replacement, or catalog change, clients must refresh descriptors; stale ids are rejected instead of being remapped to another action.
|
|
687
|
+
- `thinking.fast_mode` uses a required boolean `enabled` argument. Enabling captures the current thinking level, applies the fastest supported lower thinking level among `off`, `minimal`, and `low`, and returns updated boolean state. Disabling restores the captured thinking level after host clamping. It never switches models, exposes model catalogs, changes scoped-model/profile settings, or persists model/thinking defaults. Manual thinking/model/profile/scoped-model changes clear the session-local restore marker.
|
|
688
|
+
- Review actions run a host workflow: the host resolves git targets, applies review-model settings, runs an isolated review session with the approved tool policy, and creates a fresh session seeded with findings. Responses do not include raw diffs, review prompts, configured model names, auth state, or raw tool output. While the workflow runs, hosts may emit sanitized `workflow_*` and `tool_execution_*` activity events so clients can show progress. Remote review actions require confirmation and use the host-owned read-only tool set (`read`, `grep`, `find`, `ls`).
|
|
689
|
+
- Over Iroh, v1 invocation is allowlist-based and forwards only exact reviewed built-in ids (`session.new`, `run.cancel`, `thinking.fast_mode`, `review.uncommitted`, `review.branch`) plus projected dynamic ids under `extension.command.*`, `prompt.template.*`, and `skill.*`. Local-only built-ins such as `context.compact`, `session.rename`, deferred review actions, and unreviewed prefixes are rejected with a normal RPC error. Model and thinking changes use the direct `set_model`/`set_thinking_level` RPC commands, which are forwarded over Iroh conversation streams.
|
|
690
|
+
|
|
691
|
+
#### Native UI Action Security
|
|
692
|
+
|
|
693
|
+
Descriptors must not expose host-local paths, extension source paths, prompt template bodies, skill content, provider secrets, environment values, auth internals, raw model/provider metadata, raw transcript payloads, or host session file paths. Iroh remote discovery responses pass through the remote outbound redaction layer in addition to descriptor-level sanitization. Remote invocation is allowlist-based and re-checks action availability, remote safety, authorization, streaming policy, and argument validity at invocation time.
|
|
694
|
+
|
|
695
|
+
`get_commands` remains the legacy local command-discovery surface for raw slash invocation and may include source metadata useful to local clients. Remote clients and native mobile clients should use sanitized `get_ui_actions`; raw `get_commands` remains blocked over Iroh.
|
|
696
|
+
|
|
697
|
+
### Host-Initiated Action Requests
|
|
698
|
+
|
|
699
|
+
Host-initiated action requests let Volt pause a running workflow and ask an RPC client to approve a host-owned action. This is separate from native UI actions: native UI actions are client-initiated, while host action requests are emitted by Volt when it needs user/app approval to continue.
|
|
700
|
+
|
|
701
|
+
Clients must opt in before Volt will block on host action requests:
|
|
702
|
+
|
|
703
|
+
```json
|
|
704
|
+
{"type": "set_client_capabilities", "features": ["host_action_requests.v1"]}
|
|
705
|
+
```
|
|
706
|
+
|
|
707
|
+
Response:
|
|
708
|
+
|
|
709
|
+
```json
|
|
710
|
+
{"type": "response", "command": "set_client_capabilities", "success": true}
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
When a host action is needed, Volt emits:
|
|
714
|
+
|
|
715
|
+
```json
|
|
716
|
+
{
|
|
717
|
+
"type": "host_action_request",
|
|
718
|
+
"id": "ha_123",
|
|
719
|
+
"action": "lsp.install_server",
|
|
720
|
+
"title": "Install typescript language server?",
|
|
721
|
+
"message": "Volt tried to use LSP for typescript, but typescript-language-server is not installed. Install it now and retry diagnostics?",
|
|
722
|
+
"confirmLabel": "Install",
|
|
723
|
+
"cancelLabel": "Skip",
|
|
724
|
+
"commandPreview": "npm install -g typescript-language-server typescript",
|
|
725
|
+
"blocking": true,
|
|
726
|
+
"destructive": false,
|
|
727
|
+
"metadata": {"server": "typescript", "binary": "typescript-language-server"}
|
|
728
|
+
}
|
|
729
|
+
```
|
|
730
|
+
|
|
731
|
+
The client responds with one of `"approved"`, `"denied"`, or `"dismissed"`:
|
|
732
|
+
|
|
733
|
+
```json
|
|
734
|
+
{"type": "host_action_response", "id": "ha_123", "decision": "approved"}
|
|
735
|
+
```
|
|
736
|
+
|
|
737
|
+
Volt may emit progress updates for approved actions:
|
|
738
|
+
|
|
739
|
+
```json
|
|
740
|
+
{"type": "host_action_update", "id": "ha_123", "action": "lsp.install_server", "status": "running", "message": "Running npm install -g typescript-language-server typescript"}
|
|
741
|
+
{"type": "host_action_update", "id": "ha_123", "action": "lsp.install_server", "status": "completed", "message": "typescript language server installed. Retrying diagnostics.", "exitCode": 0}
|
|
742
|
+
```
|
|
743
|
+
|
|
744
|
+
Use `get_pending_host_actions` to recover currently pending requests after reconnect:
|
|
745
|
+
|
|
746
|
+
```json
|
|
747
|
+
{"type": "get_pending_host_actions"}
|
|
748
|
+
```
|
|
749
|
+
|
|
750
|
+
Clients approve only the advertised host-owned action; they cannot alter the command. If the client does not advertise `host_action_requests.v1`, Volt falls back without blocking (for example, an LSP missing-server message with install instructions). Current LSP install requests are limited to trusted built-in install recipes; custom LSP commands and manual-install-only servers still produce instructions only.
|
|
751
|
+
|
|
752
|
+
### Model
|
|
753
|
+
|
|
754
|
+
#### set_model
|
|
755
|
+
|
|
756
|
+
Switch to a specific model. Matches CLI `/model` behavior: the change is recorded in the session and persisted as the default model and provider for future sessions. Pass `"persistDefault": false` to change the current session's model without rewriting the host default (used e.g. for per-agent model overrides). Switching models re-clamps the thinking level to the new model's capabilities (emitting `thinking_level_changed` when it changes) and clears any active Fast mode overlay. Unknown provider/model pairs fail with `Model not found: <provider>/<modelId>`.
|
|
757
|
+
|
|
758
|
+
```json
|
|
759
|
+
{"type": "set_model", "provider": "anthropic", "modelId": "claude-sonnet-4-20250514"}
|
|
760
|
+
```
|
|
761
|
+
|
|
762
|
+
Response contains the full [Model](#model) object plus `availableThinkingLevels`, the thinking levels the model supports:
|
|
763
|
+
```json
|
|
764
|
+
{
|
|
765
|
+
"type": "response",
|
|
766
|
+
"command": "set_model",
|
|
767
|
+
"success": true,
|
|
768
|
+
"data": {..., "availableThinkingLevels": ["off", "minimal", "low", "medium", "high"]}
|
|
769
|
+
}
|
|
770
|
+
```
|
|
771
|
+
|
|
772
|
+
#### cycle_model
|
|
773
|
+
|
|
774
|
+
Cycle to the next available model. Returns `null` data if only one model available.
|
|
775
|
+
|
|
776
|
+
```json
|
|
777
|
+
{"type": "cycle_model"}
|
|
778
|
+
```
|
|
779
|
+
|
|
780
|
+
Response:
|
|
781
|
+
```json
|
|
782
|
+
{
|
|
783
|
+
"type": "response",
|
|
784
|
+
"command": "cycle_model",
|
|
785
|
+
"success": true,
|
|
786
|
+
"data": {
|
|
787
|
+
"model": {...},
|
|
788
|
+
"thinkingLevel": "medium",
|
|
789
|
+
"isScoped": false
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
```
|
|
793
|
+
|
|
794
|
+
The `model` field is a full [Model](#model) object.
|
|
795
|
+
|
|
796
|
+
#### get_available_models
|
|
797
|
+
|
|
798
|
+
List all configured models. The host reloads `auth.json` and `models.json` from disk before answering, so logins, logouts, and API keys saved by other volt processes become selectable without restarting the host.
|
|
799
|
+
|
|
800
|
+
```json
|
|
801
|
+
{"type": "get_available_models"}
|
|
802
|
+
```
|
|
803
|
+
|
|
804
|
+
Response contains an array of full [Model](#model) objects, each enriched with `availableThinkingLevels` (the thinking levels that model supports, `["off"]` for non-reasoning models) so clients can present valid choices without provider capability matrices:
|
|
805
|
+
```json
|
|
806
|
+
{
|
|
807
|
+
"type": "response",
|
|
808
|
+
"command": "get_available_models",
|
|
809
|
+
"success": true,
|
|
810
|
+
"data": {
|
|
811
|
+
"models": [...]
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
```
|
|
815
|
+
|
|
816
|
+
### Thinking
|
|
817
|
+
|
|
818
|
+
#### set_thinking_level
|
|
819
|
+
|
|
820
|
+
Set the reasoning/thinking level for models that support it. Pass `"persistDefault": false` to apply the level to the current session without persisting it as the host default.
|
|
821
|
+
|
|
822
|
+
```json
|
|
823
|
+
{"type": "set_thinking_level", "level": "high"}
|
|
824
|
+
```
|
|
825
|
+
|
|
826
|
+
Levels: `"off"`, `"minimal"`, `"low"`, `"medium"`, `"high"`, `"xhigh"`, `"max"`
|
|
827
|
+
|
|
828
|
+
`"xhigh"` and `"max"` are advertised only for models whose metadata explicitly supports them. GPT-5.6 Sol, Terra, and Luna expose both as distinct efforts.
|
|
829
|
+
|
|
830
|
+
Levels the current model does not support are silently clamped to the nearest supported level, not rejected. The response reports the effective post-clamp level, and a `thinking_level_changed` event fires only when the effective level actually changes. Use `get_state`'s `availableThinkingLevels` to present valid choices.
|
|
831
|
+
|
|
832
|
+
Response:
|
|
833
|
+
```json
|
|
834
|
+
{"type": "response", "command": "set_thinking_level", "success": true, "data": {"level": "high"}}
|
|
835
|
+
```
|
|
836
|
+
|
|
837
|
+
#### cycle_thinking_level
|
|
838
|
+
|
|
839
|
+
Cycle through available thinking levels. Returns `null` data if model doesn't support thinking.
|
|
840
|
+
|
|
841
|
+
```json
|
|
842
|
+
{"type": "cycle_thinking_level"}
|
|
843
|
+
```
|
|
844
|
+
|
|
845
|
+
Response:
|
|
846
|
+
```json
|
|
847
|
+
{
|
|
848
|
+
"type": "response",
|
|
849
|
+
"command": "cycle_thinking_level",
|
|
850
|
+
"success": true,
|
|
851
|
+
"data": {"level": "high"}
|
|
852
|
+
}
|
|
853
|
+
```
|
|
854
|
+
|
|
855
|
+
### Queue Modes
|
|
856
|
+
|
|
857
|
+
#### set_steering_mode
|
|
858
|
+
|
|
859
|
+
Control how steering messages (from `steer`) are delivered.
|
|
860
|
+
|
|
861
|
+
```json
|
|
862
|
+
{"type": "set_steering_mode", "mode": "one-at-a-time"}
|
|
863
|
+
```
|
|
864
|
+
|
|
865
|
+
Modes:
|
|
866
|
+
- `"all"`: Deliver all steering messages after the current assistant turn finishes executing its tool calls
|
|
867
|
+
- `"one-at-a-time"`: Deliver one steering message per completed assistant turn (default)
|
|
868
|
+
|
|
869
|
+
Response:
|
|
870
|
+
```json
|
|
871
|
+
{"type": "response", "command": "set_steering_mode", "success": true}
|
|
872
|
+
```
|
|
873
|
+
|
|
874
|
+
#### set_follow_up_mode
|
|
875
|
+
|
|
876
|
+
Control how follow-up messages (from `follow_up`) are delivered.
|
|
877
|
+
|
|
878
|
+
```json
|
|
879
|
+
{"type": "set_follow_up_mode", "mode": "one-at-a-time"}
|
|
880
|
+
```
|
|
881
|
+
|
|
882
|
+
Modes:
|
|
883
|
+
- `"all"`: Deliver all follow-up messages when agent finishes
|
|
884
|
+
- `"one-at-a-time"`: Deliver one follow-up message per agent completion (default)
|
|
885
|
+
|
|
886
|
+
Response:
|
|
887
|
+
```json
|
|
888
|
+
{"type": "response", "command": "set_follow_up_mode", "success": true}
|
|
889
|
+
```
|
|
890
|
+
|
|
891
|
+
### Compaction
|
|
892
|
+
|
|
893
|
+
#### compact
|
|
894
|
+
|
|
895
|
+
Manually compact conversation context to reduce token usage.
|
|
896
|
+
|
|
897
|
+
```json
|
|
898
|
+
{"type": "compact"}
|
|
899
|
+
```
|
|
900
|
+
|
|
901
|
+
With custom instructions:
|
|
902
|
+
```json
|
|
903
|
+
{"type": "compact", "customInstructions": "Focus on code changes"}
|
|
904
|
+
```
|
|
905
|
+
|
|
906
|
+
Response:
|
|
907
|
+
```json
|
|
908
|
+
{
|
|
909
|
+
"type": "response",
|
|
910
|
+
"command": "compact",
|
|
911
|
+
"success": true,
|
|
912
|
+
"data": {
|
|
913
|
+
"summary": "Summary of conversation...",
|
|
914
|
+
"firstKeptEntryId": "abc123",
|
|
915
|
+
"tokensBefore": 150000,
|
|
916
|
+
"details": {}
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
```
|
|
920
|
+
|
|
921
|
+
#### set_auto_compaction
|
|
922
|
+
|
|
923
|
+
Enable or disable automatic compaction when context is nearly full.
|
|
924
|
+
|
|
925
|
+
```json
|
|
926
|
+
{"type": "set_auto_compaction", "enabled": true}
|
|
927
|
+
```
|
|
928
|
+
|
|
929
|
+
Response:
|
|
930
|
+
```json
|
|
931
|
+
{"type": "response", "command": "set_auto_compaction", "success": true}
|
|
932
|
+
```
|
|
933
|
+
|
|
934
|
+
### Retry
|
|
935
|
+
|
|
936
|
+
#### set_auto_retry
|
|
937
|
+
|
|
938
|
+
Enable or disable automatic retry on transient errors (overloaded, rate limit, 5xx).
|
|
939
|
+
|
|
940
|
+
```json
|
|
941
|
+
{"type": "set_auto_retry", "enabled": true}
|
|
942
|
+
```
|
|
943
|
+
|
|
944
|
+
Response:
|
|
945
|
+
```json
|
|
946
|
+
{"type": "response", "command": "set_auto_retry", "success": true}
|
|
947
|
+
```
|
|
948
|
+
|
|
949
|
+
#### abort_retry
|
|
950
|
+
|
|
951
|
+
Abort an in-progress retry (cancel the delay and stop retrying).
|
|
952
|
+
|
|
953
|
+
```json
|
|
954
|
+
{"type": "abort_retry"}
|
|
955
|
+
```
|
|
956
|
+
|
|
957
|
+
Response:
|
|
958
|
+
```json
|
|
959
|
+
{"type": "response", "command": "abort_retry", "success": true}
|
|
960
|
+
```
|
|
961
|
+
|
|
962
|
+
### Bash
|
|
963
|
+
|
|
964
|
+
#### bash
|
|
965
|
+
|
|
966
|
+
Execute a shell command and add output to conversation context.
|
|
967
|
+
|
|
968
|
+
```json
|
|
969
|
+
{"type": "bash", "command": "ls -la"}
|
|
970
|
+
```
|
|
971
|
+
|
|
972
|
+
Response:
|
|
973
|
+
```json
|
|
974
|
+
{
|
|
975
|
+
"type": "response",
|
|
976
|
+
"command": "bash",
|
|
977
|
+
"success": true,
|
|
978
|
+
"data": {
|
|
979
|
+
"output": "total 48\ndrwxr-xr-x ...",
|
|
980
|
+
"exitCode": 0,
|
|
981
|
+
"cancelled": false,
|
|
982
|
+
"truncated": false
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
```
|
|
986
|
+
|
|
987
|
+
If output was truncated, includes `fullOutputPath`:
|
|
988
|
+
```json
|
|
989
|
+
{
|
|
990
|
+
"type": "response",
|
|
991
|
+
"command": "bash",
|
|
992
|
+
"success": true,
|
|
993
|
+
"data": {
|
|
994
|
+
"output": "truncated output...",
|
|
995
|
+
"exitCode": 0,
|
|
996
|
+
"cancelled": false,
|
|
997
|
+
"truncated": true,
|
|
998
|
+
"fullOutputPath": "/tmp/volt-bash-abc123.log"
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
```
|
|
1002
|
+
|
|
1003
|
+
**How bash results reach the LLM:**
|
|
1004
|
+
|
|
1005
|
+
The `bash` command executes immediately and returns a `BashResult`. Internally, a `BashExecutionMessage` is created and stored in the agent's message state. This message does NOT emit an event.
|
|
1006
|
+
|
|
1007
|
+
When the next `prompt` command is sent, all messages (including `BashExecutionMessage`) are transformed before being sent to the LLM. The `BashExecutionMessage` is converted to a `UserMessage` with this format:
|
|
1008
|
+
|
|
1009
|
+
````
|
|
1010
|
+
Ran `ls -la`
|
|
1011
|
+
```
|
|
1012
|
+
total 48
|
|
1013
|
+
drwxr-xr-x ...
|
|
1014
|
+
```
|
|
1015
|
+
````
|
|
1016
|
+
|
|
1017
|
+
This means:
|
|
1018
|
+
1. Bash output is included in the LLM context on the **next prompt**, not immediately
|
|
1019
|
+
2. Multiple bash commands can be executed before a prompt; all outputs will be included
|
|
1020
|
+
3. No event is emitted for the `BashExecutionMessage` itself
|
|
1021
|
+
|
|
1022
|
+
#### abort_bash
|
|
1023
|
+
|
|
1024
|
+
Abort a running bash command.
|
|
1025
|
+
|
|
1026
|
+
```json
|
|
1027
|
+
{"type": "abort_bash"}
|
|
1028
|
+
```
|
|
1029
|
+
|
|
1030
|
+
Response:
|
|
1031
|
+
```json
|
|
1032
|
+
{"type": "response", "command": "abort_bash", "success": true}
|
|
1033
|
+
```
|
|
1034
|
+
|
|
1035
|
+
### Session
|
|
1036
|
+
|
|
1037
|
+
#### get_session_stats
|
|
1038
|
+
|
|
1039
|
+
Get token usage, cost statistics, and current context window usage.
|
|
1040
|
+
|
|
1041
|
+
```json
|
|
1042
|
+
{"type": "get_session_stats"}
|
|
1043
|
+
```
|
|
1044
|
+
|
|
1045
|
+
Response:
|
|
1046
|
+
```json
|
|
1047
|
+
{
|
|
1048
|
+
"type": "response",
|
|
1049
|
+
"command": "get_session_stats",
|
|
1050
|
+
"success": true,
|
|
1051
|
+
"data": {
|
|
1052
|
+
"sessionFile": "/path/to/session.jsonl",
|
|
1053
|
+
"sessionId": "abc123",
|
|
1054
|
+
"userMessages": 5,
|
|
1055
|
+
"assistantMessages": 5,
|
|
1056
|
+
"toolCalls": 12,
|
|
1057
|
+
"toolResults": 12,
|
|
1058
|
+
"totalMessages": 22,
|
|
1059
|
+
"tokens": {
|
|
1060
|
+
"input": 50000,
|
|
1061
|
+
"output": 10000,
|
|
1062
|
+
"cacheRead": 40000,
|
|
1063
|
+
"cacheWrite": 5000,
|
|
1064
|
+
"total": 105000
|
|
1065
|
+
},
|
|
1066
|
+
"cost": 0.45,
|
|
1067
|
+
"contextUsage": {
|
|
1068
|
+
"tokens": 60000,
|
|
1069
|
+
"contextWindow": 200000,
|
|
1070
|
+
"percent": 30
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
1073
|
+
}
|
|
1074
|
+
```
|
|
1075
|
+
|
|
1076
|
+
`tokens` contains assistant usage totals for the current session state. `contextUsage` contains the actual current context-window estimate used for compaction and footer display.
|
|
1077
|
+
|
|
1078
|
+
`contextUsage` is omitted when no model or context window is available. `contextUsage.tokens` and `contextUsage.percent` are `null` immediately after compaction until a fresh post-compaction assistant response provides valid usage data.
|
|
1079
|
+
|
|
1080
|
+
#### list_sessions
|
|
1081
|
+
|
|
1082
|
+
List sessions for the current workspace. The response omits host file paths so remote clients can present workspace-scoped session choices safely.
|
|
1083
|
+
|
|
1084
|
+
```json
|
|
1085
|
+
{"type": "list_sessions"}
|
|
1086
|
+
```
|
|
1087
|
+
|
|
1088
|
+
Response:
|
|
1089
|
+
```json
|
|
1090
|
+
{
|
|
1091
|
+
"type": "response",
|
|
1092
|
+
"command": "list_sessions",
|
|
1093
|
+
"success": true,
|
|
1094
|
+
"data": {
|
|
1095
|
+
"sessions": [
|
|
1096
|
+
{
|
|
1097
|
+
"sessionId": "abc123",
|
|
1098
|
+
"sessionName": "my-feature-work",
|
|
1099
|
+
"createdAt": "2026-06-22T15:00:00.000Z",
|
|
1100
|
+
"modifiedAt": "2026-06-22T15:10:00.000Z",
|
|
1101
|
+
"messageCount": 12,
|
|
1102
|
+
"firstMessage": "Implement the feature",
|
|
1103
|
+
"current": true
|
|
1104
|
+
}
|
|
1105
|
+
]
|
|
1106
|
+
}
|
|
1107
|
+
}
|
|
1108
|
+
```
|
|
1109
|
+
|
|
1110
|
+
#### export_html
|
|
1111
|
+
|
|
1112
|
+
Export session to an HTML file.
|
|
1113
|
+
|
|
1114
|
+
```json
|
|
1115
|
+
{"type": "export_html"}
|
|
1116
|
+
```
|
|
1117
|
+
|
|
1118
|
+
With custom path:
|
|
1119
|
+
```json
|
|
1120
|
+
{"type": "export_html", "outputPath": "/tmp/session.html"}
|
|
1121
|
+
```
|
|
1122
|
+
|
|
1123
|
+
Response:
|
|
1124
|
+
```json
|
|
1125
|
+
{
|
|
1126
|
+
"type": "response",
|
|
1127
|
+
"command": "export_html",
|
|
1128
|
+
"success": true,
|
|
1129
|
+
"data": {"path": "/tmp/session.html"}
|
|
1130
|
+
}
|
|
1131
|
+
```
|
|
1132
|
+
|
|
1133
|
+
#### switch_session
|
|
1134
|
+
|
|
1135
|
+
Load a different session file. Can be cancelled by a `session_before_switch` extension event handler.
|
|
1136
|
+
|
|
1137
|
+
```json
|
|
1138
|
+
{"type": "switch_session", "sessionPath": "/path/to/session.jsonl"}
|
|
1139
|
+
```
|
|
1140
|
+
|
|
1141
|
+
Response:
|
|
1142
|
+
```json
|
|
1143
|
+
{"type": "response", "command": "switch_session", "success": true, "data": {"cancelled": false}}
|
|
1144
|
+
```
|
|
1145
|
+
|
|
1146
|
+
If an extension cancelled the switch:
|
|
1147
|
+
```json
|
|
1148
|
+
{"type": "response", "command": "switch_session", "success": true, "data": {"cancelled": true}}
|
|
1149
|
+
```
|
|
1150
|
+
|
|
1151
|
+
#### switch_session_by_id
|
|
1152
|
+
|
|
1153
|
+
Load another session from the current workspace by session ID. This is the remote-safe form of session switching; clients do not need to know host session file paths.
|
|
1154
|
+
|
|
1155
|
+
```json
|
|
1156
|
+
{"type": "switch_session_by_id", "sessionId": "abc123"}
|
|
1157
|
+
```
|
|
1158
|
+
|
|
1159
|
+
Response:
|
|
1160
|
+
```json
|
|
1161
|
+
{"type": "response", "command": "switch_session_by_id", "success": true, "data": {"cancelled": false}}
|
|
1162
|
+
```
|
|
1163
|
+
|
|
1164
|
+
If an extension cancelled the switch:
|
|
1165
|
+
```json
|
|
1166
|
+
{"type": "response", "command": "switch_session_by_id", "success": true, "data": {"cancelled": true}}
|
|
1167
|
+
```
|
|
1168
|
+
|
|
1169
|
+
#### fork
|
|
1170
|
+
|
|
1171
|
+
Create a new fork from a previous user message on the active branch. Can be cancelled by a `session_before_fork` extension event handler. Returns the text of the message being forked from.
|
|
1172
|
+
|
|
1173
|
+
```json
|
|
1174
|
+
{"type": "fork", "entryId": "abc123"}
|
|
1175
|
+
```
|
|
1176
|
+
|
|
1177
|
+
Response:
|
|
1178
|
+
```json
|
|
1179
|
+
{
|
|
1180
|
+
"type": "response",
|
|
1181
|
+
"command": "fork",
|
|
1182
|
+
"success": true,
|
|
1183
|
+
"data": {"text": "The original prompt text...", "cancelled": false}
|
|
1184
|
+
}
|
|
1185
|
+
```
|
|
1186
|
+
|
|
1187
|
+
If an extension cancelled the fork:
|
|
1188
|
+
```json
|
|
1189
|
+
{
|
|
1190
|
+
"type": "response",
|
|
1191
|
+
"command": "fork",
|
|
1192
|
+
"success": true,
|
|
1193
|
+
"data": {"text": "The original prompt text...", "cancelled": true}
|
|
1194
|
+
}
|
|
1195
|
+
```
|
|
1196
|
+
|
|
1197
|
+
#### clone
|
|
1198
|
+
|
|
1199
|
+
Duplicate the current active branch into a new session at the current position. Can be cancelled by a `session_before_fork` extension event handler.
|
|
1200
|
+
|
|
1201
|
+
```json
|
|
1202
|
+
{"type": "clone"}
|
|
1203
|
+
```
|
|
1204
|
+
|
|
1205
|
+
Response:
|
|
1206
|
+
```json
|
|
1207
|
+
{
|
|
1208
|
+
"type": "response",
|
|
1209
|
+
"command": "clone",
|
|
1210
|
+
"success": true,
|
|
1211
|
+
"data": {"cancelled": false}
|
|
1212
|
+
}
|
|
1213
|
+
```
|
|
1214
|
+
|
|
1215
|
+
If an extension cancelled the clone:
|
|
1216
|
+
```json
|
|
1217
|
+
{
|
|
1218
|
+
"type": "response",
|
|
1219
|
+
"command": "clone",
|
|
1220
|
+
"success": true,
|
|
1221
|
+
"data": {"cancelled": true}
|
|
1222
|
+
}
|
|
1223
|
+
```
|
|
1224
|
+
|
|
1225
|
+
#### get_fork_messages
|
|
1226
|
+
|
|
1227
|
+
Get user messages available for forking.
|
|
1228
|
+
|
|
1229
|
+
```json
|
|
1230
|
+
{"type": "get_fork_messages"}
|
|
1231
|
+
```
|
|
1232
|
+
|
|
1233
|
+
Response:
|
|
1234
|
+
```json
|
|
1235
|
+
{
|
|
1236
|
+
"type": "response",
|
|
1237
|
+
"command": "get_fork_messages",
|
|
1238
|
+
"success": true,
|
|
1239
|
+
"data": {
|
|
1240
|
+
"messages": [
|
|
1241
|
+
{"entryId": "abc123", "text": "First prompt..."},
|
|
1242
|
+
{"entryId": "def456", "text": "Second prompt..."}
|
|
1243
|
+
]
|
|
1244
|
+
}
|
|
1245
|
+
}
|
|
1246
|
+
```
|
|
1247
|
+
|
|
1248
|
+
#### get_last_assistant_text
|
|
1249
|
+
|
|
1250
|
+
Get the text content of the last assistant message.
|
|
1251
|
+
|
|
1252
|
+
```json
|
|
1253
|
+
{"type": "get_last_assistant_text"}
|
|
1254
|
+
```
|
|
1255
|
+
|
|
1256
|
+
Response:
|
|
1257
|
+
```json
|
|
1258
|
+
{
|
|
1259
|
+
"type": "response",
|
|
1260
|
+
"command": "get_last_assistant_text",
|
|
1261
|
+
"success": true,
|
|
1262
|
+
"data": {"text": "The assistant's response..."}
|
|
1263
|
+
}
|
|
1264
|
+
```
|
|
1265
|
+
|
|
1266
|
+
Returns `{"text": null}` if no assistant messages exist.
|
|
1267
|
+
|
|
1268
|
+
#### set_session_name
|
|
1269
|
+
|
|
1270
|
+
Set a display name for the current session. The name appears in session listings and helps identify sessions.
|
|
1271
|
+
|
|
1272
|
+
```json
|
|
1273
|
+
{"type": "set_session_name", "name": "my-feature-work"}
|
|
1274
|
+
```
|
|
1275
|
+
|
|
1276
|
+
Response:
|
|
1277
|
+
```json
|
|
1278
|
+
{
|
|
1279
|
+
"type": "response",
|
|
1280
|
+
"command": "set_session_name",
|
|
1281
|
+
"success": true
|
|
1282
|
+
}
|
|
1283
|
+
```
|
|
1284
|
+
|
|
1285
|
+
The current session name is available via `get_state` in the `sessionName` field. To set the initial name when starting RPC mode, pass `--name <name>` or `-n <name>` to the `volt --mode rpc` process.
|
|
1286
|
+
|
|
1287
|
+
### Commands
|
|
1288
|
+
|
|
1289
|
+
#### get_commands
|
|
1290
|
+
|
|
1291
|
+
Get available commands (extension commands, prompt templates, and skills). These can be invoked via the `prompt` command by prefixing with `/`.
|
|
1292
|
+
|
|
1293
|
+
```json
|
|
1294
|
+
{"type": "get_commands"}
|
|
1295
|
+
```
|
|
1296
|
+
|
|
1297
|
+
Response:
|
|
1298
|
+
```json
|
|
1299
|
+
{
|
|
1300
|
+
"type": "response",
|
|
1301
|
+
"command": "get_commands",
|
|
1302
|
+
"success": true,
|
|
1303
|
+
"data": {
|
|
1304
|
+
"commands": [
|
|
1305
|
+
{"name": "session-name", "description": "Set or clear session name", "source": "extension", "path": "/home/user/.volt/agent/extensions/session.ts"},
|
|
1306
|
+
{"name": "fix-tests", "description": "Fix failing tests", "source": "prompt", "location": "project", "path": "/home/user/myproject/.volt/agent/prompts/fix-tests.md"},
|
|
1307
|
+
{"name": "skill:brave-search", "description": "Web search via Brave API", "source": "skill", "location": "user", "path": "/home/user/.volt/agent/skills/brave-search/SKILL.md"}
|
|
1308
|
+
]
|
|
1309
|
+
}
|
|
1310
|
+
}
|
|
1311
|
+
```
|
|
1312
|
+
|
|
1313
|
+
Each command has:
|
|
1314
|
+
- `name`: Command name (invoke with `/name`)
|
|
1315
|
+
- `description`: Human-readable description (optional for extension commands)
|
|
1316
|
+
- `source`: What kind of command:
|
|
1317
|
+
- `"extension"`: Registered via `volt.registerCommand()` in an extension
|
|
1318
|
+
- `"prompt"`: Loaded from a prompt template `.md` file
|
|
1319
|
+
- `"skill"`: Loaded from a skill directory (name is prefixed with `skill:`)
|
|
1320
|
+
- `location`: Where it was loaded from (optional, not present for extensions):
|
|
1321
|
+
- `"user"`: User-level (`~/.volt/agent/`)
|
|
1322
|
+
- `"project"`: Project-level (`./.volt/agent/`)
|
|
1323
|
+
- `"path"`: Explicit path via CLI or settings
|
|
1324
|
+
- `path`: Absolute file path to the command source (optional)
|
|
1325
|
+
|
|
1326
|
+
**Note**: Built-in TUI commands (`/settings`, `/hotkeys`, etc.) are not included. They are handled only in interactive mode and would not execute if sent via `prompt`.
|
|
1327
|
+
|
|
1328
|
+
## Events
|
|
1329
|
+
|
|
1330
|
+
Events are streamed to stdout as JSON lines during agent operation. Events do NOT include an `id` field (only responses do).
|
|
1331
|
+
|
|
1332
|
+
### Event Types
|
|
1333
|
+
|
|
1334
|
+
| Event | Description |
|
|
1335
|
+
|-------|-------------|
|
|
1336
|
+
| `agent_start` | Agent begins processing |
|
|
1337
|
+
| `agent_end` | Agent run completes (includes all generated messages); a retry or continuation may still follow |
|
|
1338
|
+
| `agent_settled` | Prompt fully settles: no further automatic retries, compaction continuations, or queued continuations |
|
|
1339
|
+
| `turn_start` | New turn begins |
|
|
1340
|
+
| `turn_end` | Turn completes (includes assistant message and tool results) |
|
|
1341
|
+
| `message_start` | Message begins |
|
|
1342
|
+
| `message_update` | Streaming update (text/thinking/toolcall deltas) |
|
|
1343
|
+
| `message_end` | Message completes |
|
|
1344
|
+
| `tool_execution_start` | Tool begins execution |
|
|
1345
|
+
| `tool_execution_update` | Tool execution progress (streaming output) |
|
|
1346
|
+
| `tool_execution_end` | Tool completes |
|
|
1347
|
+
| `workflow_start` | Host-owned workflow begins (for example, review) |
|
|
1348
|
+
| `workflow_update` | Host-owned workflow progress update |
|
|
1349
|
+
| `workflow_end` | Host-owned workflow completes, fails, or is cancelled |
|
|
1350
|
+
| `queue_update` | Pending steering/follow-up queue changed |
|
|
1351
|
+
| `compaction_start` | Compaction begins |
|
|
1352
|
+
| `compaction_end` | Compaction completes |
|
|
1353
|
+
| `auto_retry_start` | Auto-retry begins (after transient error) |
|
|
1354
|
+
| `auto_retry_end` | Auto-retry completes (success or final failure) |
|
|
1355
|
+
| `subagent_event` | Wrapped child event from a local RPC-managed subagent |
|
|
1356
|
+
| `subagent_end` | Terminal completion result for a local RPC-managed subagent |
|
|
1357
|
+
| `extension_error` | Extension threw an error |
|
|
1358
|
+
| `models_changed` | Available model catalog changed on disk (login, logout, or API key save) |
|
|
1359
|
+
| `mcp_servers_changed` | MCP server list or enablement changed (`servers`: full summary list) |
|
|
1360
|
+
| `mcp_server_status_changed` | An MCP server's status or auth state changed (`server`: full summary) |
|
|
1361
|
+
| `mcp_auth_request` | An MCP OAuth flow needs user action (`serverId`, `auth`: flow, URL/device-code details) |
|
|
1362
|
+
| `mcp_auth_update` | An MCP OAuth flow progressed (`serverId`, `status`, `authState`, optional `server` summary) |
|
|
1363
|
+
| `mcp_call_start` | MCP gateway tool call began (`call`: id, server, tool, risk) |
|
|
1364
|
+
| `mcp_call_update` | MCP tool call progress notification (`call`, `progress`) |
|
|
1365
|
+
| `mcp_call_end` | MCP tool call completed, failed, or was cancelled (`call`, optional `cacheId`) |
|
|
1366
|
+
|
|
1367
|
+
### agent_start
|
|
1368
|
+
|
|
1369
|
+
Emitted when the agent begins processing a prompt.
|
|
1370
|
+
|
|
1371
|
+
```json
|
|
1372
|
+
{"type": "agent_start"}
|
|
1373
|
+
```
|
|
1374
|
+
|
|
1375
|
+
### agent_end
|
|
1376
|
+
|
|
1377
|
+
Emitted when an agent run completes. Contains all messages generated during this run.
|
|
1378
|
+
|
|
1379
|
+
```json
|
|
1380
|
+
{
|
|
1381
|
+
"type": "agent_end",
|
|
1382
|
+
"messages": [...]
|
|
1383
|
+
}
|
|
1384
|
+
```
|
|
1385
|
+
|
|
1386
|
+
A single prompt can produce multiple `agent_end` events: automatic retries, overflow/threshold compaction, and queued follow-up messages each continue the run after a raw `agent_end`. Wait for `agent_settled` to know the prompt is finished.
|
|
1387
|
+
|
|
1388
|
+
### agent_settled
|
|
1389
|
+
|
|
1390
|
+
Emitted when all tracked prompt work reaches a global idle boundary, after any final `agent_end`, automatic retries, compaction continuations, and queued-message continuations have finished. Overlapping prompt transactions share one boundary, and handled or rejected preflight can settle without an `agent_end`; this event does not carry a prompt correlation id. Client helpers such as `waitForIdle`, `collectEvents`, and `promptAndWait` terminate on this event.
|
|
1391
|
+
|
|
1392
|
+
```json
|
|
1393
|
+
{"type": "agent_settled"}
|
|
1394
|
+
```
|
|
1395
|
+
|
|
1396
|
+
### turn_start / turn_end
|
|
1397
|
+
|
|
1398
|
+
A turn consists of one assistant response plus any resulting tool calls and results.
|
|
1399
|
+
|
|
1400
|
+
```json
|
|
1401
|
+
{"type": "turn_start"}
|
|
1402
|
+
```
|
|
1403
|
+
|
|
1404
|
+
```json
|
|
1405
|
+
{
|
|
1406
|
+
"type": "turn_end",
|
|
1407
|
+
"message": {...},
|
|
1408
|
+
"toolResults": [...]
|
|
1409
|
+
}
|
|
1410
|
+
```
|
|
1411
|
+
|
|
1412
|
+
### message_start / message_end
|
|
1413
|
+
|
|
1414
|
+
Emitted when a message begins and completes. The `message` field contains an `AgentMessage`.
|
|
1415
|
+
|
|
1416
|
+
```json
|
|
1417
|
+
{"type": "message_start", "message": {...}}
|
|
1418
|
+
{"type": "message_end", "message": {...}}
|
|
1419
|
+
```
|
|
1420
|
+
|
|
1421
|
+
### message_update (Streaming)
|
|
1422
|
+
|
|
1423
|
+
Emitted during streaming of assistant messages. Contains both the partial message and a streaming delta event.
|
|
1424
|
+
|
|
1425
|
+
```json
|
|
1426
|
+
{
|
|
1427
|
+
"type": "message_update",
|
|
1428
|
+
"message": {...},
|
|
1429
|
+
"assistantMessageEvent": {
|
|
1430
|
+
"type": "text_delta",
|
|
1431
|
+
"contentIndex": 0,
|
|
1432
|
+
"delta": "Hello ",
|
|
1433
|
+
"partial": {...}
|
|
1434
|
+
}
|
|
1435
|
+
}
|
|
1436
|
+
```
|
|
1437
|
+
|
|
1438
|
+
The `assistantMessageEvent` field contains one of these delta types:
|
|
1439
|
+
|
|
1440
|
+
| Type | Description |
|
|
1441
|
+
|------|-------------|
|
|
1442
|
+
| `start` | Message generation started |
|
|
1443
|
+
| `text_start` | Text content block started |
|
|
1444
|
+
| `text_delta` | Text content chunk |
|
|
1445
|
+
| `text_end` | Text content block ended |
|
|
1446
|
+
| `thinking_start` | Thinking block started |
|
|
1447
|
+
| `thinking_delta` | Thinking content chunk |
|
|
1448
|
+
| `thinking_end` | Thinking block ended |
|
|
1449
|
+
| `toolcall_start` | Tool call started |
|
|
1450
|
+
| `toolcall_delta` | Tool call arguments chunk |
|
|
1451
|
+
| `toolcall_end` | Tool call ended (includes full `toolCall` object) |
|
|
1452
|
+
| `done` | Message complete (reason: `"stop"`, `"length"`, `"toolUse"`) |
|
|
1453
|
+
| `error` | Error occurred (reason: `"aborted"`, `"error"`) |
|
|
1454
|
+
|
|
1455
|
+
Example streaming a text response:
|
|
1456
|
+
```json
|
|
1457
|
+
{"type":"message_update","message":{...},"assistantMessageEvent":{"type":"text_start","contentIndex":0,"partial":{...}}}
|
|
1458
|
+
{"type":"message_update","message":{...},"assistantMessageEvent":{"type":"text_delta","contentIndex":0,"delta":"Hello","partial":{...}}}
|
|
1459
|
+
{"type":"message_update","message":{...},"assistantMessageEvent":{"type":"text_delta","contentIndex":0,"delta":" world","partial":{...}}}
|
|
1460
|
+
{"type":"message_update","message":{...},"assistantMessageEvent":{"type":"text_end","contentIndex":0,"content":"Hello world","partial":{...}}}
|
|
1461
|
+
```
|
|
1462
|
+
|
|
1463
|
+
### tool_execution_start / tool_execution_update / tool_execution_end
|
|
1464
|
+
|
|
1465
|
+
Emitted when a tool begins, streams progress, and completes execution.
|
|
1466
|
+
|
|
1467
|
+
```json
|
|
1468
|
+
{
|
|
1469
|
+
"type": "tool_execution_start",
|
|
1470
|
+
"toolCallId": "call_abc123",
|
|
1471
|
+
"toolName": "bash",
|
|
1472
|
+
"args": {"command": "ls -la"}
|
|
1473
|
+
}
|
|
1474
|
+
```
|
|
1475
|
+
|
|
1476
|
+
During execution, `tool_execution_update` events stream partial results (e.g., bash output as it arrives):
|
|
1477
|
+
|
|
1478
|
+
```json
|
|
1479
|
+
{
|
|
1480
|
+
"type": "tool_execution_update",
|
|
1481
|
+
"toolCallId": "call_abc123",
|
|
1482
|
+
"toolName": "bash",
|
|
1483
|
+
"args": {"command": "ls -la"},
|
|
1484
|
+
"partialResult": {
|
|
1485
|
+
"content": [{"type": "text", "text": "partial output so far..."}],
|
|
1486
|
+
"details": {"truncation": null, "fullOutputPath": null}
|
|
1487
|
+
}
|
|
1488
|
+
}
|
|
1489
|
+
```
|
|
1490
|
+
|
|
1491
|
+
When complete:
|
|
1492
|
+
|
|
1493
|
+
```json
|
|
1494
|
+
{
|
|
1495
|
+
"type": "tool_execution_end",
|
|
1496
|
+
"toolCallId": "call_abc123",
|
|
1497
|
+
"toolName": "bash",
|
|
1498
|
+
"result": {
|
|
1499
|
+
"content": [{"type": "text", "text": "total 48\n..."}],
|
|
1500
|
+
"details": {...}
|
|
1501
|
+
},
|
|
1502
|
+
"isError": false
|
|
1503
|
+
}
|
|
1504
|
+
```
|
|
1505
|
+
|
|
1506
|
+
Use `toolCallId` to correlate events. The `partialResult` in `tool_execution_update` contains the accumulated output so far (not just the delta), allowing clients to simply replace their display on each update.
|
|
1507
|
+
|
|
1508
|
+
Host-owned workflows can also emit sanitized tool lifecycle events with workflow metadata. For example, review actions emit tool names and bounded arguments, but omit raw file contents and raw tool output:
|
|
1509
|
+
|
|
1510
|
+
```json
|
|
1511
|
+
{"type":"tool_execution_start","workflowId":"review:abc","workflowKind":"review","workflowAction":"review.uncommitted","toolCallId":"review:abc:call_1","toolName":"read","args":{"path":"src/file.ts"}}
|
|
1512
|
+
{"type":"tool_execution_end","workflowId":"review:abc","workflowKind":"review","workflowAction":"review.uncommitted","toolCallId":"review:abc:call_1","toolName":"read","isError":false}
|
|
1513
|
+
```
|
|
1514
|
+
|
|
1515
|
+
### workflow_start / workflow_update / workflow_end
|
|
1516
|
+
|
|
1517
|
+
Emitted for host-owned workflows that are not ordinary assistant chat turns, such as a review action. Clients can render these as a temporary live timeline until the action response and any resulting session refresh arrive.
|
|
1518
|
+
|
|
1519
|
+
```json
|
|
1520
|
+
{"type":"workflow_start","workflowId":"review:abc","kind":"review","action":"review.uncommitted","title":"Review","message":"Reviewing uncommitted changes.","status":"running"}
|
|
1521
|
+
{"type":"workflow_update","workflowId":"review:abc","kind":"review","action":"review.uncommitted","title":"Review","message":"Finalizing findings.","status":"finalizing"}
|
|
1522
|
+
{"type":"workflow_end","workflowId":"review:abc","kind":"review","action":"review.uncommitted","title":"Review","message":"Review complete: 2 findings. Opening review session.","status":"completed"}
|
|
1523
|
+
```
|
|
1524
|
+
|
|
1525
|
+
`status` is advisory. Known review statuses are `running`, `finalizing`, `completed`, `cancelled`, and `failed`. Unknown workflow kinds, statuses, and extra fields should be ignored or rendered generically.
|
|
1526
|
+
|
|
1527
|
+
### queue_update
|
|
1528
|
+
|
|
1529
|
+
Emitted whenever the pending steering or follow-up queue changes.
|
|
1530
|
+
|
|
1531
|
+
```json
|
|
1532
|
+
{
|
|
1533
|
+
"type": "queue_update",
|
|
1534
|
+
"steering": ["Focus on error handling"],
|
|
1535
|
+
"followUp": ["After that, summarize the result"]
|
|
1536
|
+
}
|
|
1537
|
+
```
|
|
1538
|
+
|
|
1539
|
+
### compaction_start / compaction_end
|
|
1540
|
+
|
|
1541
|
+
Emitted when compaction runs, whether manual or automatic.
|
|
1542
|
+
|
|
1543
|
+
```json
|
|
1544
|
+
{"type": "compaction_start", "reason": "threshold"}
|
|
1545
|
+
```
|
|
1546
|
+
|
|
1547
|
+
The `reason` field is `"manual"`, `"threshold"`, or `"overflow"`.
|
|
1548
|
+
|
|
1549
|
+
```json
|
|
1550
|
+
{
|
|
1551
|
+
"type": "compaction_end",
|
|
1552
|
+
"reason": "threshold",
|
|
1553
|
+
"result": {
|
|
1554
|
+
"summary": "Summary of conversation...",
|
|
1555
|
+
"firstKeptEntryId": "abc123",
|
|
1556
|
+
"tokensBefore": 150000,
|
|
1557
|
+
"details": {}
|
|
1558
|
+
},
|
|
1559
|
+
"aborted": false,
|
|
1560
|
+
"willRetry": false
|
|
1561
|
+
}
|
|
1562
|
+
```
|
|
1563
|
+
|
|
1564
|
+
If `reason` was `"overflow"` and compaction succeeds, `willRetry` is `true` and the agent will automatically retry the prompt.
|
|
1565
|
+
|
|
1566
|
+
If compaction was aborted, `result` is `null` and `aborted` is `true`.
|
|
1567
|
+
|
|
1568
|
+
If compaction failed (e.g., API quota exceeded), `result` is `null`, `aborted` is `false`, and `errorMessage` contains the error description.
|
|
1569
|
+
|
|
1570
|
+
### auto_retry_start / auto_retry_end
|
|
1571
|
+
|
|
1572
|
+
Emitted when automatic retry is triggered after a transient error (overloaded, rate limit, 5xx).
|
|
1573
|
+
|
|
1574
|
+
```json
|
|
1575
|
+
{
|
|
1576
|
+
"type": "auto_retry_start",
|
|
1577
|
+
"attempt": 1,
|
|
1578
|
+
"maxAttempts": 3,
|
|
1579
|
+
"delayMs": 2000,
|
|
1580
|
+
"errorMessage": "529 {\"type\":\"error\",\"error\":{\"type\":\"overloaded_error\",\"message\":\"Overloaded\"}}"
|
|
1581
|
+
}
|
|
1582
|
+
```
|
|
1583
|
+
|
|
1584
|
+
```json
|
|
1585
|
+
{
|
|
1586
|
+
"type": "auto_retry_end",
|
|
1587
|
+
"success": true,
|
|
1588
|
+
"attempt": 2
|
|
1589
|
+
}
|
|
1590
|
+
```
|
|
1591
|
+
|
|
1592
|
+
On final failure (max retries exceeded):
|
|
1593
|
+
```json
|
|
1594
|
+
{
|
|
1595
|
+
"type": "auto_retry_end",
|
|
1596
|
+
"success": false,
|
|
1597
|
+
"attempt": 3,
|
|
1598
|
+
"finalError": "529 overloaded_error: Overloaded"
|
|
1599
|
+
}
|
|
1600
|
+
```
|
|
1601
|
+
|
|
1602
|
+
### extension_error
|
|
1603
|
+
|
|
1604
|
+
Emitted when an extension throws an error.
|
|
1605
|
+
|
|
1606
|
+
```json
|
|
1607
|
+
{
|
|
1608
|
+
"type": "extension_error",
|
|
1609
|
+
"extensionPath": "/path/to/extension.ts",
|
|
1610
|
+
"event": "tool_call",
|
|
1611
|
+
"error": "Error message..."
|
|
1612
|
+
}
|
|
1613
|
+
```
|
|
1614
|
+
|
|
1615
|
+
### models_changed
|
|
1616
|
+
|
|
1617
|
+
Emitted when the host detects that the available model catalog changed on disk — for example after `/login`, `/logout`, or an API key save in another volt process rewrote `auth.json` or `models.json`. The event carries no payload; clients should re-request `get_available_models` to fetch the updated catalog. Rewrites that do not change the available catalog (such as OAuth token refreshes) do not emit this event.
|
|
1618
|
+
|
|
1619
|
+
```json
|
|
1620
|
+
{"type": "models_changed"}
|
|
1621
|
+
```
|
|
1622
|
+
|
|
1623
|
+
## Extension UI Protocol
|
|
1624
|
+
|
|
1625
|
+
Extensions can request user interaction via `ctx.ui.select()`, `ctx.ui.confirm()`, etc. In RPC mode, these are translated into a request/response sub-protocol on top of the base command/event flow.
|
|
1626
|
+
|
|
1627
|
+
There are two categories of extension UI methods:
|
|
1628
|
+
|
|
1629
|
+
- **Dialog methods** (`select`, `confirm`, `input`, `editor`): emit an `extension_ui_request` on stdout and block until the client sends back an `extension_ui_response` on stdin with the matching `id`.
|
|
1630
|
+
- **Fire-and-forget methods** (`notify`, `setStatus`, `setWidget`, `setTitle`, `set_editor_text`): emit an `extension_ui_request` on stdout but do not expect a response. The client can display the information or ignore it.
|
|
1631
|
+
|
|
1632
|
+
If a dialog method includes a `timeout` field, the agent-side will auto-resolve with a default value when the timeout expires. The client does not need to track timeouts.
|
|
1633
|
+
|
|
1634
|
+
Some `ExtensionUIContext` methods are not supported or degraded in RPC mode because they require direct TUI access:
|
|
1635
|
+
- `custom()` returns `undefined`
|
|
1636
|
+
- `setWorkingMessage()`, `setWorkingIndicator()`, `setFooter()`, `setHeader()`, `setEditorComponent()`, `setToolsExpanded()` are no-ops
|
|
1637
|
+
- `getEditorText()` returns `""`
|
|
1638
|
+
- `getToolsExpanded()` returns `false`
|
|
1639
|
+
- `pasteToEditor()` delegates to `setEditorText()` (no paste/collapse handling)
|
|
1640
|
+
|
|
1641
|
+
The theme facade is fully functional in RPC mode: `getAllThemes()` returns the real theme list (builtin plus extension-registered), `getTheme()` resolves by name, and `setTheme()` applies the theme to the process and persists the choice. Under the background daemon, a successful `setTheme()` also broadcasts a `theme_snapshot` to connected desktop TUIs, which apply it unless the user explicitly picked a theme in that TUI session.
|
|
1642
|
+
|
|
1643
|
+
For conversations owned by a desktop TUI and served to phones over the daemon's byte relay, `extension_ui_request` frames are suppressed on the relayed stream: dialogs are answered on the desktop where the extension's UI actually lives, and phones receive none of them.
|
|
1644
|
+
|
|
1645
|
+
Note: `ctx.mode` is `"rpc"` and `ctx.hasUI` is `true` in RPC mode because the dialog and fire-and-forget methods are functional via the extension UI sub-protocol. Use `ctx.mode === "tui"` to guard TUI-specific features like `custom()` that require a real terminal.
|
|
1646
|
+
|
|
1647
|
+
### Extension UI Requests (stdout)
|
|
1648
|
+
|
|
1649
|
+
All requests have `type: "extension_ui_request"`, a unique `id`, and a `method` field.
|
|
1650
|
+
|
|
1651
|
+
#### select
|
|
1652
|
+
|
|
1653
|
+
Prompt the user to choose from a list. Dialog methods with a `timeout` field include the timeout in milliseconds; the agent auto-resolves with `undefined` if the client doesn't respond in time.
|
|
1654
|
+
|
|
1655
|
+
```json
|
|
1656
|
+
{
|
|
1657
|
+
"type": "extension_ui_request",
|
|
1658
|
+
"id": "uuid-1",
|
|
1659
|
+
"method": "select",
|
|
1660
|
+
"title": "Allow dangerous command?",
|
|
1661
|
+
"options": ["Allow", "Block"],
|
|
1662
|
+
"timeout": 10000
|
|
1663
|
+
}
|
|
1664
|
+
```
|
|
1665
|
+
|
|
1666
|
+
Expected response: `extension_ui_response` with `value` (the selected option string) or `cancelled: true`.
|
|
1667
|
+
|
|
1668
|
+
#### confirm
|
|
1669
|
+
|
|
1670
|
+
Prompt the user for yes/no confirmation.
|
|
1671
|
+
|
|
1672
|
+
```json
|
|
1673
|
+
{
|
|
1674
|
+
"type": "extension_ui_request",
|
|
1675
|
+
"id": "uuid-2",
|
|
1676
|
+
"method": "confirm",
|
|
1677
|
+
"title": "Clear session?",
|
|
1678
|
+
"message": "All messages will be lost.",
|
|
1679
|
+
"timeout": 5000
|
|
1680
|
+
}
|
|
1681
|
+
```
|
|
1682
|
+
|
|
1683
|
+
Expected response: `extension_ui_response` with `confirmed: true/false` or `cancelled: true`.
|
|
1684
|
+
|
|
1685
|
+
#### input
|
|
1686
|
+
|
|
1687
|
+
Prompt the user for free-form text.
|
|
1688
|
+
|
|
1689
|
+
```json
|
|
1690
|
+
{
|
|
1691
|
+
"type": "extension_ui_request",
|
|
1692
|
+
"id": "uuid-3",
|
|
1693
|
+
"method": "input",
|
|
1694
|
+
"title": "Enter a value",
|
|
1695
|
+
"placeholder": "type something..."
|
|
1696
|
+
}
|
|
1697
|
+
```
|
|
1698
|
+
|
|
1699
|
+
Expected response: `extension_ui_response` with `value` (the entered text) or `cancelled: true`.
|
|
1700
|
+
|
|
1701
|
+
#### editor
|
|
1702
|
+
|
|
1703
|
+
Open a multi-line text editor with optional prefilled content.
|
|
1704
|
+
|
|
1705
|
+
```json
|
|
1706
|
+
{
|
|
1707
|
+
"type": "extension_ui_request",
|
|
1708
|
+
"id": "uuid-4",
|
|
1709
|
+
"method": "editor",
|
|
1710
|
+
"title": "Edit some text",
|
|
1711
|
+
"prefill": "Line 1\nLine 2\nLine 3"
|
|
1712
|
+
}
|
|
1713
|
+
```
|
|
1714
|
+
|
|
1715
|
+
Expected response: `extension_ui_response` with `value` (the edited text) or `cancelled: true`.
|
|
1716
|
+
|
|
1717
|
+
#### notify
|
|
1718
|
+
|
|
1719
|
+
Display a notification. Fire-and-forget, no response expected.
|
|
1720
|
+
|
|
1721
|
+
```json
|
|
1722
|
+
{
|
|
1723
|
+
"type": "extension_ui_request",
|
|
1724
|
+
"id": "uuid-5",
|
|
1725
|
+
"method": "notify",
|
|
1726
|
+
"message": "Command blocked by user",
|
|
1727
|
+
"notifyType": "warning"
|
|
1728
|
+
}
|
|
1729
|
+
```
|
|
1730
|
+
|
|
1731
|
+
The `notifyType` field is `"info"`, `"warning"`, or `"error"`. Defaults to `"info"` if omitted.
|
|
1732
|
+
|
|
1733
|
+
#### setStatus
|
|
1734
|
+
|
|
1735
|
+
Set or clear a status entry in the footer/status bar. Fire-and-forget.
|
|
1736
|
+
|
|
1737
|
+
```json
|
|
1738
|
+
{
|
|
1739
|
+
"type": "extension_ui_request",
|
|
1740
|
+
"id": "uuid-6",
|
|
1741
|
+
"method": "setStatus",
|
|
1742
|
+
"statusKey": "my-ext",
|
|
1743
|
+
"statusText": "Turn 3 running..."
|
|
1744
|
+
}
|
|
1745
|
+
```
|
|
1746
|
+
|
|
1747
|
+
Send `statusText: undefined` (or omit it) to clear the status entry for that key.
|
|
1748
|
+
|
|
1749
|
+
#### setWidget
|
|
1750
|
+
|
|
1751
|
+
Set or clear a widget (block of text lines) displayed above or below the editor. Fire-and-forget.
|
|
1752
|
+
|
|
1753
|
+
```json
|
|
1754
|
+
{
|
|
1755
|
+
"type": "extension_ui_request",
|
|
1756
|
+
"id": "uuid-7",
|
|
1757
|
+
"method": "setWidget",
|
|
1758
|
+
"widgetKey": "my-ext",
|
|
1759
|
+
"widgetLines": ["--- My Widget ---", "Line 1", "Line 2"],
|
|
1760
|
+
"widgetPlacement": "aboveEditor"
|
|
1761
|
+
}
|
|
1762
|
+
```
|
|
1763
|
+
|
|
1764
|
+
Send `widgetLines: undefined` (or omit it) to clear the widget. The `widgetPlacement` field is `"aboveEditor"` (default) or `"belowEditor"`. Only string arrays are supported in RPC mode; component factories are ignored.
|
|
1765
|
+
|
|
1766
|
+
#### setTitle
|
|
1767
|
+
|
|
1768
|
+
Set the terminal window/tab title. Fire-and-forget.
|
|
1769
|
+
|
|
1770
|
+
```json
|
|
1771
|
+
{
|
|
1772
|
+
"type": "extension_ui_request",
|
|
1773
|
+
"id": "uuid-8",
|
|
1774
|
+
"method": "setTitle",
|
|
1775
|
+
"title": "volt - my project"
|
|
1776
|
+
}
|
|
1777
|
+
```
|
|
1778
|
+
|
|
1779
|
+
#### set_editor_text
|
|
1780
|
+
|
|
1781
|
+
Set the text in the input editor. Fire-and-forget.
|
|
1782
|
+
|
|
1783
|
+
```json
|
|
1784
|
+
{
|
|
1785
|
+
"type": "extension_ui_request",
|
|
1786
|
+
"id": "uuid-9",
|
|
1787
|
+
"method": "set_editor_text",
|
|
1788
|
+
"text": "prefilled text for the user"
|
|
1789
|
+
}
|
|
1790
|
+
```
|
|
1791
|
+
|
|
1792
|
+
### Extension UI Responses (stdin)
|
|
1793
|
+
|
|
1794
|
+
Responses are sent for dialog methods only (`select`, `confirm`, `input`, `editor`). The `id` must match the request.
|
|
1795
|
+
|
|
1796
|
+
#### Value response (select, input, editor)
|
|
1797
|
+
|
|
1798
|
+
```json
|
|
1799
|
+
{"type": "extension_ui_response", "id": "uuid-1", "value": "Allow"}
|
|
1800
|
+
```
|
|
1801
|
+
|
|
1802
|
+
#### Confirmation response (confirm)
|
|
1803
|
+
|
|
1804
|
+
```json
|
|
1805
|
+
{"type": "extension_ui_response", "id": "uuid-2", "confirmed": true}
|
|
1806
|
+
```
|
|
1807
|
+
|
|
1808
|
+
#### Cancellation response (any dialog)
|
|
1809
|
+
|
|
1810
|
+
Dismiss any dialog method. The extension receives `undefined` (for select/input/editor) or `false` (for confirm).
|
|
1811
|
+
|
|
1812
|
+
```json
|
|
1813
|
+
{"type": "extension_ui_response", "id": "uuid-3", "cancelled": true}
|
|
1814
|
+
```
|
|
1815
|
+
|
|
1816
|
+
## Error Handling
|
|
1817
|
+
|
|
1818
|
+
Failed commands return a response with `success: false`:
|
|
1819
|
+
|
|
1820
|
+
```json
|
|
1821
|
+
{
|
|
1822
|
+
"type": "response",
|
|
1823
|
+
"command": "set_model",
|
|
1824
|
+
"success": false,
|
|
1825
|
+
"error": "Model not found: invalid/model"
|
|
1826
|
+
}
|
|
1827
|
+
```
|
|
1828
|
+
|
|
1829
|
+
Parse errors:
|
|
1830
|
+
|
|
1831
|
+
```json
|
|
1832
|
+
{
|
|
1833
|
+
"type": "response",
|
|
1834
|
+
"command": "parse",
|
|
1835
|
+
"success": false,
|
|
1836
|
+
"error": "Failed to parse command: Unexpected token..."
|
|
1837
|
+
}
|
|
1838
|
+
```
|
|
1839
|
+
|
|
1840
|
+
## Types
|
|
1841
|
+
|
|
1842
|
+
Source files:
|
|
1843
|
+
- [`packages/ai/src/types.ts`](../../ai/src/types.ts) - `Model`, `UserMessage`, `AssistantMessage`, `ToolResultMessage`
|
|
1844
|
+
- [`packages/agent/src/types.ts`](../../agent/src/types.ts) - `AgentMessage`, `AgentEvent`
|
|
1845
|
+
- [`src/core/messages.ts`](../src/core/messages.ts) - `BashExecutionMessage`
|
|
1846
|
+
- [`src/core/rpc/types.ts`](../src/core/rpc/types.ts) - RPC command/response types, extension UI request/response types
|
|
1847
|
+
- [`src/core/rpc/transport.ts`](../src/core/rpc/transport.ts) - RPC transport abstraction and JSONL stream adapters
|
|
1848
|
+
- [`src/core/rpc/loopback-transport.ts`](../src/core/rpc/loopback-transport.ts) - in-memory transport pair for in-process clients
|
|
1849
|
+
- [`src/modes/rpc/rpc-transport-client.ts`](../src/modes/rpc/rpc-transport-client.ts) - typed RPC client for caller-provided transports
|
|
1850
|
+
|
|
1851
|
+
### Model
|
|
1852
|
+
|
|
1853
|
+
```json
|
|
1854
|
+
{
|
|
1855
|
+
"id": "claude-sonnet-4-20250514",
|
|
1856
|
+
"name": "Claude Sonnet 4",
|
|
1857
|
+
"api": "anthropic-messages",
|
|
1858
|
+
"provider": "anthropic",
|
|
1859
|
+
"baseUrl": "https://api.anthropic.com",
|
|
1860
|
+
"reasoning": true,
|
|
1861
|
+
"input": ["text", "image"],
|
|
1862
|
+
"contextWindow": 200000,
|
|
1863
|
+
"maxTokens": 16384,
|
|
1864
|
+
"cost": {
|
|
1865
|
+
"input": 3.0,
|
|
1866
|
+
"output": 15.0,
|
|
1867
|
+
"cacheRead": 0.3,
|
|
1868
|
+
"cacheWrite": 3.75
|
|
1869
|
+
}
|
|
1870
|
+
}
|
|
1871
|
+
```
|
|
1872
|
+
|
|
1873
|
+
### UserMessage
|
|
1874
|
+
|
|
1875
|
+
```json
|
|
1876
|
+
{
|
|
1877
|
+
"role": "user",
|
|
1878
|
+
"content": "Hello!",
|
|
1879
|
+
"timestamp": 1733234567890,
|
|
1880
|
+
"attachments": []
|
|
1881
|
+
}
|
|
1882
|
+
```
|
|
1883
|
+
|
|
1884
|
+
The `content` field can be a string or an array of `TextContent`/`ImageContent` blocks.
|
|
1885
|
+
|
|
1886
|
+
### AssistantMessage
|
|
1887
|
+
|
|
1888
|
+
```json
|
|
1889
|
+
{
|
|
1890
|
+
"role": "assistant",
|
|
1891
|
+
"content": [
|
|
1892
|
+
{"type": "text", "text": "Hello! How can I help?"},
|
|
1893
|
+
{"type": "thinking", "thinking": "User is greeting me..."},
|
|
1894
|
+
{"type": "toolCall", "id": "call_123", "name": "bash", "arguments": {"command": "ls"}}
|
|
1895
|
+
],
|
|
1896
|
+
"api": "anthropic-messages",
|
|
1897
|
+
"provider": "anthropic",
|
|
1898
|
+
"model": "claude-sonnet-4-20250514",
|
|
1899
|
+
"usage": {
|
|
1900
|
+
"input": 100,
|
|
1901
|
+
"output": 50,
|
|
1902
|
+
"cacheRead": 0,
|
|
1903
|
+
"cacheWrite": 0,
|
|
1904
|
+
"cost": {"input": 0.0003, "output": 0.00075, "cacheRead": 0, "cacheWrite": 0, "total": 0.00105}
|
|
1905
|
+
},
|
|
1906
|
+
"stopReason": "stop",
|
|
1907
|
+
"timestamp": 1733234567890
|
|
1908
|
+
}
|
|
1909
|
+
```
|
|
1910
|
+
|
|
1911
|
+
Stop reasons: `"stop"`, `"length"`, `"toolUse"`, `"error"`, `"aborted"`
|
|
1912
|
+
|
|
1913
|
+
### ToolResultMessage
|
|
1914
|
+
|
|
1915
|
+
```json
|
|
1916
|
+
{
|
|
1917
|
+
"role": "toolResult",
|
|
1918
|
+
"toolCallId": "call_123",
|
|
1919
|
+
"toolName": "bash",
|
|
1920
|
+
"content": [{"type": "text", "text": "total 48\ndrwxr-xr-x ..."}],
|
|
1921
|
+
"isError": false,
|
|
1922
|
+
"timestamp": 1733234567890
|
|
1923
|
+
}
|
|
1924
|
+
```
|
|
1925
|
+
|
|
1926
|
+
### BashExecutionMessage
|
|
1927
|
+
|
|
1928
|
+
Created by the `bash` RPC command (not by LLM tool calls):
|
|
1929
|
+
|
|
1930
|
+
```json
|
|
1931
|
+
{
|
|
1932
|
+
"role": "bashExecution",
|
|
1933
|
+
"command": "ls -la",
|
|
1934
|
+
"output": "total 48\ndrwxr-xr-x ...",
|
|
1935
|
+
"exitCode": 0,
|
|
1936
|
+
"cancelled": false,
|
|
1937
|
+
"truncated": false,
|
|
1938
|
+
"fullOutputPath": null,
|
|
1939
|
+
"timestamp": 1733234567890
|
|
1940
|
+
}
|
|
1941
|
+
```
|
|
1942
|
+
|
|
1943
|
+
### Attachment
|
|
1944
|
+
|
|
1945
|
+
```json
|
|
1946
|
+
{
|
|
1947
|
+
"id": "img1",
|
|
1948
|
+
"type": "image",
|
|
1949
|
+
"fileName": "photo.jpg",
|
|
1950
|
+
"mimeType": "image/jpeg",
|
|
1951
|
+
"size": 102400,
|
|
1952
|
+
"content": "base64-encoded-data...",
|
|
1953
|
+
"extractedText": null,
|
|
1954
|
+
"preview": null
|
|
1955
|
+
}
|
|
1956
|
+
```
|
|
1957
|
+
|
|
1958
|
+
## Example: Basic Client (Python)
|
|
1959
|
+
|
|
1960
|
+
```python
|
|
1961
|
+
import subprocess
|
|
1962
|
+
import json
|
|
1963
|
+
|
|
1964
|
+
proc = subprocess.Popen(
|
|
1965
|
+
["volt", "--mode", "rpc", "--no-session"],
|
|
1966
|
+
stdin=subprocess.PIPE,
|
|
1967
|
+
stdout=subprocess.PIPE,
|
|
1968
|
+
text=True
|
|
1969
|
+
)
|
|
1970
|
+
|
|
1971
|
+
def send(cmd):
|
|
1972
|
+
proc.stdin.write(json.dumps(cmd) + "\n")
|
|
1973
|
+
proc.stdin.flush()
|
|
1974
|
+
|
|
1975
|
+
def read_events():
|
|
1976
|
+
for line in proc.stdout:
|
|
1977
|
+
yield json.loads(line)
|
|
1978
|
+
|
|
1979
|
+
# Send prompt
|
|
1980
|
+
send({"type": "prompt", "message": "Hello!"})
|
|
1981
|
+
|
|
1982
|
+
# Process events
|
|
1983
|
+
for event in read_events():
|
|
1984
|
+
if event.get("type") == "message_update":
|
|
1985
|
+
delta = event.get("assistantMessageEvent", {})
|
|
1986
|
+
if delta.get("type") == "text_delta":
|
|
1987
|
+
print(delta["delta"], end="", flush=True)
|
|
1988
|
+
|
|
1989
|
+
if event.get("type") == "agent_settled":
|
|
1990
|
+
print()
|
|
1991
|
+
break
|
|
1992
|
+
```
|
|
1993
|
+
|
|
1994
|
+
## Example: Interactive Client (Node.js)
|
|
1995
|
+
|
|
1996
|
+
See [`test/rpc-example.ts`](../test/rpc-example.ts) for a complete interactive example, [`src/modes/rpc/rpc-client.ts`](../src/modes/rpc/rpc-client.ts) for the subprocess typed client, or [`src/modes/rpc/rpc-transport-client.ts`](../src/modes/rpc/rpc-transport-client.ts) for the transport-backed typed client.
|
|
1997
|
+
|
|
1998
|
+
For a complete example of handling the extension UI protocol, see [`examples/rpc-extension-ui.ts`](../examples/rpc-extension-ui.ts) which pairs with the [`examples/extensions/rpc-demo.ts`](../examples/extensions/rpc-demo.ts) extension.
|
|
1999
|
+
|
|
2000
|
+
```javascript
|
|
2001
|
+
const { spawn } = require("child_process");
|
|
2002
|
+
const { StringDecoder } = require("string_decoder");
|
|
2003
|
+
|
|
2004
|
+
const agent = spawn("volt", ["--mode", "rpc", "--no-session"]);
|
|
2005
|
+
|
|
2006
|
+
function attachJsonlReader(stream, onLine) {
|
|
2007
|
+
const decoder = new StringDecoder("utf8");
|
|
2008
|
+
let buffer = "";
|
|
2009
|
+
|
|
2010
|
+
stream.on("data", (chunk) => {
|
|
2011
|
+
buffer += typeof chunk === "string" ? chunk : decoder.write(chunk);
|
|
2012
|
+
|
|
2013
|
+
while (true) {
|
|
2014
|
+
const newlineIndex = buffer.indexOf("\n");
|
|
2015
|
+
if (newlineIndex === -1) break;
|
|
2016
|
+
|
|
2017
|
+
let line = buffer.slice(0, newlineIndex);
|
|
2018
|
+
buffer = buffer.slice(newlineIndex + 1);
|
|
2019
|
+
if (line.endsWith("\r")) line = line.slice(0, -1);
|
|
2020
|
+
onLine(line);
|
|
2021
|
+
}
|
|
2022
|
+
});
|
|
2023
|
+
|
|
2024
|
+
stream.on("end", () => {
|
|
2025
|
+
buffer += decoder.end();
|
|
2026
|
+
if (buffer.length > 0) {
|
|
2027
|
+
onLine(buffer.endsWith("\r") ? buffer.slice(0, -1) : buffer);
|
|
2028
|
+
}
|
|
2029
|
+
});
|
|
2030
|
+
}
|
|
2031
|
+
|
|
2032
|
+
attachJsonlReader(agent.stdout, (line) => {
|
|
2033
|
+
const event = JSON.parse(line);
|
|
2034
|
+
|
|
2035
|
+
if (event.type === "message_update") {
|
|
2036
|
+
const { assistantMessageEvent } = event;
|
|
2037
|
+
if (assistantMessageEvent.type === "text_delta") {
|
|
2038
|
+
process.stdout.write(assistantMessageEvent.delta);
|
|
2039
|
+
}
|
|
2040
|
+
}
|
|
2041
|
+
});
|
|
2042
|
+
|
|
2043
|
+
// Send prompt
|
|
2044
|
+
agent.stdin.write(JSON.stringify({ type: "prompt", message: "Hello" }) + "\n");
|
|
2045
|
+
|
|
2046
|
+
// Abort on Ctrl+C
|
|
2047
|
+
process.on("SIGINT", () => {
|
|
2048
|
+
agent.stdin.write(JSON.stringify({ type: "abort" }) + "\n");
|
|
2049
|
+
});
|
|
2050
|
+
```
|