@mrclrchtr/supi-code-intelligence 1.16.0 → 2.0.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 (348) hide show
  1. package/README.md +373 -63
  2. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +6 -1
  3. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +31 -0
  4. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +8 -0
  5. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +10 -4
  6. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config.ts +1 -0
  7. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/footer-registry.ts +1 -1
  8. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +6 -0
  9. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/model-selection.ts +134 -0
  10. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +9 -2
  11. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +109 -4
  12. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +5 -1
  13. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/spinner-frames.ts +11 -0
  14. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/status-spinner.ts +68 -0
  15. package/node_modules/@mrclrchtr/supi-code-runtime/package.json +3 -2
  16. package/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +7 -0
  17. package/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +56 -2
  18. package/node_modules/@mrclrchtr/supi-code-runtime/src/evidence-badge.ts +40 -0
  19. package/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +5 -0
  20. package/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +76 -3
  21. package/node_modules/@mrclrchtr/supi-code-runtime/src/workspace/runtime.ts +37 -2
  22. package/node_modules/@mrclrchtr/supi-core/package.json +6 -1
  23. package/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +31 -0
  24. package/node_modules/@mrclrchtr/supi-core/src/api.ts +8 -0
  25. package/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +10 -4
  26. package/node_modules/@mrclrchtr/supi-core/src/config.ts +1 -0
  27. package/node_modules/@mrclrchtr/supi-core/src/footer-registry.ts +1 -1
  28. package/node_modules/@mrclrchtr/supi-core/src/index.ts +6 -0
  29. package/node_modules/@mrclrchtr/supi-core/src/model-selection.ts +134 -0
  30. package/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +9 -2
  31. package/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +109 -4
  32. package/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +5 -1
  33. package/node_modules/@mrclrchtr/supi-core/src/spinner-frames.ts +11 -0
  34. package/node_modules/@mrclrchtr/supi-core/src/status-spinner.ts +68 -0
  35. package/node_modules/@mrclrchtr/supi-lsp/README.md +44 -56
  36. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +6 -1
  37. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +31 -0
  38. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +8 -0
  39. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +10 -4
  40. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config.ts +1 -0
  41. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/footer-registry.ts +1 -1
  42. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +6 -0
  43. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/model-selection.ts +134 -0
  44. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +9 -2
  45. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +109 -4
  46. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +5 -1
  47. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/spinner-frames.ts +11 -0
  48. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/status-spinner.ts +68 -0
  49. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/package.json +3 -2
  50. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +7 -0
  51. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +56 -2
  52. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/evidence-badge.ts +40 -0
  53. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +5 -0
  54. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +76 -3
  55. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/workspace/runtime.ts +37 -2
  56. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/package.json +6 -1
  57. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +31 -0
  58. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/api.ts +8 -0
  59. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +10 -4
  60. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/config.ts +1 -0
  61. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/footer-registry.ts +1 -1
  62. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/index.ts +6 -0
  63. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/model-selection.ts +134 -0
  64. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +9 -2
  65. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +109 -4
  66. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +5 -1
  67. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/spinner-frames.ts +11 -0
  68. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/status-spinner.ts +68 -0
  69. package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.d.ts +21 -2
  70. package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.js +1 -0
  71. package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineValue.d.ts +2 -1
  72. package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-protocol/package.json +1 -1
  73. package/node_modules/@mrclrchtr/supi-lsp/package.json +4 -31
  74. package/node_modules/@mrclrchtr/supi-lsp/src/api.ts +27 -0
  75. package/node_modules/@mrclrchtr/supi-lsp/src/client/client-refresh.ts +5 -0
  76. package/node_modules/@mrclrchtr/supi-lsp/src/client/client.ts +246 -1
  77. package/node_modules/@mrclrchtr/supi-lsp/src/client/transport.ts +4 -0
  78. package/node_modules/@mrclrchtr/supi-lsp/src/config/capabilities.ts +3 -0
  79. package/node_modules/@mrclrchtr/supi-lsp/src/config/config.ts +4 -2
  80. package/node_modules/@mrclrchtr/supi-lsp/src/config/lsp-settings.ts +102 -0
  81. package/node_modules/@mrclrchtr/supi-lsp/src/config/server-actions.ts +59 -0
  82. package/node_modules/@mrclrchtr/supi-lsp/src/config/server-config.ts +4 -0
  83. package/node_modules/@mrclrchtr/supi-lsp/src/index.ts +11 -0
  84. package/node_modules/@mrclrchtr/supi-lsp/src/manager/capability-index.ts +1 -1
  85. package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-project-info.ts +2 -1
  86. package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager.ts +115 -26
  87. package/node_modules/@mrclrchtr/supi-lsp/src/provider/lsp-semantic-provider.ts +177 -134
  88. package/node_modules/@mrclrchtr/supi-lsp/src/provider/refactor-planning.ts +214 -0
  89. package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-controller.ts +320 -0
  90. package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-registration.ts +26 -5
  91. package/node_modules/@mrclrchtr/supi-lsp/src/session/service-registry.ts +81 -4
  92. package/node_modules/@mrclrchtr/supi-lsp/src/summary.ts +2 -0
  93. package/node_modules/@mrclrchtr/supi-tree-sitter/README.md +18 -37
  94. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +6 -1
  95. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +31 -0
  96. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +8 -0
  97. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +10 -4
  98. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config.ts +1 -0
  99. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/footer-registry.ts +1 -1
  100. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +6 -0
  101. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/model-selection.ts +134 -0
  102. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +9 -2
  103. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +109 -4
  104. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +5 -1
  105. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/spinner-frames.ts +11 -0
  106. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/status-spinner.ts +68 -0
  107. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/package.json +3 -2
  108. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +7 -0
  109. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +56 -2
  110. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/evidence-badge.ts +40 -0
  111. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +5 -0
  112. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +76 -3
  113. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/workspace/runtime.ts +37 -2
  114. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/package.json +6 -1
  115. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +31 -0
  116. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/api.ts +8 -0
  117. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +10 -4
  118. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/config.ts +1 -0
  119. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/footer-registry.ts +1 -1
  120. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/index.ts +6 -0
  121. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/model-selection.ts +134 -0
  122. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +9 -2
  123. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +109 -4
  124. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +5 -1
  125. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/spinner-frames.ts +11 -0
  126. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/status-spinner.ts +68 -0
  127. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/LICENSE +21 -0
  128. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/README.md +265 -0
  129. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.cjs +4661 -0
  130. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.cjs.map +7 -0
  131. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.js +4605 -0
  132. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.js.map +7 -0
  133. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.wasm +0 -0
  134. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.wasm.map +57 -0
  135. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/package.json +100 -0
  136. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.cjs +4063 -0
  137. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.cjs.map +7 -0
  138. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.d.cts +1025 -0
  139. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.d.cts.map +58 -0
  140. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.d.ts +1025 -0
  141. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.d.ts.map +58 -0
  142. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.js +4007 -0
  143. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.js.map +7 -0
  144. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.wasm +0 -0
  145. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.wasm.map +55 -0
  146. package/node_modules/@mrclrchtr/supi-tree-sitter/package.json +6 -12
  147. package/node_modules/@mrclrchtr/supi-tree-sitter/src/api.ts +29 -0
  148. package/node_modules/@mrclrchtr/supi-tree-sitter/src/index.ts +28 -0
  149. package/node_modules/@mrclrchtr/supi-tree-sitter/src/language.ts +5 -0
  150. package/node_modules/@mrclrchtr/supi-tree-sitter/src/provider/tree-sitter-provider.ts +14 -2
  151. package/node_modules/@mrclrchtr/supi-tree-sitter/src/session/runtime-controller.ts +157 -0
  152. package/node_modules/@mrclrchtr/supi-tree-sitter/src/session/session.ts +8 -1
  153. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/call-sites.ts +86 -0
  154. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/callees.ts +35 -16
  155. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/structure.ts +1 -0
  156. package/node_modules/@mrclrchtr/supi-tree-sitter/src/types.ts +10 -0
  157. package/package.json +14 -9
  158. package/src/{model.ts → analysis/architecture/discovery.ts} +15 -72
  159. package/src/analysis/architecture/model.ts +76 -0
  160. package/src/analysis/brief/directory.ts +324 -0
  161. package/src/analysis/brief/enrich.ts +157 -0
  162. package/src/analysis/brief/file.ts +84 -0
  163. package/src/analysis/brief/inventory.ts +177 -0
  164. package/src/analysis/brief/main.ts +176 -0
  165. package/src/analysis/brief/models.ts +75 -0
  166. package/src/{brief.ts → analysis/brief/public-brief.ts} +21 -26
  167. package/src/analysis/brief/summarize.ts +208 -0
  168. package/src/analysis/brief/types.ts +27 -0
  169. package/src/{use-case/generate-brief.ts → analysis/brief/use-case.ts} +67 -144
  170. package/src/analysis/coverage/coverage-warnings.ts +224 -0
  171. package/src/analysis/evidence.ts +91 -0
  172. package/src/{semantic-action-helpers.ts → analysis/helpers.ts} +4 -4
  173. package/src/analysis/provider.ts +186 -0
  174. package/src/analysis/read-next.ts +126 -0
  175. package/src/analysis/readiness.ts +73 -0
  176. package/src/{refactor → analysis/refactor}/safety.ts +1 -1
  177. package/src/{use-case/support/semantic-references.ts → analysis/references/semantic-refs.ts} +58 -26
  178. package/src/analysis/search/pattern.ts +345 -0
  179. package/src/analysis/search/ripgrep.ts +473 -0
  180. package/src/{git-context.ts → analysis/signals/git.ts} +20 -7
  181. package/src/{prioritization-signals.ts → analysis/signals/project.ts} +33 -19
  182. package/src/analysis/target/anchored.ts +349 -0
  183. package/src/analysis/target/bridge.ts +152 -0
  184. package/src/analysis/target/file-resolution.ts +125 -0
  185. package/src/{targeting/resolve-file.ts → analysis/target/file.ts} +40 -20
  186. package/src/{planner → analysis/target}/planner.ts +30 -20
  187. package/src/{targeting → analysis/target}/query.ts +17 -3
  188. package/src/analysis/target/resolve-common.ts +115 -0
  189. package/src/analysis/target/service.ts +229 -0
  190. package/src/analysis/target/symbol.ts +196 -0
  191. package/src/{targeting → analysis/target}/types.ts +17 -1
  192. package/src/analysis/tests/likely-tests.ts +174 -0
  193. package/src/analysis/tests/test-discovery.ts +540 -0
  194. package/src/analysis/tests/vitest.ts +87 -0
  195. package/src/api.ts +34 -41
  196. package/src/app/app.ts +125 -0
  197. package/src/app/manager.ts +65 -0
  198. package/src/extension.ts +132 -1
  199. package/src/index.ts +1 -57
  200. package/src/session/refactor-plans.ts +82 -0
  201. package/src/session/session.ts +300 -0
  202. package/src/session/target-store.ts +293 -0
  203. package/src/substrate/lsp/diagnostic-injection.ts +218 -0
  204. package/src/substrate/lsp/lifecycle.ts +66 -0
  205. package/src/substrate/lsp/overrides.ts +132 -0
  206. package/src/substrate/lsp/recovery.ts +55 -0
  207. package/src/substrate/lsp/settings.ts +286 -0
  208. package/src/substrate/lsp/state.ts +46 -0
  209. package/src/substrate/lsp/utils.ts +17 -0
  210. package/src/substrate/tree-sitter/lifecycle.ts +52 -0
  211. package/src/tool/find/execute.ts +118 -0
  212. package/src/{presentation/markdown/pattern.ts → tool/find/markdown.ts} +102 -53
  213. package/src/{use-case/generate-pattern.ts → tool/find/orchestrate.ts} +67 -33
  214. package/src/tool/find/semantic-search.ts +114 -0
  215. package/src/tool/find/tui.ts +39 -0
  216. package/src/tool/graph/callees.ts +87 -0
  217. package/src/tool/graph/calls-md.ts +54 -0
  218. package/src/tool/graph/collect-relation.ts +371 -0
  219. package/src/tool/graph/execute.ts +95 -0
  220. package/src/tool/graph/implementations-md.ts +79 -0
  221. package/src/tool/graph/implementations.ts +76 -0
  222. package/src/tool/graph/markdown-base.ts +243 -0
  223. package/src/tool/graph/orchestrate.ts +285 -0
  224. package/src/tool/graph/references-md.ts +34 -0
  225. package/src/tool/graph/references.ts +81 -0
  226. package/src/tool/graph/tui.ts +120 -0
  227. package/src/tool/graph/types.ts +97 -0
  228. package/src/tool/guidance.ts +96 -49
  229. package/src/tool/health/execute.ts +76 -0
  230. package/src/tool/health/markdown.ts +280 -0
  231. package/src/tool/health/orchestrate.ts +159 -0
  232. package/src/tool/health/sections/diagnostics.ts +182 -0
  233. package/src/tool/health/sections/recovery.ts +89 -0
  234. package/src/tool/health/sections/signals.ts +89 -0
  235. package/src/tool/health/tui.ts +137 -0
  236. package/src/tool/impact/analysis.ts +247 -0
  237. package/src/tool/impact/change-set-impact.ts +151 -0
  238. package/src/tool/impact/execute.ts +98 -0
  239. package/src/tool/impact/file-level-impact.ts +81 -0
  240. package/src/tool/impact/markdown.ts +283 -0
  241. package/src/tool/impact/orchestrate.ts +97 -0
  242. package/src/tool/impact/result.ts +21 -0
  243. package/src/tool/impact/single-impact.ts +89 -0
  244. package/src/tool/impact/tui.ts +39 -0
  245. package/src/tool/impact/types.ts +34 -0
  246. package/src/tool/infra/cross-field.ts +335 -0
  247. package/src/tool/infra/error-results.ts +199 -0
  248. package/src/tool/infra/pipeline.ts +311 -0
  249. package/src/tool/infra/progress.ts +21 -0
  250. package/src/tool/infra/readiness-message.ts +5 -0
  251. package/src/tool/infra/truncate.ts +49 -0
  252. package/src/tool/inspect/execute.ts +76 -0
  253. package/src/tool/inspect/markdown.ts +169 -0
  254. package/src/tool/inspect/orchestrate.ts +156 -0
  255. package/src/tool/inspect/tui.ts +36 -0
  256. package/src/tool/orientation/deps.ts +63 -0
  257. package/src/tool/orientation/execute.ts +50 -0
  258. package/src/tool/orientation/markdown.ts +35 -0
  259. package/src/tool/orientation/mode.ts +88 -0
  260. package/src/tool/orientation/orchestrate.ts +478 -0
  261. package/src/tool/orientation/precise-target.ts +257 -0
  262. package/src/tool/orientation/tui.ts +131 -0
  263. package/src/{refactor/apply-workspace-edit.ts → tool/refactor-apply/apply.ts} +39 -16
  264. package/src/tool/refactor-apply/execute.ts +20 -0
  265. package/src/tool/refactor-apply/markdown.ts +118 -0
  266. package/src/tool/refactor-apply/orchestrate.ts +89 -0
  267. package/src/tool/refactor-apply/tui.ts +51 -0
  268. package/src/tool/refactor-plan/execute.ts +73 -0
  269. package/src/tool/refactor-plan/markdown.ts +118 -0
  270. package/src/tool/refactor-plan/orchestrate.ts +363 -0
  271. package/src/tool/refactor-plan/tui.ts +42 -0
  272. package/src/tool/register.ts +123 -0
  273. package/src/tool/resolve/execute.ts +82 -0
  274. package/src/tool/resolve/markdown.ts +150 -0
  275. package/src/tool/resolve/orchestrate.ts +134 -0
  276. package/src/tool/resolve/tui.ts +40 -0
  277. package/src/tool/schemas.ts +337 -0
  278. package/src/tool/specs.ts +257 -0
  279. package/src/types/details.ts +188 -0
  280. package/src/types/execution.ts +60 -0
  281. package/src/types/index.ts +28 -0
  282. package/src/{intent/types.ts → types/tool-names.ts} +15 -14
  283. package/src/ui/footer.ts +52 -0
  284. package/src/ui/markdown/brief.ts +218 -0
  285. package/src/ui/markdown/gather.ts +177 -0
  286. package/src/{use-case/build-overview.ts → ui/markdown/overview-data.ts} +2 -2
  287. package/src/{presentation → ui}/markdown/overview.ts +2 -2
  288. package/src/ui/markdown/types.ts +80 -0
  289. package/{node_modules/@mrclrchtr/supi-lsp/src/ui/renderer.ts → src/ui/message-renderer.ts} +11 -10
  290. package/src/ui/status-command.ts +260 -0
  291. package/src/ui/status-overlay.ts +500 -0
  292. package/src/ui/tui/common.ts +220 -0
  293. package/src/ui/tui/index.ts +37 -0
  294. package/node_modules/@mrclrchtr/supi-lsp/src/extension.ts +0 -1
  295. package/node_modules/@mrclrchtr/supi-lsp/src/format.ts +0 -373
  296. package/node_modules/@mrclrchtr/supi-lsp/src/handlers/diagnostic-injection.ts +0 -182
  297. package/node_modules/@mrclrchtr/supi-lsp/src/handlers/session-lifecycle.ts +0 -149
  298. package/node_modules/@mrclrchtr/supi-lsp/src/handlers/status-command.ts +0 -38
  299. package/node_modules/@mrclrchtr/supi-lsp/src/handlers/workspace-recovery.ts +0 -92
  300. package/node_modules/@mrclrchtr/supi-lsp/src/lsp.ts +0 -37
  301. package/node_modules/@mrclrchtr/supi-lsp/src/session/lsp-state.ts +0 -93
  302. package/node_modules/@mrclrchtr/supi-lsp/src/session/settings-registration.ts +0 -296
  303. package/node_modules/@mrclrchtr/supi-lsp/src/session/tree-persist.ts +0 -75
  304. package/node_modules/@mrclrchtr/supi-lsp/src/tool/guidance.ts +0 -69
  305. package/node_modules/@mrclrchtr/supi-lsp/src/tool/names.ts +0 -27
  306. package/node_modules/@mrclrchtr/supi-lsp/src/tool/overrides.ts +0 -204
  307. package/node_modules/@mrclrchtr/supi-lsp/src/tool/register-tools.ts +0 -69
  308. package/node_modules/@mrclrchtr/supi-lsp/src/tool/service-actions.ts +0 -399
  309. package/node_modules/@mrclrchtr/supi-lsp/src/tool/tool-specs.ts +0 -248
  310. package/node_modules/@mrclrchtr/supi-lsp/src/ui/ui.ts +0 -360
  311. package/node_modules/@mrclrchtr/supi-lsp/src/workspace-change.ts +0 -40
  312. package/node_modules/@mrclrchtr/supi-tree-sitter/src/extension.ts +0 -1
  313. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/formatting.ts +0 -104
  314. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/guidance.ts +0 -35
  315. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/handlers.ts +0 -196
  316. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/register-tools.ts +0 -107
  317. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/tool-specs.ts +0 -117
  318. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tree-sitter.ts +0 -47
  319. package/src/brief-focused.ts +0 -563
  320. package/src/code-intelligence.ts +0 -70
  321. package/src/pattern-structured.ts +0 -194
  322. package/src/presentation/markdown/affected.ts +0 -170
  323. package/src/presentation/markdown/brief.ts +0 -174
  324. package/src/presentation/markdown/map.ts +0 -54
  325. package/src/presentation/markdown/refactor.ts +0 -27
  326. package/src/presentation/markdown/relations.ts +0 -121
  327. package/src/resolve-target.ts +0 -130
  328. package/src/search-helpers.ts +0 -303
  329. package/src/substrates/types.ts +0 -30
  330. package/src/target-resolution.ts +0 -122
  331. package/src/targeting/resolve-anchored.ts +0 -80
  332. package/src/targeting/resolve-symbol.ts +0 -110
  333. package/src/tool/execute-affected.ts +0 -71
  334. package/src/tool/execute-brief.ts +0 -59
  335. package/src/tool/execute-map.ts +0 -35
  336. package/src/tool/execute-pattern.ts +0 -29
  337. package/src/tool/execute-refactor.ts +0 -101
  338. package/src/tool/execute-relations.ts +0 -79
  339. package/src/tool/register-tools.ts +0 -32
  340. package/src/tool/tool-specs.ts +0 -190
  341. package/src/tool/validation.ts +0 -43
  342. package/src/types.ts +0 -169
  343. package/src/use-case/generate-affected.ts +0 -297
  344. package/src/use-case/generate-map.ts +0 -176
  345. package/src/use-case/generate-relations.ts +0 -438
  346. package/src/use-case/types.ts +0 -43
  347. package/src/workspace/request-context.ts +0 -139
  348. /package/src/{query-params.ts → tool/params.ts} +0 -0
