@mrclrchtr/supi-lsp 1.7.0 → 1.9.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/README.md +33 -10
- package/node_modules/@mrclrchtr/supi-code-runtime/README.md +13 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/README.md +97 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +53 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +30 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +76 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config.ts +186 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config.ts +11 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-messages.ts +119 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-provider-registry.ts +36 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-tag.ts +31 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context.ts +16 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/debug-registry.ts +255 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +30 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +40 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path.ts +2 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/project-roots.ts +170 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/project.ts +15 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/registry-utils.ts +86 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/session-utils.ts +29 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/session.ts +4 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-command.ts +15 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +41 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +226 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +2 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings.ts +9 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +11 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/terminal.ts +60 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/tool-framework.ts +116 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/types.ts +2 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/package.json +40 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +35 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +68 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +31 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +110 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/src/workspace/context.ts +41 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/src/workspace/runtime.ts +170 -0
- package/node_modules/@mrclrchtr/supi-core/README.md +3 -13
- package/node_modules/@mrclrchtr/supi-core/package.json +13 -8
- package/node_modules/@mrclrchtr/supi-core/src/api.ts +26 -92
- package/node_modules/@mrclrchtr/supi-core/src/config.ts +11 -0
- package/node_modules/@mrclrchtr/supi-core/src/context.ts +16 -0
- package/node_modules/@mrclrchtr/supi-core/src/index.ts +26 -92
- package/node_modules/@mrclrchtr/supi-core/src/path.ts +2 -0
- package/node_modules/@mrclrchtr/supi-core/src/project.ts +15 -0
- package/node_modules/@mrclrchtr/supi-core/src/session.ts +4 -0
- package/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +2 -0
- package/node_modules/@mrclrchtr/supi-core/src/settings.ts +9 -0
- package/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +11 -0
- package/node_modules/@mrclrchtr/supi-core/src/types.ts +2 -0
- package/node_modules/vscode-jsonrpc/License.txt +11 -0
- package/node_modules/vscode-jsonrpc/README.md +69 -0
- package/node_modules/vscode-jsonrpc/browser.d.ts +6 -0
- package/node_modules/vscode-jsonrpc/browser.js +7 -0
- package/node_modules/vscode-jsonrpc/lib/browser/main.d.ts +17 -0
- package/node_modules/vscode-jsonrpc/lib/browser/main.js +76 -0
- package/node_modules/vscode-jsonrpc/lib/browser/ril.d.ts +12 -0
- package/node_modules/vscode-jsonrpc/lib/browser/ril.js +156 -0
- package/node_modules/vscode-jsonrpc/lib/common/api.d.ts +14 -0
- package/node_modules/vscode-jsonrpc/lib/common/api.js +81 -0
- package/node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts +32 -0
- package/node_modules/vscode-jsonrpc/lib/common/cancellation.js +96 -0
- package/node_modules/vscode-jsonrpc/lib/common/connection.d.ts +358 -0
- package/node_modules/vscode-jsonrpc/lib/common/connection.js +1214 -0
- package/node_modules/vscode-jsonrpc/lib/common/disposable.d.ts +9 -0
- package/node_modules/vscode-jsonrpc/lib/common/disposable.js +16 -0
- package/node_modules/vscode-jsonrpc/lib/common/encoding.d.ts +52 -0
- package/node_modules/vscode-jsonrpc/lib/common/encoding.js +70 -0
- package/node_modules/vscode-jsonrpc/lib/common/events.d.ts +39 -0
- package/node_modules/vscode-jsonrpc/lib/common/events.js +128 -0
- package/node_modules/vscode-jsonrpc/lib/common/is.d.ts +7 -0
- package/node_modules/vscode-jsonrpc/lib/common/is.js +35 -0
- package/node_modules/vscode-jsonrpc/lib/common/linkedMap.d.ts +53 -0
- package/node_modules/vscode-jsonrpc/lib/common/linkedMap.js +398 -0
- package/node_modules/vscode-jsonrpc/lib/common/messageBuffer.d.ts +18 -0
- package/node_modules/vscode-jsonrpc/lib/common/messageBuffer.js +152 -0
- package/node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts +77 -0
- package/node_modules/vscode-jsonrpc/lib/common/messageReader.js +197 -0
- package/node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts +60 -0
- package/node_modules/vscode-jsonrpc/lib/common/messageWriter.js +115 -0
- package/node_modules/vscode-jsonrpc/lib/common/messages.d.ts +369 -0
- package/node_modules/vscode-jsonrpc/lib/common/messages.js +306 -0
- package/node_modules/vscode-jsonrpc/lib/common/ral.d.ts +74 -0
- package/node_modules/vscode-jsonrpc/lib/common/ral.js +23 -0
- package/node_modules/vscode-jsonrpc/lib/common/semaphore.d.ts +10 -0
- package/node_modules/vscode-jsonrpc/lib/common/semaphore.js +68 -0
- package/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.d.ts +15 -0
- package/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.js +76 -0
- package/node_modules/vscode-jsonrpc/lib/node/main.d.ts +63 -0
- package/node_modules/vscode-jsonrpc/lib/node/main.js +257 -0
- package/node_modules/vscode-jsonrpc/lib/node/ril.d.ts +13 -0
- package/node_modules/vscode-jsonrpc/lib/node/ril.js +161 -0
- package/node_modules/vscode-jsonrpc/node.cmd +5 -0
- package/node_modules/vscode-jsonrpc/node.d.ts +6 -0
- package/node_modules/vscode-jsonrpc/node.js +7 -0
- package/node_modules/vscode-jsonrpc/package.json +45 -0
- package/node_modules/vscode-jsonrpc/thirdpartynotices.txt +16 -0
- package/node_modules/vscode-jsonrpc/typings/thenable.d.ts +5 -0
- package/node_modules/vscode-languageserver-protocol/License.txt +11 -0
- package/node_modules/vscode-languageserver-protocol/README.md +16 -0
- package/node_modules/vscode-languageserver-protocol/browser.d.ts +6 -0
- package/node_modules/vscode-languageserver-protocol/browser.js +7 -0
- package/node_modules/vscode-languageserver-protocol/lib/browser/main.d.ts +4 -0
- package/node_modules/vscode-languageserver-protocol/lib/browser/main.js +28 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/api.d.ts +58 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/api.js +77 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts +187 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/connection.js +15 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts +51 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/messages.js +44 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.$.d.ts +1 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.$.js +43 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts +86 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.js +42 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts +66 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.js +32 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts +35 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.js +24 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts +3252 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts +37 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.js +22 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.d.ts +341 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.js +74 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts +306 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.js +101 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts +109 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.js +30 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts +38 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.js +21 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlayHint.d.ts +110 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlayHint.js +43 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineCompletion.d.ts +57 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineCompletion.js +22 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineValue.d.ts +86 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineValue.js +30 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.js +943 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts +52 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.js +19 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts +106 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.js +68 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.notebook.d.ts +400 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.notebook.js +214 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts +107 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.js +37 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts +41 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.js +20 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts +223 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.js +57 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts +72 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.js +22 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts +38 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.js +21 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeHierarchy.d.ts +83 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeHierarchy.js +42 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolder.d.ts +74 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolder.js +27 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/utils/is.d.ts +9 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/utils/is.js +46 -0
- package/node_modules/vscode-languageserver-protocol/lib/node/main.d.ts +6 -0
- package/node_modules/vscode-languageserver-protocol/lib/node/main.js +28 -0
- package/node_modules/vscode-languageserver-protocol/metaModel.schema.json +783 -0
- package/node_modules/vscode-languageserver-protocol/node.cmd +5 -0
- package/node_modules/vscode-languageserver-protocol/node.d.ts +6 -0
- package/node_modules/vscode-languageserver-protocol/node.js +7 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/License.txt +11 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/README.md +69 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/browser.d.ts +6 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/browser.js +7 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/browser/main.d.ts +17 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/browser/main.js +76 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/browser/ril.d.ts +12 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/browser/ril.js +156 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/api.d.ts +14 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/api.js +81 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts +32 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/cancellation.js +96 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/connection.d.ts +358 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/connection.js +1212 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/disposable.d.ts +9 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/disposable.js +16 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/encoding.d.ts +52 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/encoding.js +70 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/events.d.ts +39 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/events.js +128 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/is.d.ts +7 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/is.js +35 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/linkedMap.d.ts +53 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/linkedMap.js +398 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageBuffer.d.ts +18 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageBuffer.js +152 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts +77 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageReader.js +197 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts +60 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageWriter.js +115 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messages.d.ts +369 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messages.js +306 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/ral.d.ts +74 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/ral.js +23 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/semaphore.d.ts +10 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/semaphore.js +68 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.d.ts +15 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.js +76 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/node/main.d.ts +63 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/node/main.js +257 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/node/ril.d.ts +13 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/node/ril.js +161 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/node.cmd +5 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/node.d.ts +6 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/node.js +7 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/package.json +45 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/thirdpartynotices.txt +16 -0
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/typings/thenable.d.ts +5 -0
- package/node_modules/vscode-languageserver-protocol/package.json +45 -0
- package/node_modules/vscode-languageserver-protocol/thirdpartynotices.txt +31 -0
- package/node_modules/vscode-languageserver-types/License.txt +11 -0
- package/node_modules/vscode-languageserver-types/README.md +17 -0
- package/node_modules/vscode-languageserver-types/lib/esm/main.d.ts +3139 -0
- package/node_modules/vscode-languageserver-types/lib/esm/main.js +2222 -0
- package/node_modules/vscode-languageserver-types/lib/esm/package.json +3 -0
- package/node_modules/vscode-languageserver-types/lib/umd/main.d.ts +3139 -0
- package/node_modules/vscode-languageserver-types/lib/umd/main.js +2272 -0
- package/node_modules/vscode-languageserver-types/package.json +38 -0
- package/node_modules/vscode-languageserver-types/thirdpartynotices.txt +16 -0
- package/package.json +9 -6
- package/src/config/config.ts +1 -1
- package/src/handlers/diagnostic-injection.ts +182 -0
- package/src/handlers/session-lifecycle.ts +149 -0
- package/src/handlers/status-command.ts +38 -0
- package/src/handlers/workspace-recovery.ts +92 -0
- package/src/lsp.ts +18 -414
- package/src/manager/capability-index.ts +24 -0
- package/src/manager/client-pool.ts +33 -0
- package/src/manager/diagnostic-store.ts +51 -0
- package/src/manager/manager-helpers.ts +1 -1
- package/src/manager/manager-workspace-symbol.ts +1 -1
- package/src/manager/manager.ts +1 -1
- package/src/manager/recovery-coordinator.ts +37 -0
- package/src/manager/workspace-router.ts +44 -0
- package/src/provider/lsp-semantic-provider.ts +156 -0
- package/src/session/runtime-registration.ts +39 -0
- package/src/session/scanner.ts +1 -1
- package/src/session/service-registry.ts +1 -1
- package/src/session/settings-registration.ts +1 -1
- package/src/tool/guidance.ts +5 -14
- package/src/tool/names.ts +12 -4
- package/src/tool/register-tools.ts +2 -4
- package/src/tool/service-actions.ts +141 -0
- package/src/tool/tool-specs.ts +93 -93
- package/src/utils.ts +1 -1
- package/src/workspace-change.ts +40 -0
- package/node_modules/@mrclrchtr/supi-core/src/extension.ts +0 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vscode-languageserver-types",
|
|
3
|
+
"description": "Types used by the Language server for node",
|
|
4
|
+
"version": "3.17.5",
|
|
5
|
+
"author": "Microsoft Corporation",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/Microsoft/vscode-languageserver-node.git",
|
|
10
|
+
"directory": "types"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/Microsoft/vscode-languageserver-node/issues"
|
|
14
|
+
},
|
|
15
|
+
"main": "./lib/umd/main.js",
|
|
16
|
+
"typings": "./lib/umd/main",
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"browser": "./lib/esm/main.js",
|
|
20
|
+
"import": "./lib/esm/main.js",
|
|
21
|
+
"default": "./lib/umd/main.js"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"prepublishOnly": "echo \"⛔ Can only publish from a secure pipeline ⛔\" && node ../build/npm/fail",
|
|
26
|
+
"prepack": "npm run all:publish",
|
|
27
|
+
"compile": "node ../build/bin/tsc -b ./tsconfig.json",
|
|
28
|
+
"clean": "node ../node_modules/.bin/rimraf lib",
|
|
29
|
+
"watch": "node ../build/bin/tsc -b ./tsconfig.watch.json -w",
|
|
30
|
+
"lint": "node ../node_modules/eslint/bin/eslint.js --ext ts src",
|
|
31
|
+
"test": "node ../node_modules/mocha/bin/_mocha",
|
|
32
|
+
"all": "npm run clean && npm run compile && npm run lint && npm run test",
|
|
33
|
+
"compile:esm": "node ../build/bin/tsc -b ./tsconfig.esm.publish.json && node ../build/bin/fix-esm",
|
|
34
|
+
"compile:umd": "node ../build/bin/tsc -b ./tsconfig.umd.publish.json",
|
|
35
|
+
"all:publish": "git clean -xfd . && npm install && npm run compile:esm && npm run compile:umd && npm run lint && npm run test",
|
|
36
|
+
"preversion": "npm test"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
NOTICES AND INFORMATION
|
|
2
|
+
Do Not Translate or Localize
|
|
3
|
+
|
|
4
|
+
This software incorporates material from third parties.
|
|
5
|
+
Microsoft makes certain open source code available at https://3rdpartysource.microsoft.com,
|
|
6
|
+
or you may send a check or money order for US $5.00, including the product name,
|
|
7
|
+
the open source component name, platform, and version number, to:
|
|
8
|
+
|
|
9
|
+
Source Code Compliance Team
|
|
10
|
+
Microsoft Corporation
|
|
11
|
+
One Microsoft Way
|
|
12
|
+
Redmond, WA 98052
|
|
13
|
+
USA
|
|
14
|
+
|
|
15
|
+
Notwithstanding any other terms, you may reverse engineer this software to the extent
|
|
16
|
+
required to debug changes to any libraries licensed under the GNU Lesser General Public License.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mrclrchtr/supi-lsp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"description": "SuPi LSP extension — Language Server Protocol integration for pi",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -26,9 +26,11 @@
|
|
|
26
26
|
"vscode-jsonrpc": "^8.2.1",
|
|
27
27
|
"vscode-languageserver-protocol": "^3.17.5",
|
|
28
28
|
"vscode-languageserver-types": "^3.17.5",
|
|
29
|
-
"@mrclrchtr/supi-
|
|
29
|
+
"@mrclrchtr/supi-code-runtime": "1.9.0",
|
|
30
|
+
"@mrclrchtr/supi-core": "1.9.0"
|
|
30
31
|
},
|
|
31
32
|
"bundledDependencies": [
|
|
33
|
+
"@mrclrchtr/supi-code-runtime",
|
|
32
34
|
"@mrclrchtr/supi-core",
|
|
33
35
|
"vscode-jsonrpc",
|
|
34
36
|
"vscode-languageserver-protocol",
|
|
@@ -56,14 +58,15 @@
|
|
|
56
58
|
},
|
|
57
59
|
"pi": {
|
|
58
60
|
"extensions": [
|
|
59
|
-
"./src/extension.ts"
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
"./src/extension.ts"
|
|
62
|
+
],
|
|
63
|
+
"image": "https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-lsp/assets/logo.png"
|
|
62
64
|
},
|
|
63
65
|
"main": "src/api.ts",
|
|
64
66
|
"exports": {
|
|
65
67
|
"./api": "./src/api.ts",
|
|
66
68
|
"./extension": "./src/extension.ts",
|
|
67
|
-
"./package.json": "./package.json"
|
|
69
|
+
"./package.json": "./package.json",
|
|
70
|
+
"./provider/lsp-semantic-provider": "./src/provider/lsp-semantic-provider.ts"
|
|
68
71
|
}
|
|
69
72
|
}
|
package/src/config/config.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import * as path from "node:path";
|
|
5
|
-
import { loadSupiConfigForScope } from "@mrclrchtr/supi-core/
|
|
5
|
+
import { loadSupiConfigForScope } from "@mrclrchtr/supi-core/config";
|
|
6
6
|
import type { LspConfig, ServerConfig } from "./types.ts";
|
|
7
7
|
|
|
8
8
|
// Load defaults at module level — resolve relative to this file.
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
// Diagnostic injection handlers — before_agent_start and context.
|
|
2
|
+
//
|
|
3
|
+
// Extracted from lsp.ts to keep each orchestration concern in its own module.
|
|
4
|
+
|
|
5
|
+
import type {
|
|
6
|
+
BeforeAgentStartEvent,
|
|
7
|
+
BeforeAgentStartEventResult,
|
|
8
|
+
ContextEvent,
|
|
9
|
+
ExtensionAPI,
|
|
10
|
+
ExtensionContext,
|
|
11
|
+
} from "@earendil-works/pi-coding-agent";
|
|
12
|
+
import { pruneAndReorderContextMessages, restorePromptContent } from "@mrclrchtr/supi-core/context";
|
|
13
|
+
import type { Diagnostic } from "../config/types.ts";
|
|
14
|
+
import {
|
|
15
|
+
diagnosticsContextFingerprint,
|
|
16
|
+
formatDiagnosticsContext,
|
|
17
|
+
MAX_DETAILED_DIAGNOSTICS,
|
|
18
|
+
} from "../diagnostics/diagnostic-context.ts";
|
|
19
|
+
import { formatDiagnosticsDisplayContent } from "../diagnostics/diagnostic-display.ts";
|
|
20
|
+
import { assessStaleDiagnostics } from "../diagnostics/stale-diagnostics.ts";
|
|
21
|
+
// Force re-open files with module-resolution errors
|
|
22
|
+
import { forceResyncStaleModuleFiles } from "../manager/manager-stale-resync.ts";
|
|
23
|
+
import type { OutstandingDiagnosticSummaryEntry } from "../manager/manager-types.ts";
|
|
24
|
+
import {
|
|
25
|
+
ensureLspToolsActive,
|
|
26
|
+
type LspRuntimeState,
|
|
27
|
+
refreshProjectServers,
|
|
28
|
+
removeLspTools,
|
|
29
|
+
} from "../session/lsp-state.ts";
|
|
30
|
+
import { persistLspInactiveState } from "../session/tree-persist.ts";
|
|
31
|
+
import { updateLspUi } from "../ui/ui.ts";
|
|
32
|
+
import { refreshWorkspaceSentinels } from "../workspace-change.ts";
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Register handlers for before_agent_start (diagnostic injection) and context
|
|
36
|
+
* (lsp-context message pruning / prompt-content restoration).
|
|
37
|
+
*/
|
|
38
|
+
export function registerDiagnosticInjectionHandlers(
|
|
39
|
+
pi: ExtensionAPI,
|
|
40
|
+
state: LspRuntimeState,
|
|
41
|
+
): void {
|
|
42
|
+
// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: before_agent_start coordinates sentinel recovery, pruning, refresh, and diagnostic injection.
|
|
43
|
+
pi.on("before_agent_start", async (_event: BeforeAgentStartEvent, ctx: ExtensionContext) => {
|
|
44
|
+
if (!state.manager || !state.lspActive) {
|
|
45
|
+
removeLspTools(pi);
|
|
46
|
+
if (!state.manager && state.lspActive) {
|
|
47
|
+
persistLspInactiveState(pi, state);
|
|
48
|
+
}
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
ensureLspToolsActive(pi);
|
|
53
|
+
|
|
54
|
+
refreshWorkspaceSentinels(state, ctx.cwd);
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Two-pass prune/refresh pattern:
|
|
58
|
+
*
|
|
59
|
+
* 1. Prune files deleted since the last turn and send didClose.
|
|
60
|
+
* 2. Re-sync remaining open docs and wait for diagnostics to settle.
|
|
61
|
+
* 3. Prune *again* — late publishDiagnostics notifications (already
|
|
62
|
+
* in-flight when step 1 ran) may have re-created stale entries for
|
|
63
|
+
* files that no longer exist. `getAllDiagnostics()` also filters
|
|
64
|
+
* by existence, so this second pass is belt-and-suspenders.
|
|
65
|
+
*/
|
|
66
|
+
state.manager.pruneMissingFiles();
|
|
67
|
+
try {
|
|
68
|
+
await state.manager.refreshOpenDiagnostics();
|
|
69
|
+
} catch {
|
|
70
|
+
// Refresh failures must not prevent agent startup
|
|
71
|
+
}
|
|
72
|
+
state.manager.pruneMissingFiles();
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
await forceResyncStaleModuleFiles(state.manager, ctx.cwd);
|
|
76
|
+
} catch {
|
|
77
|
+
// Best-effort: don't fail the agent turn
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
refreshProjectServers(state);
|
|
81
|
+
updateLspUi(ctx, state.manager, state.inlineSeverity, state.projectServers);
|
|
82
|
+
|
|
83
|
+
const diagnostics = state.manager.getOutstandingDiagnosticSummary(state.inlineSeverity);
|
|
84
|
+
const totalDiags = diagnostics.reduce((sum, d) => sum + d.total, 0);
|
|
85
|
+
const detailed =
|
|
86
|
+
totalDiags <= MAX_DETAILED_DIAGNOSTICS
|
|
87
|
+
? state.manager.getOutstandingDiagnostics(state.inlineSeverity)
|
|
88
|
+
: undefined;
|
|
89
|
+
const staleAssessment = state.staleSuspected
|
|
90
|
+
? assessStaleDiagnostics(state.manager.getOutstandingDiagnostics(4))
|
|
91
|
+
: { suspected: false, matchedFiles: [], warning: null };
|
|
92
|
+
state.staleSuspected = staleAssessment.suspected;
|
|
93
|
+
|
|
94
|
+
const staleWarning = staleAssessment.suspected ? staleAssessment.warning : null;
|
|
95
|
+
const content = formatDiagnosticsContext(diagnostics, 3, detailed, staleWarning);
|
|
96
|
+
const fingerprint = diagnosticsContextFingerprint(content);
|
|
97
|
+
|
|
98
|
+
if (!content) {
|
|
99
|
+
state.lastDiagnosticsFingerprint = null;
|
|
100
|
+
state.currentContextToken = null;
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (fingerprint === state.lastDiagnosticsFingerprint) {
|
|
105
|
+
state.currentContextToken = null;
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
state.lastDiagnosticsFingerprint = fingerprint;
|
|
110
|
+
state.currentContextToken = `lsp-context-${++state.contextCounter}`;
|
|
111
|
+
|
|
112
|
+
return buildDiagnosticResult(
|
|
113
|
+
diagnostics,
|
|
114
|
+
detailed,
|
|
115
|
+
state.inlineSeverity,
|
|
116
|
+
state.currentContextToken,
|
|
117
|
+
staleWarning,
|
|
118
|
+
);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
pi.on("context", (event: ContextEvent) => {
|
|
122
|
+
const messages = pruneAndReorderContextMessages(
|
|
123
|
+
event.messages as Array<{
|
|
124
|
+
role?: string;
|
|
125
|
+
customType?: string;
|
|
126
|
+
content?: unknown;
|
|
127
|
+
details?: unknown;
|
|
128
|
+
}>,
|
|
129
|
+
"lsp-context",
|
|
130
|
+
state.currentContextToken,
|
|
131
|
+
);
|
|
132
|
+
const contextMessages = restorePromptContent(
|
|
133
|
+
messages,
|
|
134
|
+
"lsp-context",
|
|
135
|
+
state.currentContextToken,
|
|
136
|
+
) as typeof event.messages;
|
|
137
|
+
|
|
138
|
+
if (
|
|
139
|
+
contextMessages.length === event.messages.length &&
|
|
140
|
+
contextMessages.every((message, index) => message === event.messages[index])
|
|
141
|
+
) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
return { messages: contextMessages };
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** Build the `lsp-context` custom message used to surface outstanding diagnostics. */
|
|
149
|
+
// biome-ignore lint/complexity/useMaxParams: wrapper groups the prompt payload fields in one place.
|
|
150
|
+
function buildDiagnosticResult(
|
|
151
|
+
diagnostics: OutstandingDiagnosticSummaryEntry[],
|
|
152
|
+
detailed:
|
|
153
|
+
| {
|
|
154
|
+
file: string;
|
|
155
|
+
diagnostics: Diagnostic[];
|
|
156
|
+
}[]
|
|
157
|
+
| undefined,
|
|
158
|
+
severity: number,
|
|
159
|
+
token: string,
|
|
160
|
+
staleWarning?: string | null,
|
|
161
|
+
): BeforeAgentStartEventResult {
|
|
162
|
+
return {
|
|
163
|
+
message: {
|
|
164
|
+
customType: "lsp-context",
|
|
165
|
+
content: formatDiagnosticsDisplayContent(diagnostics, detailed),
|
|
166
|
+
display: true,
|
|
167
|
+
details: {
|
|
168
|
+
contextToken: token,
|
|
169
|
+
promptContent: formatDiagnosticsContext(diagnostics, 3, detailed, staleWarning),
|
|
170
|
+
inlineSeverity: severity,
|
|
171
|
+
...(staleWarning ? { staleWarning } : {}),
|
|
172
|
+
diagnostics: diagnostics.map((d) => ({
|
|
173
|
+
file: d.file,
|
|
174
|
+
errors: d.errors,
|
|
175
|
+
warnings: d.warnings,
|
|
176
|
+
information: d.information,
|
|
177
|
+
hints: d.hints,
|
|
178
|
+
})),
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
};
|
|
182
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// Session lifecycle handlers — session_start, session_shutdown, and agent_end.
|
|
2
|
+
//
|
|
3
|
+
// Extracted from lsp.ts to keep each orchestration concern in its own module.
|
|
4
|
+
|
|
5
|
+
import type {
|
|
6
|
+
AgentEndEvent,
|
|
7
|
+
ExtensionAPI,
|
|
8
|
+
ExtensionContext,
|
|
9
|
+
SessionStartEvent,
|
|
10
|
+
} from "@earendil-works/pi-coding-agent";
|
|
11
|
+
import type { WorkspaceRuntime } from "@mrclrchtr/supi-code-runtime/api";
|
|
12
|
+
import { loadConfig, resolveLanguageAlias } from "../config/config.ts";
|
|
13
|
+
import { clearTsconfigCache } from "../config/tsconfig-scope.ts";
|
|
14
|
+
import { scanWorkspaceSentinels } from "../diagnostics/workspace-sentinels.ts";
|
|
15
|
+
import { LspManager } from "../manager/manager.ts";
|
|
16
|
+
import {
|
|
17
|
+
disableLspState,
|
|
18
|
+
ensureLspToolsActive,
|
|
19
|
+
type LspRuntimeState,
|
|
20
|
+
refreshProjectServers,
|
|
21
|
+
} from "../session/lsp-state.ts";
|
|
22
|
+
import {
|
|
23
|
+
registerLspCapabilities,
|
|
24
|
+
unregisterLspCapabilities,
|
|
25
|
+
} from "../session/runtime-registration.ts";
|
|
26
|
+
import {
|
|
27
|
+
scanMissingServers,
|
|
28
|
+
scanProjectCapabilities,
|
|
29
|
+
startDetectedServers,
|
|
30
|
+
} from "../session/scanner.ts";
|
|
31
|
+
import {
|
|
32
|
+
clearSessionLspService,
|
|
33
|
+
SessionLspService,
|
|
34
|
+
setSessionLspServiceState,
|
|
35
|
+
} from "../session/service-registry.ts";
|
|
36
|
+
import { loadLspSettings } from "../session/settings-registration.ts";
|
|
37
|
+
import { persistLspActiveState, persistLspInactiveState } from "../session/tree-persist.ts";
|
|
38
|
+
import { buildLspToolPromptSurfaces } from "../tool/guidance.ts";
|
|
39
|
+
import { registerLspTools } from "../tool/register-tools.ts";
|
|
40
|
+
import { updateLspUi } from "../ui/ui.ts";
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Register session lifecycle handlers (start, shutdown, and agent-end cleanup).
|
|
44
|
+
*
|
|
45
|
+
* - `session_start`: initialises the LspManager, starts detected servers, wires
|
|
46
|
+
* dynamic tool guidance, publishes runtime capabilities, and syncs UI state.
|
|
47
|
+
* - `session_shutdown`: tears down the manager and clears runtime state.
|
|
48
|
+
* - `agent_end`: refreshes project-server info and updates the LSP status UI.
|
|
49
|
+
*/
|
|
50
|
+
export function registerSessionLifecycleHandlers(
|
|
51
|
+
pi: ExtensionAPI,
|
|
52
|
+
state: LspRuntimeState,
|
|
53
|
+
runtime: WorkspaceRuntime,
|
|
54
|
+
): void {
|
|
55
|
+
// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: session_start orchestrates setup, server detection, settings, and persistence.
|
|
56
|
+
pi.on("session_start", async (_event: SessionStartEvent, ctx: ExtensionContext) => {
|
|
57
|
+
if (state.manager) {
|
|
58
|
+
clearSessionLspService(state.manager.getCwd());
|
|
59
|
+
await state.manager.shutdownAll();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const cwd = ctx.cwd;
|
|
63
|
+
clearTsconfigCache();
|
|
64
|
+
const lspSettings = loadLspSettings(cwd);
|
|
65
|
+
|
|
66
|
+
if (!lspSettings.enabled) {
|
|
67
|
+
clearSessionLspService(cwd);
|
|
68
|
+
disableLspState(pi, state);
|
|
69
|
+
persistLspInactiveState(pi, state);
|
|
70
|
+
setSessionLspServiceState(cwd, { kind: "disabled" });
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
state.inlineSeverity = lspSettings.severity;
|
|
75
|
+
|
|
76
|
+
const config = loadConfig(cwd);
|
|
77
|
+
|
|
78
|
+
// Apply server allowlist filter from supi shared config
|
|
79
|
+
if (lspSettings.active.length > 0) {
|
|
80
|
+
const allowList = new Set(lspSettings.active.map(resolveLanguageAlias));
|
|
81
|
+
for (const name of Object.keys(config.servers)) {
|
|
82
|
+
if (!allowList.has(name)) {
|
|
83
|
+
delete config.servers[name];
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
clearSessionLspService(cwd);
|
|
89
|
+
state.manager = new LspManager(config, cwd);
|
|
90
|
+
state.manager.setExcludePatterns(lspSettings.exclude ?? []);
|
|
91
|
+
setSessionLspServiceState(cwd, { kind: "pending" });
|
|
92
|
+
state.detectedServers = scanProjectCapabilities(config, cwd);
|
|
93
|
+
state.manager.registerDetectedServers(state.detectedServers);
|
|
94
|
+
await startDetectedServers(state.manager, state.detectedServers);
|
|
95
|
+
|
|
96
|
+
const missing = scanMissingServers(config, cwd);
|
|
97
|
+
if (missing.length > 0) {
|
|
98
|
+
const parts = missing.map((m) => `${m.name} (${m.command})`);
|
|
99
|
+
ctx.ui.notify(
|
|
100
|
+
`LSP server not found for: ${parts.join(", ")}. Install the server to enable language intelligence.`,
|
|
101
|
+
"warning",
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
state.sentinelSnapshot = scanWorkspaceSentinels(cwd);
|
|
106
|
+
state.lastWorkspaceChangeAt = 0;
|
|
107
|
+
state.staleSuspected = false;
|
|
108
|
+
refreshProjectServers(state);
|
|
109
|
+
state.lastDiagnosticsFingerprint = null;
|
|
110
|
+
state.currentContextToken = null;
|
|
111
|
+
state.lspActive = true;
|
|
112
|
+
const service = new SessionLspService(state.manager);
|
|
113
|
+
setSessionLspServiceState(cwd, { kind: "ready", service });
|
|
114
|
+
registerLspCapabilities(runtime, cwd, service);
|
|
115
|
+
registerLspTools(pi, buildLspToolPromptSurfaces(state.projectServers, cwd));
|
|
116
|
+
ensureLspToolsActive(pi);
|
|
117
|
+
persistLspActiveState(pi, state);
|
|
118
|
+
updateLspUi(ctx, state.manager, state.inlineSeverity, state.projectServers);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
pi.on("session_shutdown", async () => {
|
|
122
|
+
clearTsconfigCache();
|
|
123
|
+
if (state.manager) {
|
|
124
|
+
const cwd = state.manager.getCwd();
|
|
125
|
+
unregisterLspCapabilities(runtime, cwd);
|
|
126
|
+
clearSessionLspService(cwd);
|
|
127
|
+
await state.manager.shutdownAll();
|
|
128
|
+
state.manager = null;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
state.inspector.close?.();
|
|
132
|
+
state.detectedServers = [];
|
|
133
|
+
state.projectServers = [];
|
|
134
|
+
state.lastDiagnosticsFingerprint = null;
|
|
135
|
+
state.currentContextToken = null;
|
|
136
|
+
state.staleSuspected = false;
|
|
137
|
+
state.lastWorkspaceChangeAt = 0;
|
|
138
|
+
state.sentinelSnapshot = new Map();
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
pi.on("agent_end", async (_event: AgentEndEvent, ctx: ExtensionContext) => {
|
|
142
|
+
state.currentContextToken = null;
|
|
143
|
+
refreshProjectServers(state);
|
|
144
|
+
|
|
145
|
+
if (state.manager) {
|
|
146
|
+
updateLspUi(ctx, state.manager, state.inlineSeverity, state.projectServers);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// LSP status command — /lsp-status overlay.
|
|
2
|
+
//
|
|
3
|
+
// Extracted from lsp.ts to keep each orchestration concern in its own module.
|
|
4
|
+
|
|
5
|
+
import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
6
|
+
import { type LspRuntimeState, refreshProjectServers } from "../session/lsp-state.ts";
|
|
7
|
+
import { getLspDisabledMessage, loadLspSettings } from "../session/settings-registration.ts";
|
|
8
|
+
import { toggleLspStatusOverlay } from "../ui/ui.ts";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Register the /lsp-status command that opens an LSP inspector overlay.
|
|
12
|
+
*/
|
|
13
|
+
export function registerLspStatusCommand(pi: ExtensionAPI, state: LspRuntimeState): void {
|
|
14
|
+
pi.registerCommand("lsp-status", {
|
|
15
|
+
description: "Show detected LSP servers, roots, open files, and diagnostics",
|
|
16
|
+
handler: async (_args: string, ctx: ExtensionContext) => {
|
|
17
|
+
const lspSettings = loadLspSettings(ctx.cwd);
|
|
18
|
+
if (!lspSettings.enabled) {
|
|
19
|
+
ctx.ui.notify(getLspDisabledMessage(ctx.cwd), "warning");
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (!state.manager) {
|
|
24
|
+
ctx.ui.notify("LSP not initialized", "warning");
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
refreshProjectServers(state);
|
|
29
|
+
toggleLspStatusOverlay(
|
|
30
|
+
ctx,
|
|
31
|
+
state.manager,
|
|
32
|
+
state.inlineSeverity,
|
|
33
|
+
state.inspector,
|
|
34
|
+
state.projectServers,
|
|
35
|
+
);
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// Workspace recovery handler — tool_result event.
|
|
2
|
+
//
|
|
3
|
+
// Extracted from lsp.ts to keep each orchestration concern in its own module.
|
|
4
|
+
|
|
5
|
+
import type {
|
|
6
|
+
ExtensionAPI,
|
|
7
|
+
ExtensionContext,
|
|
8
|
+
ToolResultEvent,
|
|
9
|
+
} from "@earendil-works/pi-coding-agent";
|
|
10
|
+
import { clearTsconfigCache } from "../config/tsconfig-scope.ts";
|
|
11
|
+
import { FileChangeType, type FileEvent } from "../config/types.ts";
|
|
12
|
+
import {
|
|
13
|
+
isWorkspaceRecoveryTrigger,
|
|
14
|
+
syncWorkspaceSentinelSnapshot,
|
|
15
|
+
} from "../diagnostics/workspace-sentinels.ts";
|
|
16
|
+
import {
|
|
17
|
+
isLspAwareTool,
|
|
18
|
+
type LspRuntimeState,
|
|
19
|
+
refreshProjectServers,
|
|
20
|
+
} from "../session/lsp-state.ts";
|
|
21
|
+
import { updateLspUi } from "../ui/ui.ts";
|
|
22
|
+
import { fileToUri, resolveSessionPath } from "../utils.ts";
|
|
23
|
+
import {
|
|
24
|
+
shouldInvalidateTsconfigScopeCache,
|
|
25
|
+
softRecoverWorkspaceChanges,
|
|
26
|
+
} from "../workspace-change.ts";
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Register the tool_result handler that detects workspace changes from
|
|
30
|
+
* write / edit tool results and recovers LSP state accordingly.
|
|
31
|
+
*/
|
|
32
|
+
export function registerWorkspaceRecoveryHandler(pi: ExtensionAPI, state: LspRuntimeState): void {
|
|
33
|
+
pi.on("tool_result", async (event: ToolResultEvent, ctx: ExtensionContext) => {
|
|
34
|
+
if (!state.manager) return;
|
|
35
|
+
|
|
36
|
+
const recoveryTriggered = recoverWorkspaceChangesFromToolResult(state, ctx.cwd, {
|
|
37
|
+
toolName: event.toolName,
|
|
38
|
+
isError: event.isError,
|
|
39
|
+
input: (event as { input?: unknown }).input,
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
if (recoveryTriggered || isLspAwareTool(event.toolName)) {
|
|
43
|
+
refreshProjectServers(state);
|
|
44
|
+
updateLspUi(ctx, state.manager, state.inlineSeverity, state.projectServers);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Determine whether a tool result (write/edit) should trigger workspace recovery.
|
|
51
|
+
*
|
|
52
|
+
* Returns true and recovers when the file is:
|
|
53
|
+
* - a sentinel file (package.json, tsconfig, lockfile, .d.ts)
|
|
54
|
+
* - a source file whose extension matches an active language server's file types
|
|
55
|
+
* - a .json / .jsonc file (tsconfig cache invalidation)
|
|
56
|
+
*/
|
|
57
|
+
function recoverWorkspaceChangesFromToolResult(
|
|
58
|
+
state: LspRuntimeState,
|
|
59
|
+
cwd: string,
|
|
60
|
+
event: { toolName: string; isError: boolean; input?: unknown },
|
|
61
|
+
): boolean {
|
|
62
|
+
if (!state.manager || event.isError) return false;
|
|
63
|
+
if (event.toolName !== "write" && event.toolName !== "edit") return false;
|
|
64
|
+
if (!event.input || typeof event.input !== "object") return false;
|
|
65
|
+
|
|
66
|
+
const pathValue = (event.input as { path?: unknown }).path;
|
|
67
|
+
if (typeof pathValue !== "string") return false;
|
|
68
|
+
|
|
69
|
+
const resolvedPath = resolveSessionPath(cwd, pathValue);
|
|
70
|
+
if (shouldInvalidateTsconfigScopeCache(resolvedPath)) {
|
|
71
|
+
clearTsconfigCache();
|
|
72
|
+
}
|
|
73
|
+
const fileEvent: FileEvent = { uri: fileToUri(resolvedPath), type: FileChangeType.Changed };
|
|
74
|
+
|
|
75
|
+
// Sentinel files (package.json, tsconfig.json, lockfiles, .d.ts)
|
|
76
|
+
if (isWorkspaceRecoveryTrigger(resolvedPath, cwd)) {
|
|
77
|
+
if (resolvedPath.endsWith(".d.ts")) {
|
|
78
|
+
return softRecoverWorkspaceChanges(state, [fileEvent]);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const { snapshot, changes } = syncWorkspaceSentinelSnapshot(cwd, state.sentinelSnapshot);
|
|
82
|
+
state.sentinelSnapshot = snapshot;
|
|
83
|
+
return softRecoverWorkspaceChanges(state, changes.length > 0 ? changes : [fileEvent]);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Source files matching an active language server's file types
|
|
87
|
+
if (state.manager.hasServerForExtension(resolvedPath)) {
|
|
88
|
+
return softRecoverWorkspaceChanges(state, [fileEvent]);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return false;
|
|
92
|
+
}
|