@hansjm10/volt-coding-agent 0.0.0-bootstrap.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BINARY-CAPABILITIES.md +28 -0
- package/CHANGELOG.md +4845 -0
- package/LICENSE +1 -1
- package/README.md +716 -3
- package/THIRD-PARTY-NOTICES.md +55 -0
- package/dist/LICENSES/clipboard-image-MIT.txt +9 -0
- package/dist/LICENSES/highlight.js-10.7.3-BSD-3-Clause.txt +29 -0
- package/dist/LICENSES/highlight.js-11.9.0-BSD-3-Clause.txt +29 -0
- package/dist/LICENSES/marked-18.0.5-LICENSE.txt +44 -0
- package/dist/LICENSES/run-jxa-MIT.txt +9 -0
- package/dist/cli/args.d.ts +60 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +414 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/config-selector.d.ts +14 -0
- package/dist/cli/config-selector.d.ts.map +1 -0
- package/dist/cli/config-selector.js +31 -0
- package/dist/cli/config-selector.js.map +1 -0
- package/dist/cli/file-processor.d.ts +15 -0
- package/dist/cli/file-processor.d.ts.map +1 -0
- package/dist/cli/file-processor.js +85 -0
- package/dist/cli/file-processor.js.map +1 -0
- package/dist/cli/initial-message.d.ts +18 -0
- package/dist/cli/initial-message.d.ts.map +1 -0
- package/dist/cli/initial-message.js +22 -0
- package/dist/cli/initial-message.js.map +1 -0
- package/dist/cli/list-models.d.ts +9 -0
- package/dist/cli/list-models.d.ts.map +1 -0
- package/dist/cli/list-models.js +98 -0
- package/dist/cli/list-models.js.map +1 -0
- package/dist/cli/project-trust.d.ts +10 -0
- package/dist/cli/project-trust.d.ts.map +1 -0
- package/dist/cli/project-trust.js +48 -0
- package/dist/cli/project-trust.js.map +1 -0
- package/dist/cli/session-picker.d.ts +9 -0
- package/dist/cli/session-picker.d.ts.map +1 -0
- package/dist/cli/session-picker.js +35 -0
- package/dist/cli/session-picker.js.map +1 -0
- package/dist/cli/startup-ui.d.ts +17 -0
- package/dist/cli/startup-ui.d.ts.map +1 -0
- package/dist/cli/startup-ui.js +133 -0
- package/dist/cli/startup-ui.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +18 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +85 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +487 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-session-runtime.d.ts +160 -0
- package/dist/core/agent-session-runtime.d.ts.map +1 -0
- package/dist/core/agent-session-runtime.js +397 -0
- package/dist/core/agent-session-runtime.js.map +1 -0
- package/dist/core/agent-session-services.d.ts +98 -0
- package/dist/core/agent-session-services.d.ts.map +1 -0
- package/dist/core/agent-session-services.js +125 -0
- package/dist/core/agent-session-services.js.map +1 -0
- package/dist/core/agent-session.d.ts +739 -0
- package/dist/core/agent-session.d.ts.map +1 -0
- package/dist/core/agent-session.js +3158 -0
- package/dist/core/agent-session.js.map +1 -0
- package/dist/core/auth-guidance.d.ts +5 -0
- package/dist/core/auth-guidance.d.ts.map +1 -0
- package/dist/core/auth-guidance.js +21 -0
- package/dist/core/auth-guidance.js.map +1 -0
- package/dist/core/auth-storage.d.ts +159 -0
- package/dist/core/auth-storage.d.ts.map +1 -0
- package/dist/core/auth-storage.js +509 -0
- package/dist/core/auth-storage.js.map +1 -0
- package/dist/core/bash-executor.d.ts +32 -0
- package/dist/core/bash-executor.d.ts.map +1 -0
- package/dist/core/bash-executor.js +111 -0
- package/dist/core/bash-executor.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +92 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
- package/dist/core/compaction/branch-summarization.js +257 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +121 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -0
- package/dist/core/compaction/compaction.js +658 -0
- package/dist/core/compaction/compaction.js.map +1 -0
- package/dist/core/compaction/index.d.ts +7 -0
- package/dist/core/compaction/index.d.ts.map +1 -0
- package/dist/core/compaction/index.js +7 -0
- package/dist/core/compaction/index.js.map +1 -0
- package/dist/core/compaction/utils.d.ts +56 -0
- package/dist/core/compaction/utils.d.ts.map +1 -0
- package/dist/core/compaction/utils.js +271 -0
- package/dist/core/compaction/utils.js.map +1 -0
- package/dist/core/defaults.d.ts +3 -0
- package/dist/core/defaults.d.ts.map +1 -0
- package/dist/core/defaults.js +2 -0
- package/dist/core/defaults.js.map +1 -0
- package/dist/core/diagnostics.d.ts +15 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +2 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/event-bus.d.ts +9 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +25 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/exec.d.ts +29 -0
- package/dist/core/exec.d.ts.map +1 -0
- package/dist/core/exec.js +75 -0
- package/dist/core/exec.js.map +1 -0
- package/dist/core/experimental.d.ts +2 -0
- package/dist/core/experimental.d.ts.map +1 -0
- package/dist/core/experimental.js +4 -0
- package/dist/core/experimental.js.map +1 -0
- package/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
- package/dist/core/export-html/ansi-to-html.js +249 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -0
- package/dist/core/export-html/index.d.ts +37 -0
- package/dist/core/export-html/index.d.ts.map +1 -0
- package/dist/core/export-html/index.js +234 -0
- package/dist/core/export-html/index.js.map +1 -0
- package/dist/core/export-html/template.css +1066 -0
- package/dist/core/export-html/template.html +55 -0
- package/dist/core/export-html/template.js +1864 -0
- package/dist/core/export-html/tool-renderer.d.ts +34 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
- package/dist/core/export-html/tool-renderer.js +108 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -0
- package/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/dist/core/export-html/vendor/marked.min.js +78 -0
- package/dist/core/extensions/index.d.ts +12 -0
- package/dist/core/extensions/index.d.ts.map +1 -0
- package/dist/core/extensions/index.js +9 -0
- package/dist/core/extensions/index.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +25 -0
- package/dist/core/extensions/loader.d.ts.map +1 -0
- package/dist/core/extensions/loader.js +516 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +180 -0
- package/dist/core/extensions/runner.d.ts.map +1 -0
- package/dist/core/extensions/runner.js +938 -0
- package/dist/core/extensions/runner.js.map +1 -0
- package/dist/core/extensions/types.d.ts +1215 -0
- package/dist/core/extensions/types.d.ts.map +1 -0
- package/dist/core/extensions/types.js +48 -0
- package/dist/core/extensions/types.js.map +1 -0
- package/dist/core/extensions/wrapper.d.ts +20 -0
- package/dist/core/extensions/wrapper.d.ts.map +1 -0
- package/dist/core/extensions/wrapper.js +22 -0
- package/dist/core/extensions/wrapper.js.map +1 -0
- package/dist/core/footer-data-provider.d.ts +54 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -0
- package/dist/core/footer-data-provider.js +338 -0
- package/dist/core/footer-data-provider.js.map +1 -0
- package/dist/core/host-actions.d.ts +107 -0
- package/dist/core/host-actions.d.ts.map +1 -0
- package/dist/core/host-actions.js +632 -0
- package/dist/core/host-actions.js.map +1 -0
- package/dist/core/host-interaction.d.ts +35 -0
- package/dist/core/host-interaction.d.ts.map +1 -0
- package/dist/core/host-interaction.js +2 -0
- package/dist/core/host-interaction.js.map +1 -0
- package/dist/core/http-dispatcher.d.ts +22 -0
- package/dist/core/http-dispatcher.d.ts.map +1 -0
- package/dist/core/http-dispatcher.js +64 -0
- package/dist/core/http-dispatcher.js.map +1 -0
- package/dist/core/index.d.ts +18 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +17 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/keybindings.d.ts +373 -0
- package/dist/core/keybindings.d.ts.map +1 -0
- package/dist/core/keybindings.js +303 -0
- package/dist/core/keybindings.js.map +1 -0
- package/dist/core/lsp/client.d.ts +119 -0
- package/dist/core/lsp/client.d.ts.map +1 -0
- package/dist/core/lsp/client.js +711 -0
- package/dist/core/lsp/client.js.map +1 -0
- package/dist/core/lsp/config.d.ts +96 -0
- package/dist/core/lsp/config.d.ts.map +1 -0
- package/dist/core/lsp/config.js +206 -0
- package/dist/core/lsp/config.js.map +1 -0
- package/dist/core/lsp/index.d.ts +6 -0
- package/dist/core/lsp/index.d.ts.map +1 -0
- package/dist/core/lsp/index.js +6 -0
- package/dist/core/lsp/index.js.map +1 -0
- package/dist/core/lsp/manager.d.ts +122 -0
- package/dist/core/lsp/manager.d.ts.map +1 -0
- package/dist/core/lsp/manager.js +1136 -0
- package/dist/core/lsp/manager.js.map +1 -0
- package/dist/core/lsp/trace.d.ts +26 -0
- package/dist/core/lsp/trace.d.ts.map +1 -0
- package/dist/core/lsp/trace.js +98 -0
- package/dist/core/lsp/trace.js.map +1 -0
- package/dist/core/lsp/workspace-edit.d.ts +60 -0
- package/dist/core/lsp/workspace-edit.d.ts.map +1 -0
- package/dist/core/lsp/workspace-edit.js +71 -0
- package/dist/core/lsp/workspace-edit.js.map +1 -0
- package/dist/core/mcp/audit.d.ts +39 -0
- package/dist/core/mcp/audit.d.ts.map +1 -0
- package/dist/core/mcp/audit.js +35 -0
- package/dist/core/mcp/audit.js.map +1 -0
- package/dist/core/mcp/auth.d.ts +7 -0
- package/dist/core/mcp/auth.d.ts.map +1 -0
- package/dist/core/mcp/auth.js +56 -0
- package/dist/core/mcp/auth.js.map +1 -0
- package/dist/core/mcp/client-factory.d.ts +20 -0
- package/dist/core/mcp/client-factory.d.ts.map +1 -0
- package/dist/core/mcp/client-factory.js +200 -0
- package/dist/core/mcp/client-factory.js.map +1 -0
- package/dist/core/mcp/config-loader.d.ts +9 -0
- package/dist/core/mcp/config-loader.d.ts.map +1 -0
- package/dist/core/mcp/config-loader.js +104 -0
- package/dist/core/mcp/config-loader.js.map +1 -0
- package/dist/core/mcp/config-writer.d.ts +21 -0
- package/dist/core/mcp/config-writer.d.ts.map +1 -0
- package/dist/core/mcp/config-writer.js +124 -0
- package/dist/core/mcp/config-writer.js.map +1 -0
- package/dist/core/mcp/config.d.ts +32 -0
- package/dist/core/mcp/config.d.ts.map +1 -0
- package/dist/core/mcp/config.js +385 -0
- package/dist/core/mcp/config.js.map +1 -0
- package/dist/core/mcp/direct-tools.d.ts +11 -0
- package/dist/core/mcp/direct-tools.d.ts.map +1 -0
- package/dist/core/mcp/direct-tools.js +47 -0
- package/dist/core/mcp/direct-tools.js.map +1 -0
- package/dist/core/mcp/gateway-tool.d.ts +29 -0
- package/dist/core/mcp/gateway-tool.d.ts.map +1 -0
- package/dist/core/mcp/gateway-tool.js +108 -0
- package/dist/core/mcp/gateway-tool.js.map +1 -0
- package/dist/core/mcp/index.d.ts +19 -0
- package/dist/core/mcp/index.d.ts.map +1 -0
- package/dist/core/mcp/index.js +18 -0
- package/dist/core/mcp/index.js.map +1 -0
- package/dist/core/mcp/manager.d.ts +117 -0
- package/dist/core/mcp/manager.d.ts.map +1 -0
- package/dist/core/mcp/manager.js +819 -0
- package/dist/core/mcp/manager.js.map +1 -0
- package/dist/core/mcp/metadata-cache.d.ts +27 -0
- package/dist/core/mcp/metadata-cache.d.ts.map +1 -0
- package/dist/core/mcp/metadata-cache.js +152 -0
- package/dist/core/mcp/metadata-cache.js.map +1 -0
- package/dist/core/mcp/oauth-flow.d.ts +94 -0
- package/dist/core/mcp/oauth-flow.d.ts.map +1 -0
- package/dist/core/mcp/oauth-flow.js +473 -0
- package/dist/core/mcp/oauth-flow.js.map +1 -0
- package/dist/core/mcp/oauth-provider.d.ts +39 -0
- package/dist/core/mcp/oauth-provider.d.ts.map +1 -0
- package/dist/core/mcp/oauth-provider.js +149 -0
- package/dist/core/mcp/oauth-provider.js.map +1 -0
- package/dist/core/mcp/oauth-store.d.ts +27 -0
- package/dist/core/mcp/oauth-store.d.ts.map +1 -0
- package/dist/core/mcp/oauth-store.js +111 -0
- package/dist/core/mcp/oauth-store.js.map +1 -0
- package/dist/core/mcp/output-store.d.ts +55 -0
- package/dist/core/mcp/output-store.d.ts.map +1 -0
- package/dist/core/mcp/output-store.js +206 -0
- package/dist/core/mcp/output-store.js.map +1 -0
- package/dist/core/mcp/rpc.d.ts +13 -0
- package/dist/core/mcp/rpc.d.ts.map +1 -0
- package/dist/core/mcp/rpc.js +29 -0
- package/dist/core/mcp/rpc.js.map +1 -0
- package/dist/core/mcp/safety.d.ts +6 -0
- package/dist/core/mcp/safety.d.ts.map +1 -0
- package/dist/core/mcp/safety.js +65 -0
- package/dist/core/mcp/safety.js.map +1 -0
- package/dist/core/mcp/search.d.ts +8 -0
- package/dist/core/mcp/search.d.ts.map +1 -0
- package/dist/core/mcp/search.js +85 -0
- package/dist/core/mcp/search.js.map +1 -0
- package/dist/core/mcp/server-supervisor.d.ts +59 -0
- package/dist/core/mcp/server-supervisor.d.ts.map +1 -0
- package/dist/core/mcp/server-supervisor.js +331 -0
- package/dist/core/mcp/server-supervisor.js.map +1 -0
- package/dist/core/mcp/types.d.ts +321 -0
- package/dist/core/mcp/types.d.ts.map +1 -0
- package/dist/core/mcp/types.js +2 -0
- package/dist/core/mcp/types.js.map +1 -0
- package/dist/core/messages.d.ts +78 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +138 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/model-catalog-watcher.d.ts +36 -0
- package/dist/core/model-catalog-watcher.d.ts.map +1 -0
- package/dist/core/model-catalog-watcher.js +101 -0
- package/dist/core/model-catalog-watcher.js.map +1 -0
- package/dist/core/model-registry.d.ts +160 -0
- package/dist/core/model-registry.d.ts.map +1 -0
- package/dist/core/model-registry.js +754 -0
- package/dist/core/model-registry.js.map +1 -0
- package/dist/core/model-resolver.d.ts +111 -0
- package/dist/core/model-resolver.d.ts.map +1 -0
- package/dist/core/model-resolver.js +534 -0
- package/dist/core/model-resolver.js.map +1 -0
- package/dist/core/output-guard.d.ts +7 -0
- package/dist/core/output-guard.d.ts.map +1 -0
- package/dist/core/output-guard.js +89 -0
- package/dist/core/output-guard.js.map +1 -0
- package/dist/core/package-manager.d.ts +220 -0
- package/dist/core/package-manager.d.ts.map +1 -0
- package/dist/core/package-manager.js +2217 -0
- package/dist/core/package-manager.js.map +1 -0
- package/dist/core/project-trust.d.ts +15 -0
- package/dist/core/project-trust.d.ts.map +1 -0
- package/dist/core/project-trust.js +58 -0
- package/dist/core/project-trust.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +53 -0
- package/dist/core/prompt-templates.d.ts.map +1 -0
- package/dist/core/prompt-templates.js +236 -0
- package/dist/core/prompt-templates.js.map +1 -0
- package/dist/core/provider-attribution.d.ts +4 -0
- package/dist/core/provider-attribution.d.ts.map +1 -0
- package/dist/core/provider-attribution.js +81 -0
- package/dist/core/provider-attribution.js.map +1 -0
- package/dist/core/provider-display-names.d.ts +2 -0
- package/dist/core/provider-display-names.d.ts.map +1 -0
- package/dist/core/provider-display-names.js +36 -0
- package/dist/core/provider-display-names.js.map +1 -0
- package/dist/core/remote/iroh/access-grant.d.ts +40 -0
- package/dist/core/remote/iroh/access-grant.d.ts.map +1 -0
- package/dist/core/remote/iroh/access-grant.js +199 -0
- package/dist/core/remote/iroh/access-grant.js.map +1 -0
- package/dist/core/remote/iroh/active-stream-registry.d.ts +39 -0
- package/dist/core/remote/iroh/active-stream-registry.d.ts.map +1 -0
- package/dist/core/remote/iroh/active-stream-registry.js +109 -0
- package/dist/core/remote/iroh/active-stream-registry.js.map +1 -0
- package/dist/core/remote/iroh/audit.d.ts +67 -0
- package/dist/core/remote/iroh/audit.d.ts.map +1 -0
- package/dist/core/remote/iroh/audit.js +274 -0
- package/dist/core/remote/iroh/audit.js.map +1 -0
- package/dist/core/remote/iroh/authorization.d.ts +46 -0
- package/dist/core/remote/iroh/authorization.d.ts.map +1 -0
- package/dist/core/remote/iroh/authorization.js +327 -0
- package/dist/core/remote/iroh/authorization.js.map +1 -0
- package/dist/core/remote/iroh/control.d.ts +64 -0
- package/dist/core/remote/iroh/control.d.ts.map +1 -0
- package/dist/core/remote/iroh/control.js +326 -0
- package/dist/core/remote/iroh/control.js.map +1 -0
- package/dist/core/remote/iroh/device-log-rpc.d.ts +22 -0
- package/dist/core/remote/iroh/device-log-rpc.d.ts.map +1 -0
- package/dist/core/remote/iroh/device-log-rpc.js +152 -0
- package/dist/core/remote/iroh/device-log-rpc.js.map +1 -0
- package/dist/core/remote/iroh/engine.d.ts +148 -0
- package/dist/core/remote/iroh/engine.d.ts.map +1 -0
- package/dist/core/remote/iroh/engine.js +499 -0
- package/dist/core/remote/iroh/engine.js.map +1 -0
- package/dist/core/remote/iroh/handshake-reader.d.ts +19 -0
- package/dist/core/remote/iroh/handshake-reader.d.ts.map +1 -0
- package/dist/core/remote/iroh/handshake-reader.js +91 -0
- package/dist/core/remote/iroh/handshake-reader.js.map +1 -0
- package/dist/core/remote/iroh/handshake.d.ts +119 -0
- package/dist/core/remote/iroh/handshake.d.ts.map +1 -0
- package/dist/core/remote/iroh/handshake.js +621 -0
- package/dist/core/remote/iroh/handshake.js.map +1 -0
- package/dist/core/remote/iroh/host-policy.d.ts +13 -0
- package/dist/core/remote/iroh/host-policy.d.ts.map +1 -0
- package/dist/core/remote/iroh/host-policy.js +15 -0
- package/dist/core/remote/iroh/host-policy.js.map +1 -0
- package/dist/core/remote/iroh/index.d.ts +25 -0
- package/dist/core/remote/iroh/index.d.ts.map +1 -0
- package/dist/core/remote/iroh/index.js +25 -0
- package/dist/core/remote/iroh/index.js.map +1 -0
- package/dist/core/remote/iroh/metadata.d.ts +28 -0
- package/dist/core/remote/iroh/metadata.d.ts.map +1 -0
- package/dist/core/remote/iroh/metadata.js +16 -0
- package/dist/core/remote/iroh/metadata.js.map +1 -0
- package/dist/core/remote/iroh/outbound-filter.d.ts +29 -0
- package/dist/core/remote/iroh/outbound-filter.d.ts.map +1 -0
- package/dist/core/remote/iroh/outbound-filter.js +692 -0
- package/dist/core/remote/iroh/outbound-filter.js.map +1 -0
- package/dist/core/remote/iroh/protocol.d.ts +60 -0
- package/dist/core/remote/iroh/protocol.d.ts.map +1 -0
- package/dist/core/remote/iroh/protocol.js +204 -0
- package/dist/core/remote/iroh/protocol.js.map +1 -0
- package/dist/core/remote/iroh/push.d.ts +179 -0
- package/dist/core/remote/iroh/push.d.ts.map +1 -0
- package/dist/core/remote/iroh/push.js +662 -0
- package/dist/core/remote/iroh/push.js.map +1 -0
- package/dist/core/remote/iroh/qr.d.ts +12 -0
- package/dist/core/remote/iroh/qr.d.ts.map +1 -0
- package/dist/core/remote/iroh/qr.js +27 -0
- package/dist/core/remote/iroh/qr.js.map +1 -0
- package/dist/core/remote/iroh/rpc-command-filter.d.ts +47 -0
- package/dist/core/remote/iroh/rpc-command-filter.d.ts.map +1 -0
- package/dist/core/remote/iroh/rpc-command-filter.js +188 -0
- package/dist/core/remote/iroh/rpc-command-filter.js.map +1 -0
- package/dist/core/remote/iroh/rpc-transport.d.ts +21 -0
- package/dist/core/remote/iroh/rpc-transport.d.ts.map +1 -0
- package/dist/core/remote/iroh/rpc-transport.js +106 -0
- package/dist/core/remote/iroh/rpc-transport.js.map +1 -0
- package/dist/core/remote/iroh/state-manager.d.ts +141 -0
- package/dist/core/remote/iroh/state-manager.d.ts.map +1 -0
- package/dist/core/remote/iroh/state-manager.js +744 -0
- package/dist/core/remote/iroh/state-manager.js.map +1 -0
- package/dist/core/remote/iroh/state.d.ts +141 -0
- package/dist/core/remote/iroh/state.d.ts.map +1 -0
- package/dist/core/remote/iroh/state.js +433 -0
- package/dist/core/remote/iroh/state.js.map +1 -0
- package/dist/core/remote/iroh/ticket.d.ts +46 -0
- package/dist/core/remote/iroh/ticket.d.ts.map +1 -0
- package/dist/core/remote/iroh/ticket.js +267 -0
- package/dist/core/remote/iroh/ticket.js.map +1 -0
- package/dist/core/remote/iroh/transcript-text.d.ts +8 -0
- package/dist/core/remote/iroh/transcript-text.d.ts.map +1 -0
- package/dist/core/remote/iroh/transcript-text.js +26 -0
- package/dist/core/remote/iroh/transcript-text.js.map +1 -0
- package/dist/core/remote/iroh/workspace-rpc.d.ts +31 -0
- package/dist/core/remote/iroh/workspace-rpc.d.ts.map +1 -0
- package/dist/core/remote/iroh/workspace-rpc.js +73 -0
- package/dist/core/remote/iroh/workspace-rpc.js.map +1 -0
- package/dist/core/remote/iroh/workspace.d.ts +16 -0
- package/dist/core/remote/iroh/workspace.d.ts.map +1 -0
- package/dist/core/remote/iroh/workspace.js +104 -0
- package/dist/core/remote/iroh/workspace.js.map +1 -0
- package/dist/core/remote/iroh/worktree-rpc.d.ts +83 -0
- package/dist/core/remote/iroh/worktree-rpc.d.ts.map +1 -0
- package/dist/core/remote/iroh/worktree-rpc.js +148 -0
- package/dist/core/remote/iroh/worktree-rpc.js.map +1 -0
- package/dist/core/resolve-config-value.d.ts +30 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -0
- package/dist/core/resolve-config-value.js +245 -0
- package/dist/core/resolve-config-value.js.map +1 -0
- package/dist/core/resource-loader.d.ts +214 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +824 -0
- package/dist/core/resource-loader.js.map +1 -0
- package/dist/core/review.d.ts +318 -0
- package/dist/core/review.d.ts.map +1 -0
- package/dist/core/review.js +1271 -0
- package/dist/core/review.js.map +1 -0
- package/dist/core/rpc/duplex-write-gate.d.ts +29 -0
- package/dist/core/rpc/duplex-write-gate.d.ts.map +1 -0
- package/dist/core/rpc/duplex-write-gate.js +124 -0
- package/dist/core/rpc/duplex-write-gate.js.map +1 -0
- package/dist/core/rpc/index.d.ts +6 -0
- package/dist/core/rpc/index.d.ts.map +1 -0
- package/dist/core/rpc/index.js +5 -0
- package/dist/core/rpc/index.js.map +1 -0
- package/dist/core/rpc/iroh-transport.d.ts +58 -0
- package/dist/core/rpc/iroh-transport.d.ts.map +1 -0
- package/dist/core/rpc/iroh-transport.js +278 -0
- package/dist/core/rpc/iroh-transport.js.map +1 -0
- package/dist/core/rpc/jsonl.d.ts +17 -0
- package/dist/core/rpc/jsonl.d.ts.map +1 -0
- package/dist/core/rpc/jsonl.js +49 -0
- package/dist/core/rpc/jsonl.js.map +1 -0
- package/dist/core/rpc/loopback-transport.d.ts +14 -0
- package/dist/core/rpc/loopback-transport.d.ts.map +1 -0
- package/dist/core/rpc/loopback-transport.js +120 -0
- package/dist/core/rpc/loopback-transport.js.map +1 -0
- package/dist/core/rpc/transcript.d.ts +37 -0
- package/dist/core/rpc/transcript.d.ts.map +1 -0
- package/dist/core/rpc/transcript.js +624 -0
- package/dist/core/rpc/transcript.js.map +1 -0
- package/dist/core/rpc/transport.d.ts +41 -0
- package/dist/core/rpc/transport.d.ts.map +1 -0
- package/dist/core/rpc/transport.js +155 -0
- package/dist/core/rpc/transport.js.map +1 -0
- package/dist/core/rpc/types.d.ts +1254 -0
- package/dist/core/rpc/types.d.ts.map +1 -0
- package/dist/core/rpc/types.js +8 -0
- package/dist/core/rpc/types.js.map +1 -0
- package/dist/core/rpc/ui-action-args.d.ts +3 -0
- package/dist/core/rpc/ui-action-args.d.ts.map +1 -0
- package/dist/core/rpc/ui-action-args.js +66 -0
- package/dist/core/rpc/ui-action-args.js.map +1 -0
- package/dist/core/rpc/ui-actions.d.ts +43 -0
- package/dist/core/rpc/ui-actions.d.ts.map +1 -0
- package/dist/core/rpc/ui-actions.js +362 -0
- package/dist/core/rpc/ui-actions.js.map +1 -0
- package/dist/core/sdk.d.ts +138 -0
- package/dist/core/sdk.d.ts.map +1 -0
- package/dist/core/sdk.js +324 -0
- package/dist/core/sdk.js.map +1 -0
- package/dist/core/session-cwd.d.ts +19 -0
- package/dist/core/session-cwd.d.ts.map +1 -0
- package/dist/core/session-cwd.js +38 -0
- package/dist/core/session-cwd.js.map +1 -0
- package/dist/core/session-manager.d.ts +346 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +1280 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/settings-manager.d.ts +359 -0
- package/dist/core/settings-manager.d.ts.map +1 -0
- package/dist/core/settings-manager.js +1277 -0
- package/dist/core/settings-manager.js.map +1 -0
- package/dist/core/skills.d.ts +60 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +387 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/slash-commands.d.ts +14 -0
- package/dist/core/slash-commands.d.ts.map +1 -0
- package/dist/core/slash-commands.js +51 -0
- package/dist/core/slash-commands.js.map +1 -0
- package/dist/core/source-info.d.ts +18 -0
- package/dist/core/source-info.d.ts.map +1 -0
- package/dist/core/source-info.js +19 -0
- package/dist/core/source-info.js.map +1 -0
- package/dist/core/subagents/delegation-scope.d.ts +47 -0
- package/dist/core/subagents/delegation-scope.d.ts.map +1 -0
- package/dist/core/subagents/delegation-scope.js +134 -0
- package/dist/core/subagents/delegation-scope.js.map +1 -0
- package/dist/core/subagents/index.d.ts +46 -0
- package/dist/core/subagents/index.d.ts.map +1 -0
- package/dist/core/subagents/index.js +369 -0
- package/dist/core/subagents/index.js.map +1 -0
- package/dist/core/subagents/manager.d.ts +183 -0
- package/dist/core/subagents/manager.d.ts.map +1 -0
- package/dist/core/subagents/manager.js +820 -0
- package/dist/core/subagents/manager.js.map +1 -0
- package/dist/core/system-prompt.d.ts +28 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +180 -0
- package/dist/core/system-prompt.js.map +1 -0
- package/dist/core/telemetry.d.ts +3 -0
- package/dist/core/telemetry.d.ts.map +1 -0
- package/dist/core/telemetry.js +9 -0
- package/dist/core/telemetry.js.map +1 -0
- package/dist/core/theme/dark.json +86 -0
- package/dist/core/theme/discovery.d.ts +48 -0
- package/dist/core/theme/discovery.d.ts.map +1 -0
- package/dist/core/theme/discovery.js +239 -0
- package/dist/core/theme/discovery.js.map +1 -0
- package/dist/core/theme/index.d.ts +6 -0
- package/dist/core/theme/index.d.ts.map +1 -0
- package/dist/core/theme/index.js +5 -0
- package/dist/core/theme/index.js.map +1 -0
- package/dist/core/theme/light.json +85 -0
- package/dist/core/theme/runtime.d.ts +55 -0
- package/dist/core/theme/runtime.d.ts.map +1 -0
- package/dist/core/theme/runtime.js +555 -0
- package/dist/core/theme/runtime.js.map +1 -0
- package/dist/core/theme/theme-schema.json +335 -0
- package/dist/core/theme/theme-service.d.ts +37 -0
- package/dist/core/theme/theme-service.d.ts.map +1 -0
- package/dist/core/theme/theme-service.js +222 -0
- package/dist/core/theme/theme-service.js.map +1 -0
- package/dist/core/theme/theme.d.ts +100 -0
- package/dist/core/theme/theme.d.ts.map +1 -0
- package/dist/core/theme/theme.js +243 -0
- package/dist/core/theme/theme.js.map +1 -0
- package/dist/core/theme/tokens.d.ts +20 -0
- package/dist/core/theme/tokens.d.ts.map +1 -0
- package/dist/core/theme/tokens.js +178 -0
- package/dist/core/theme/tokens.js.map +1 -0
- package/dist/core/theme/types.d.ts +21 -0
- package/dist/core/theme/types.d.ts.map +1 -0
- package/dist/core/theme/types.js +2 -0
- package/dist/core/theme/types.js.map +1 -0
- package/dist/core/timings.d.ts +8 -0
- package/dist/core/timings.d.ts.map +1 -0
- package/dist/core/timings.js +31 -0
- package/dist/core/timings.js.map +1 -0
- package/dist/core/tools/bash.d.ts +68 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +345 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/diagnostics-provider.d.ts +12 -0
- package/dist/core/tools/diagnostics-provider.d.ts.map +1 -0
- package/dist/core/tools/diagnostics-provider.js +2 -0
- package/dist/core/tools/diagnostics-provider.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +77 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -0
- package/dist/core/tools/edit-diff.js +506 -0
- package/dist/core/tools/edit-diff.js.map +1 -0
- package/dist/core/tools/edit.d.ts +56 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +300 -0
- package/dist/core/tools/edit.js.map +1 -0
- package/dist/core/tools/file-mutation-queue.d.ts +6 -0
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
- package/dist/core/tools/file-mutation-queue.js +52 -0
- package/dist/core/tools/file-mutation-queue.js.map +1 -0
- package/dist/core/tools/find.d.ts +35 -0
- package/dist/core/tools/find.d.ts.map +1 -0
- package/dist/core/tools/find.js +337 -0
- package/dist/core/tools/find.js.map +1 -0
- package/dist/core/tools/grep.d.ts +37 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +305 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/index.d.ts +56 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +174 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/ls.d.ts +37 -0
- package/dist/core/tools/ls.d.ts.map +1 -0
- package/dist/core/tools/ls.js +167 -0
- package/dist/core/tools/ls.js.map +1 -0
- package/dist/core/tools/lsp.d.ts +59 -0
- package/dist/core/tools/lsp.d.ts.map +1 -0
- package/dist/core/tools/lsp.js +157 -0
- package/dist/core/tools/lsp.js.map +1 -0
- package/dist/core/tools/output-accumulator.d.ts +52 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -0
- package/dist/core/tools/output-accumulator.js +184 -0
- package/dist/core/tools/output-accumulator.js.map +1 -0
- package/dist/core/tools/path-utils.d.ts +10 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -0
- package/dist/core/tools/path-utils.js +99 -0
- package/dist/core/tools/path-utils.js.map +1 -0
- package/dist/core/tools/read.d.ts +35 -0
- package/dist/core/tools/read.d.ts.map +1 -0
- package/dist/core/tools/read.js +292 -0
- package/dist/core/tools/read.js.map +1 -0
- package/dist/core/tools/render-utils.d.ts +26 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -0
- package/dist/core/tools/render-utils.js +69 -0
- package/dist/core/tools/render-utils.js.map +1 -0
- package/dist/core/tools/subagent.d.ts +219 -0
- package/dist/core/tools/subagent.d.ts.map +1 -0
- package/dist/core/tools/subagent.js +1445 -0
- package/dist/core/tools/subagent.js.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.js +34 -0
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
- package/dist/core/tools/truncate.d.ts +70 -0
- package/dist/core/tools/truncate.d.ts.map +1 -0
- package/dist/core/tools/truncate.js +215 -0
- package/dist/core/tools/truncate.js.map +1 -0
- package/dist/core/tools/web-search.d.ts +69 -0
- package/dist/core/tools/web-search.d.ts.map +1 -0
- package/dist/core/tools/web-search.js +634 -0
- package/dist/core/tools/web-search.js.map +1 -0
- package/dist/core/tools/write.d.ts +33 -0
- package/dist/core/tools/write.d.ts.map +1 -0
- package/dist/core/tools/write.js +210 -0
- package/dist/core/tools/write.js.map +1 -0
- package/dist/core/trust-manager.d.ts +36 -0
- package/dist/core/trust-manager.d.ts.map +1 -0
- package/dist/core/trust-manager.js +220 -0
- package/dist/core/trust-manager.js.map +1 -0
- package/dist/daemon/cli.d.ts +8 -0
- package/dist/daemon/cli.d.ts.map +1 -0
- package/dist/daemon/cli.js +468 -0
- package/dist/daemon/cli.js.map +1 -0
- package/dist/daemon/control-client.d.ts +60 -0
- package/dist/daemon/control-client.d.ts.map +1 -0
- package/dist/daemon/control-client.js +411 -0
- package/dist/daemon/control-client.js.map +1 -0
- package/dist/daemon/control-protocol.d.ts +507 -0
- package/dist/daemon/control-protocol.d.ts.map +1 -0
- package/dist/daemon/control-protocol.js +395 -0
- package/dist/daemon/control-protocol.js.map +1 -0
- package/dist/daemon/control-server.d.ts +77 -0
- package/dist/daemon/control-server.d.ts.map +1 -0
- package/dist/daemon/control-server.js +327 -0
- package/dist/daemon/control-server.js.map +1 -0
- package/dist/daemon/conversation-commands.d.ts +176 -0
- package/dist/daemon/conversation-commands.d.ts.map +1 -0
- package/dist/daemon/conversation-commands.js +1268 -0
- package/dist/daemon/conversation-commands.js.map +1 -0
- package/dist/daemon/daemon-lock.d.ts +27 -0
- package/dist/daemon/daemon-lock.d.ts.map +1 -0
- package/dist/daemon/daemon-lock.js +238 -0
- package/dist/daemon/daemon-lock.js.map +1 -0
- package/dist/daemon/handshake-responses.d.ts +47 -0
- package/dist/daemon/handshake-responses.d.ts.map +1 -0
- package/dist/daemon/handshake-responses.js +113 -0
- package/dist/daemon/handshake-responses.js.map +1 -0
- package/dist/daemon/integrated-runtimes.d.ts +137 -0
- package/dist/daemon/integrated-runtimes.d.ts.map +1 -0
- package/dist/daemon/integrated-runtimes.js +763 -0
- package/dist/daemon/integrated-runtimes.js.map +1 -0
- package/dist/daemon/iroh-native.d.ts +76 -0
- package/dist/daemon/iroh-native.d.ts.map +1 -0
- package/dist/daemon/iroh-native.js +18 -0
- package/dist/daemon/iroh-native.js.map +1 -0
- package/dist/daemon/iroh-resource-guard.d.ts +57 -0
- package/dist/daemon/iroh-resource-guard.d.ts.map +1 -0
- package/dist/daemon/iroh-resource-guard.js +134 -0
- package/dist/daemon/iroh-resource-guard.js.map +1 -0
- package/dist/daemon/iroh-service.d.ts +51 -0
- package/dist/daemon/iroh-service.d.ts.map +1 -0
- package/dist/daemon/iroh-service.js +2604 -0
- package/dist/daemon/iroh-service.js.map +1 -0
- package/dist/daemon/keep-awake.d.ts +62 -0
- package/dist/daemon/keep-awake.d.ts.map +1 -0
- package/dist/daemon/keep-awake.js +190 -0
- package/dist/daemon/keep-awake.js.map +1 -0
- package/dist/daemon/lease-broker.d.ts +139 -0
- package/dist/daemon/lease-broker.d.ts.map +1 -0
- package/dist/daemon/lease-broker.js +504 -0
- package/dist/daemon/lease-broker.js.map +1 -0
- package/dist/daemon/log.d.ts +16 -0
- package/dist/daemon/log.d.ts.map +1 -0
- package/dist/daemon/log.js +40 -0
- package/dist/daemon/log.js.map +1 -0
- package/dist/daemon/main.d.ts +70 -0
- package/dist/daemon/main.d.ts.map +1 -0
- package/dist/daemon/main.js +781 -0
- package/dist/daemon/main.js.map +1 -0
- package/dist/daemon/paths.d.ts +32 -0
- package/dist/daemon/paths.d.ts.map +1 -0
- package/dist/daemon/paths.js +208 -0
- package/dist/daemon/paths.js.map +1 -0
- package/dist/daemon/process-identity.d.ts +58 -0
- package/dist/daemon/process-identity.d.ts.map +1 -0
- package/dist/daemon/process-identity.js +185 -0
- package/dist/daemon/process-identity.js.map +1 -0
- package/dist/daemon/relay-stream.d.ts +89 -0
- package/dist/daemon/relay-stream.d.ts.map +1 -0
- package/dist/daemon/relay-stream.js +202 -0
- package/dist/daemon/relay-stream.js.map +1 -0
- package/dist/daemon/remote-cli.d.ts +7 -0
- package/dist/daemon/remote-cli.d.ts.map +1 -0
- package/dist/daemon/remote-cli.js +774 -0
- package/dist/daemon/remote-cli.js.map +1 -0
- package/dist/daemon/service-install.d.ts +43 -0
- package/dist/daemon/service-install.d.ts.map +1 -0
- package/dist/daemon/service-install.js +198 -0
- package/dist/daemon/service-install.js.map +1 -0
- package/dist/daemon/session-target.d.ts +62 -0
- package/dist/daemon/session-target.d.ts.map +1 -0
- package/dist/daemon/session-target.js +66 -0
- package/dist/daemon/session-target.js.map +1 -0
- package/dist/daemon/spawn.d.ts +53 -0
- package/dist/daemon/spawn.d.ts.map +1 -0
- package/dist/daemon/spawn.js +205 -0
- package/dist/daemon/spawn.js.map +1 -0
- package/dist/daemon/state.d.ts +145 -0
- package/dist/daemon/state.d.ts.map +1 -0
- package/dist/daemon/state.js +454 -0
- package/dist/daemon/state.js.map +1 -0
- package/dist/daemon/theme-push.d.ts +23 -0
- package/dist/daemon/theme-push.d.ts.map +1 -0
- package/dist/daemon/theme-push.js +30 -0
- package/dist/daemon/theme-push.js.map +1 -0
- package/dist/daemon/viewer-feed.d.ts +42 -0
- package/dist/daemon/viewer-feed.d.ts.map +1 -0
- package/dist/daemon/viewer-feed.js +138 -0
- package/dist/daemon/viewer-feed.js.map +1 -0
- package/dist/daemon/workspace-directory.d.ts +35 -0
- package/dist/daemon/workspace-directory.d.ts.map +1 -0
- package/dist/daemon/workspace-directory.js +105 -0
- package/dist/daemon/workspace-directory.js.map +1 -0
- package/dist/daemon/workspace-streams.d.ts +70 -0
- package/dist/daemon/workspace-streams.d.ts.map +1 -0
- package/dist/daemon/workspace-streams.js +289 -0
- package/dist/daemon/workspace-streams.js.map +1 -0
- package/dist/daemon/worktree-manager.d.ts +219 -0
- package/dist/daemon/worktree-manager.d.ts.map +1 -0
- package/dist/daemon/worktree-manager.js +1204 -0
- package/dist/daemon/worktree-manager.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +12 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +773 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp-cli.d.ts +6 -0
- package/dist/mcp-cli.d.ts.map +1 -0
- package/dist/mcp-cli.js +347 -0
- package/dist/mcp-cli.js.map +1 -0
- package/dist/migrations.d.ts +33 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +281 -0
- package/dist/migrations.js.map +1 -0
- package/dist/modes/index.d.ts +13 -0
- package/dist/modes/index.d.ts.map +1 -0
- package/dist/modes/index.js +12 -0
- package/dist/modes/index.js.map +1 -0
- package/dist/modes/interactive/components/armin.d.ts +34 -0
- package/dist/modes/interactive/components/armin.d.ts.map +1 -0
- package/dist/modes/interactive/components/armin.js +333 -0
- package/dist/modes/interactive/components/armin.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +22 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/assistant-message.js +129 -0
- package/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +39 -0
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/bash-execution.js +212 -0
- package/dist/modes/interactive/components/bash-execution.js.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts +17 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.js +57 -0
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.js +44 -0
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts +71 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector.js +510 -0
- package/dist/modes/interactive/components/config-selector.js.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.js +33 -0
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
- package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-editor.js +70 -0
- package/dist/modes/interactive/components/custom-editor.js.map +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +20 -0
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-message.js +76 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -0
- package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
- package/dist/modes/interactive/components/daxnuts.js +140 -0
- package/dist/modes/interactive/components/daxnuts.js.map +1 -0
- package/dist/modes/interactive/components/diff.d.ts +12 -0
- package/dist/modes/interactive/components/diff.d.ts.map +1 -0
- package/dist/modes/interactive/components/diff.js +133 -0
- package/dist/modes/interactive/components/diff.js.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.js +21 -0
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-editor.js +116 -0
- package/dist/modes/interactive/components/extension-editor.js.map +1 -0
- package/dist/modes/interactive/components/extension-input.d.ts +23 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-input.js +61 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -0
- package/dist/modes/interactive/components/extension-selector.d.ts +27 -0
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-selector.js +98 -0
- package/dist/modes/interactive/components/extension-selector.js.map +1 -0
- package/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
- package/dist/modes/interactive/components/first-time-setup.js +103 -0
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +27 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/dist/modes/interactive/components/footer.js +180 -0
- package/dist/modes/interactive/components/footer.js.map +1 -0
- package/dist/modes/interactive/components/hotkeys.d.ts +24 -0
- package/dist/modes/interactive/components/hotkeys.d.ts.map +1 -0
- package/dist/modes/interactive/components/hotkeys.js +97 -0
- package/dist/modes/interactive/components/hotkeys.js.map +1 -0
- package/dist/modes/interactive/components/index.d.ts +35 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -0
- package/dist/modes/interactive/components/index.js +36 -0
- package/dist/modes/interactive/components/index.js.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts +19 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.js +48 -0
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
- package/dist/modes/interactive/components/login-dialog.d.ts +52 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
- package/dist/modes/interactive/components/login-dialog.js +179 -0
- package/dist/modes/interactive/components/login-dialog.js.map +1 -0
- package/dist/modes/interactive/components/logo.d.ts +25 -0
- package/dist/modes/interactive/components/logo.d.ts.map +1 -0
- package/dist/modes/interactive/components/logo.js +89 -0
- package/dist/modes/interactive/components/logo.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +47 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/model-selector.js +278 -0
- package/dist/modes/interactive/components/model-selector.js.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts +31 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.js +165 -0
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
- package/dist/modes/interactive/components/remote-control-center.d.ts +110 -0
- package/dist/modes/interactive/components/remote-control-center.d.ts.map +1 -0
- package/dist/modes/interactive/components/remote-control-center.js +1217 -0
- package/dist/modes/interactive/components/remote-control-center.js.map +1 -0
- package/dist/modes/interactive/components/review-tools-selector.d.ts +24 -0
- package/dist/modes/interactive/components/review-tools-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/review-tools-selector.js +93 -0
- package/dist/modes/interactive/components/review-tools-selector.js.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +290 -0
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.js +155 -0
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +95 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector.js +856 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +77 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector.js +484 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.js +39 -0
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
- package/dist/modes/interactive/components/streaming-render-coalescer.d.ts +29 -0
- package/dist/modes/interactive/components/streaming-render-coalescer.d.ts.map +1 -0
- package/dist/modes/interactive/components/streaming-render-coalescer.js +98 -0
- package/dist/modes/interactive/components/streaming-render-coalescer.js.map +1 -0
- package/dist/modes/interactive/components/subagent-inspector.d.ts +32 -0
- package/dist/modes/interactive/components/subagent-inspector.d.ts.map +1 -0
- package/dist/modes/interactive/components/subagent-inspector.js +439 -0
- package/dist/modes/interactive/components/subagent-inspector.js.map +1 -0
- package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/theme-selector.js +50 -0
- package/dist/modes/interactive/components/theme-selector.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.js +52 -0
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +83 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution.js +421 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +89 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector.js +1208 -0
- package/dist/modes/interactive/components/tree-selector.js.map +1 -0
- package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/trust-selector.js +91 -0
- package/dist/modes/interactive/components/trust-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.js +114 -0
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message.d.ts +9 -0
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message.js +42 -0
- package/dist/modes/interactive/components/user-message.js.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.js +33 -0
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
- package/dist/modes/interactive/components/volt-announcement.d.ts +5 -0
- package/dist/modes/interactive/components/volt-announcement.d.ts.map +1 -0
- package/dist/modes/interactive/components/volt-announcement.js +15 -0
- package/dist/modes/interactive/components/volt-announcement.js.map +1 -0
- package/dist/modes/interactive/daemon-attach.d.ts +154 -0
- package/dist/modes/interactive/daemon-attach.d.ts.map +1 -0
- package/dist/modes/interactive/daemon-attach.js +552 -0
- package/dist/modes/interactive/daemon-attach.js.map +1 -0
- package/dist/modes/interactive/drain-viewer.d.ts +31 -0
- package/dist/modes/interactive/drain-viewer.d.ts.map +1 -0
- package/dist/modes/interactive/drain-viewer.js +166 -0
- package/dist/modes/interactive/drain-viewer.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +502 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode.js +7007 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -0
- package/dist/modes/interactive/prompt-image-attachments.d.ts +34 -0
- package/dist/modes/interactive/prompt-image-attachments.d.ts.map +1 -0
- package/dist/modes/interactive/prompt-image-attachments.js +120 -0
- package/dist/modes/interactive/prompt-image-attachments.js.map +1 -0
- package/dist/modes/interactive/relay-stream-adapter.d.ts +19 -0
- package/dist/modes/interactive/relay-stream-adapter.d.ts.map +1 -0
- package/dist/modes/interactive/relay-stream-adapter.js +107 -0
- package/dist/modes/interactive/relay-stream-adapter.js.map +1 -0
- package/dist/modes/print-mode.d.ts +28 -0
- package/dist/modes/print-mode.d.ts.map +1 -0
- package/dist/modes/print-mode.js +132 -0
- package/dist/modes/print-mode.js.map +1 -0
- package/dist/modes/rpc/in-process-rpc-client.d.ts +31 -0
- package/dist/modes/rpc/in-process-rpc-client.d.ts.map +1 -0
- package/dist/modes/rpc/in-process-rpc-client.js +63 -0
- package/dist/modes/rpc/in-process-rpc-client.js.map +1 -0
- package/dist/modes/rpc/iroh-remote-agent-runtime.d.ts +61 -0
- package/dist/modes/rpc/iroh-remote-agent-runtime.d.ts.map +1 -0
- package/dist/modes/rpc/iroh-remote-agent-runtime.js +155 -0
- package/dist/modes/rpc/iroh-remote-agent-runtime.js.map +1 -0
- package/dist/modes/rpc/iroh-remote-rpc-mode.d.ts +69 -0
- package/dist/modes/rpc/iroh-remote-rpc-mode.d.ts.map +1 -0
- package/dist/modes/rpc/iroh-remote-rpc-mode.js +1223 -0
- package/dist/modes/rpc/iroh-remote-rpc-mode.js.map +1 -0
- package/dist/modes/rpc/jsonl.d.ts +2 -0
- package/dist/modes/rpc/jsonl.d.ts.map +1 -0
- package/dist/modes/rpc/jsonl.js +2 -0
- package/dist/modes/rpc/jsonl.js.map +1 -0
- package/dist/modes/rpc/rpc-client-base.d.ts +209 -0
- package/dist/modes/rpc/rpc-client-base.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client-base.js +530 -0
- package/dist/modes/rpc/rpc-client-base.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +50 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client.js +190 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -0
- package/dist/modes/rpc/rpc-command-dispatcher.d.ts +43 -0
- package/dist/modes/rpc/rpc-command-dispatcher.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-command-dispatcher.js +613 -0
- package/dist/modes/rpc/rpc-command-dispatcher.js.map +1 -0
- package/dist/modes/rpc/rpc-command-validation.d.ts +2 -0
- package/dist/modes/rpc/rpc-command-validation.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-command-validation.js +207 -0
- package/dist/modes/rpc/rpc-command-validation.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts +48 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-mode.js +1089 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-transport-client.d.ts +26 -0
- package/dist/modes/rpc/rpc-transport-client.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-transport-client.js +76 -0
- package/dist/modes/rpc/rpc-transport-client.js.map +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +2 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-types.js +2 -0
- package/dist/modes/rpc/rpc-types.js.map +1 -0
- package/dist/package-manager-cli.d.ts +28 -0
- package/dist/package-manager-cli.d.ts.map +1 -0
- package/dist/package-manager-cli.js +667 -0
- package/dist/package-manager-cli.js.map +1 -0
- package/dist/remote/integrated-runtime-retention.d.ts +17 -0
- package/dist/remote/integrated-runtime-retention.d.ts.map +1 -0
- package/dist/remote/integrated-runtime-retention.js +62 -0
- package/dist/remote/integrated-runtime-retention.js.map +1 -0
- package/dist/remote/iroh-native-adapter.cjs +19 -0
- package/dist/sea/cli.d.ts +4 -0
- package/dist/sea/cli.d.ts.map +1 -0
- package/dist/sea/cli.js +4 -0
- package/dist/sea/cli.js.map +1 -0
- package/dist/sea/register-bedrock.d.ts +2 -0
- package/dist/sea/register-bedrock.d.ts.map +1 -0
- package/dist/sea/register-bedrock.js +4 -0
- package/dist/sea/register-bedrock.js.map +1 -0
- package/dist/store/catalog.d.ts +57 -0
- package/dist/store/catalog.d.ts.map +1 -0
- package/dist/store/catalog.js +331 -0
- package/dist/store/catalog.js.map +1 -0
- package/dist/store/inspector.d.ts +36 -0
- package/dist/store/inspector.d.ts.map +1 -0
- package/dist/store/inspector.js +578 -0
- package/dist/store/inspector.js.map +1 -0
- package/dist/store/install-plan.d.ts +26 -0
- package/dist/store/install-plan.d.ts.map +1 -0
- package/dist/store/install-plan.js +80 -0
- package/dist/store/install-plan.js.map +1 -0
- package/dist/store/render.d.ts +11 -0
- package/dist/store/render.d.ts.map +1 -0
- package/dist/store/render.js +153 -0
- package/dist/store/render.js.map +1 -0
- package/dist/store/resolver.d.ts +22 -0
- package/dist/store/resolver.d.ts.map +1 -0
- package/dist/store/resolver.js +207 -0
- package/dist/store/resolver.js.map +1 -0
- package/dist/store/store-cli.d.ts +7 -0
- package/dist/store/store-cli.d.ts.map +1 -0
- package/dist/store/store-cli.js +636 -0
- package/dist/store/store-cli.js.map +1 -0
- package/dist/store/targets.d.ts +21 -0
- package/dist/store/targets.d.ts.map +1 -0
- package/dist/store/targets.js +55 -0
- package/dist/store/targets.js.map +1 -0
- package/dist/utils/ansi.d.ts +2 -0
- package/dist/utils/ansi.d.ts.map +1 -0
- package/dist/utils/ansi.js +52 -0
- package/dist/utils/ansi.js.map +1 -0
- package/dist/utils/changelog.d.ts +22 -0
- package/dist/utils/changelog.d.ts.map +1 -0
- package/dist/utils/changelog.js +165 -0
- package/dist/utils/changelog.js.map +1 -0
- package/dist/utils/child-process.d.ts +18 -0
- package/dist/utils/child-process.d.ts.map +1 -0
- package/dist/utils/child-process.js +106 -0
- package/dist/utils/child-process.js.map +1 -0
- package/dist/utils/clipboard-image.d.ts +11 -0
- package/dist/utils/clipboard-image.d.ts.map +1 -0
- package/dist/utils/clipboard-image.js +245 -0
- package/dist/utils/clipboard-image.js.map +1 -0
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +94 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/deprecation.d.ts +4 -0
- package/dist/utils/deprecation.d.ts.map +1 -0
- package/dist/utils/deprecation.js +13 -0
- package/dist/utils/deprecation.js.map +1 -0
- package/dist/utils/durable-atomic-write.d.ts +46 -0
- package/dist/utils/durable-atomic-write.d.ts.map +1 -0
- package/dist/utils/durable-atomic-write.js +104 -0
- package/dist/utils/durable-atomic-write.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +8 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +26 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/fs-watch.d.ts +5 -0
- package/dist/utils/fs-watch.d.ts.map +1 -0
- package/dist/utils/fs-watch.js +25 -0
- package/dist/utils/fs-watch.js.map +1 -0
- package/dist/utils/git.d.ts +26 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +195 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/html.d.ts +7 -0
- package/dist/utils/html.d.ts.map +1 -0
- package/dist/utils/html.js +40 -0
- package/dist/utils/html.js.map +1 -0
- package/dist/utils/ignore-files.d.ts +5 -0
- package/dist/utils/ignore-files.d.ts.map +1 -0
- package/dist/utils/ignore-files.js +58 -0
- package/dist/utils/ignore-files.js.map +1 -0
- package/dist/utils/image-codec.d.ts +22 -0
- package/dist/utils/image-codec.d.ts.map +1 -0
- package/dist/utils/image-codec.js +35 -0
- package/dist/utils/image-codec.js.map +1 -0
- package/dist/utils/image-convert.d.ts +9 -0
- package/dist/utils/image-convert.d.ts.map +1 -0
- package/dist/utils/image-convert.js +26 -0
- package/dist/utils/image-convert.js.map +1 -0
- package/dist/utils/image-resize-core.d.ts +31 -0
- package/dist/utils/image-resize-core.d.ts.map +1 -0
- package/dist/utils/image-resize-core.js +181 -0
- package/dist/utils/image-resize-core.js.map +1 -0
- package/dist/utils/image-resize-worker.d.ts +2 -0
- package/dist/utils/image-resize-worker.d.ts.map +1 -0
- package/dist/utils/image-resize-worker.js +31 -0
- package/dist/utils/image-resize-worker.js.map +1 -0
- package/dist/utils/image-resize.d.ts +15 -0
- package/dist/utils/image-resize.d.ts.map +1 -0
- package/dist/utils/image-resize.js +92 -0
- package/dist/utils/image-resize.js.map +1 -0
- package/dist/utils/json.d.ts +3 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +7 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/mime.d.ts +3 -0
- package/dist/utils/mime.d.ts.map +1 -0
- package/dist/utils/mime.js +69 -0
- package/dist/utils/mime.js.map +1 -0
- package/dist/utils/npm-spec.d.ts +9 -0
- package/dist/utils/npm-spec.d.ts.map +1 -0
- package/dist/utils/npm-spec.js +15 -0
- package/dist/utils/npm-spec.js.map +1 -0
- package/dist/utils/open-browser.d.ts +9 -0
- package/dist/utils/open-browser.d.ts.map +1 -0
- package/dist/utils/open-browser.js +22 -0
- package/dist/utils/open-browser.js.map +1 -0
- package/dist/utils/paths.d.ts +31 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +92 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/private-files.d.ts +21 -0
- package/dist/utils/private-files.d.ts.map +1 -0
- package/dist/utils/private-files.js +103 -0
- package/dist/utils/private-files.js.map +1 -0
- package/dist/utils/process-env.d.ts +2 -0
- package/dist/utils/process-env.d.ts.map +1 -0
- package/dist/utils/process-env.js +31 -0
- package/dist/utils/process-env.js.map +1 -0
- package/dist/utils/shell.d.ts +30 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +195 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/sleep.d.ts +5 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +17 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/utils/syntax-highlight.d.ts +18 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -0
- package/dist/utils/syntax-highlight.js +139 -0
- package/dist/utils/syntax-highlight.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +3 -0
- package/dist/utils/tools-manager.d.ts.map +1 -0
- package/dist/utils/tools-manager.js +328 -0
- package/dist/utils/tools-manager.js.map +1 -0
- package/dist/utils/version-check.d.ts +15 -0
- package/dist/utils/version-check.d.ts.map +1 -0
- package/dist/utils/version-check.js +61 -0
- package/dist/utils/version-check.js.map +1 -0
- package/dist/utils/volt-user-agent.d.ts +2 -0
- package/dist/utils/volt-user-agent.d.ts.map +1 -0
- package/dist/utils/volt-user-agent.js +5 -0
- package/dist/utils/volt-user-agent.js.map +1 -0
- package/dist/utils/windows-self-update.d.ts +3 -0
- package/dist/utils/windows-self-update.d.ts.map +1 -0
- package/dist/utils/windows-self-update.js +77 -0
- package/dist/utils/windows-self-update.js.map +1 -0
- package/docs/compaction.md +394 -0
- package/docs/containerization.md +111 -0
- package/docs/custom-provider.md +737 -0
- package/docs/daemon.md +190 -0
- package/docs/development.md +70 -0
- package/docs/docs.json +176 -0
- package/docs/extensions.md +2692 -0
- package/docs/images/exy.png +0 -0
- package/docs/images/interactive-mode.png +0 -0
- package/docs/images/tree-view.png +0 -0
- package/docs/index.md +82 -0
- package/docs/iroh-remote-access-design.md +340 -0
- package/docs/iroh-remote-protocol.md +431 -0
- package/docs/json.md +87 -0
- package/docs/keybindings.md +200 -0
- package/docs/live-shared-session-daemon-design.md +1090 -0
- package/docs/lsp.md +143 -0
- package/docs/mcp.md +1044 -0
- package/docs/models.md +495 -0
- package/docs/packages.md +230 -0
- package/docs/prompt-templates.md +108 -0
- package/docs/providers.md +274 -0
- package/docs/quickstart.md +165 -0
- package/docs/rpc.md +2050 -0
- package/docs/sdk.md +1267 -0
- package/docs/security.md +139 -0
- package/docs/session-format.md +412 -0
- package/docs/sessions.md +145 -0
- package/docs/settings.md +371 -0
- package/docs/shell-aliases.md +13 -0
- package/docs/skills.md +243 -0
- package/docs/subagents-design.md +419 -0
- package/docs/terminal-setup.md +148 -0
- package/docs/termux.md +127 -0
- package/docs/themes.md +295 -0
- package/docs/tla/ClientAuth.cfg +16 -0
- package/docs/tla/ClientAuth.tla +205 -0
- package/docs/tla/ClientConn.cfg +16 -0
- package/docs/tla/ClientConn.tla +265 -0
- package/docs/tla/LeaseBroker.cfg +43 -0
- package/docs/tla/LeaseBroker.tla +563 -0
- package/docs/tla/PLAN.md +240 -0
- package/docs/tla/PushOrdering.cfg +17 -0
- package/docs/tla/PushOrdering.tla +183 -0
- package/docs/tla/README.md +205 -0
- package/docs/tla/RelayViewer.cfg +26 -0
- package/docs/tla/RelayViewer.tla +299 -0
- package/docs/tla/SessionTarget.cfg +18 -0
- package/docs/tla/SessionTarget.tla +192 -0
- package/docs/tla/check.sh +34 -0
- package/docs/tmux.md +63 -0
- package/docs/tui.md +949 -0
- package/docs/usage.md +482 -0
- package/docs/windows.md +17 -0
- package/docs/worktrees-design.md +605 -0
- package/examples/README.md +28 -0
- package/examples/extensions/README.md +211 -0
- package/examples/extensions/auto-commit-on-exit.ts +49 -0
- package/examples/extensions/bash-spawn-hook.ts +30 -0
- package/examples/extensions/bookmark.ts +50 -0
- package/examples/extensions/border-status-editor.ts +150 -0
- package/examples/extensions/built-in-tool-renderer.ts +249 -0
- package/examples/extensions/claude-rules.ts +86 -0
- package/examples/extensions/commands.ts +72 -0
- package/examples/extensions/confirm-destructive.ts +59 -0
- package/examples/extensions/custom-compaction.ts +127 -0
- package/examples/extensions/custom-footer.ts +64 -0
- package/examples/extensions/custom-header.ts +72 -0
- package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/examples/extensions/custom-provider-anthropic/package.json +19 -0
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +400 -0
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
- package/examples/extensions/dirty-repo-guard.ts +56 -0
- package/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/examples/extensions/dynamic-resources/dynamic.json +79 -0
- package/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/examples/extensions/dynamic-resources/index.ts +15 -0
- package/examples/extensions/dynamic-tools.ts +74 -0
- package/examples/extensions/event-bus.ts +43 -0
- package/examples/extensions/file-trigger.ts +41 -0
- package/examples/extensions/git-checkpoint.ts +53 -0
- package/examples/extensions/git-merge-and-resolve.ts +115 -0
- package/examples/extensions/github-issue-autocomplete.ts +185 -0
- package/examples/extensions/gondolin/index.ts +531 -0
- package/examples/extensions/gondolin/package-lock.json +185 -0
- package/examples/extensions/gondolin/package.json +19 -0
- package/examples/extensions/handoff.ts +191 -0
- package/examples/extensions/hello.ts +26 -0
- package/examples/extensions/hidden-thinking-label.ts +53 -0
- package/examples/extensions/inline-bash.ts +94 -0
- package/examples/extensions/input-transform-streaming.ts +39 -0
- package/examples/extensions/input-transform.ts +43 -0
- package/examples/extensions/interactive-shell.ts +196 -0
- package/examples/extensions/mac-system-theme.ts +47 -0
- package/examples/extensions/message-renderer.ts +59 -0
- package/examples/extensions/minimal-mode.ts +426 -0
- package/examples/extensions/modal-editor.ts +85 -0
- package/examples/extensions/model-status.ts +31 -0
- package/examples/extensions/notify.ts +55 -0
- package/examples/extensions/overlay-qa-tests.ts +1450 -0
- package/examples/extensions/overlay-test.ts +153 -0
- package/examples/extensions/permission-gate.ts +34 -0
- package/examples/extensions/pirate.ts +47 -0
- package/examples/extensions/plan-mode/README.md +65 -0
- package/examples/extensions/plan-mode/index.ts +340 -0
- package/examples/extensions/plan-mode/utils.ts +168 -0
- package/examples/extensions/preset.ts +436 -0
- package/examples/extensions/project-trust.ts +64 -0
- package/examples/extensions/prompt-customizer.ts +97 -0
- package/examples/extensions/protected-paths.ts +30 -0
- package/examples/extensions/provider-payload.ts +18 -0
- package/examples/extensions/qna.ts +122 -0
- package/examples/extensions/question.ts +277 -0
- package/examples/extensions/questionnaire.ts +440 -0
- package/examples/extensions/rainbow-editor.ts +88 -0
- package/examples/extensions/reload-runtime.ts +37 -0
- package/examples/extensions/rpc-demo.ts +118 -0
- package/examples/extensions/sandbox/index.ts +321 -0
- package/examples/extensions/sandbox/package-lock.json +92 -0
- package/examples/extensions/sandbox/package.json +19 -0
- package/examples/extensions/send-user-message.ts +97 -0
- package/examples/extensions/session-name.ts +27 -0
- package/examples/extensions/shutdown-command.ts +63 -0
- package/examples/extensions/snake.ts +343 -0
- package/examples/extensions/space-invaders.ts +560 -0
- package/examples/extensions/ssh.ts +220 -0
- package/examples/extensions/status-line.ts +32 -0
- package/examples/extensions/structured-output.ts +65 -0
- package/examples/extensions/subagent/README.md +175 -0
- package/examples/extensions/subagent/agents/planner.md +37 -0
- package/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/examples/extensions/subagent/agents/scout.md +50 -0
- package/examples/extensions/subagent/agents/worker.md +24 -0
- package/examples/extensions/subagent/agents.ts +126 -0
- package/examples/extensions/subagent/index.ts +1009 -0
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/examples/extensions/subagent/prompts/implement.md +10 -0
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/examples/extensions/summarize.ts +206 -0
- package/examples/extensions/system-prompt-header.ts +17 -0
- package/examples/extensions/tic-tac-toe.ts +1008 -0
- package/examples/extensions/timed-confirm.ts +70 -0
- package/examples/extensions/titlebar-spinner.ts +58 -0
- package/examples/extensions/todo.ts +297 -0
- package/examples/extensions/tool-override.ts +144 -0
- package/examples/extensions/tools.ts +146 -0
- package/examples/extensions/trigger-compact.ts +50 -0
- package/examples/extensions/truncated-tool.ts +195 -0
- package/examples/extensions/widget-placement.ts +9 -0
- package/examples/extensions/with-deps/index.ts +32 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +22 -0
- package/examples/extensions/working-indicator.ts +123 -0
- package/examples/extensions/working-message-test.ts +25 -0
- package/examples/remote/firebase-push-relay/README.md +79 -0
- package/examples/remote/firebase-push-relay/firebase.json +12 -0
- package/examples/remote/firebase-push-relay/firestore.indexes.json +11 -0
- package/examples/remote/firebase-push-relay/firestore.rules +9 -0
- package/examples/remote/firebase-push-relay/functions/core.js +511 -0
- package/examples/remote/firebase-push-relay/functions/core.test.js +273 -0
- package/examples/remote/firebase-push-relay/functions/index.js +413 -0
- package/examples/remote/firebase-push-relay/functions/package-lock.json +2974 -0
- package/examples/remote/firebase-push-relay/functions/package.json +18 -0
- package/examples/remote/iroh-sidecar/README.md +211 -0
- package/examples/remote/iroh-sidecar/client.mjs +554 -0
- package/examples/remote/iroh-sidecar/common.mjs +195 -0
- package/examples/remote/iroh-sidecar/host.mjs +4 -0
- package/examples/remote/iroh-sidecar/package-lock.json +213 -0
- package/examples/remote/iroh-sidecar/package.json +13 -0
- package/examples/remote/iroh-sidecar/source-aware-run.mjs +41 -0
- package/examples/rpc-extension-ui.ts +632 -0
- package/examples/sdk/01-minimal.ts +26 -0
- package/examples/sdk/02-custom-model.ts +53 -0
- package/examples/sdk/03-custom-prompt.ts +70 -0
- package/examples/sdk/04-skills.ts +55 -0
- package/examples/sdk/05-tools.ts +48 -0
- package/examples/sdk/06-extensions.ts +94 -0
- package/examples/sdk/07-context-files.ts +42 -0
- package/examples/sdk/08-prompt-templates.ts +51 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +52 -0
- package/examples/sdk/10-settings.ts +53 -0
- package/examples/sdk/11-sessions.ts +52 -0
- package/examples/sdk/12-full-control.ts +78 -0
- package/examples/sdk/13-session-runtime.ts +67 -0
- package/examples/sdk/README.md +147 -0
- package/npm-shrinkwrap.json +3442 -0
- package/package.json +125 -19
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config-driven multi-server LSP manager.
|
|
3
|
+
*
|
|
4
|
+
* Routes files to language servers by extension, lazily spawns one client per
|
|
5
|
+
* (server, project root), and formats post-mutation diagnostics for tool
|
|
6
|
+
* results. Server start failures are reported once and then suppressed.
|
|
7
|
+
*/
|
|
8
|
+
import type { HostInteraction } from "../host-interaction.ts";
|
|
9
|
+
import type { ToolDiagnosticsProvider } from "../tools/diagnostics-provider.ts";
|
|
10
|
+
import type { LspNavigationProvider } from "../tools/lsp.ts";
|
|
11
|
+
import { type ResolvedLspConfig } from "./config.ts";
|
|
12
|
+
export interface LspManagerOptions {
|
|
13
|
+
cwd: string;
|
|
14
|
+
config: ResolvedLspConfig;
|
|
15
|
+
hostInteraction?: HostInteraction;
|
|
16
|
+
installRunner?: LspInstallRunner;
|
|
17
|
+
}
|
|
18
|
+
export interface LspInstallCommandOptions {
|
|
19
|
+
cwd: string;
|
|
20
|
+
signal?: AbortSignal;
|
|
21
|
+
onChunk?: (chunk: string) => void;
|
|
22
|
+
}
|
|
23
|
+
export interface LspInstallCommandResult {
|
|
24
|
+
exitCode: number | null;
|
|
25
|
+
output: string;
|
|
26
|
+
}
|
|
27
|
+
export type LspInstallRunner = (command: readonly string[], options: LspInstallCommandOptions) => Promise<LspInstallCommandResult>;
|
|
28
|
+
export interface LspServerStatus {
|
|
29
|
+
name: string;
|
|
30
|
+
root: string;
|
|
31
|
+
alive: boolean;
|
|
32
|
+
openDocuments: number;
|
|
33
|
+
/** Milliseconds since the server was last used */
|
|
34
|
+
idleMs: number;
|
|
35
|
+
}
|
|
36
|
+
export declare function runDefaultLspInstallCommand(command: readonly string[], options: LspInstallCommandOptions): Promise<LspInstallCommandResult>;
|
|
37
|
+
export declare class LspManager implements ToolDiagnosticsProvider, LspNavigationProvider {
|
|
38
|
+
private cwd;
|
|
39
|
+
private config;
|
|
40
|
+
private clients;
|
|
41
|
+
private startFailures;
|
|
42
|
+
private hostInteraction;
|
|
43
|
+
private installRunner;
|
|
44
|
+
private installPromptsUsed;
|
|
45
|
+
private installAttempts;
|
|
46
|
+
private disposed;
|
|
47
|
+
/** Summaries of WorkspaceEdits applied via server-initiated workspace/applyEdit */
|
|
48
|
+
private serverApplyEditSummaries;
|
|
49
|
+
private lastUsedAt;
|
|
50
|
+
private idleTimer;
|
|
51
|
+
private tracer;
|
|
52
|
+
constructor(options: LspManagerOptions);
|
|
53
|
+
setHostInteraction(hostInteraction: HostInteraction | undefined): void;
|
|
54
|
+
/** Status of all spawned language servers. */
|
|
55
|
+
getStatus(): LspServerStatus[];
|
|
56
|
+
/** Path of the active trace file, if tracing is enabled. */
|
|
57
|
+
getTraceFile(): string | undefined;
|
|
58
|
+
/** Enable or disable protocol tracing for current and future servers. */
|
|
59
|
+
setTraceFile(filePath: string | undefined): Promise<void>;
|
|
60
|
+
/** Synchronously stop tracing during non-awaitable process teardown. */
|
|
61
|
+
closeTraceSync(): void;
|
|
62
|
+
/** Dispose all running servers. They respawn lazily on next use. Returns the number stopped. */
|
|
63
|
+
restart(): number;
|
|
64
|
+
private shutdownIdleClients;
|
|
65
|
+
/**
|
|
66
|
+
* Collect diagnostics for a file that was just written.
|
|
67
|
+
*
|
|
68
|
+
* Also reports other open files that went from clean to failing as a result
|
|
69
|
+
* of this change (best-effort: depends on the server republishing for open
|
|
70
|
+
* documents within the settle window).
|
|
71
|
+
*
|
|
72
|
+
* Returns formatted diagnostics text, or undefined when no matching server
|
|
73
|
+
* is configured, the server is unavailable, or there is nothing to report.
|
|
74
|
+
*/
|
|
75
|
+
getDiagnostics(absolutePath: string, content: string, signal?: AbortSignal): Promise<string | undefined>;
|
|
76
|
+
/** Paths of other open documents that currently have no reportable diagnostics. */
|
|
77
|
+
private collectCleanOpenDocuments;
|
|
78
|
+
/** Report open documents that went from clean to failing since the snapshot. */
|
|
79
|
+
private formatNewlyFailing;
|
|
80
|
+
dispose(): void;
|
|
81
|
+
definition(absolutePath: string, symbol: string, line?: number, signal?: AbortSignal): Promise<string>;
|
|
82
|
+
references(absolutePath: string, symbol: string, line?: number, signal?: AbortSignal): Promise<string>;
|
|
83
|
+
implementations(absolutePath: string, symbol: string, line?: number, signal?: AbortSignal): Promise<string>;
|
|
84
|
+
typeDefinition(absolutePath: string, symbol: string, line?: number, signal?: AbortSignal): Promise<string>;
|
|
85
|
+
hover(absolutePath: string, symbol: string, line?: number, signal?: AbortSignal): Promise<string>;
|
|
86
|
+
documentSymbols(absolutePath: string, signal?: AbortSignal): Promise<string>;
|
|
87
|
+
callHierarchy(absolutePath: string, symbol: string, direction: "incoming" | "outgoing", line?: number, signal?: AbortSignal): Promise<string>;
|
|
88
|
+
workspaceSymbols(absolutePath: string, query: string, signal?: AbortSignal): Promise<string>;
|
|
89
|
+
fileDiagnostics(absolutePath: string, signal?: AbortSignal): Promise<string>;
|
|
90
|
+
private locationQuery;
|
|
91
|
+
private openSession;
|
|
92
|
+
rename(absolutePath: string, symbol: string, newName: string, line?: number, signal?: AbortSignal): Promise<string>;
|
|
93
|
+
codeFix(absolutePath: string, options: {
|
|
94
|
+
symbol?: string;
|
|
95
|
+
line?: number;
|
|
96
|
+
title?: string;
|
|
97
|
+
kind?: string;
|
|
98
|
+
}, signal?: AbortSignal): Promise<string>;
|
|
99
|
+
private applyCodeAction;
|
|
100
|
+
private applyWorkspaceEdit;
|
|
101
|
+
private assertWorkspaceEditOperationInRoot;
|
|
102
|
+
private assertWorkspaceEditPathInRoot;
|
|
103
|
+
private refreshStale;
|
|
104
|
+
private appendSymbolLines;
|
|
105
|
+
private formatLocation;
|
|
106
|
+
private noServerMessage;
|
|
107
|
+
private describeRequestError;
|
|
108
|
+
private displayPath;
|
|
109
|
+
private findServer;
|
|
110
|
+
private findRoot;
|
|
111
|
+
private getClient;
|
|
112
|
+
private handleClientError;
|
|
113
|
+
private removeFailedClient;
|
|
114
|
+
private recordStartFailure;
|
|
115
|
+
private tryInstallMissingServer;
|
|
116
|
+
private createInstallAttemptFailure;
|
|
117
|
+
private runInstallPrompt;
|
|
118
|
+
private formatInstallFailure;
|
|
119
|
+
private emitHostActionUpdate;
|
|
120
|
+
private formatDiagnostics;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAEhF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAEN,KAAK,iBAAiB,EAGtB,MAAM,aAAa,CAAC;AASrB,MAAM,WAAW,iBAAiB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,iBAAiB,CAAC;IAC1B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAED,MAAM,WAAW,wBAAwB;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,uBAAuB;IACvC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,gBAAgB,GAAG,CAC9B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,wBAAwB,KAC7B,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAEtC,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;CACf;AA+ID,wBAAgB,2BAA2B,CAC1C,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,wBAAwB,GAC/B,OAAO,CAAC,uBAAuB,CAAC,CAsElC;AA8GD,qBAAa,UAAW,YAAW,uBAAuB,EAAE,qBAAqB;IAChF,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,aAAa,CAAyC;IAC9D,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,eAAe,CAAuD;IAC9E,OAAO,CAAC,QAAQ,CAAS;IACzB,mFAAmF;IACnF,OAAO,CAAC,wBAAwB,CAAgB;IAChD,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,MAAM,CAAwB;IAEtC,YAAY,OAAO,EAAE,iBAAiB,EAarC;IAED,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAErE;IAED,8CAA8C;IAC9C,SAAS,IAAI,eAAe,EAAE,CAY7B;IAED,4DAA4D;IAC5D,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjC;IAED,yEAAyE;IACnE,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9D;IAED,wEAAwE;IACxE,cAAc,IAAI,IAAI,CAOrB;IAED,gGAAgG;IAChG,OAAO,IAAI,MAAM,CAWhB;IAED,OAAO,CAAC,mBAAmB;IAe3B;;;;;;;;;OASG;IACG,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA+C7G;IAED,mFAAmF;IACnF,OAAO,CAAC,yBAAyB;IAgBjC,gFAAgF;IAChF,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,IAAI,IAAI,CAcd;IAMK,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAE3G;IAEK,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAE3G;IAEK,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAEhH;IAEK,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAE/G;IAEK,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBtG;IAEK,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBjF;IAEK,aAAa,CAClB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,UAAU,GAAG,UAAU,EAClC,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,CA+CjB;IAEK,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAkCjG;IAEK,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBjF;YAEa,aAAa;YA0Cb,WAAW;IAwCnB,MAAM,CACX,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,CAuBjB;IAEK,OAAO,CACZ,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAC1E,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,CAmFjB;YAEa,eAAe;YA2Cf,kBAAkB;IAyDhC,OAAO,CAAC,kCAAkC;IAS1C,OAAO,CAAC,6BAA6B;YASvB,YAAY;IAQ1B,OAAO,CAAC,iBAAiB;YAYX,cAAc;IAiB5B,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,QAAQ;IAsBhB,OAAO,CAAC,SAAS;YA4BH,iBAAiB;IA0B/B,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,kBAAkB;YAiBZ,uBAAuB;IAqBrC,OAAO,CAAC,2BAA2B;YAOrB,gBAAgB;IA8E9B,OAAO,CAAC,oBAAoB;YAMd,oBAAoB;IAUlC,OAAO,CAAC,iBAAiB;CAyBzB","sourcesContent":["/**\n * Config-driven multi-server LSP manager.\n *\n * Routes files to language servers by extension, lazily spawns one client per\n * (server, project root), and formats post-mutation diagnostics for tool\n * results. Server start failures are reported once and then suppressed.\n */\n\nimport { spawn } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { rename as fsRename, mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, extname, isAbsolute, join, relative } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { HostInteraction } from \"../host-interaction.ts\";\nimport type { ToolDiagnosticsProvider } from \"../tools/diagnostics-provider.ts\";\nimport { withFileMutationQueue } from \"../tools/file-mutation-queue.ts\";\nimport type { LspNavigationProvider } from \"../tools/lsp.ts\";\nimport { LspClient, type LspDiagnostic, type LspPosition, type LspRange } from \"./client.ts\";\nimport {\n\ttype LspInstallRecipe,\n\ttype ResolvedLspConfig,\n\ttype ResolvedLspServerConfig,\n\tSEVERITY_NAMES,\n} from \"./config.ts\";\nimport { LspTracer } from \"./trace.ts\";\nimport {\n\tapplyTextEdits,\n\ttype LspWorkspaceEdit,\n\ttype NormalizedWorkspaceOperation,\n\tnormalizeWorkspaceEdit,\n} from \"./workspace-edit.ts\";\n\nexport interface LspManagerOptions {\n\tcwd: string;\n\tconfig: ResolvedLspConfig;\n\thostInteraction?: HostInteraction;\n\tinstallRunner?: LspInstallRunner;\n}\n\nexport interface LspInstallCommandOptions {\n\tcwd: string;\n\tsignal?: AbortSignal;\n\tonChunk?: (chunk: string) => void;\n}\n\nexport interface LspInstallCommandResult {\n\texitCode: number | null;\n\toutput: string;\n}\n\nexport type LspInstallRunner = (\n\tcommand: readonly string[],\n\toptions: LspInstallCommandOptions,\n) => Promise<LspInstallCommandResult>;\n\nexport interface LspServerStatus {\n\tname: string;\n\troot: string;\n\talive: boolean;\n\topenDocuments: number;\n\t/** Milliseconds since the server was last used */\n\tidleMs: number;\n}\n\ninterface ServerFailureState {\n\tcount: number;\n\treported: boolean;\n}\n\ntype LspClientErrorResult = { retry: true } | { retry: false; message?: string };\n\ninterface LspInstallAttemptResult {\n\tretry: boolean;\n\tmessage?: string;\n}\n\nconst MAX_START_ATTEMPTS = 3;\nconst MAX_REFERENCES = 50;\nconst MAX_SYMBOL_LINES = 200;\nconst MAX_CROSS_FILE_REPORTS = 5;\nconst LSP_INSTALL_REQUEST_TIMEOUT_MS = 10 * 60_000;\nconst MAX_INSTALL_OUTPUT_CHARS = 12000;\n\nfunction uriToPath(uri: string): string {\n\ttry {\n\t\treturn fileURLToPath(uri);\n\t} catch {\n\t\treturn uri;\n\t}\n}\n\nfunction isPathInsideRoot(rootDir: string, absolutePath: string): boolean {\n\tif (!isAbsolute(absolutePath)) {\n\t\treturn false;\n\t}\n\tconst rel = relative(rootDir, absolutePath);\n\treturn rel === \"\" || (rel !== \"\" && !rel.startsWith(\"..\") && !isAbsolute(rel));\n}\n\nconst SYMBOL_KIND_NAMES: Record<number, string> = {\n\t1: \"file\",\n\t2: \"module\",\n\t3: \"namespace\",\n\t4: \"package\",\n\t5: \"class\",\n\t6: \"method\",\n\t7: \"property\",\n\t8: \"field\",\n\t9: \"constructor\",\n\t10: \"enum\",\n\t11: \"interface\",\n\t12: \"function\",\n\t13: \"variable\",\n\t14: \"constant\",\n\t15: \"string\",\n\t16: \"number\",\n\t17: \"boolean\",\n\t18: \"array\",\n\t19: \"object\",\n\t20: \"key\",\n\t21: \"null\",\n\t22: \"enum member\",\n\t23: \"struct\",\n\t24: \"event\",\n\t25: \"operator\",\n\t26: \"type parameter\",\n};\n\ninterface LspLocation {\n\turi: string;\n\trange: LspRange;\n}\n\ninterface LspLocationLink {\n\ttargetUri: string;\n\ttargetRange: LspRange;\n\ttargetSelectionRange?: LspRange;\n}\n\ninterface LspDocumentSymbol {\n\tname: string;\n\tkind: number;\n\tselectionRange?: LspRange;\n\tlocation?: { range: LspRange };\n\tchildren?: LspDocumentSymbol[];\n}\n\ninterface LspHoverResult {\n\tcontents: unknown;\n}\n\ninterface CallHierarchyItem {\n\tname: string;\n\tkind: number;\n\turi: string;\n\trange: LspRange;\n\tselectionRange?: LspRange;\n}\n\ninterface LspCommand {\n\ttitle?: string;\n\tcommand: string;\n\targuments?: unknown[];\n}\n\ninterface LspCodeAction {\n\ttitle: string;\n\tkind?: string;\n\tedit?: LspWorkspaceEdit;\n\tcommand?: LspCommand;\n}\n\ninterface NormalizedCodeAction {\n\ttitle: string;\n\tkind?: string;\n\tedit?: LspWorkspaceEdit;\n\tcommand?: LspCommand;\n\t/** Raw action payload, used for codeAction/resolve */\n\traw: unknown;\n}\n\nfunction positionLeq(a: LspPosition, b: LspPosition): boolean {\n\treturn a.line < b.line || (a.line === b.line && a.character <= b.character);\n}\n\nfunction rangesOverlap(a: LspRange, b: LspRange): boolean {\n\treturn positionLeq(a.start, b.end) && positionLeq(b.start, a.end);\n}\n\nfunction quoteWindowsArg(arg: string): string {\n\treturn /\\s/.test(arg) ? `\"${arg.replace(/\"/g, '\\\\\"')}\"` : arg;\n}\n\nfunction appendBoundedOutput(current: string, chunk: string): string {\n\tconst next = current + chunk;\n\tif (next.length <= MAX_INSTALL_OUTPUT_CHARS) {\n\t\treturn next;\n\t}\n\treturn next.slice(next.length - MAX_INSTALL_OUTPUT_CHARS);\n}\n\nfunction commandToDisplay(command: readonly string[]): string {\n\treturn command.map((arg) => (/\\s/.test(arg) ? JSON.stringify(arg) : arg)).join(\" \");\n}\n\nexport function runDefaultLspInstallCommand(\n\tcommand: readonly string[],\n\toptions: LspInstallCommandOptions,\n): Promise<LspInstallCommandResult> {\n\tif (command.length === 0) {\n\t\treturn Promise.reject(new Error(\"LSP install command cannot be empty\"));\n\t}\n\tif (options.signal?.aborted) {\n\t\treturn Promise.reject(new Error(\"LSP server install aborted\"));\n\t}\n\n\treturn new Promise((resolve, reject) => {\n\t\tlet output = \"\";\n\t\tlet settled = false;\n\t\tconst child =\n\t\t\tprocess.platform === \"win32\"\n\t\t\t\t? spawn(command.map(quoteWindowsArg).join(\" \"), {\n\t\t\t\t\t\tcwd: options.cwd,\n\t\t\t\t\t\tshell: true,\n\t\t\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\t\t\twindowsHide: true,\n\t\t\t\t\t})\n\t\t\t\t: spawn(command[0], command.slice(1), {\n\t\t\t\t\t\tcwd: options.cwd,\n\t\t\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\t\t});\n\n\t\tconst cleanup = (): void => {\n\t\t\toptions.signal?.removeEventListener(\"abort\", onAbort);\n\t\t};\n\t\tconst finish = (result: LspInstallCommandResult): void => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\tresolve(result);\n\t\t};\n\t\tconst fail = (error: Error): void => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\treject(error);\n\t\t};\n\t\tfunction onAbort(): void {\n\t\t\ttry {\n\t\t\t\tchild.kill();\n\t\t\t} catch {\n\t\t\t\t// Process already exited.\n\t\t\t}\n\t\t\tfail(new Error(\"LSP server install aborted\"));\n\t\t}\n\n\t\tchild.stdout?.on(\"data\", (chunk: Buffer) => {\n\t\t\tconst text = chunk.toString(\"utf-8\");\n\t\t\toutput = appendBoundedOutput(output, text);\n\t\t\toptions.onChunk?.(text);\n\t\t});\n\t\tchild.stderr?.on(\"data\", (chunk: Buffer) => {\n\t\t\tconst text = chunk.toString(\"utf-8\");\n\t\t\toutput = appendBoundedOutput(output, text);\n\t\t\toptions.onChunk?.(text);\n\t\t});\n\t\tchild.once(\"error\", (error) => {\n\t\t\tfail(new Error(`Failed to run LSP install command \"${commandToDisplay(command)}\": ${error.message}`));\n\t\t});\n\t\tchild.once(\"close\", (code) => {\n\t\t\tfinish({ exitCode: code, output });\n\t\t});\n\t\toptions.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\n/** Normalize codeAction results: bare Commands and CodeAction literals. */\nfunction normalizeCodeActions(result: unknown): NormalizedCodeAction[] {\n\tif (!Array.isArray(result)) {\n\t\treturn [];\n\t}\n\tconst actions: NormalizedCodeAction[] = [];\n\tfor (const item of result) {\n\t\tif (!item || typeof item !== \"object\" || typeof (item as { title?: unknown }).title !== \"string\") {\n\t\t\tcontinue;\n\t\t}\n\t\tconst entry = item as LspCodeAction & { command?: LspCommand | string };\n\t\tif (typeof entry.command === \"string\") {\n\t\t\t// Bare Command shape.\n\t\t\tactions.push({ title: entry.title, command: entry as unknown as LspCommand, raw: item });\n\t\t} else {\n\t\t\tactions.push({ title: entry.title, kind: entry.kind, edit: entry.edit, command: entry.command, raw: item });\n\t\t}\n\t}\n\treturn actions;\n}\n\ntype DocumentSession = { error: string } | { client: LspClient; uri: string; content: string };\n\n/** Normalize definition results: Location | Location[] | LocationLink[] | null. */\nfunction normalizeLocations(result: unknown): LspLocation[] {\n\tif (!result) {\n\t\treturn [];\n\t}\n\tconst items = Array.isArray(result) ? result : [result];\n\tconst locations: LspLocation[] = [];\n\tfor (const item of items) {\n\t\tconst location = item as Partial<LspLocation> & Partial<LspLocationLink>;\n\t\tif (typeof location.uri === \"string\" && location.range) {\n\t\t\tlocations.push({ uri: location.uri, range: location.range });\n\t\t} else if (typeof location.targetUri === \"string\") {\n\t\t\tconst range = location.targetSelectionRange ?? location.targetRange;\n\t\t\tif (range) {\n\t\t\t\tlocations.push({ uri: location.targetUri, range });\n\t\t\t}\n\t\t}\n\t}\n\treturn locations;\n}\n\n/** Extract plain text from LSP hover contents (string | MarkedString[] | MarkupContent). */\nfunction hoverContentsToText(contents: unknown): string {\n\tif (typeof contents === \"string\") {\n\t\treturn contents;\n\t}\n\tif (Array.isArray(contents)) {\n\t\treturn contents\n\t\t\t.map((entry) => hoverContentsToText(entry))\n\t\t\t.filter((text) => text.length > 0)\n\t\t\t.join(\"\\n\\n\");\n\t}\n\tif (contents && typeof contents === \"object\" && \"value\" in contents) {\n\t\tconst value = (contents as { value: unknown }).value;\n\t\treturn typeof value === \"string\" ? value : \"\";\n\t}\n\treturn \"\";\n}\n\n/**\n * Locate a symbol occurrence in document text.\n *\n * Prefers a word-boundary match on the hinted line, then a word-boundary match\n * anywhere in the file, then plain substring matches.\n */\nfunction findSymbolPosition(content: string, symbol: string, line?: number): LspPosition | undefined {\n\tconst lines = content.split(\"\\n\");\n\tconst escaped = symbol.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\tconst wordPattern = new RegExp(`(?<![\\\\w$])${escaped}(?![\\\\w$])`);\n\n\tconst searchLine = (index: number): LspPosition | undefined => {\n\t\tconst text = lines[index];\n\t\tif (text === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst wordMatch = wordPattern.exec(text);\n\t\tif (wordMatch) {\n\t\t\treturn { line: index, character: wordMatch.index };\n\t\t}\n\t\tconst plainIndex = text.indexOf(symbol);\n\t\treturn plainIndex === -1 ? undefined : { line: index, character: plainIndex };\n\t};\n\n\tif (line !== undefined && line >= 1 && line <= lines.length) {\n\t\tconst position = searchLine(line - 1);\n\t\tif (position) {\n\t\t\treturn position;\n\t\t}\n\t}\n\tfor (let index = 0; index < lines.length; index++) {\n\t\tconst text = lines[index];\n\t\tconst wordMatch = wordPattern.exec(text);\n\t\tif (wordMatch) {\n\t\t\treturn { line: index, character: wordMatch.index };\n\t\t}\n\t}\n\tfor (let index = 0; index < lines.length; index++) {\n\t\tconst plainIndex = lines[index].indexOf(symbol);\n\t\tif (plainIndex !== -1) {\n\t\t\treturn { line: index, character: plainIndex };\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport class LspManager implements ToolDiagnosticsProvider, LspNavigationProvider {\n\tprivate cwd: string;\n\tprivate config: ResolvedLspConfig;\n\tprivate clients = new Map<string, LspClient>();\n\tprivate startFailures = new Map<string, ServerFailureState>();\n\tprivate hostInteraction: HostInteraction | undefined;\n\tprivate installRunner: LspInstallRunner;\n\tprivate installPromptsUsed = new Set<string>();\n\tprivate installAttempts = new Map<string, Promise<LspInstallAttemptResult>>();\n\tprivate disposed = false;\n\t/** Summaries of WorkspaceEdits applied via server-initiated workspace/applyEdit */\n\tprivate serverApplyEditSummaries: string[] = [];\n\tprivate lastUsedAt = new Map<string, number>();\n\tprivate idleTimer: NodeJS.Timeout | undefined;\n\tprivate tracer: LspTracer | undefined;\n\n\tconstructor(options: LspManagerOptions) {\n\t\tthis.cwd = options.cwd;\n\t\tthis.config = options.config;\n\t\tthis.hostInteraction = options.hostInteraction;\n\t\tthis.installRunner = options.installRunner ?? runDefaultLspInstallCommand;\n\t\tif (this.config.traceFile) {\n\t\t\tthis.tracer = new LspTracer(this.config.traceFile);\n\t\t}\n\t\tif (this.config.idleShutdownMs > 0) {\n\t\t\tconst checkIntervalMs = Math.max(250, Math.min(this.config.idleShutdownMs / 2, 60000));\n\t\t\tthis.idleTimer = setInterval(() => this.shutdownIdleClients(), checkIntervalMs);\n\t\t\tthis.idleTimer.unref();\n\t\t}\n\t}\n\n\tsetHostInteraction(hostInteraction: HostInteraction | undefined): void {\n\t\tthis.hostInteraction = hostInteraction;\n\t}\n\n\t/** Status of all spawned language servers. */\n\tgetStatus(): LspServerStatus[] {\n\t\tconst now = Date.now();\n\t\treturn [...this.clients.entries()].map(([key, client]) => {\n\t\t\tconst [name, root] = key.split(\"\\u0000\");\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\troot,\n\t\t\t\talive: client.isAlive,\n\t\t\t\topenDocuments: client.openDocumentCount,\n\t\t\t\tidleMs: now - (this.lastUsedAt.get(key) ?? now),\n\t\t\t};\n\t\t});\n\t}\n\n\t/** Path of the active trace file, if tracing is enabled. */\n\tgetTraceFile(): string | undefined {\n\t\treturn this.tracer?.filePath;\n\t}\n\n\t/** Enable or disable protocol tracing for current and future servers. */\n\tasync setTraceFile(filePath: string | undefined): Promise<void> {\n\t\tconst previousTracer = this.tracer;\n\t\tthis.tracer = filePath ? new LspTracer(filePath) : undefined;\n\t\tfor (const client of this.clients.values()) {\n\t\t\tclient.setTracer(this.tracer);\n\t\t}\n\t\tawait previousTracer?.dispose();\n\t}\n\n\t/** Synchronously stop tracing during non-awaitable process teardown. */\n\tcloseTraceSync(): void {\n\t\tconst previousTracer = this.tracer;\n\t\tthis.tracer = undefined;\n\t\tfor (const client of this.clients.values()) {\n\t\t\tclient.setTracer(undefined);\n\t\t}\n\t\tpreviousTracer?.disposeSync();\n\t}\n\n\t/** Dispose all running servers. They respawn lazily on next use. Returns the number stopped. */\n\trestart(): number {\n\t\tconst count = this.clients.size;\n\t\tfor (const client of this.clients.values()) {\n\t\t\tclient.dispose();\n\t\t}\n\t\tthis.clients.clear();\n\t\tthis.lastUsedAt.clear();\n\t\tthis.startFailures.clear();\n\t\tthis.installPromptsUsed.clear();\n\t\tthis.installAttempts.clear();\n\t\treturn count;\n\t}\n\n\tprivate shutdownIdleClients(): void {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\t\tconst now = Date.now();\n\t\tfor (const [key, client] of [...this.clients.entries()]) {\n\t\t\tconst lastUsed = this.lastUsedAt.get(key) ?? now;\n\t\t\tif (now - lastUsed >= this.config.idleShutdownMs) {\n\t\t\t\tclient.dispose();\n\t\t\t\tthis.clients.delete(key);\n\t\t\t\tthis.lastUsedAt.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Collect diagnostics for a file that was just written.\n\t *\n\t * Also reports other open files that went from clean to failing as a result\n\t * of this change (best-effort: depends on the server republishing for open\n\t * documents within the settle window).\n\t *\n\t * Returns formatted diagnostics text, or undefined when no matching server\n\t * is configured, the server is unavailable, or there is nothing to report.\n\t */\n\tasync getDiagnostics(absolutePath: string, content: string, signal?: AbortSignal): Promise<string | undefined> {\n\t\tif (this.disposed) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst server = this.findServer(absolutePath);\n\t\tif (!server) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\twhile (!this.disposed) {\n\t\t\tconst failure = this.startFailures.get(server.name);\n\t\t\tif (failure && failure.count >= MAX_START_ATTEMPTS) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst client = this.getClient(server, absolutePath);\n\t\t\tconst cleanBefore = this.collectCleanOpenDocuments(client, absolutePath);\n\t\t\tlet diagnostics: LspDiagnostic[];\n\t\t\ttry {\n\t\t\t\tdiagnostics = await client.getDiagnostics(\n\t\t\t\t\tabsolutePath,\n\t\t\t\t\tcontent,\n\t\t\t\t\tthis.config.settleMs,\n\t\t\t\t\tthis.config.firstSettleMs,\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tconst result = await this.handleClientError(server, client, error, signal);\n\t\t\t\tif (result.retry) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\treturn result.message;\n\t\t\t}\n\t\t\tif (this.disposed) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tthis.startFailures.delete(server.name);\n\n\t\t\tconst ownDiagnostics = this.formatDiagnostics(absolutePath, diagnostics);\n\t\t\tconst crossFile = this.formatNewlyFailing(client, absolutePath, cleanBefore);\n\t\t\tif (ownDiagnostics && crossFile) {\n\t\t\t\treturn `${ownDiagnostics}\\n${crossFile}`;\n\t\t\t}\n\t\t\treturn ownDiagnostics ?? crossFile;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/** Paths of other open documents that currently have no reportable diagnostics. */\n\tprivate collectCleanOpenDocuments(client: LspClient, excludePath: string): Set<string> {\n\t\tconst clean = new Set<string>();\n\t\tfor (const path of client.getOpenDocumentPaths()) {\n\t\t\tif (path === excludePath) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst reportable = client\n\t\t\t\t.getPublishedDiagnostics(path)\n\t\t\t\t.filter((diagnostic) => (diagnostic.severity ?? 1) <= this.config.maxSeverity);\n\t\t\tif (reportable.length === 0) {\n\t\t\t\tclean.add(path);\n\t\t\t}\n\t\t}\n\t\treturn clean;\n\t}\n\n\t/** Report open documents that went from clean to failing since the snapshot. */\n\tprivate formatNewlyFailing(client: LspClient, excludePath: string, cleanBefore: Set<string>): string | undefined {\n\t\tconst sections: string[] = [];\n\t\tfor (const path of client.getOpenDocumentPaths()) {\n\t\t\tif (path === excludePath || !cleanBefore.has(path)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst formatted = this.formatDiagnostics(path, client.getPublishedDiagnostics(path));\n\t\t\tif (formatted) {\n\t\t\t\tsections.push(formatted);\n\t\t\t}\n\t\t}\n\t\tif (sections.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst shown = sections.slice(0, MAX_CROSS_FILE_REPORTS);\n\t\tif (sections.length > shown.length) {\n\t\t\tshown.push(\n\t\t\t\t`... and ${sections.length - shown.length} more file${sections.length - shown.length === 1 ? \"\" : \"s\"}`,\n\t\t\t);\n\t\t}\n\t\treturn `Newly failing in other open files:\\n${shown.join(\"\\n\")}`;\n\t}\n\n\tdispose(): void {\n\t\tthis.disposed = true;\n\t\tif (this.idleTimer) {\n\t\t\tclearInterval(this.idleTimer);\n\t\t\tthis.idleTimer = undefined;\n\t\t}\n\t\tfor (const client of this.clients.values()) {\n\t\t\tclient.dispose();\n\t\t}\n\t\tthis.clients.clear();\n\t\tthis.lastUsedAt.clear();\n\t\tthis.installAttempts.clear();\n\t\tvoid this.tracer?.dispose();\n\t\tthis.tracer = undefined;\n\t}\n\n\t// =========================================================================\n\t// Navigation (LspNavigationProvider)\n\t// =========================================================================\n\n\tasync definition(absolutePath: string, symbol: string, line?: number, signal?: AbortSignal): Promise<string> {\n\t\treturn this.locationQuery(\"textDocument/definition\", \"definition\", absolutePath, symbol, line, signal);\n\t}\n\n\tasync references(absolutePath: string, symbol: string, line?: number, signal?: AbortSignal): Promise<string> {\n\t\treturn this.locationQuery(\"textDocument/references\", \"references\", absolutePath, symbol, line, signal);\n\t}\n\n\tasync implementations(absolutePath: string, symbol: string, line?: number, signal?: AbortSignal): Promise<string> {\n\t\treturn this.locationQuery(\"textDocument/implementation\", \"implementations\", absolutePath, symbol, line, signal);\n\t}\n\n\tasync typeDefinition(absolutePath: string, symbol: string, line?: number, signal?: AbortSignal): Promise<string> {\n\t\treturn this.locationQuery(\"textDocument/typeDefinition\", \"type definition\", absolutePath, symbol, line, signal);\n\t}\n\n\tasync hover(absolutePath: string, symbol: string, line?: number, signal?: AbortSignal): Promise<string> {\n\t\tconst session = await this.openSession(absolutePath, signal);\n\t\tif (\"error\" in session) {\n\t\t\treturn session.error;\n\t\t}\n\t\tconst position = findSymbolPosition(session.content, symbol, line);\n\t\tif (!position) {\n\t\t\treturn `Symbol \"${symbol}\" not found in ${this.displayPath(absolutePath)}.`;\n\t\t}\n\t\ttry {\n\t\t\tconst result = (await session.client.sendRequest(\n\t\t\t\t\"textDocument/hover\",\n\t\t\t\t{ textDocument: { uri: session.uri }, position },\n\t\t\t\tsignal,\n\t\t\t)) as LspHoverResult | null;\n\t\t\tconst text = result ? hoverContentsToText(result.contents).trim() : \"\";\n\t\t\treturn text.length > 0 ? text : `No hover information for \"${symbol}\".`;\n\t\t} catch (error) {\n\t\t\treturn this.describeRequestError(absolutePath, error);\n\t\t}\n\t}\n\n\tasync documentSymbols(absolutePath: string, signal?: AbortSignal): Promise<string> {\n\t\tconst session = await this.openSession(absolutePath, signal);\n\t\tif (\"error\" in session) {\n\t\t\treturn session.error;\n\t\t}\n\t\ttry {\n\t\t\tconst result = (await session.client.sendRequest(\n\t\t\t\t\"textDocument/documentSymbol\",\n\t\t\t\t{ textDocument: { uri: session.uri } },\n\t\t\t\tsignal,\n\t\t\t)) as LspDocumentSymbol[] | null;\n\t\t\tif (!result || result.length === 0) {\n\t\t\t\treturn `No symbols found in ${this.displayPath(absolutePath)}.`;\n\t\t\t}\n\t\t\tconst lines: string[] = [];\n\t\t\tthis.appendSymbolLines(result, 0, lines);\n\t\t\tif (lines.length > MAX_SYMBOL_LINES) {\n\t\t\t\tconst extra = lines.length - MAX_SYMBOL_LINES;\n\t\t\t\treturn [...lines.slice(0, MAX_SYMBOL_LINES), `... and ${extra} more`].join(\"\\n\");\n\t\t\t}\n\t\t\treturn lines.join(\"\\n\");\n\t\t} catch (error) {\n\t\t\treturn this.describeRequestError(absolutePath, error);\n\t\t}\n\t}\n\n\tasync callHierarchy(\n\t\tabsolutePath: string,\n\t\tsymbol: string,\n\t\tdirection: \"incoming\" | \"outgoing\",\n\t\tline?: number,\n\t\tsignal?: AbortSignal,\n\t): Promise<string> {\n\t\tconst session = await this.openSession(absolutePath, signal);\n\t\tif (\"error\" in session) {\n\t\t\treturn session.error;\n\t\t}\n\t\tconst position = findSymbolPosition(session.content, symbol, line);\n\t\tif (!position) {\n\t\t\treturn `Symbol \"${symbol}\" not found in ${this.displayPath(absolutePath)}.`;\n\t\t}\n\t\ttry {\n\t\t\tconst items = (await session.client.sendRequest(\n\t\t\t\t\"textDocument/prepareCallHierarchy\",\n\t\t\t\t{ textDocument: { uri: session.uri }, position },\n\t\t\t\tsignal,\n\t\t\t)) as CallHierarchyItem[] | null;\n\t\t\tif (!items || items.length === 0) {\n\t\t\t\treturn `No call hierarchy available for \"${symbol}\" (it may not be a callable symbol).`;\n\t\t\t}\n\t\t\tconst item = items[0];\n\t\t\tconst label = direction === \"incoming\" ? \"callers of\" : \"calls made by\";\n\t\t\tconst method = direction === \"incoming\" ? \"callHierarchy/incomingCalls\" : \"callHierarchy/outgoingCalls\";\n\t\t\tconst calls = (await session.client.sendRequest(method, { item }, signal)) as Array<{\n\t\t\t\tfrom?: CallHierarchyItem;\n\t\t\t\tto?: CallHierarchyItem;\n\t\t\t}> | null;\n\t\t\tif (!calls || calls.length === 0) {\n\t\t\t\treturn `No ${label} \"${item.name}\" found.`;\n\t\t\t}\n\t\t\tconst shown = calls.slice(0, MAX_REFERENCES);\n\t\t\tconst lines: string[] = [`${direction === \"incoming\" ? \"Callers of\" : \"Calls made by\"} \"${item.name}\":`];\n\t\t\tfor (const call of shown) {\n\t\t\t\tconst target = direction === \"incoming\" ? call.from : call.to;\n\t\t\t\tif (!target) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst kind = SYMBOL_KIND_NAMES[target.kind] ?? \"symbol\";\n\t\t\t\tconst path = this.displayPath(uriToPath(target.uri));\n\t\t\t\tconst targetLine = (target.selectionRange ?? target.range).start.line + 1;\n\t\t\t\tlines.push(`${target.name} (${kind}) ${path}:${targetLine}`);\n\t\t\t}\n\t\t\tif (calls.length > shown.length) {\n\t\t\t\tlines.push(`... and ${calls.length - shown.length} more`);\n\t\t\t}\n\t\t\treturn lines.join(\"\\n\");\n\t\t} catch (error) {\n\t\t\treturn this.describeRequestError(absolutePath, error);\n\t\t}\n\t}\n\n\tasync workspaceSymbols(absolutePath: string, query: string, signal?: AbortSignal): Promise<string> {\n\t\tconst session = await this.openSession(absolutePath, signal);\n\t\tif (\"error\" in session) {\n\t\t\treturn session.error;\n\t\t}\n\t\ttry {\n\t\t\tconst result = (await session.client.sendRequest(\"workspace/symbol\", { query }, signal)) as Array<{\n\t\t\t\tname: string;\n\t\t\t\tkind: number;\n\t\t\t\tcontainerName?: string;\n\t\t\t\tlocation?: { uri: string; range?: LspRange };\n\t\t\t}> | null;\n\t\t\tif (!result || result.length === 0) {\n\t\t\t\treturn `No workspace symbols matching \"${query}\".`;\n\t\t\t}\n\t\t\tconst shown = result.slice(0, MAX_REFERENCES);\n\t\t\tconst lines = shown.map((symbol) => {\n\t\t\t\tconst kind = SYMBOL_KIND_NAMES[symbol.kind] ?? \"symbol\";\n\t\t\t\tconst container = symbol.containerName ? ` in ${symbol.containerName}` : \"\";\n\t\t\t\tlet location = \"\";\n\t\t\t\tif (symbol.location?.uri) {\n\t\t\t\t\tconst path = this.displayPath(uriToPath(symbol.location.uri));\n\t\t\t\t\tconst line = symbol.location.range ? `:${symbol.location.range.start.line + 1}` : \"\";\n\t\t\t\t\tlocation = ` ${path}${line}`;\n\t\t\t\t}\n\t\t\t\treturn `${symbol.name} (${kind})${container}${location}`;\n\t\t\t});\n\t\t\tif (result.length > shown.length) {\n\t\t\t\tlines.push(`... and ${result.length - shown.length} more`);\n\t\t\t}\n\t\t\treturn lines.join(\"\\n\");\n\t\t} catch (error) {\n\t\t\treturn this.describeRequestError(absolutePath, error);\n\t\t}\n\t}\n\n\tasync fileDiagnostics(absolutePath: string, signal?: AbortSignal): Promise<string> {\n\t\t// openSession applies the start-failure breaker and failure accounting,\n\t\t// so a broken server is not respawned on every diagnostics request.\n\t\tconst session = await this.openSession(absolutePath, signal);\n\t\tif (\"error\" in session) {\n\t\t\treturn session.error;\n\t\t}\n\t\ttry {\n\t\t\tconst diagnostics = await session.client.getDiagnostics(\n\t\t\t\tabsolutePath,\n\t\t\t\tsession.content,\n\t\t\t\tthis.config.settleMs,\n\t\t\t\tthis.config.firstSettleMs,\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\treturn (\n\t\t\t\tthis.formatDiagnostics(absolutePath, diagnostics) ?? `No diagnostics in ${this.displayPath(absolutePath)}.`\n\t\t\t);\n\t\t} catch (error) {\n\t\t\treturn this.describeRequestError(absolutePath, error);\n\t\t}\n\t}\n\n\tprivate async locationQuery(\n\t\tmethod: string,\n\t\tlabel: string,\n\t\tabsolutePath: string,\n\t\tsymbol: string,\n\t\tline?: number,\n\t\tsignal?: AbortSignal,\n\t): Promise<string> {\n\t\tconst session = await this.openSession(absolutePath, signal);\n\t\tif (\"error\" in session) {\n\t\t\treturn session.error;\n\t\t}\n\t\tconst position = findSymbolPosition(session.content, symbol, line);\n\t\tif (!position) {\n\t\t\treturn `Symbol \"${symbol}\" not found in ${this.displayPath(absolutePath)}.`;\n\t\t}\n\t\ttry {\n\t\t\tconst result = await session.client.sendRequest(\n\t\t\t\tmethod,\n\t\t\t\t{\n\t\t\t\t\ttextDocument: { uri: session.uri },\n\t\t\t\t\tposition,\n\t\t\t\t\t...(method === \"textDocument/references\" ? { context: { includeDeclaration: true } } : {}),\n\t\t\t\t},\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tconst locations = normalizeLocations(result);\n\t\t\tif (locations.length === 0) {\n\t\t\t\treturn `No ${label} found for \"${symbol}\".`;\n\t\t\t}\n\t\t\tconst shown = locations.slice(0, MAX_REFERENCES);\n\t\t\tconst lines = await Promise.all(shown.map((location) => this.formatLocation(location)));\n\t\t\tif (locations.length > shown.length) {\n\t\t\t\tlines.push(`... and ${locations.length - shown.length} more`);\n\t\t\t}\n\t\t\treturn lines.join(\"\\n\");\n\t\t} catch (error) {\n\t\t\treturn this.describeRequestError(absolutePath, error);\n\t\t}\n\t}\n\n\t/** Route a file to its server, read it from disk, and sync it. Returns an error message on failure. */\n\tprivate async openSession(absolutePath: string, signal?: AbortSignal): Promise<DocumentSession> {\n\t\tconst server = this.findServer(absolutePath);\n\t\tif (!server) {\n\t\t\treturn { error: this.noServerMessage(absolutePath) };\n\t\t}\n\t\tlet content: string;\n\t\ttry {\n\t\t\tcontent = await readFile(absolutePath, \"utf-8\");\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\terror: `Could not read ${this.displayPath(absolutePath)}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t};\n\t\t}\n\n\t\twhile (!this.disposed) {\n\t\t\tconst failure = this.startFailures.get(server.name);\n\t\t\tif (failure && failure.count >= MAX_START_ATTEMPTS) {\n\t\t\t\treturn { error: `lsp(${server.name}): server unavailable after ${failure.count} failed starts.` };\n\t\t\t}\n\t\t\tconst client = this.getClient(server, absolutePath);\n\t\t\ttry {\n\t\t\t\tconst uri = await client.openDocument(absolutePath, content);\n\t\t\t\tawait this.refreshStale(client, absolutePath);\n\t\t\t\tthis.startFailures.delete(server.name);\n\t\t\t\treturn { client, uri, content };\n\t\t\t} catch (error) {\n\t\t\t\tconst result = await this.handleClientError(server, client, error, signal);\n\t\t\t\tif (result.retry) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\terror:\n\t\t\t\t\t\tresult.message ?? `lsp(${server.name}): ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn { error: `lsp(${server.name}): LSP manager disposed.` };\n\t}\n\n\tasync rename(\n\t\tabsolutePath: string,\n\t\tsymbol: string,\n\t\tnewName: string,\n\t\tline?: number,\n\t\tsignal?: AbortSignal,\n\t): Promise<string> {\n\t\tconst session = await this.openSession(absolutePath, signal);\n\t\tif (\"error\" in session) {\n\t\t\treturn session.error;\n\t\t}\n\t\tconst position = findSymbolPosition(session.content, symbol, line);\n\t\tif (!position) {\n\t\t\treturn `Symbol \"${symbol}\" not found in ${this.displayPath(absolutePath)}.`;\n\t\t}\n\t\ttry {\n\t\t\tconst result = (await session.client.sendRequest(\n\t\t\t\t\"textDocument/rename\",\n\t\t\t\t{ textDocument: { uri: session.uri }, position, newName },\n\t\t\t\tsignal,\n\t\t\t)) as LspWorkspaceEdit | null;\n\t\t\tif (!result || normalizeWorkspaceEdit(result).length === 0) {\n\t\t\t\treturn `Rename of \"${symbol}\" is not available at this position.`;\n\t\t\t}\n\t\t\tconst { summary } = await this.applyWorkspaceEdit(session.client, result);\n\t\t\treturn `Renamed \"${symbol}\" to \"${newName}\":\\n${summary}`;\n\t\t} catch (error) {\n\t\t\treturn this.describeRequestError(absolutePath, error);\n\t\t}\n\t}\n\n\tasync codeFix(\n\t\tabsolutePath: string,\n\t\toptions: { symbol?: string; line?: number; title?: string; kind?: string },\n\t\tsignal?: AbortSignal,\n\t): Promise<string> {\n\t\tconst session = await this.openSession(absolutePath, signal);\n\t\tif (\"error\" in session) {\n\t\t\treturn session.error;\n\t\t}\n\t\tconst contentLines = session.content.split(\"\\n\");\n\t\tlet range: LspRange;\n\t\tif (options.symbol) {\n\t\t\tconst position = findSymbolPosition(session.content, options.symbol, options.line);\n\t\t\tif (!position) {\n\t\t\t\treturn `Symbol \"${options.symbol}\" not found in ${this.displayPath(absolutePath)}.`;\n\t\t\t}\n\t\t\trange = {\n\t\t\t\tstart: position,\n\t\t\t\tend: { line: position.line, character: position.character + options.symbol.length },\n\t\t\t};\n\t\t} else if (options.line !== undefined && options.line >= 1 && options.line <= contentLines.length) {\n\t\t\tconst lineIndex = options.line - 1;\n\t\t\trange = {\n\t\t\t\tstart: { line: lineIndex, character: 0 },\n\t\t\t\tend: { line: lineIndex, character: contentLines[lineIndex].length },\n\t\t\t};\n\t\t} else {\n\t\t\trange = {\n\t\t\t\tstart: { line: 0, character: 0 },\n\t\t\t\tend: {\n\t\t\t\t\tline: Math.max(0, contentLines.length - 1),\n\t\t\t\t\tcharacter: contentLines[contentLines.length - 1]?.length ?? 0,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\t// Servers derive quick fixes from the diagnostics passed in the context,\n\t\t// so make sure we have them before asking for code actions.\n\t\tlet published = session.client.getPublishedDiagnostics(absolutePath);\n\t\tif (published.length === 0) {\n\t\t\ttry {\n\t\t\t\tpublished = await session.client.getDiagnostics(\n\t\t\t\t\tabsolutePath,\n\t\t\t\t\tsession.content,\n\t\t\t\t\tthis.config.settleMs,\n\t\t\t\t\tthis.config.firstSettleMs,\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\t// Code actions may still be available without diagnostics context.\n\t\t\t}\n\t\t}\n\t\tconst diagnostics = published.filter((diagnostic) => rangesOverlap(diagnostic.range, range));\n\t\ttry {\n\t\t\tconst result = await session.client.sendRequest(\n\t\t\t\t\"textDocument/codeAction\",\n\t\t\t\t{\n\t\t\t\t\ttextDocument: { uri: session.uri },\n\t\t\t\t\trange,\n\t\t\t\t\tcontext: { diagnostics, ...(options.kind ? { only: [options.kind] } : {}) },\n\t\t\t\t},\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tconst actions = normalizeCodeActions(result);\n\t\t\tif (actions.length === 0) {\n\t\t\t\treturn \"No code actions available at this position.\";\n\t\t\t}\n\t\t\tconst describe = (action: NormalizedCodeAction): string =>\n\t\t\t\t`- ${action.title}${action.kind ? ` (${action.kind})` : \"\"}`;\n\t\t\tlet chosen: NormalizedCodeAction | undefined;\n\t\t\tif (options.title) {\n\t\t\t\tconst wanted = options.title.toLowerCase();\n\t\t\t\tchosen =\n\t\t\t\t\tactions.find((action) => action.title.toLowerCase() === wanted) ??\n\t\t\t\t\tactions.find((action) => action.title.toLowerCase().includes(wanted));\n\t\t\t\tif (!chosen) {\n\t\t\t\t\treturn `No code action matching \"${options.title}\". Available:\\n${actions.map(describe).join(\"\\n\")}`;\n\t\t\t\t}\n\t\t\t} else if (actions.length === 1) {\n\t\t\t\tchosen = actions[0];\n\t\t\t} else {\n\t\t\t\treturn `Multiple code actions available; rerun with a title to apply one:\\n${actions.map(describe).join(\"\\n\")}`;\n\t\t\t}\n\t\t\treturn await this.applyCodeAction(session.client, chosen, signal);\n\t\t} catch (error) {\n\t\t\treturn this.describeRequestError(absolutePath, error);\n\t\t}\n\t}\n\n\tprivate async applyCodeAction(\n\t\tclient: LspClient,\n\t\taction: NormalizedCodeAction,\n\t\tsignal?: AbortSignal,\n\t): Promise<string> {\n\t\tlet edit = action.edit;\n\t\tif (!edit) {\n\t\t\t// Servers may defer the edit to codeAction/resolve.\n\t\t\ttry {\n\t\t\t\tconst resolved = (await client.sendRequest(\"codeAction/resolve\", action.raw, signal)) as {\n\t\t\t\t\tedit?: LspWorkspaceEdit;\n\t\t\t\t} | null;\n\t\t\t\tedit = resolved?.edit;\n\t\t\t} catch {\n\t\t\t\t// Fall back to the command below.\n\t\t\t}\n\t\t}\n\t\tif (edit && normalizeWorkspaceEdit(edit).length > 0) {\n\t\t\tconst { summary } = await this.applyWorkspaceEdit(client, edit);\n\t\t\treturn `Applied \"${action.title}\":\\n${summary}`;\n\t\t}\n\t\tif (action.command) {\n\t\t\t// Command-based actions apply their edits via workspace/applyEdit.\n\t\t\tthis.serverApplyEditSummaries = [];\n\t\t\tawait client.sendRequest(\n\t\t\t\t\"workspace/executeCommand\",\n\t\t\t\t{ command: action.command.command, arguments: action.command.arguments ?? [] },\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tconst summaries = this.serverApplyEditSummaries;\n\t\t\tthis.serverApplyEditSummaries = [];\n\t\t\tif (summaries.length > 0) {\n\t\t\t\treturn `Applied \"${action.title}\":\\n${summaries.join(\"\\n\")}`;\n\t\t\t}\n\t\t\treturn `Executed \"${action.title}\" (no workspace edits reported).`;\n\t\t}\n\t\treturn `Code action \"${action.title}\" produced no edits.`;\n\t}\n\n\t/**\n\t * Apply a WorkspaceEdit to disk, re-sync open documents, and notify the\n\t * server about files it does not have open.\n\t */\n\tprivate async applyWorkspaceEdit(\n\t\tclient: LspClient,\n\t\tedit: LspWorkspaceEdit,\n\t): Promise<{ summary: string; changedPaths: string[] }> {\n\t\tconst operations = normalizeWorkspaceEdit(edit);\n\t\tfor (const operation of operations) {\n\t\t\tthis.assertWorkspaceEditOperationInRoot(client, operation);\n\t\t}\n\n\t\tconst lines: string[] = [];\n\t\tconst changedPaths: string[] = [];\n\t\tfor (const operation of operations) {\n\t\t\tif (operation.kind === \"edit\") {\n\t\t\t\tconst path = uriToPath(operation.uri);\n\t\t\t\tawait withFileMutationQueue(path, async () => {\n\t\t\t\t\tconst content = await readFile(path, \"utf-8\").catch(() => \"\");\n\t\t\t\t\tawait writeFile(path, applyTextEdits(content, operation.edits), \"utf-8\");\n\t\t\t\t});\n\t\t\t\tchangedPaths.push(path);\n\t\t\t\tlines.push(\n\t\t\t\t\t`${this.displayPath(path)} (${operation.edits.length} edit${operation.edits.length === 1 ? \"\" : \"s\"})`,\n\t\t\t\t);\n\t\t\t} else if (operation.kind === \"create\") {\n\t\t\t\tconst path = uriToPath(operation.uri);\n\t\t\t\tawait mkdir(dirname(path), { recursive: true });\n\t\t\t\tawait writeFile(path, \"\", { flag: \"a\" });\n\t\t\t\tchangedPaths.push(path);\n\t\t\t\tlines.push(`created ${this.displayPath(path)}`);\n\t\t\t} else if (operation.kind === \"rename\") {\n\t\t\t\tconst oldPath = uriToPath(operation.oldUri);\n\t\t\t\tconst newPath = uriToPath(operation.newUri);\n\t\t\t\tawait mkdir(dirname(newPath), { recursive: true });\n\t\t\t\tawait fsRename(oldPath, newPath);\n\t\t\t\tchangedPaths.push(newPath);\n\t\t\t\tlines.push(`renamed ${this.displayPath(oldPath)} -> ${this.displayPath(newPath)}`);\n\t\t\t} else {\n\t\t\t\tconst path = uriToPath(operation.uri);\n\t\t\t\tawait rm(path, { force: true });\n\t\t\t\tlines.push(`deleted ${this.displayPath(path)}`);\n\t\t\t}\n\t\t}\n\n\t\tconst unopenedPaths: string[] = [];\n\t\tfor (const path of changedPaths) {\n\t\t\tif (client.isDocumentOpen(path)) {\n\t\t\t\tconst content = await readFile(path, \"utf-8\").catch(() => undefined);\n\t\t\t\tif (content !== undefined) {\n\t\t\t\t\tawait client.openDocument(path, content);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tunopenedPaths.push(path);\n\t\t\t}\n\t\t}\n\t\tclient.notifyFilesChanged(unopenedPaths);\n\t\treturn { summary: lines.join(\"\\n\"), changedPaths };\n\t}\n\n\tprivate assertWorkspaceEditOperationInRoot(client: LspClient, operation: NormalizedWorkspaceOperation): void {\n\t\tif (operation.kind === \"rename\") {\n\t\t\tthis.assertWorkspaceEditPathInRoot(client, uriToPath(operation.oldUri));\n\t\t\tthis.assertWorkspaceEditPathInRoot(client, uriToPath(operation.newUri));\n\t\t\treturn;\n\t\t}\n\t\tthis.assertWorkspaceEditPathInRoot(client, uriToPath(operation.uri));\n\t}\n\n\tprivate assertWorkspaceEditPathInRoot(client: LspClient, absolutePath: string): void {\n\t\tif (!isPathInsideRoot(client.rootDir, absolutePath)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Refusing to apply LSP workspace edit outside workspace root: ${this.displayPath(absolutePath)}`,\n\t\t\t);\n\t\t}\n\t}\n\n\t/** Re-sync open documents that changed on disk outside edit/write (best-effort). */\n\tprivate async refreshStale(client: LspClient, excludePath: string): Promise<void> {\n\t\ttry {\n\t\t\tawait client.refreshStaleDocuments(excludePath);\n\t\t} catch {\n\t\t\t// Staleness refresh must never fail the operation that triggered it.\n\t\t}\n\t}\n\n\tprivate appendSymbolLines(symbols: LspDocumentSymbol[], depth: number, lines: string[]): void {\n\t\tfor (const symbol of symbols) {\n\t\t\tconst range = symbol.selectionRange ?? symbol.location?.range;\n\t\t\tconst line = range ? `:${range.start.line + 1}` : \"\";\n\t\t\tconst kind = SYMBOL_KIND_NAMES[symbol.kind] ?? \"symbol\";\n\t\t\tlines.push(`${\" \".repeat(depth)}${symbol.name} (${kind})${line}`);\n\t\t\tif (symbol.children && symbol.children.length > 0) {\n\t\t\t\tthis.appendSymbolLines(symbol.children, depth + 1, lines);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async formatLocation(location: LspLocation): Promise<string> {\n\t\tconst path = uriToPath(location.uri);\n\t\tconst line = location.range.start.line + 1;\n\t\tconst column = location.range.start.character + 1;\n\t\tlet snippet = \"\";\n\t\ttry {\n\t\t\tconst content = await readFile(path, \"utf-8\");\n\t\t\tconst text = content.split(\"\\n\")[location.range.start.line]?.trim();\n\t\t\tif (text) {\n\t\t\t\tsnippet = ` ${text}`;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Snippets are best-effort.\n\t\t}\n\t\treturn `${this.displayPath(path)}:${line}:${column}${snippet}`;\n\t}\n\n\tprivate noServerMessage(absolutePath: string): string {\n\t\tconst ext = extname(absolutePath) || \"(no extension)\";\n\t\treturn `No language server configured for ${ext} files. Configure one under lsp.servers in settings.`;\n\t}\n\n\tprivate describeRequestError(absolutePath: string, error: unknown): string {\n\t\tconst server = this.findServer(absolutePath);\n\t\tconst name = server?.name ?? \"unknown\";\n\t\treturn `lsp(${name}): ${error instanceof Error ? error.message : String(error)}`;\n\t}\n\n\tprivate displayPath(absolutePath: string): string {\n\t\tconst rel = relative(this.cwd, absolutePath);\n\t\treturn rel && !rel.startsWith(\"..\") && !isAbsolute(rel) ? rel : absolutePath;\n\t}\n\n\tprivate findServer(absolutePath: string): ResolvedLspServerConfig | undefined {\n\t\tconst ext = extname(absolutePath).toLowerCase();\n\t\tif (!ext) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this.config.servers.find((server) => server.fileExtensions.includes(ext));\n\t}\n\n\tprivate findRoot(absolutePath: string, rootMarkers: string[]): string {\n\t\t// Markers are priority-ordered: a tsconfig.json anywhere up the tree beats\n\t\t// a closer package.json. This keeps monorepo subpackages rooted at the\n\t\t// directory that actually carries the language configuration.\n\t\tfor (const marker of rootMarkers) {\n\t\t\tlet dir = dirname(absolutePath);\n\t\t\twhile (true) {\n\t\t\t\tif (existsSync(join(dir, marker))) {\n\t\t\t\t\treturn dir;\n\t\t\t\t}\n\t\t\t\tconst parent = dirname(dir);\n\t\t\t\tif (parent === dir) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdir = parent;\n\t\t\t}\n\t\t}\n\t\tconst rel = relative(this.cwd, absolutePath);\n\t\tconst isUnderCwd = rel !== \"\" && !rel.startsWith(\"..\") && !rel.includes(\":\");\n\t\treturn isUnderCwd ? this.cwd : dirname(absolutePath);\n\t}\n\n\tprivate getClient(server: ResolvedLspServerConfig, absolutePath: string): LspClient {\n\t\tconst root = this.findRoot(absolutePath, server.rootMarkers);\n\t\tconst key = `${server.name}\\u0000${root}`;\n\t\tthis.lastUsedAt.set(key, Date.now());\n\t\tconst existing = this.clients.get(key);\n\t\tif (existing?.isAlive) {\n\t\t\treturn existing;\n\t\t}\n\t\texisting?.dispose();\n\t\tlet clientRef!: LspClient;\n\t\tconst client = new LspClient({\n\t\t\tserverName: server.name,\n\t\t\tcommand: server.command,\n\t\t\trootDir: root,\n\t\t\tinitializationOptions: server.initializationOptions,\n\t\t\tsettings: server.settings,\n\t\t\ttracer: this.tracer,\n\t\t\tonApplyEdit: async (edit) => {\n\t\t\t\tconst { summary } = await this.applyWorkspaceEdit(clientRef, edit as LspWorkspaceEdit);\n\t\t\t\tthis.serverApplyEditSummaries.push(summary);\n\t\t\t\treturn true;\n\t\t\t},\n\t\t});\n\t\tclientRef = client;\n\t\tthis.clients.set(key, client);\n\t\treturn client;\n\t}\n\n\tprivate async handleClientError(\n\t\tserver: ResolvedLspServerConfig,\n\t\tclient: LspClient,\n\t\terror: unknown,\n\t\tsignal?: AbortSignal,\n\t): Promise<LspClientErrorResult> {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tif (client.isAlive && !client.startFailed) {\n\t\t\t// Request-level failure on a started, healthy server: report it without\n\t\t\t// counting toward the start-failure breaker.\n\t\t\treturn { retry: false, message: `lsp(${server.name}): ${message}` };\n\t\t}\n\n\t\tthis.removeFailedClient(client);\n\t\tconst existingFailure = this.startFailures.get(server.name);\n\t\tif (!this.disposed && !existingFailure?.reported && message.includes(\"ENOENT\")) {\n\t\t\tconst installResult = await this.tryInstallMissingServer(server, signal);\n\t\t\tif (installResult.retry) {\n\t\t\t\treturn { retry: true };\n\t\t\t}\n\t\t\treturn { retry: false, message: this.recordStartFailure(server, message, installResult.message) };\n\t\t}\n\n\t\treturn { retry: false, message: this.recordStartFailure(server, message) };\n\t}\n\n\tprivate removeFailedClient(client: LspClient): void {\n\t\t// Remove and dispose the failed client (this also kills a process stuck\n\t\t// in the handshake) so the next call attempts a genuinely fresh start\n\t\t// instead of replaying the memoized failure.\n\t\tfor (const [key, value] of this.clients) {\n\t\t\tif (value === client) {\n\t\t\t\tthis.clients.delete(key);\n\t\t\t\tthis.lastUsedAt.delete(key);\n\t\t\t}\n\t\t}\n\t\tclient.dispose();\n\t}\n\n\tprivate recordStartFailure(\n\t\tserver: ResolvedLspServerConfig,\n\t\tmessage: string,\n\t\textraMessage?: string,\n\t): string | undefined {\n\t\tconst failure = this.startFailures.get(server.name) ?? { count: 0, reported: false };\n\t\tfailure.count++;\n\t\tthis.startFailures.set(server.name, failure);\n\t\tif (this.disposed || failure.reported) {\n\t\t\treturn undefined;\n\t\t}\n\t\tfailure.reported = true;\n\t\tconst hint = message.includes(\"ENOENT\") ? server.installHint : undefined;\n\t\tconst extra = extraMessage ? `. ${extraMessage}` : \"\";\n\t\treturn `lsp(${server.name}): ${message}${hint ? `. ${hint}` : \"\"}${extra} (further failures for this server will be silent)`;\n\t}\n\n\tprivate async tryInstallMissingServer(\n\t\tserver: ResolvedLspServerConfig,\n\t\tsignal?: AbortSignal,\n\t): Promise<LspInstallAttemptResult> {\n\t\tconst recipe = server.installRecipe;\n\t\tconst interaction = this.hostInteraction;\n\t\tconst existing = this.installAttempts.get(server.name);\n\t\tif (existing) {\n\t\t\treturn existing.catch((error: unknown) => this.createInstallAttemptFailure(error));\n\t\t}\n\t\tif (!recipe || !interaction || this.installPromptsUsed.has(server.name)) {\n\t\t\treturn { retry: false };\n\t\t}\n\n\t\tconst attempt = this.runInstallPrompt(server, recipe, interaction, signal).finally(() => {\n\t\t\tthis.installAttempts.delete(server.name);\n\t\t});\n\t\tthis.installAttempts.set(server.name, attempt);\n\t\treturn attempt.catch((error: unknown) => this.createInstallAttemptFailure(error));\n\t}\n\n\tprivate createInstallAttemptFailure(error: unknown): LspInstallAttemptResult {\n\t\treturn {\n\t\t\tretry: false,\n\t\t\tmessage: `LSP install prompt failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t};\n\t}\n\n\tprivate async runInstallPrompt(\n\t\tserver: ResolvedLspServerConfig,\n\t\trecipe: LspInstallRecipe,\n\t\tinteraction: HostInteraction,\n\t\tsignal?: AbortSignal,\n\t): Promise<LspInstallAttemptResult> {\n\t\tthis.installPromptsUsed.add(server.name);\n\t\tconst requestId = `lsp-install-${randomUUID()}`;\n\t\tconst decision = await interaction.requestAction(\n\t\t\t{\n\t\t\t\tid: requestId,\n\t\t\t\taction: \"lsp.install_server\",\n\t\t\t\ttitle: `Install ${server.name} language server?`,\n\t\t\t\tmessage: `Volt tried to use LSP for ${server.name}, but ${recipe.binary} is not installed. Install it now and retry diagnostics?`,\n\t\t\t\tconfirmLabel: \"Install\",\n\t\t\t\tcancelLabel: \"Skip\",\n\t\t\t\tcommandPreview: recipe.displayCommand,\n\t\t\t\tblocking: true,\n\t\t\t\tdestructive: false,\n\t\t\t\tmetadata: {\n\t\t\t\t\tserver: server.name,\n\t\t\t\t\tbinary: recipe.binary,\n\t\t\t\t},\n\t\t\t\ttimeoutMs: LSP_INSTALL_REQUEST_TIMEOUT_MS,\n\t\t\t},\n\t\t\t{ signal },\n\t\t);\n\n\t\tif (decision.decision !== \"approved\") {\n\t\t\treturn { retry: false, message: decision.message };\n\t\t}\n\t\tif (signal?.aborted) {\n\t\t\treturn { retry: false, message: \"LSP install cancelled.\" };\n\t\t}\n\n\t\tawait this.emitHostActionUpdate({\n\t\t\tid: requestId,\n\t\t\taction: \"lsp.install_server\",\n\t\t\tstatus: \"running\",\n\t\t\tmessage: `Running ${recipe.displayCommand}`,\n\t\t});\n\t\tlet result: LspInstallCommandResult;\n\t\ttry {\n\t\t\tresult = await this.installRunner(recipe.command, { cwd: this.cwd, signal });\n\t\t} catch (error) {\n\t\t\tconst message = `LSP install failed: ${error instanceof Error ? error.message : String(error)}`;\n\t\t\tawait this.emitHostActionUpdate({\n\t\t\t\tid: requestId,\n\t\t\t\taction: \"lsp.install_server\",\n\t\t\t\tstatus: signal?.aborted ? \"cancelled\" : \"failed\",\n\t\t\t\tmessage,\n\t\t\t});\n\t\t\treturn { retry: false, message };\n\t\t}\n\n\t\tif (result.exitCode !== 0) {\n\t\t\tconst message = this.formatInstallFailure(recipe, result);\n\t\t\tawait this.emitHostActionUpdate({\n\t\t\t\tid: requestId,\n\t\t\t\taction: \"lsp.install_server\",\n\t\t\t\tstatus: \"failed\",\n\t\t\t\tmessage,\n\t\t\t\texitCode: result.exitCode,\n\t\t\t});\n\t\t\treturn { retry: false, message };\n\t\t}\n\n\t\tthis.startFailures.delete(server.name);\n\t\tawait this.emitHostActionUpdate({\n\t\t\tid: requestId,\n\t\t\taction: \"lsp.install_server\",\n\t\t\tstatus: \"completed\",\n\t\t\tmessage: `${server.name} language server installed. Retrying diagnostics.`,\n\t\t\texitCode: result.exitCode,\n\t\t});\n\t\treturn { retry: true };\n\t}\n\n\tprivate formatInstallFailure(recipe: LspInstallRecipe, result: LspInstallCommandResult): string {\n\t\tconst output = result.output.trim();\n\t\tconst summary = `LSP install command failed (${recipe.displayCommand}) with exit code ${result.exitCode ?? \"unknown\"}.`;\n\t\treturn output ? `${summary} Output:\\n${output}` : summary;\n\t}\n\n\tprivate async emitHostActionUpdate(\n\t\tupdate: Parameters<NonNullable<HostInteraction[\"updateAction\"]>>[0],\n\t): Promise<void> {\n\t\ttry {\n\t\t\tawait this.hostInteraction?.updateAction?.(update);\n\t\t} catch {\n\t\t\t// Host action updates are advisory; do not fail the underlying LSP operation.\n\t\t}\n\t}\n\n\tprivate formatDiagnostics(absolutePath: string, diagnostics: LspDiagnostic[]): string | undefined {\n\t\tconst filtered = diagnostics\n\t\t\t.filter((diagnostic) => (diagnostic.severity ?? 1) <= this.config.maxSeverity)\n\t\t\t.sort((a, b) => (a.severity ?? 1) - (b.severity ?? 1) || a.range.start.line - b.range.start.line);\n\t\tif (filtered.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst shown = filtered.slice(0, this.config.maxDiagnostics);\n\t\tconst displayPath = this.displayPath(absolutePath);\n\t\tconst lines = shown.map((diagnostic) => {\n\t\t\tconst severity = SEVERITY_NAMES[diagnostic.severity ?? 1] ?? \"error\";\n\t\t\tconst line = diagnostic.range.start.line + 1;\n\t\t\tconst column = diagnostic.range.start.character + 1;\n\t\t\tconst code =\n\t\t\t\tdiagnostic.code !== undefined\n\t\t\t\t\t? ` [${diagnostic.source ? `${diagnostic.source} ` : \"\"}${diagnostic.code}]`\n\t\t\t\t\t: \"\";\n\t\t\tconst message = diagnostic.message.replace(/\\s+/g, \" \").trim();\n\t\t\treturn `${displayPath}(${line},${column}): ${severity}: ${message}${code}`;\n\t\t});\n\t\tif (filtered.length > shown.length) {\n\t\t\tlines.push(`... and ${filtered.length - shown.length} more`);\n\t\t}\n\t\treturn lines.join(\"\\n\");\n\t}\n}\n"]}
|