@@ -0,0 +1,286 @@
1
+ // LSP settings registration for the code-intelligence umbrella extension.
2
+ //
3
+ // Always-on LSP policy: the global `lsp.enabled` and `lsp.active` keys
4
+ // are deprecated and ignored. Per-language disable via
5
+ // `lsp.servers.<language>.enabled: false` is the only supported opt-out.
6
+ //
7
+ // This settings section provides:
8
+ // - severity control
9
+ // - excluded patterns
10
+ // - a "Disabled Servers" submenu that writes per-language disable config
11
+
12
+ import { CONFIG_DIR_NAME, getSettingsListTheme } from "@earendil-works/pi-coding-agent";
13
+ import type { SettingItem } from "@earendil-works/pi-tui";
14
+ import { Container, Key, matchesKey, SettingsList, Text } from "@earendil-works/pi-tui";
15
+
16
+ type SettingsScope = "project" | "global";
17
+
18
+ import {
19
+ loadSupiConfigForScope,
20
+ registerConfigSettings,
21
+ writeSupiConfig,
22
+ } from "@mrclrchtr/supi-core/config";
23
+ import { type LspSettings, loadConfig } from "@mrclrchtr/supi-lsp/api";
24
+
25
+ const LSP_DEFAULTS: LspSettings = {
26
+ enabled: true,
27
+ severity: 1,
28
+ active: [],
29
+ exclude: [],
30
+ };
31
+
32
+ function severityLabel(severity: number): string {
33
+ switch (severity) {
34
+ case 1:
35
+ return "errors";
36
+ case 2:
37
+ return "warnings";
38
+ case 3:
39
+ return "info";
40
+ case 4:
41
+ return "hints";
42
+ default:
43
+ return "errors";
44
+ }
45
+ }
46
+
47
+ /** Discover configured servers from the defaults + effective LSP config. */
48
+ function getConfiguredServers(cwd: string): string[] {
49
+ try {
50
+ const config = loadConfig(cwd);
51
+ return Object.keys(config.servers);
52
+ } catch {
53
+ return ["typescript"];
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Load the raw LSP section for a single scope to inspect the currently
59
+ * configured disabled servers from the persisted config.
60
+ */
61
+ function getDisabledServersFromConfig(scope: SettingsScope, cwd: string): Set<string> {
62
+ const section = loadSupiConfigForScope(
63
+ "lsp",
64
+ cwd,
65
+ { servers: {} as Record<string, { enabled?: boolean }> },
66
+ { scope },
67
+ );
68
+ const servers = section.servers as Record<string, { enabled?: boolean }> | undefined;
69
+ const disabled = new Set<string>();
70
+ if (servers) {
71
+ for (const [name, srv] of Object.entries(servers)) {
72
+ if (srv.enabled === false) disabled.add(name);
73
+ }
74
+ }
75
+ return disabled;
76
+ }
77
+
78
+ export function registerLspSettings(): void {
79
+ registerConfigSettings({
80
+ id: "lsp",
81
+ label: "LSP",
82
+ section: "lsp",
83
+ defaults: LSP_DEFAULTS,
84
+ buildItems: (settings, scope, cwd) => buildLspSettingItems(settings, scope, cwd),
85
+ // biome-ignore lint/complexity/useMaxParams: registerConfigSettings callback signature
86
+ persistChange: (_scope, _cwd, settingId, value, helpers) => {
87
+ switch (settingId) {
88
+ case "severity": {
89
+ const num = Number.parseInt(value.split(" ")[0] ?? "1", 10);
90
+ helpers.set("severity", Number.isNaN(num) ? 1 : num);
91
+ break;
92
+ }
93
+ case "exclude": {
94
+ const patterns = value
95
+ .split(",")
96
+ .map((s) => s.trim())
97
+ .filter(Boolean);
98
+ if (patterns.length > 0) helpers.set("exclude", patterns);
99
+ else helpers.unset("exclude");
100
+ break;
101
+ }
102
+ }
103
+ },
104
+ });
105
+ }
106
+
107
+ function buildLspSettingItems(
108
+ settings: LspSettings,
109
+ scope: "project" | "global",
110
+ cwd: string,
111
+ ): SettingItem[] {
112
+ return [
113
+ {
114
+ id: "severity",
115
+ label: "Inline Severity",
116
+ description: "Minimum diagnostic severity to show inline (1=errors, 4=hints)",
117
+ currentValue: `${settings.severity} (${severityLabel(settings.severity)})`,
118
+ values: ["1 (errors)", "2 (warnings)", "3 (info)", "4 (hints)"],
119
+ },
120
+ {
121
+ id: "disabled_servers",
122
+ label: "Disabled Servers",
123
+ description: "Press Enter to choose which language servers to disable",
124
+ currentValue: renderDisabledServersLabel(scope, cwd),
125
+ submenu: (_currentValue, done) => createDisabledServersSubmenu(scope, cwd, done),
126
+ },
127
+ {
128
+ id: "exclude",
129
+ label: "Exclude Patterns",
130
+ description: "Gitignore patterns to suppress LSP diagnostics",
131
+ currentValue: settings.exclude.length > 0 ? settings.exclude.join(", ") : "none",
132
+ submenu: (_currentValue, done) => createExcludeSubmenu(scope, cwd, settings, done),
133
+ },
134
+ ];
135
+ }
136
+
137
+ function renderDisabledServersLabel(scope: SettingsScope, cwd: string): string {
138
+ const disabled = getDisabledServersFromConfig(scope, cwd);
139
+ return disabled.size > 0 ? [...disabled].sort().join(", ") : "none disabled";
140
+ }
141
+
142
+ function createDisabledServersSubmenu(
143
+ scope: SettingsScope,
144
+ cwd: string,
145
+ done: (value?: string) => void,
146
+ ) {
147
+ const allServers = getConfiguredServers(cwd);
148
+ const disabledServers = getDisabledServersFromConfig(scope, cwd);
149
+
150
+ const items: SettingItem[] = allServers.map((name) => ({
151
+ id: name,
152
+ label: name,
153
+ currentValue: disabledServers.has(name) ? "disabled" : "enabled",
154
+ values: ["enabled", "disabled"],
155
+ }));
156
+
157
+ let dirty = false;
158
+ const container = new Container();
159
+ const header = new Text("Disabled Servers — per-language opt-out", 0, 0);
160
+ container.addChild(header);
161
+ const footer = new Text(
162
+ "Marking a server as disabled writes lsp.servers.<lang>.enabled: false for this scope",
163
+ 0,
164
+ 0,
165
+ );
166
+ container.addChild(footer);
167
+
168
+ const settingsList = new SettingsList(
169
+ items,
170
+ Math.min(items.length + 3, 15),
171
+ getSettingsListTheme(),
172
+ (id, newValue) => {
173
+ const idx = items.findIndex((i) => i.id === id);
174
+ if (idx >= 0 && items[idx].currentValue !== newValue) {
175
+ dirty = true;
176
+ items[idx].currentValue = newValue;
177
+ }
178
+ },
179
+ () => {},
180
+ { enableSearch: true },
181
+ );
182
+ container.addChild(settingsList);
183
+
184
+ return {
185
+ render: (width: number) => container.render(width),
186
+ invalidate: () => container.invalidate(),
187
+ // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: single event handler dispatching keyboard shortcuts for the Disabled Servers submenu
188
+ handleInput: (data: string) => {
189
+ if (matchesKey(data, Key.escape)) {
190
+ if (!dirty) {
191
+ done();
192
+ return true;
193
+ }
194
+ // Write per-language enabled/disabled into lsp.servers
195
+ const currentSection = loadSupiConfigForScope(
196
+ "lsp",
197
+ cwd,
198
+ { servers: {} as Record<string, { enabled?: boolean }> },
199
+ { scope },
200
+ );
201
+ const servers =
202
+ (currentSection.servers as Record<string, Record<string, unknown>> | undefined) ?? {};
203
+
204
+ for (const item of items) {
205
+ if (item.currentValue === "disabled") {
206
+ servers[item.id] = { ...(servers[item.id] ?? {}), enabled: false };
207
+ } else {
208
+ const srv = servers[item.id];
209
+ if (srv) {
210
+ delete srv.enabled;
211
+ // If only `enabled` was the property, remove the whole entry
212
+ if (Object.keys(srv).length === 0) {
213
+ delete servers[item.id];
214
+ }
215
+ }
216
+ }
217
+ }
218
+
219
+ writeSupiConfig({ section: "lsp", scope, cwd }, { servers });
220
+ done();
221
+ return true;
222
+ }
223
+ settingsList.handleInput?.(data);
224
+ return true;
225
+ },
226
+ };
227
+ }
228
+
229
+ function createExcludeSubmenu(
230
+ _scope: "project" | "global",
231
+ _cwd: string,
232
+ settings: LspSettings,
233
+ done: (value?: string) => void,
234
+ ) {
235
+ const items: SettingItem[] = settings.exclude.map((pattern) => ({
236
+ id: pattern,
237
+ label: pattern,
238
+ currentValue: "enabled",
239
+ values: ["enabled", "disabled"],
240
+ }));
241
+
242
+ let dirty = false;
243
+ const container = new Container();
244
+ const header = new Text("Exclude Patterns — toggle off to remove", 0, 0);
245
+ container.addChild(header);
246
+
247
+ const footer = new Text(
248
+ `Add new patterns in ${CONFIG_DIR_NAME}/supi/config.json under lsp.exclude`,
249
+ 0,
250
+ 0,
251
+ );
252
+ container.addChild(footer);
253
+
254
+ const settingsList = new SettingsList(
255
+ items,
256
+ Math.min(items.length + 3, 15),
257
+ getSettingsListTheme(),
258
+ (id, newValue) => {
259
+ const idx = items.findIndex((i) => i.id === id);
260
+ if (idx >= 0 && items[idx].currentValue !== newValue) {
261
+ dirty = true;
262
+ items[idx].currentValue = newValue;
263
+ }
264
+ },
265
+ () => {},
266
+ );
267
+ container.addChild(settingsList);
268
+
269
+ return {
270
+ render: (width: number) => container.render(width),
271
+ invalidate: () => container.invalidate(),
272
+ handleInput: (data: string) => {
273
+ if (matchesKey(data, Key.escape)) {
274
+ if (!dirty) {
275
+ done();
276
+ return true;
277
+ }
278
+ const enabled = items.filter((i) => i.currentValue === "enabled").map((i) => i.id);
279
+ done(enabled.join(", ") || undefined);
280
+ return true;
281
+ }
282
+ settingsList.handleInput?.(data);
283
+ return true;
284
+ },
285
+ };
286
+ }
@@ -0,0 +1,46 @@
1
+ // Umbrella LSP adapter state for supi-code-intelligence.
2
+ //
3
+ // Mirrors the shape of supi-lsp's LspRuntimeState but owns its lifecycle
4
+ // through LspRuntimeController from @mrclrchtr/supi-lsp/api.
5
+
6
+ import type { LspRuntimeController } from "@mrclrchtr/supi-lsp/api";
7
+
8
+ /** LSP status overlay UI state (handle + close). */
9
+ export interface LspInspectorState {
10
+ handle: (() => void) | null;
11
+ close: (() => void) | null;
12
+ }
13
+
14
+ /**
15
+ * In-memory state for the umbrella LSP adapter.
16
+ *
17
+ * Wraps the LspRuntimeController and tracks session-level state
18
+ * for diagnostic injection, stale detection, and UI updates.
19
+ */
20
+ export interface LspAdapterState {
21
+ controller: LspRuntimeController | null;
22
+ inlineSeverity: number;
23
+ inspector: LspInspectorState;
24
+ lastDiagnosticsFingerprint: string | null;
25
+ currentContextToken: string | null;
26
+ contextCounter: number;
27
+ lspActive: boolean;
28
+ staleSuspected: boolean;
29
+ lastWorkspaceChangeAt: number;
30
+ sentinelSnapshot: Map<string, number>;
31
+ }
32
+
33
+ export function createLspAdapterState(): LspAdapterState {
34
+ return {
35
+ controller: null,
36
+ inlineSeverity: 1,
37
+ inspector: { handle: null, close: null },
38
+ lastDiagnosticsFingerprint: null,
39
+ currentContextToken: null,
40
+ contextCounter: 0,
41
+ lspActive: false,
42
+ staleSuspected: false,
43
+ lastWorkspaceChangeAt: 0,
44
+ sentinelSnapshot: new Map(),
45
+ };
46
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Shared utilities for working with LSP Diagnostic types.
3
+ *
4
+ * vscode-languageserver-types v3.18.0 widened Diagnostic.message from
5
+ * `string` to `string | MarkupContent`. Use these helpers to safely
6
+ * extract the string representation without repeating the cast.
7
+ */
8
+
9
+ import type { Diagnostic } from "@mrclrchtr/supi-lsp/api";
10
+
11
+ /**
12
+ * Return the plain-text message from a Diagnostic, handling both
13
+ * the legacy `string` and new `MarkupContent` forms.
14
+ */
15
+ export function diagnosticMessageString(d: Diagnostic): string {
16
+ return typeof d.message === "string" ? d.message : d.message.value;
17
+ }
@@ -0,0 +1,52 @@
1
+ // Tree-sitter session lifecycle — uses TreeSitterRuntimeController from @mrclrchtr/supi-tree-sitter/api.
2
+
3
+ import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
4
+ import { getDefaultWorkspaceRuntime } from "@mrclrchtr/supi-code-runtime/api";
5
+ import { TreeSitterRuntimeController } from "@mrclrchtr/supi-tree-sitter/api";
6
+
7
+ /**
8
+ * Tree-sitter adapter state for the umbrella extension.
9
+ */
10
+ export interface TsAdapterState {
11
+ controller: TreeSitterRuntimeController | null;
12
+ }
13
+
14
+ export function createTsAdapterState(): TsAdapterState {
15
+ return { controller: null };
16
+ }
17
+
18
+ /**
19
+ * Register Tree-sitter session lifecycle handlers.
20
+ *
21
+ * - session_start: creates TreeSitterRuntimeController, starts it, registers tools
22
+ * - session_shutdown: shuts down the controller
23
+ */
24
+ export function registerTsSessionLifecycle(pi: ExtensionAPI, state: TsAdapterState): void {
25
+ pi.on("session_start", async (_event, ctx: ExtensionContext) => {
26
+ const cwd = ctx.cwd;
27
+ const runtime = getDefaultWorkspaceRuntime();
28
+
29
+ // Shut down any existing controller
30
+ if (state.controller) {
31
+ await state.controller.shutdown();
32
+ state.controller = null;
33
+ }
34
+
35
+ const controller = new TreeSitterRuntimeController(cwd, runtime);
36
+ const result = await controller.start();
37
+
38
+ if (result.kind === "ready") {
39
+ state.controller = controller;
40
+ } else {
41
+ await controller.shutdown();
42
+ state.controller = null;
43
+ }
44
+ });
45
+
46
+ pi.on("session_shutdown", async () => {
47
+ if (state.controller) {
48
+ await state.controller.shutdown();
49
+ state.controller = null;
50
+ }
51
+ });
52
+ }
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Tool executor for code_find.
3
+ *
4
+ * Unified ranked code search with strict mode dispatch:
5
+ * - text (default): literal ripgrep
6
+ * - regex: ripgrep regex
7
+ * - ast: tree-sitter structured search
8
+ * - semantic: LSP workspace symbols
9
+ *
10
+ * Thin executor: validates params via pipeline, then delegates all
11
+ * modes to the pattern use-case.
12
+ */
13
+
14
+ import type { CodeIntelResult, CodeIntelToolExecCtx } from "../../types/index.ts";
15
+ import { findModeKindRules } from "../infra/cross-field.ts";
16
+ import { unavailableSearchDetails } from "../infra/error-results.ts";
17
+ import {
18
+ gateSemanticReadiness,
19
+ resolveScopeParam,
20
+ runPipe,
21
+ validateParams,
22
+ } from "../infra/pipeline.ts";
23
+ import { emitToolProgress } from "../infra/progress.ts";
24
+ import { renderSemanticReadinessTimeout } from "../infra/readiness-message.ts";
25
+ import { executePattern } from "./orchestrate.ts";
26
+
27
+ export interface CodeFindToolParams {
28
+ query: string;
29
+ scope?: string;
30
+ mode?: "text" | "regex" | "ast" | "semantic";
31
+ kind?:
32
+ | "definition"
33
+ | "import"
34
+ | "export"
35
+ | "call"
36
+ | "type"
37
+ | "interface"
38
+ | "class"
39
+ | "method"
40
+ | "enum"
41
+ | "test";
42
+ contextLines?: number;
43
+ maxResults?: number;
44
+ }
45
+
46
+ export async function executeFindTool(
47
+ params: CodeFindToolParams,
48
+ ctx: CodeIntelToolExecCtx,
49
+ ): Promise<CodeIntelResult> {
50
+ if (!params.query || params.query.trim().length === 0) {
51
+ return {
52
+ content: "**Error:** `code_find` requires a non-empty `query` parameter.",
53
+ details: unavailableSearchDetails(params.scope ?? null, [
54
+ "Provide a non-empty `query` parameter",
55
+ ]),
56
+ };
57
+ }
58
+
59
+ emitToolProgress(ctx.onUpdate, `code_find: searching for "${params.query}"...`);
60
+
61
+ const mode = params.mode ?? "text";
62
+ const needsSemanticReadiness = mode === "semantic";
63
+
64
+ return runPipe(
65
+ params,
66
+ ctx,
67
+ [
68
+ validateParams(findModeKindRules(), (msg) => ({
69
+ content: msg,
70
+ details: unavailableSearchDetails(params.scope ?? null, [
71
+ 'Use `mode: "ast"` with `kind`, or remove `kind` for text/regex/semantic search',
72
+ ]),
73
+ })),
74
+ resolveScopeParam((reason) => ({
75
+ content: `**Error:** ${reason}`,
76
+ details: unavailableSearchDetails(params.scope ?? null, [
77
+ "Verify the `scope` path exists and is within the workspace",
78
+ ]),
79
+ })),
80
+ ...(needsSemanticReadiness
81
+ ? [
82
+ gateSemanticReadiness("code_find", {
83
+ onTimeout: () => ({
84
+ content: renderSemanticReadinessTimeout("code_find", 15_000),
85
+ details: unavailableSearchDetails(params.scope ?? null, [
86
+ "Retry shortly or check `code_health`",
87
+ ]),
88
+ }),
89
+ throwOnUnavailable: true,
90
+ }),
91
+ ]
92
+ : []),
93
+ ],
94
+ async (p, c) => {
95
+ emitToolProgress(c.onUpdate, `code_find: ${mode} mode...`);
96
+
97
+ // AST mode requires structural provider
98
+ if (mode === "ast" && !c.session.getStructuralProvider()) {
99
+ throw new Error(
100
+ "code_find AST search is unavailable because no structural/tree-sitter provider is active for this workspace.",
101
+ );
102
+ }
103
+
104
+ return executePattern(
105
+ {
106
+ pattern: p.query,
107
+ path: p.scope ?? c.cwd,
108
+ regex: mode === "regex",
109
+ kind: p.kind,
110
+ mode,
111
+ maxResults: p.maxResults ?? 8,
112
+ contextLines: p.contextLines ?? 1,
113
+ },
114
+ { cwd: c.cwd, provider: c.session.getProvider(), signal: c.signal },
115
+ );
116
+ },
117
+ );
118
+ }