@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.
Files changed (251) hide show
  1. package/README.md +33 -10
  2. package/node_modules/@mrclrchtr/supi-code-runtime/README.md +13 -0
  3. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/README.md +97 -0
  4. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +53 -0
  5. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +30 -0
  6. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +76 -0
  7. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config.ts +186 -0
  8. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config.ts +11 -0
  9. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-messages.ts +119 -0
  10. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-provider-registry.ts +36 -0
  11. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-tag.ts +31 -0
  12. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context.ts +16 -0
  13. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/debug-registry.ts +255 -0
  14. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +30 -0
  15. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +40 -0
  16. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path.ts +2 -0
  17. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/project-roots.ts +170 -0
  18. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/project.ts +15 -0
  19. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/registry-utils.ts +86 -0
  20. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/session-utils.ts +29 -0
  21. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/session.ts +4 -0
  22. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-command.ts +15 -0
  23. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +41 -0
  24. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +226 -0
  25. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +2 -0
  26. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings.ts +9 -0
  27. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +11 -0
  28. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/terminal.ts +60 -0
  29. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/tool-framework.ts +116 -0
  30. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/types.ts +2 -0
  31. package/node_modules/@mrclrchtr/supi-code-runtime/package.json +40 -0
  32. package/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +35 -0
  33. package/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +68 -0
  34. package/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +31 -0
  35. package/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +110 -0
  36. package/node_modules/@mrclrchtr/supi-code-runtime/src/workspace/context.ts +41 -0
  37. package/node_modules/@mrclrchtr/supi-code-runtime/src/workspace/runtime.ts +170 -0
  38. package/node_modules/@mrclrchtr/supi-core/README.md +3 -13
  39. package/node_modules/@mrclrchtr/supi-core/package.json +13 -8
  40. package/node_modules/@mrclrchtr/supi-core/src/api.ts +26 -92
  41. package/node_modules/@mrclrchtr/supi-core/src/config.ts +11 -0
  42. package/node_modules/@mrclrchtr/supi-core/src/context.ts +16 -0
  43. package/node_modules/@mrclrchtr/supi-core/src/index.ts +26 -92
  44. package/node_modules/@mrclrchtr/supi-core/src/path.ts +2 -0
  45. package/node_modules/@mrclrchtr/supi-core/src/project.ts +15 -0
  46. package/node_modules/@mrclrchtr/supi-core/src/session.ts +4 -0
  47. package/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +2 -0
  48. package/node_modules/@mrclrchtr/supi-core/src/settings.ts +9 -0
  49. package/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +11 -0
  50. package/node_modules/@mrclrchtr/supi-core/src/types.ts +2 -0
  51. package/node_modules/vscode-jsonrpc/License.txt +11 -0
  52. package/node_modules/vscode-jsonrpc/README.md +69 -0
  53. package/node_modules/vscode-jsonrpc/browser.d.ts +6 -0
  54. package/node_modules/vscode-jsonrpc/browser.js +7 -0
  55. package/node_modules/vscode-jsonrpc/lib/browser/main.d.ts +17 -0
  56. package/node_modules/vscode-jsonrpc/lib/browser/main.js +76 -0
  57. package/node_modules/vscode-jsonrpc/lib/browser/ril.d.ts +12 -0
  58. package/node_modules/vscode-jsonrpc/lib/browser/ril.js +156 -0
  59. package/node_modules/vscode-jsonrpc/lib/common/api.d.ts +14 -0
  60. package/node_modules/vscode-jsonrpc/lib/common/api.js +81 -0
  61. package/node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts +32 -0
  62. package/node_modules/vscode-jsonrpc/lib/common/cancellation.js +96 -0
  63. package/node_modules/vscode-jsonrpc/lib/common/connection.d.ts +358 -0
  64. package/node_modules/vscode-jsonrpc/lib/common/connection.js +1214 -0
  65. package/node_modules/vscode-jsonrpc/lib/common/disposable.d.ts +9 -0
  66. package/node_modules/vscode-jsonrpc/lib/common/disposable.js +16 -0
  67. package/node_modules/vscode-jsonrpc/lib/common/encoding.d.ts +52 -0
  68. package/node_modules/vscode-jsonrpc/lib/common/encoding.js +70 -0
  69. package/node_modules/vscode-jsonrpc/lib/common/events.d.ts +39 -0
  70. package/node_modules/vscode-jsonrpc/lib/common/events.js +128 -0
  71. package/node_modules/vscode-jsonrpc/lib/common/is.d.ts +7 -0
  72. package/node_modules/vscode-jsonrpc/lib/common/is.js +35 -0
  73. package/node_modules/vscode-jsonrpc/lib/common/linkedMap.d.ts +53 -0
  74. package/node_modules/vscode-jsonrpc/lib/common/linkedMap.js +398 -0
  75. package/node_modules/vscode-jsonrpc/lib/common/messageBuffer.d.ts +18 -0
  76. package/node_modules/vscode-jsonrpc/lib/common/messageBuffer.js +152 -0
  77. package/node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts +77 -0
  78. package/node_modules/vscode-jsonrpc/lib/common/messageReader.js +197 -0
  79. package/node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts +60 -0
  80. package/node_modules/vscode-jsonrpc/lib/common/messageWriter.js +115 -0
  81. package/node_modules/vscode-jsonrpc/lib/common/messages.d.ts +369 -0
  82. package/node_modules/vscode-jsonrpc/lib/common/messages.js +306 -0
  83. package/node_modules/vscode-jsonrpc/lib/common/ral.d.ts +74 -0
  84. package/node_modules/vscode-jsonrpc/lib/common/ral.js +23 -0
  85. package/node_modules/vscode-jsonrpc/lib/common/semaphore.d.ts +10 -0
  86. package/node_modules/vscode-jsonrpc/lib/common/semaphore.js +68 -0
  87. package/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.d.ts +15 -0
  88. package/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.js +76 -0
  89. package/node_modules/vscode-jsonrpc/lib/node/main.d.ts +63 -0
  90. package/node_modules/vscode-jsonrpc/lib/node/main.js +257 -0
  91. package/node_modules/vscode-jsonrpc/lib/node/ril.d.ts +13 -0
  92. package/node_modules/vscode-jsonrpc/lib/node/ril.js +161 -0
  93. package/node_modules/vscode-jsonrpc/node.cmd +5 -0
  94. package/node_modules/vscode-jsonrpc/node.d.ts +6 -0
  95. package/node_modules/vscode-jsonrpc/node.js +7 -0
  96. package/node_modules/vscode-jsonrpc/package.json +45 -0
  97. package/node_modules/vscode-jsonrpc/thirdpartynotices.txt +16 -0
  98. package/node_modules/vscode-jsonrpc/typings/thenable.d.ts +5 -0
  99. package/node_modules/vscode-languageserver-protocol/License.txt +11 -0
  100. package/node_modules/vscode-languageserver-protocol/README.md +16 -0
  101. package/node_modules/vscode-languageserver-protocol/browser.d.ts +6 -0
  102. package/node_modules/vscode-languageserver-protocol/browser.js +7 -0
  103. package/node_modules/vscode-languageserver-protocol/lib/browser/main.d.ts +4 -0
  104. package/node_modules/vscode-languageserver-protocol/lib/browser/main.js +28 -0
  105. package/node_modules/vscode-languageserver-protocol/lib/common/api.d.ts +58 -0
  106. package/node_modules/vscode-languageserver-protocol/lib/common/api.js +77 -0
  107. package/node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts +187 -0
  108. package/node_modules/vscode-languageserver-protocol/lib/common/connection.js +15 -0
  109. package/node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts +51 -0
  110. package/node_modules/vscode-languageserver-protocol/lib/common/messages.js +44 -0
  111. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.$.d.ts +1 -0
  112. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.$.js +43 -0
  113. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts +86 -0
  114. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.js +42 -0
  115. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts +66 -0
  116. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.js +32 -0
  117. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts +35 -0
  118. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.js +24 -0
  119. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts +3252 -0
  120. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts +37 -0
  121. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.js +22 -0
  122. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.d.ts +341 -0
  123. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.js +74 -0
  124. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts +306 -0
  125. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.js +101 -0
  126. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts +109 -0
  127. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.js +30 -0
  128. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts +38 -0
  129. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.js +21 -0
  130. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlayHint.d.ts +110 -0
  131. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlayHint.js +43 -0
  132. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineCompletion.d.ts +57 -0
  133. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineCompletion.js +22 -0
  134. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineValue.d.ts +86 -0
  135. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineValue.js +30 -0
  136. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.js +943 -0
  137. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts +52 -0
  138. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.js +19 -0
  139. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts +106 -0
  140. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.js +68 -0
  141. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.notebook.d.ts +400 -0
  142. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.notebook.js +214 -0
  143. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts +107 -0
  144. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.js +37 -0
  145. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts +41 -0
  146. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.js +20 -0
  147. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts +223 -0
  148. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.js +57 -0
  149. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts +72 -0
  150. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.js +22 -0
  151. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts +38 -0
  152. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.js +21 -0
  153. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeHierarchy.d.ts +83 -0
  154. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeHierarchy.js +42 -0
  155. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolder.d.ts +74 -0
  156. package/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolder.js +27 -0
  157. package/node_modules/vscode-languageserver-protocol/lib/common/utils/is.d.ts +9 -0
  158. package/node_modules/vscode-languageserver-protocol/lib/common/utils/is.js +46 -0
  159. package/node_modules/vscode-languageserver-protocol/lib/node/main.d.ts +6 -0
  160. package/node_modules/vscode-languageserver-protocol/lib/node/main.js +28 -0
  161. package/node_modules/vscode-languageserver-protocol/metaModel.schema.json +783 -0
  162. package/node_modules/vscode-languageserver-protocol/node.cmd +5 -0
  163. package/node_modules/vscode-languageserver-protocol/node.d.ts +6 -0
  164. package/node_modules/vscode-languageserver-protocol/node.js +7 -0
  165. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/License.txt +11 -0
  166. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/README.md +69 -0
  167. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/browser.d.ts +6 -0
  168. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/browser.js +7 -0
  169. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/browser/main.d.ts +17 -0
  170. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/browser/main.js +76 -0
  171. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/browser/ril.d.ts +12 -0
  172. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/browser/ril.js +156 -0
  173. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/api.d.ts +14 -0
  174. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/api.js +81 -0
  175. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts +32 -0
  176. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/cancellation.js +96 -0
  177. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/connection.d.ts +358 -0
  178. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/connection.js +1212 -0
  179. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/disposable.d.ts +9 -0
  180. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/disposable.js +16 -0
  181. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/encoding.d.ts +52 -0
  182. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/encoding.js +70 -0
  183. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/events.d.ts +39 -0
  184. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/events.js +128 -0
  185. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/is.d.ts +7 -0
  186. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/is.js +35 -0
  187. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/linkedMap.d.ts +53 -0
  188. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/linkedMap.js +398 -0
  189. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageBuffer.d.ts +18 -0
  190. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageBuffer.js +152 -0
  191. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts +77 -0
  192. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageReader.js +197 -0
  193. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts +60 -0
  194. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageWriter.js +115 -0
  195. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messages.d.ts +369 -0
  196. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messages.js +306 -0
  197. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/ral.d.ts +74 -0
  198. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/ral.js +23 -0
  199. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/semaphore.d.ts +10 -0
  200. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/semaphore.js +68 -0
  201. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.d.ts +15 -0
  202. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.js +76 -0
  203. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/node/main.d.ts +63 -0
  204. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/node/main.js +257 -0
  205. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/node/ril.d.ts +13 -0
  206. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/node/ril.js +161 -0
  207. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/node.cmd +5 -0
  208. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/node.d.ts +6 -0
  209. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/node.js +7 -0
  210. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/package.json +45 -0
  211. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/thirdpartynotices.txt +16 -0
  212. package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/typings/thenable.d.ts +5 -0
  213. package/node_modules/vscode-languageserver-protocol/package.json +45 -0
  214. package/node_modules/vscode-languageserver-protocol/thirdpartynotices.txt +31 -0
  215. package/node_modules/vscode-languageserver-types/License.txt +11 -0
  216. package/node_modules/vscode-languageserver-types/README.md +17 -0
  217. package/node_modules/vscode-languageserver-types/lib/esm/main.d.ts +3139 -0
  218. package/node_modules/vscode-languageserver-types/lib/esm/main.js +2222 -0
  219. package/node_modules/vscode-languageserver-types/lib/esm/package.json +3 -0
  220. package/node_modules/vscode-languageserver-types/lib/umd/main.d.ts +3139 -0
  221. package/node_modules/vscode-languageserver-types/lib/umd/main.js +2272 -0
  222. package/node_modules/vscode-languageserver-types/package.json +38 -0
  223. package/node_modules/vscode-languageserver-types/thirdpartynotices.txt +16 -0
  224. package/package.json +9 -6
  225. package/src/config/config.ts +1 -1
  226. package/src/handlers/diagnostic-injection.ts +182 -0
  227. package/src/handlers/session-lifecycle.ts +149 -0
  228. package/src/handlers/status-command.ts +38 -0
  229. package/src/handlers/workspace-recovery.ts +92 -0
  230. package/src/lsp.ts +18 -414
  231. package/src/manager/capability-index.ts +24 -0
  232. package/src/manager/client-pool.ts +33 -0
  233. package/src/manager/diagnostic-store.ts +51 -0
  234. package/src/manager/manager-helpers.ts +1 -1
  235. package/src/manager/manager-workspace-symbol.ts +1 -1
  236. package/src/manager/manager.ts +1 -1
  237. package/src/manager/recovery-coordinator.ts +37 -0
  238. package/src/manager/workspace-router.ts +44 -0
  239. package/src/provider/lsp-semantic-provider.ts +156 -0
  240. package/src/session/runtime-registration.ts +39 -0
  241. package/src/session/scanner.ts +1 -1
  242. package/src/session/service-registry.ts +1 -1
  243. package/src/session/settings-registration.ts +1 -1
  244. package/src/tool/guidance.ts +5 -14
  245. package/src/tool/names.ts +12 -4
  246. package/src/tool/register-tools.ts +2 -4
  247. package/src/tool/service-actions.ts +141 -0
  248. package/src/tool/tool-specs.ts +93 -93
  249. package/src/utils.ts +1 -1
  250. package/src/workspace-change.ts +40 -0
  251. package/node_modules/@mrclrchtr/supi-core/src/extension.ts +0 -1
package/src/lsp.ts CHANGED
@@ -1,75 +1,25 @@
1
- // LSP Extension for pi — registers an expert semantic toolset, keeps language servers warm,
2
- // surfaces inline diagnostics, and injects diagnostic context only when outstanding issues exist.
3
- // biome-ignore-all lint/nursery/noExcessiveLinesPerFile: lsp.ts stays cohesive wiring; recovery and sentinel helpers live in focused modules.
4
-
5
- import * as path from "node:path";
6
- import type {
7
- AgentEndEvent,
8
- BeforeAgentStartEvent,
9
- BeforeAgentStartEventResult,
10
- ContextEvent,
11
- ExtensionAPI,
12
- ExtensionContext,
13
- SessionStartEvent,
14
- ToolResultEvent,
15
- } from "@earendil-works/pi-coding-agent";
16
- import { pruneAndReorderContextMessages, restorePromptContent } from "@mrclrchtr/supi-core/api";
17
- import { loadConfig, resolveLanguageAlias } from "./config/config.ts";
18
- import { clearTsconfigCache } from "./config/tsconfig-scope.ts";
19
- import { FileChangeType, type FileEvent } from "./config/types.ts";
20
- import {
21
- diagnosticsContextFingerprint,
22
- formatDiagnosticsContext,
23
- MAX_DETAILED_DIAGNOSTICS,
24
- } from "./diagnostics/diagnostic-context.ts";
25
- import { formatDiagnosticsDisplayContent } from "./diagnostics/diagnostic-display.ts";
26
- import { assessStaleDiagnostics } from "./diagnostics/stale-diagnostics.ts";
27
- import {
28
- isWorkspaceRecoveryTrigger,
29
- scanWorkspaceSentinels,
30
- syncWorkspaceSentinelSnapshot,
31
- } from "./diagnostics/workspace-sentinels.ts";
32
- import { LspManager } from "./manager/manager.ts";
33
- import { forceResyncStaleModuleFiles } from "./manager/manager-stale-resync.ts";
34
- import {
35
- createRuntimeState,
36
- disableLspState,
37
- ensureLspToolsActive,
38
- isLspAwareTool,
39
- type LspRuntimeState,
40
- refreshProjectServers,
41
- removeLspTools,
42
- } from "./session/lsp-state.ts";
43
- import {
44
- scanMissingServers,
45
- scanProjectCapabilities,
46
- startDetectedServers,
47
- } from "./session/scanner.ts";
48
- import {
49
- clearSessionLspService,
50
- SessionLspService,
51
- setSessionLspServiceState,
52
- } from "./session/service-registry.ts";
53
- import {
54
- getLspDisabledMessage,
55
- loadLspSettings,
56
- registerLspSettings,
57
- } from "./session/settings-registration.ts";
58
- import {
59
- persistLspActiveState,
60
- persistLspInactiveState,
61
- registerTreePersistHandlers,
62
- } from "./session/tree-persist.ts";
63
- import { buildLspToolPromptSurfaces, defaultLspToolPromptSurfaces } from "./tool/guidance.ts";
1
+ // LSP Extension for pi — wires together the expert semantic toolset and all
2
+ // event/behaviour handlers. Handler registration is delegated to focused
3
+ // modules so each orchestration concern lives in its own file.
4
+
5
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
6
+ import { getDefaultWorkspaceRuntime } from "@mrclrchtr/supi-code-runtime/api";
7
+ import { registerDiagnosticInjectionHandlers } from "./handlers/diagnostic-injection.ts";
8
+ import { registerSessionLifecycleHandlers } from "./handlers/session-lifecycle.ts";
9
+ import { registerLspStatusCommand } from "./handlers/status-command.ts";
10
+ import { registerWorkspaceRecoveryHandler } from "./handlers/workspace-recovery.ts";
11
+ import { createRuntimeState } from "./session/lsp-state.ts";
12
+ import { registerLspSettings } from "./session/settings-registration.ts";
13
+ import { registerTreePersistHandlers } from "./session/tree-persist.ts";
14
+ import { defaultLspToolPromptSurfaces } from "./tool/guidance.ts";
64
15
  import { registerLspAwareToolOverrides } from "./tool/overrides.ts";
65
16
  import { registerLspTools } from "./tool/register-tools.ts";
66
17
  import { registerLspMessageRenderer } from "./ui/renderer.ts";
67
- import { toggleLspStatusOverlay, updateLspUi } from "./ui/ui.ts";
68
- import { fileToUri, resolveSessionPath } from "./utils.ts";
69
18
 
70
19
  export default function lspExtension(pi: ExtensionAPI) {
71
20
  registerLspSettings();
72
21
  const state = createRuntimeState();
22
+ const runtime = getDefaultWorkspaceRuntime();
73
23
 
74
24
  registerLspAwareToolOverrides(pi, {
75
25
  getInlineSeverity: () => state.inlineSeverity,
@@ -78,356 +28,10 @@ export default function lspExtension(pi: ExtensionAPI) {
78
28
  });
79
29
 
80
30
  registerLspTools(pi, defaultLspToolPromptSurfaces);
81
- registerSessionLifecycleHandlers(pi, state);
82
- registerBehaviorHandlers(pi, state);
31
+ registerSessionLifecycleHandlers(pi, state, runtime);
32
+ registerDiagnosticInjectionHandlers(pi, state);
33
+ registerWorkspaceRecoveryHandler(pi, state);
83
34
  registerTreePersistHandlers(pi, state);
84
35
  registerLspStatusCommand(pi, state);
85
36
  registerLspMessageRenderer(pi);
86
37
  }
87
-
88
- function registerSessionLifecycleHandlers(pi: ExtensionAPI, state: LspRuntimeState): void {
89
- // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: session_start orchestrates setup, server detection, settings, and persistence.
90
- pi.on("session_start", async (_event: SessionStartEvent, ctx: ExtensionContext) => {
91
- if (state.manager) {
92
- clearSessionLspService(state.manager.getCwd());
93
- await state.manager.shutdownAll();
94
- }
95
-
96
- const cwd = ctx.cwd;
97
- clearTsconfigCache();
98
- const lspSettings = loadLspSettings(cwd);
99
-
100
- if (!lspSettings.enabled) {
101
- clearSessionLspService(cwd);
102
- disableLspState(pi, state);
103
- persistLspInactiveState(pi, state);
104
- setSessionLspServiceState(cwd, { kind: "disabled" });
105
- return;
106
- }
107
-
108
- state.inlineSeverity = lspSettings.severity;
109
-
110
- const config = loadConfig(cwd);
111
-
112
- // Apply server allowlist filter from supi shared config
113
- if (lspSettings.active.length > 0) {
114
- const allowList = new Set(lspSettings.active.map(resolveLanguageAlias));
115
- for (const name of Object.keys(config.servers)) {
116
- if (!allowList.has(name)) {
117
- delete config.servers[name];
118
- }
119
- }
120
- }
121
-
122
- clearSessionLspService(cwd);
123
- state.manager = new LspManager(config, cwd);
124
- state.manager.setExcludePatterns(lspSettings.exclude ?? []);
125
- setSessionLspServiceState(cwd, { kind: "pending" });
126
- state.detectedServers = scanProjectCapabilities(config, cwd);
127
- state.manager.registerDetectedServers(state.detectedServers);
128
- await startDetectedServers(state.manager, state.detectedServers);
129
-
130
- const missing = scanMissingServers(config, cwd);
131
- if (missing.length > 0) {
132
- const parts = missing.map((m) => `${m.name} (${m.command})`);
133
- ctx.ui.notify(
134
- `LSP server not found for: ${parts.join(", ")}. Install the server to enable language intelligence.`,
135
- "warning",
136
- );
137
- }
138
-
139
- state.sentinelSnapshot = scanWorkspaceSentinels(cwd);
140
- state.lastWorkspaceChangeAt = 0;
141
- state.staleSuspected = false;
142
- refreshProjectServers(state);
143
- state.lastDiagnosticsFingerprint = null;
144
- state.currentContextToken = null;
145
- state.lspActive = true;
146
- setSessionLspServiceState(cwd, {
147
- kind: "ready",
148
- service: new SessionLspService(state.manager),
149
- });
150
- registerLspTools(pi, buildLspToolPromptSurfaces(state.projectServers, cwd));
151
- ensureLspToolsActive(pi);
152
- persistLspActiveState(pi, state);
153
- updateLspUi(ctx, state.manager, state.inlineSeverity, state.projectServers);
154
- });
155
-
156
- pi.on("session_shutdown", async () => {
157
- clearTsconfigCache();
158
- if (state.manager) {
159
- clearSessionLspService(state.manager.getCwd());
160
- await state.manager.shutdownAll();
161
- state.manager = null;
162
- }
163
-
164
- state.inspector.close?.();
165
- state.detectedServers = [];
166
- state.projectServers = [];
167
- state.lastDiagnosticsFingerprint = null;
168
- state.currentContextToken = null;
169
- state.staleSuspected = false;
170
- state.lastWorkspaceChangeAt = 0;
171
- state.sentinelSnapshot = new Map();
172
- });
173
-
174
- pi.on("agent_end", async (_event: AgentEndEvent, ctx: ExtensionContext) => {
175
- state.currentContextToken = null;
176
- refreshProjectServers(state);
177
-
178
- if (state.manager) {
179
- updateLspUi(ctx, state.manager, state.inlineSeverity, state.projectServers);
180
- }
181
- });
182
- }
183
-
184
- function markWorkspaceChange(state: LspRuntimeState): void {
185
- state.lastWorkspaceChangeAt = Date.now();
186
- state.staleSuspected = true;
187
- state.lastDiagnosticsFingerprint = null;
188
- state.currentContextToken = null;
189
- }
190
-
191
- function softRecoverWorkspaceChanges(
192
- state: LspRuntimeState,
193
- changes: import("./config/types.ts").FileEvent[],
194
- ): boolean {
195
- if (!state.manager || changes.length === 0) return false;
196
-
197
- clearTsconfigCache();
198
- state.manager.clearAllPullResultIds();
199
- state.manager.notifyWorkspaceFileChanges(changes);
200
- markWorkspaceChange(state);
201
- return true;
202
- }
203
-
204
- function refreshWorkspaceSentinels(state: LspRuntimeState, cwd: string): boolean {
205
- const { snapshot, changes } = syncWorkspaceSentinelSnapshot(cwd, state.sentinelSnapshot);
206
- state.sentinelSnapshot = snapshot;
207
- return softRecoverWorkspaceChanges(state, changes);
208
- }
209
-
210
- function shouldInvalidateTsconfigScopeCache(filePath: string): boolean {
211
- const ext = path.extname(filePath).toLowerCase();
212
- return ext === ".json" || ext === ".jsonc";
213
- }
214
-
215
- function recoverWorkspaceChangesFromToolResult(
216
- state: LspRuntimeState,
217
- cwd: string,
218
- event: { toolName: string; isError: boolean; input?: unknown },
219
- ): boolean {
220
- if (!state.manager || event.isError) return false;
221
- if (event.toolName !== "write" && event.toolName !== "edit") return false;
222
- if (!event.input || typeof event.input !== "object") return false;
223
-
224
- const pathValue = (event.input as { path?: unknown }).path;
225
- if (typeof pathValue !== "string") return false;
226
-
227
- const resolvedPath = resolveSessionPath(cwd, pathValue);
228
- if (shouldInvalidateTsconfigScopeCache(resolvedPath)) {
229
- clearTsconfigCache();
230
- }
231
- const fileEvent: FileEvent = { uri: fileToUri(resolvedPath), type: FileChangeType.Changed };
232
-
233
- // Sentinel files (package.json, tsconfig.json, lockfiles, .d.ts)
234
- if (isWorkspaceRecoveryTrigger(resolvedPath, cwd)) {
235
- if (resolvedPath.endsWith(".d.ts")) {
236
- return softRecoverWorkspaceChanges(state, [fileEvent]);
237
- }
238
-
239
- const { snapshot, changes } = syncWorkspaceSentinelSnapshot(cwd, state.sentinelSnapshot);
240
- state.sentinelSnapshot = snapshot;
241
- return softRecoverWorkspaceChanges(state, changes.length > 0 ? changes : [fileEvent]);
242
- }
243
-
244
- // Source files matching an active language server's file types
245
- if (state.manager.hasServerForExtension(resolvedPath)) {
246
- return softRecoverWorkspaceChanges(state, [fileEvent]);
247
- }
248
-
249
- return false;
250
- }
251
-
252
- /** Build the `lsp-context` custom message used to surface outstanding diagnostics. */
253
- // biome-ignore lint/complexity/useMaxParams: wrapper groups the prompt payload fields in one place.
254
- function buildDiagnosticResult(
255
- diagnostics: import("./manager/manager-types.ts").OutstandingDiagnosticSummaryEntry[],
256
- detailed: { file: string; diagnostics: import("./config/types.ts").Diagnostic[] }[] | undefined,
257
- severity: number,
258
- token: string,
259
- staleWarning?: string | null,
260
- ): BeforeAgentStartEventResult {
261
- return {
262
- message: {
263
- customType: "lsp-context",
264
- content: formatDiagnosticsDisplayContent(diagnostics, detailed),
265
- display: true,
266
- details: {
267
- contextToken: token,
268
- promptContent: formatDiagnosticsContext(diagnostics, 3, detailed, staleWarning),
269
- inlineSeverity: severity,
270
- ...(staleWarning ? { staleWarning } : {}),
271
- diagnostics: diagnostics.map((d) => ({
272
- file: d.file,
273
- errors: d.errors,
274
- warnings: d.warnings,
275
- information: d.information,
276
- hints: d.hints,
277
- })),
278
- },
279
- },
280
- };
281
- }
282
-
283
- function registerBehaviorHandlers(pi: ExtensionAPI, state: LspRuntimeState): void {
284
- // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: before_agent_start coordinates sentinel recovery, pruning, refresh, and diagnostic injection.
285
- pi.on("before_agent_start", async (_event: BeforeAgentStartEvent, ctx: ExtensionContext) => {
286
- if (!state.manager || !state.lspActive) {
287
- removeLspTools(pi);
288
- if (!state.manager && state.lspActive) {
289
- persistLspInactiveState(pi, state);
290
- }
291
- return;
292
- }
293
-
294
- ensureLspToolsActive(pi);
295
-
296
- refreshWorkspaceSentinels(state, ctx.cwd);
297
-
298
- /**
299
- * Two-pass prune/refresh pattern:
300
- *
301
- * 1. Prune files deleted since the last turn and send didClose.
302
- * 2. Re-sync remaining open docs and wait for diagnostics to settle.
303
- * 3. Prune *again* — late publishDiagnostics notifications (already
304
- * in-flight when step 1 ran) may have re-created stale entries for
305
- * files that no longer exist. `getAllDiagnostics()` also filters
306
- * by existence, so this second pass is belt-and-suspenders.
307
- */
308
- state.manager.pruneMissingFiles();
309
- try {
310
- await state.manager.refreshOpenDiagnostics();
311
- } catch {
312
- // Refresh failures must not prevent agent startup
313
- }
314
- state.manager.pruneMissingFiles();
315
-
316
- // Force re-open files with module-resolution errors to clear stale
317
- // diagnostics that persist when the TS server caches by content hash.
318
- // Must run before the diagnostic summary so fresh results are captured.
319
- try {
320
- await forceResyncStaleModuleFiles(state.manager, ctx.cwd);
321
- } catch {
322
- // Best-effort: don't fail the agent turn
323
- }
324
-
325
- refreshProjectServers(state);
326
- updateLspUi(ctx, state.manager, state.inlineSeverity, state.projectServers);
327
-
328
- const diagnostics = state.manager.getOutstandingDiagnosticSummary(state.inlineSeverity);
329
- const totalDiags = diagnostics.reduce((sum, d) => sum + d.total, 0);
330
- const detailed =
331
- totalDiags <= MAX_DETAILED_DIAGNOSTICS
332
- ? state.manager.getOutstandingDiagnostics(state.inlineSeverity)
333
- : undefined;
334
- const staleAssessment = state.staleSuspected
335
- ? assessStaleDiagnostics(state.manager.getOutstandingDiagnostics(4))
336
- : { suspected: false, matchedFiles: [], warning: null };
337
- state.staleSuspected = staleAssessment.suspected;
338
-
339
- const staleWarning = staleAssessment.suspected ? staleAssessment.warning : null;
340
- const content = formatDiagnosticsContext(diagnostics, 3, detailed, staleWarning);
341
- const fingerprint = diagnosticsContextFingerprint(content);
342
-
343
- if (!content) {
344
- state.lastDiagnosticsFingerprint = null;
345
- state.currentContextToken = null;
346
- return;
347
- }
348
-
349
- if (fingerprint === state.lastDiagnosticsFingerprint) {
350
- state.currentContextToken = null;
351
- return;
352
- }
353
-
354
- state.lastDiagnosticsFingerprint = fingerprint;
355
- state.currentContextToken = `lsp-context-${++state.contextCounter}`;
356
-
357
- return buildDiagnosticResult(
358
- diagnostics,
359
- detailed,
360
- state.inlineSeverity,
361
- state.currentContextToken,
362
- staleWarning,
363
- );
364
- });
365
-
366
- pi.on("context", (event: ContextEvent) => {
367
- const messages = pruneAndReorderContextMessages(
368
- event.messages as Array<{
369
- role?: string;
370
- customType?: string;
371
- content?: unknown;
372
- details?: unknown;
373
- }>,
374
- "lsp-context",
375
- state.currentContextToken,
376
- );
377
- const contextMessages = restorePromptContent(
378
- messages,
379
- "lsp-context",
380
- state.currentContextToken,
381
- ) as typeof event.messages;
382
-
383
- if (
384
- contextMessages.length === event.messages.length &&
385
- contextMessages.every((message, index) => message === event.messages[index])
386
- ) {
387
- return;
388
- }
389
- return { messages: contextMessages };
390
- });
391
-
392
- pi.on("tool_result", async (event: ToolResultEvent, ctx: ExtensionContext) => {
393
- if (!state.manager) return;
394
-
395
- const recoveryTriggered = recoverWorkspaceChangesFromToolResult(state, ctx.cwd, {
396
- toolName: event.toolName,
397
- isError: event.isError,
398
- input: (event as { input?: unknown }).input,
399
- });
400
-
401
- if (recoveryTriggered || isLspAwareTool(event.toolName)) {
402
- refreshProjectServers(state);
403
- updateLspUi(ctx, state.manager, state.inlineSeverity, state.projectServers);
404
- }
405
- });
406
- }
407
-
408
- function registerLspStatusCommand(pi: ExtensionAPI, state: LspRuntimeState): void {
409
- pi.registerCommand("lsp-status", {
410
- description: "Show detected LSP servers, roots, open files, and diagnostics",
411
- handler: async (_args: string, ctx: ExtensionContext) => {
412
- const lspSettings = loadLspSettings(ctx.cwd);
413
- if (!lspSettings.enabled) {
414
- ctx.ui.notify(getLspDisabledMessage(ctx.cwd), "warning");
415
- return;
416
- }
417
-
418
- if (!state.manager) {
419
- ctx.ui.notify("LSP not initialized", "warning");
420
- return;
421
- }
422
-
423
- refreshProjectServers(state);
424
- toggleLspStatusOverlay(
425
- ctx,
426
- state.manager,
427
- state.inlineSeverity,
428
- state.inspector,
429
- state.projectServers,
430
- );
431
- },
432
- });
433
- }
@@ -0,0 +1,24 @@
1
+ // Capability index — indexes and queries server capabilities.
2
+
3
+ import type { ServerCapabilities } from "../config/types.ts";
4
+ import { getSupportedLspServerActions } from "../tool/tool-specs.ts";
5
+ import type { LspManager } from "./manager.ts";
6
+
7
+ /**
8
+ * Indexes and queries what each server supports.
9
+ */
10
+ export interface CapabilityIndex {
11
+ /** Get the list of supported LSP actions for a server's capabilities. */
12
+ getSupportedActions(capabilities: ServerCapabilities | null | undefined): string[];
13
+ }
14
+
15
+ /**
16
+ * Create a CapabilityIndex for a workspace.
17
+ */
18
+ export function createCapabilityIndex(_manager: LspManager): CapabilityIndex {
19
+ return {
20
+ getSupportedActions(capabilities) {
21
+ return getSupportedLspServerActions(capabilities);
22
+ },
23
+ };
24
+ }
@@ -0,0 +1,33 @@
1
+ // Client pool — manages LSP client lifecycle (start, stop, reconnect).
2
+
3
+ import type { LspManager } from "./manager.ts";
4
+
5
+ /**
6
+ * Manages the lifecycle of LSP client instances for a workspace.
7
+ * Currently delegates to LspManager; the extraction will grow
8
+ * as responsibilities are migrated from manager.ts.
9
+ */
10
+ export interface ClientPool {
11
+ /**
12
+ * Ensure a file has an active client and return it.
13
+ * Returns null if no server can serve the file.
14
+ */
15
+ ensureFileOpen(filePath: string): ReturnType<LspManager["ensureFileOpen"]>;
16
+
17
+ /** Shut down all active clients. */
18
+ shutdownAll(): Promise<void>;
19
+ }
20
+
21
+ /**
22
+ * Create a ClientPool backed by LspManager.
23
+ */
24
+ export function createClientPool(manager: LspManager): ClientPool {
25
+ return {
26
+ async ensureFileOpen(filePath: string) {
27
+ return manager.ensureFileOpen(filePath);
28
+ },
29
+ async shutdownAll() {
30
+ return manager.shutdownAll();
31
+ },
32
+ };
33
+ }
@@ -0,0 +1,51 @@
1
+ // Diagnostic store — stores, aggregates, and queries diagnostics.
2
+
3
+ import type { Diagnostic } from "../config/types.ts";
4
+ import type { LspManager } from "./manager.ts";
5
+
6
+ /**
7
+ * Stores and queries diagnostics per file.
8
+ * Currently delegates to LspManager methods.
9
+ */
10
+ export interface DiagnosticStore {
11
+ /** Get workspace diagnostic summary grouped by file. */
12
+ getDiagnosticSummary(): Array<{ file: string; errors: number; warnings: number }>;
13
+
14
+ /** Get outstanding diagnostics at or above severity. */
15
+ getOutstandingDiagnostics(
16
+ maxSeverity?: number,
17
+ ): Array<{ file: string; diagnostics: Diagnostic[] }>;
18
+
19
+ /** Get outstanding diagnostic summary grouped by file. */
20
+ getOutstandingDiagnosticSummary(maxSeverity?: number): Array<{
21
+ file: string;
22
+ total: number;
23
+ errors: number;
24
+ warnings: number;
25
+ information: number;
26
+ hints: number;
27
+ }>;
28
+
29
+ /** Sync a file and return its diagnostics. */
30
+ syncAndGetDiagnostics(filePath: string, maxSeverity?: number): Promise<Diagnostic[] | null>;
31
+ }
32
+
33
+ /**
34
+ * Create a DiagnosticStore backed by LspManager.
35
+ */
36
+ export function createDiagnosticStore(manager: LspManager): DiagnosticStore {
37
+ return {
38
+ getDiagnosticSummary() {
39
+ return manager.getDiagnosticSummary();
40
+ },
41
+ getOutstandingDiagnostics(maxSeverity = 1) {
42
+ return manager.getOutstandingDiagnostics(maxSeverity);
43
+ },
44
+ getOutstandingDiagnosticSummary(maxSeverity = 1) {
45
+ return manager.getOutstandingDiagnosticSummary(maxSeverity);
46
+ },
47
+ async syncAndGetDiagnostics(filePath: string, maxSeverity = 4) {
48
+ return manager.syncFileAndGetDiagnostics(filePath, maxSeverity);
49
+ },
50
+ };
51
+ }
@@ -1,5 +1,5 @@
1
1
  import * as path from "node:path";
2
- import * as projectRoots from "@mrclrchtr/supi-core/api";
2
+ import * as projectRoots from "@mrclrchtr/supi-core/project";
3
3
  import { isGlobMatch } from "../pattern-matcher.ts";
4
4
  import { resolveSessionPath } from "../utils.ts";
5
5
 
@@ -1,6 +1,6 @@
1
1
  import * as fs from "node:fs";
2
2
  import * as path from "node:path";
3
- import { walkProject } from "@mrclrchtr/supi-core/api";
3
+ import { walkProject } from "@mrclrchtr/supi-core/project";
4
4
  import type { LspClient } from "../client/client.ts";
5
5
  import type {
6
6
  DocumentSymbol,
@@ -2,7 +2,7 @@
2
2
  // biome-ignore-all lint/nursery/noExcessiveLinesPerFile: LspManager stays cohesive; recovery and sync helpers are split into manager-*.ts modules.
3
3
  import * as fs from "node:fs";
4
4
  import * as path from "node:path";
5
- import * as projectRoots from "@mrclrchtr/supi-core/api";
5
+ import * as projectRoots from "@mrclrchtr/supi-core/project";
6
6
  import { LspClient } from "../client/client.ts";
7
7
  import { getServerForFile } from "../config/config.ts";
8
8
  import type {
@@ -0,0 +1,37 @@
1
+ // Recovery coordinator — orchestrates stale diagnostic recovery.
2
+
3
+ import type { LspManager } from "./manager.ts";
4
+
5
+ /**
6
+ * Orchestrates stale diagnostic detection and recovery.
7
+ */
8
+ export interface RecoveryCoordinator {
9
+ /**
10
+ * Trigger a workspace-wide diagnostics refresh.
11
+ * Returns info about refreshed/restarted clients and stale assessment.
12
+ */
13
+ recover(options?: {
14
+ restartIfStillStale?: boolean;
15
+ maxWaitMs?: number;
16
+ quietMs?: number;
17
+ }): Promise<{
18
+ refreshedClients: number;
19
+ restartedClients: number;
20
+ staleAssessment: {
21
+ suspected: boolean;
22
+ matchedFiles: Array<{ file: string; diagnostics: unknown[] }>;
23
+ warning: string | null;
24
+ };
25
+ }>;
26
+ }
27
+
28
+ /**
29
+ * Create a RecoveryCoordinator backed by LspManager.
30
+ */
31
+ export function createRecoveryCoordinator(manager: LspManager): RecoveryCoordinator {
32
+ return {
33
+ async recover(options) {
34
+ return manager.recoverWorkspaceDiagnostics(options);
35
+ },
36
+ };
37
+ }
@@ -0,0 +1,44 @@
1
+ // Workspace router — routes files to the correct LSP client based on project root.
2
+
3
+ import type { ProjectServerInfo } from "../config/server-config.ts";
4
+ import type { LspManager } from "./manager.ts";
5
+
6
+ /**
7
+ * Routes file paths to the correct LSP client and tracks
8
+ * which project roots are known.
9
+ */
10
+ export interface WorkspaceRouter {
11
+ /** Check whether a file can be served by any active server. */
12
+ canServeFile(filePath: string): boolean;
13
+
14
+ /** Check whether a source file type is supported. */
15
+ isSupportedSourceFile(filePath: string): boolean;
16
+
17
+ /** Get known project server info. */
18
+ getProjectServers(): ProjectServerInfo[];
19
+
20
+ /** Register detected servers from the workspace scan. */
21
+ registerDetectedServers(servers: Array<{ language: string; root: string }>): void;
22
+ }
23
+
24
+ /**
25
+ * Create a WorkspaceRouter backed by LspManager.
26
+ */
27
+ export function createWorkspaceRouter(manager: LspManager): WorkspaceRouter {
28
+ return {
29
+ canServeFile(filePath: string) {
30
+ return manager.canServeFile(filePath);
31
+ },
32
+ isSupportedSourceFile(filePath: string) {
33
+ return manager.isSupportedSourceFile(filePath);
34
+ },
35
+ getProjectServers(): ProjectServerInfo[] {
36
+ return manager.getKnownProjectServers([]);
37
+ },
38
+ registerDetectedServers(servers: Array<{ language: string; root: string }>) {
39
+ manager.registerDetectedServers(
40
+ servers as unknown as Parameters<typeof manager.registerDetectedServers>[0],
41
+ );
42
+ },
43
+ };
44
+ }