@mrclrchtr/supi-code-intelligence 1.16.1 → 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 (344) 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/package.json +4 -31
  70. package/node_modules/@mrclrchtr/supi-lsp/src/api.ts +27 -0
  71. package/node_modules/@mrclrchtr/supi-lsp/src/client/client-refresh.ts +5 -0
  72. package/node_modules/@mrclrchtr/supi-lsp/src/client/client.ts +246 -1
  73. package/node_modules/@mrclrchtr/supi-lsp/src/client/transport.ts +4 -0
  74. package/node_modules/@mrclrchtr/supi-lsp/src/config/capabilities.ts +3 -0
  75. package/node_modules/@mrclrchtr/supi-lsp/src/config/config.ts +4 -2
  76. package/node_modules/@mrclrchtr/supi-lsp/src/config/lsp-settings.ts +102 -0
  77. package/node_modules/@mrclrchtr/supi-lsp/src/config/server-actions.ts +59 -0
  78. package/node_modules/@mrclrchtr/supi-lsp/src/config/server-config.ts +4 -0
  79. package/node_modules/@mrclrchtr/supi-lsp/src/index.ts +11 -0
  80. package/node_modules/@mrclrchtr/supi-lsp/src/manager/capability-index.ts +1 -1
  81. package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-project-info.ts +2 -1
  82. package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager.ts +115 -26
  83. package/node_modules/@mrclrchtr/supi-lsp/src/provider/lsp-semantic-provider.ts +177 -134
  84. package/node_modules/@mrclrchtr/supi-lsp/src/provider/refactor-planning.ts +214 -0
  85. package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-controller.ts +320 -0
  86. package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-registration.ts +26 -5
  87. package/node_modules/@mrclrchtr/supi-lsp/src/session/service-registry.ts +81 -4
  88. package/node_modules/@mrclrchtr/supi-lsp/src/summary.ts +2 -0
  89. package/node_modules/@mrclrchtr/supi-tree-sitter/README.md +18 -37
  90. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +6 -1
  91. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +31 -0
  92. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +8 -0
  93. 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
  94. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config.ts +1 -0
  95. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/footer-registry.ts +1 -1
  96. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +6 -0
  97. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/model-selection.ts +134 -0
  98. 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
  99. 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
  100. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +5 -1
  101. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/spinner-frames.ts +11 -0
  102. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/status-spinner.ts +68 -0
  103. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/package.json +3 -2
  104. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +7 -0
  105. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +56 -2
  106. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/evidence-badge.ts +40 -0
  107. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +5 -0
  108. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +76 -3
  109. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/workspace/runtime.ts +37 -2
  110. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/package.json +6 -1
  111. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +31 -0
  112. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/api.ts +8 -0
  113. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +10 -4
  114. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/config.ts +1 -0
  115. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/footer-registry.ts +1 -1
  116. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/index.ts +6 -0
  117. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/model-selection.ts +134 -0
  118. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +9 -2
  119. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +109 -4
  120. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +5 -1
  121. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/spinner-frames.ts +11 -0
  122. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/status-spinner.ts +68 -0
  123. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/LICENSE +21 -0
  124. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/README.md +265 -0
  125. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.cjs +4661 -0
  126. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.cjs.map +7 -0
  127. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.js +4605 -0
  128. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.js.map +7 -0
  129. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.wasm +0 -0
  130. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.wasm.map +57 -0
  131. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/package.json +100 -0
  132. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.cjs +4063 -0
  133. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.cjs.map +7 -0
  134. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.d.cts +1025 -0
  135. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.d.cts.map +58 -0
  136. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.d.ts +1025 -0
  137. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.d.ts.map +58 -0
  138. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.js +4007 -0
  139. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.js.map +7 -0
  140. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.wasm +0 -0
  141. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.wasm.map +55 -0
  142. package/node_modules/@mrclrchtr/supi-tree-sitter/package.json +6 -12
  143. package/node_modules/@mrclrchtr/supi-tree-sitter/src/api.ts +29 -0
  144. package/node_modules/@mrclrchtr/supi-tree-sitter/src/index.ts +28 -0
  145. package/node_modules/@mrclrchtr/supi-tree-sitter/src/language.ts +5 -0
  146. package/node_modules/@mrclrchtr/supi-tree-sitter/src/provider/tree-sitter-provider.ts +14 -2
  147. package/node_modules/@mrclrchtr/supi-tree-sitter/src/session/runtime-controller.ts +157 -0
  148. package/node_modules/@mrclrchtr/supi-tree-sitter/src/session/session.ts +8 -1
  149. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/call-sites.ts +86 -0
  150. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/callees.ts +35 -16
  151. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/structure.ts +1 -0
  152. package/node_modules/@mrclrchtr/supi-tree-sitter/src/types.ts +10 -0
  153. package/package.json +14 -9
  154. package/src/{model.ts → analysis/architecture/discovery.ts} +15 -72
  155. package/src/analysis/architecture/model.ts +76 -0
  156. package/src/analysis/brief/directory.ts +324 -0
  157. package/src/analysis/brief/enrich.ts +157 -0
  158. package/src/analysis/brief/file.ts +84 -0
  159. package/src/analysis/brief/inventory.ts +177 -0
  160. package/src/analysis/brief/main.ts +176 -0
  161. package/src/analysis/brief/models.ts +75 -0
  162. package/src/{brief.ts → analysis/brief/public-brief.ts} +21 -26
  163. package/src/analysis/brief/summarize.ts +208 -0
  164. package/src/analysis/brief/types.ts +27 -0
  165. package/src/{use-case/generate-brief.ts → analysis/brief/use-case.ts} +67 -144
  166. package/src/analysis/coverage/coverage-warnings.ts +224 -0
  167. package/src/analysis/evidence.ts +91 -0
  168. package/src/{semantic-action-helpers.ts → analysis/helpers.ts} +4 -4
  169. package/src/analysis/provider.ts +186 -0
  170. package/src/analysis/read-next.ts +126 -0
  171. package/src/analysis/readiness.ts +73 -0
  172. package/src/{refactor → analysis/refactor}/safety.ts +1 -1
  173. package/src/{use-case/support/semantic-references.ts → analysis/references/semantic-refs.ts} +58 -26
  174. package/src/analysis/search/pattern.ts +345 -0
  175. package/src/analysis/search/ripgrep.ts +473 -0
  176. package/src/{git-context.ts → analysis/signals/git.ts} +20 -7
  177. package/src/{prioritization-signals.ts → analysis/signals/project.ts} +33 -19
  178. package/src/analysis/target/anchored.ts +349 -0
  179. package/src/analysis/target/bridge.ts +152 -0
  180. package/src/analysis/target/file-resolution.ts +125 -0
  181. package/src/{targeting/resolve-file.ts → analysis/target/file.ts} +40 -20
  182. package/src/{planner → analysis/target}/planner.ts +30 -20
  183. package/src/{targeting → analysis/target}/query.ts +17 -3
  184. package/src/analysis/target/resolve-common.ts +115 -0
  185. package/src/analysis/target/service.ts +229 -0
  186. package/src/analysis/target/symbol.ts +196 -0
  187. package/src/{targeting → analysis/target}/types.ts +17 -1
  188. package/src/analysis/tests/likely-tests.ts +174 -0
  189. package/src/analysis/tests/test-discovery.ts +540 -0
  190. package/src/analysis/tests/vitest.ts +87 -0
  191. package/src/api.ts +34 -41
  192. package/src/app/app.ts +125 -0
  193. package/src/app/manager.ts +65 -0
  194. package/src/extension.ts +132 -1
  195. package/src/index.ts +1 -57
  196. package/src/session/refactor-plans.ts +82 -0
  197. package/src/session/session.ts +300 -0
  198. package/src/session/target-store.ts +293 -0
  199. package/src/substrate/lsp/diagnostic-injection.ts +218 -0
  200. package/src/substrate/lsp/lifecycle.ts +66 -0
  201. package/src/substrate/lsp/overrides.ts +132 -0
  202. package/src/substrate/lsp/recovery.ts +55 -0
  203. package/src/substrate/lsp/settings.ts +286 -0
  204. package/src/substrate/lsp/state.ts +46 -0
  205. package/src/substrate/lsp/utils.ts +17 -0
  206. package/src/substrate/tree-sitter/lifecycle.ts +52 -0
  207. package/src/tool/find/execute.ts +118 -0
  208. package/src/{presentation/markdown/pattern.ts → tool/find/markdown.ts} +102 -53
  209. package/src/{use-case/generate-pattern.ts → tool/find/orchestrate.ts} +67 -33
  210. package/src/tool/find/semantic-search.ts +114 -0
  211. package/src/tool/find/tui.ts +39 -0
  212. package/src/tool/graph/callees.ts +87 -0
  213. package/src/tool/graph/calls-md.ts +54 -0
  214. package/src/tool/graph/collect-relation.ts +371 -0
  215. package/src/tool/graph/execute.ts +95 -0
  216. package/src/tool/graph/implementations-md.ts +79 -0
  217. package/src/tool/graph/implementations.ts +76 -0
  218. package/src/tool/graph/markdown-base.ts +243 -0
  219. package/src/tool/graph/orchestrate.ts +285 -0
  220. package/src/tool/graph/references-md.ts +34 -0
  221. package/src/tool/graph/references.ts +81 -0
  222. package/src/tool/graph/tui.ts +120 -0
  223. package/src/tool/graph/types.ts +97 -0
  224. package/src/tool/guidance.ts +96 -49
  225. package/src/tool/health/execute.ts +76 -0
  226. package/src/tool/health/markdown.ts +280 -0
  227. package/src/tool/health/orchestrate.ts +159 -0
  228. package/src/tool/health/sections/diagnostics.ts +182 -0
  229. package/src/tool/health/sections/recovery.ts +89 -0
  230. package/src/tool/health/sections/signals.ts +89 -0
  231. package/src/tool/health/tui.ts +137 -0
  232. package/src/tool/impact/analysis.ts +247 -0
  233. package/src/tool/impact/change-set-impact.ts +151 -0
  234. package/src/tool/impact/execute.ts +98 -0
  235. package/src/tool/impact/file-level-impact.ts +81 -0
  236. package/src/tool/impact/markdown.ts +283 -0
  237. package/src/tool/impact/orchestrate.ts +97 -0
  238. package/src/tool/impact/result.ts +21 -0
  239. package/src/tool/impact/single-impact.ts +89 -0
  240. package/src/tool/impact/tui.ts +39 -0
  241. package/src/tool/impact/types.ts +34 -0
  242. package/src/tool/infra/cross-field.ts +335 -0
  243. package/src/tool/infra/error-results.ts +199 -0
  244. package/src/tool/infra/pipeline.ts +311 -0
  245. package/src/tool/infra/progress.ts +21 -0
  246. package/src/tool/infra/readiness-message.ts +5 -0
  247. package/src/tool/infra/truncate.ts +49 -0
  248. package/src/tool/inspect/execute.ts +76 -0
  249. package/src/tool/inspect/markdown.ts +169 -0
  250. package/src/tool/inspect/orchestrate.ts +156 -0
  251. package/src/tool/inspect/tui.ts +36 -0
  252. package/src/tool/orientation/deps.ts +63 -0
  253. package/src/tool/orientation/execute.ts +50 -0
  254. package/src/tool/orientation/markdown.ts +35 -0
  255. package/src/tool/orientation/mode.ts +88 -0
  256. package/src/tool/orientation/orchestrate.ts +478 -0
  257. package/src/tool/orientation/precise-target.ts +257 -0
  258. package/src/tool/orientation/tui.ts +131 -0
  259. package/src/{refactor/apply-workspace-edit.ts → tool/refactor-apply/apply.ts} +39 -16
  260. package/src/tool/refactor-apply/execute.ts +20 -0
  261. package/src/tool/refactor-apply/markdown.ts +118 -0
  262. package/src/tool/refactor-apply/orchestrate.ts +89 -0
  263. package/src/tool/refactor-apply/tui.ts +51 -0
  264. package/src/tool/refactor-plan/execute.ts +73 -0
  265. package/src/tool/refactor-plan/markdown.ts +118 -0
  266. package/src/tool/refactor-plan/orchestrate.ts +363 -0
  267. package/src/tool/refactor-plan/tui.ts +42 -0
  268. package/src/tool/register.ts +123 -0
  269. package/src/tool/resolve/execute.ts +82 -0
  270. package/src/tool/resolve/markdown.ts +150 -0
  271. package/src/tool/resolve/orchestrate.ts +134 -0
  272. package/src/tool/resolve/tui.ts +40 -0
  273. package/src/tool/schemas.ts +337 -0
  274. package/src/tool/specs.ts +257 -0
  275. package/src/types/details.ts +188 -0
  276. package/src/types/execution.ts +60 -0
  277. package/src/types/index.ts +28 -0
  278. package/src/{intent/types.ts → types/tool-names.ts} +15 -14
  279. package/src/ui/footer.ts +52 -0
  280. package/src/ui/markdown/brief.ts +218 -0
  281. package/src/ui/markdown/gather.ts +177 -0
  282. package/src/{use-case/build-overview.ts → ui/markdown/overview-data.ts} +2 -2
  283. package/src/{presentation → ui}/markdown/overview.ts +2 -2
  284. package/src/ui/markdown/types.ts +80 -0
  285. package/{node_modules/@mrclrchtr/supi-lsp/src/ui/renderer.ts → src/ui/message-renderer.ts} +11 -10
  286. package/src/ui/status-command.ts +260 -0
  287. package/src/ui/status-overlay.ts +500 -0
  288. package/src/ui/tui/common.ts +220 -0
  289. package/src/ui/tui/index.ts +37 -0
  290. package/node_modules/@mrclrchtr/supi-lsp/src/extension.ts +0 -1
  291. package/node_modules/@mrclrchtr/supi-lsp/src/format.ts +0 -373
  292. package/node_modules/@mrclrchtr/supi-lsp/src/handlers/diagnostic-injection.ts +0 -182
  293. package/node_modules/@mrclrchtr/supi-lsp/src/handlers/session-lifecycle.ts +0 -149
  294. package/node_modules/@mrclrchtr/supi-lsp/src/handlers/status-command.ts +0 -38
  295. package/node_modules/@mrclrchtr/supi-lsp/src/handlers/workspace-recovery.ts +0 -92
  296. package/node_modules/@mrclrchtr/supi-lsp/src/lsp.ts +0 -37
  297. package/node_modules/@mrclrchtr/supi-lsp/src/session/lsp-state.ts +0 -93
  298. package/node_modules/@mrclrchtr/supi-lsp/src/session/settings-registration.ts +0 -296
  299. package/node_modules/@mrclrchtr/supi-lsp/src/session/tree-persist.ts +0 -75
  300. package/node_modules/@mrclrchtr/supi-lsp/src/tool/guidance.ts +0 -69
  301. package/node_modules/@mrclrchtr/supi-lsp/src/tool/names.ts +0 -27
  302. package/node_modules/@mrclrchtr/supi-lsp/src/tool/overrides.ts +0 -204
  303. package/node_modules/@mrclrchtr/supi-lsp/src/tool/register-tools.ts +0 -69
  304. package/node_modules/@mrclrchtr/supi-lsp/src/tool/service-actions.ts +0 -399
  305. package/node_modules/@mrclrchtr/supi-lsp/src/tool/tool-specs.ts +0 -248
  306. package/node_modules/@mrclrchtr/supi-lsp/src/ui/ui.ts +0 -360
  307. package/node_modules/@mrclrchtr/supi-lsp/src/workspace-change.ts +0 -40
  308. package/node_modules/@mrclrchtr/supi-tree-sitter/src/extension.ts +0 -1
  309. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/formatting.ts +0 -104
  310. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/guidance.ts +0 -35
  311. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/handlers.ts +0 -196
  312. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/register-tools.ts +0 -107
  313. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/tool-specs.ts +0 -117
  314. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tree-sitter.ts +0 -47
  315. package/src/brief-focused.ts +0 -563
  316. package/src/code-intelligence.ts +0 -70
  317. package/src/pattern-structured.ts +0 -194
  318. package/src/presentation/markdown/affected.ts +0 -170
  319. package/src/presentation/markdown/brief.ts +0 -174
  320. package/src/presentation/markdown/map.ts +0 -54
  321. package/src/presentation/markdown/refactor.ts +0 -27
  322. package/src/presentation/markdown/relations.ts +0 -121
  323. package/src/resolve-target.ts +0 -130
  324. package/src/search-helpers.ts +0 -303
  325. package/src/substrates/types.ts +0 -30
  326. package/src/target-resolution.ts +0 -122
  327. package/src/targeting/resolve-anchored.ts +0 -80
  328. package/src/targeting/resolve-symbol.ts +0 -110
  329. package/src/tool/execute-affected.ts +0 -71
  330. package/src/tool/execute-brief.ts +0 -59
  331. package/src/tool/execute-map.ts +0 -35
  332. package/src/tool/execute-pattern.ts +0 -29
  333. package/src/tool/execute-refactor.ts +0 -101
  334. package/src/tool/execute-relations.ts +0 -79
  335. package/src/tool/register-tools.ts +0 -32
  336. package/src/tool/tool-specs.ts +0 -190
  337. package/src/tool/validation.ts +0 -43
  338. package/src/types.ts +0 -169
  339. package/src/use-case/generate-affected.ts +0 -297
  340. package/src/use-case/generate-map.ts +0 -176
  341. package/src/use-case/generate-relations.ts +0 -438
  342. package/src/use-case/types.ts +0 -43
  343. package/src/workspace/request-context.ts +0 -139
  344. /package/src/{query-params.ts → tool/params.ts} +0 -0
package/src/api.ts CHANGED
@@ -1,58 +1,51 @@
1
- // Reusable architecture and target-resolution helpers for peer extensions.
2
- // Non-provider contracts for the code-understanding stack.
1
+ // Public type surface for @mrclrchtr/supi-code-intelligence.
2
+ // Types only no implementation exports.
3
3
 
4
- // Provider contracts re-exported from the shared runtime for convenience.
4
+ // Provider contracts and shared canonical types from the shared runtime.
5
5
  export type {
6
+ CalleesData,
7
+ CapabilityState,
8
+ CodeLocation,
9
+ CodePosition,
10
+ CodeResult,
11
+ CodeSymbol,
12
+ ConfidenceMode,
13
+ ExportData,
14
+ ImportData,
15
+ NodeAtData,
16
+ OutlineData,
6
17
  SemanticProvider,
18
+ SemanticProvider as SemanticSubstrate,
19
+ SourceRange,
7
20
  StructuralProvider,
21
+ StructuralProvider as StructuralSubstrate,
8
22
  StructuralResult,
9
23
  } from "@mrclrchtr/supi-code-runtime/api";
10
- export { generateFocusedBrief, generateOverview, generateProjectBrief } from "./brief.ts";
11
- // Architecture model hosted locally in supi-code-intelligence.
24
+ // Architecture model types.
12
25
  export type {
13
26
  ArchitectureModel,
14
27
  DependencyEdge,
15
28
  ModuleInfo,
16
- } from "./model.ts";
17
- export {
18
- buildArchitectureModel,
19
- findModuleForPath,
20
- getDependencies,
21
- getDependents,
22
- } from "./model.ts";
23
- // Substrate adapters (type aliases for provider contracts)
29
+ } from "./analysis/architecture/model.ts";
30
+ // Code provider types.
31
+ export type { CodeProvider, CodeProviderState } from "./analysis/provider.ts";
32
+ // Target resolution types.
24
33
  export type {
25
- SemanticSubstrate,
26
- StructuralSubstrate,
27
- } from "./substrates/types.ts";
28
- export type { ResolvedTarget, TargetResolutionResult } from "./target-resolution.ts";
29
- export {
30
- normalizePath,
31
- resolveAnchoredTarget,
32
- resolveSymbolTarget,
33
- toZeroBased,
34
- } from "./target-resolution.ts";
35
- // Shared canonical types
34
+ ResolvedTargetData,
35
+ ResolvedTargetGroupData,
36
+ TargetOutcome,
37
+ } from "./analysis/target/types.ts";
38
+ // Code-intelligence-specific result types.
36
39
  export type {
37
40
  AffectedDetails,
38
41
  BriefDetails,
39
- CalleesData,
40
42
  CodeIntelResult,
41
- CodeLocation,
42
- CodePosition,
43
- CodeResult,
44
- CodeSymbol,
45
- ConfidenceMode,
43
+ ContextDetails,
46
44
  DisambiguationCandidate,
47
- ExportData,
48
- ImportData,
49
- MapDetails,
50
- NodeAtData,
51
- OutlineData,
52
- ProviderAvailability,
45
+ HealthDetails,
46
+ ImpactDetails,
47
+ InspectDetails,
48
+ ResolveDetails,
53
49
  SearchDetails,
54
- SourceRange,
55
- } from "./types.ts";
56
- // Code provider — reads capabilities from the shared workspace runtime.
57
- export type { CodeProvider, CodeProviderState } from "./workspace/request-context.ts";
58
- export { getCodeProvider } from "./workspace/request-context.ts";
50
+ TestSurfaceDetails,
51
+ } from "./types/index.ts";
package/src/app/app.ts ADDED
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Code-intelligence app composition root.
3
+ *
4
+ * Creates the app object that wires the workspace manager, exposes
5
+ * registration hooks used by the extension entrypoint, and coordinates
6
+ * feature wiring.
7
+ */
8
+
9
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
10
+ import { WorkspaceCodeIntelligenceSession } from "../session/session.ts";
11
+ import { WorkspaceManager } from "./manager.ts";
12
+
13
+ /**
14
+ * The code-intelligence app object.
15
+ *
16
+ * Exposes:
17
+ * - `getSession(cwd)` — retrieve a session (undefined if none)
18
+ * - `createSession(cwd)` — get or create a session for a workspace
19
+ * - `releaseSession(cwd)` — remove a session
20
+ * - `shutdown()` — clear all sessions
21
+ *
22
+ * The app does NOT replace the shared capability broker in
23
+ * @mrclrchtr/supi-code-runtime — it coordinates local session state
24
+ * around it.
25
+ */
26
+ export interface CodeIntelligenceApp {
27
+ /** Get a session by cwd, or undefined. */
28
+ getSession(cwd: string): WorkspaceCodeIntelligenceSession | undefined;
29
+ /** Get or create a session for the given cwd. */
30
+ createSession(cwd: string): WorkspaceCodeIntelligenceSession;
31
+ /** Release a session for the given cwd. */
32
+ releaseSession(cwd: string): void;
33
+ /** Release all sessions. */
34
+ shutdown(): void;
35
+ }
36
+
37
+ /**
38
+ * Create a simple session cache for tests and ad-hoc usage.
39
+ *
40
+ * Returns `{ getOrCreate, clear }` — sessions are cached per cwd so
41
+ * that targets registered by one tool call are visible to subsequent
42
+ * tool calls. Production code should use the app-managed sessions
43
+ * passed through `CodeIntelToolExecCtx.session` instead.
44
+ */
45
+ export function createSessionCache(): {
46
+ getOrCreate(cwd: string): WorkspaceCodeIntelligenceSession;
47
+ clear(): void;
48
+ } {
49
+ const sessions = new Map<string, WorkspaceCodeIntelligenceSession>();
50
+ return {
51
+ getOrCreate(cwd: string): WorkspaceCodeIntelligenceSession {
52
+ let session = sessions.get(cwd);
53
+ if (!session) {
54
+ session = new WorkspaceCodeIntelligenceSession(cwd);
55
+ sessions.set(cwd, session);
56
+ }
57
+ return session;
58
+ },
59
+ clear(): void {
60
+ sessions.clear();
61
+ },
62
+ };
63
+ }
64
+
65
+ /**
66
+ * Create the code-intelligence app and wire it to pi lifecycle events.
67
+ *
68
+ * Registers:
69
+ * - `session_start` — creates a session for the new cwd, checks branch
70
+ * for existing overview
71
+ * - `session_shutdown` — releases all sessions and clears per-session stores
72
+ */
73
+ export function createCodeIntelligenceApp(pi: ExtensionAPI): CodeIntelligenceApp {
74
+ const manager = new WorkspaceManager();
75
+ const OVERVIEW_CUSTOM_TYPE = "code-intelligence-overview";
76
+
77
+ pi.on("session_start", (_event, ctx) => {
78
+ const session = manager.getOrCreateSession(ctx.cwd);
79
+
80
+ // Check if the branch already contains an overview
81
+ const branch = ctx.sessionManager.getBranch();
82
+ for (const entry of branch) {
83
+ if (
84
+ entry.type === "custom_message" &&
85
+ (entry as { customType?: string }).customType === OVERVIEW_CUSTOM_TYPE
86
+ ) {
87
+ session.hasInjectedOverview = true;
88
+ break;
89
+ }
90
+ }
91
+ });
92
+
93
+ pi.on("session_shutdown", () => {
94
+ // Clear per-session stores before releasing sessions
95
+ for (const session of manager.allSessions()) {
96
+ session.clearStores();
97
+ }
98
+ manager.shutdown();
99
+ });
100
+
101
+ return {
102
+ getSession(cwd: string): WorkspaceCodeIntelligenceSession | undefined {
103
+ return manager.getSession(cwd);
104
+ },
105
+
106
+ createSession(cwd: string): WorkspaceCodeIntelligenceSession {
107
+ return manager.getOrCreateSession(cwd);
108
+ },
109
+
110
+ releaseSession(cwd: string): void {
111
+ const session = manager.getSession(cwd);
112
+ if (session) {
113
+ session.clearStores();
114
+ }
115
+ manager.releaseSession(cwd);
116
+ },
117
+
118
+ shutdown(): void {
119
+ for (const session of manager.allSessions()) {
120
+ session.clearStores();
121
+ }
122
+ manager.shutdown();
123
+ },
124
+ };
125
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Workspace-session lifecycle management.
3
+ *
4
+ * Owns per-cwd workspace session instances. Sessions are created
5
+ * once per cwd and reused until explicitly released or shut down.
6
+ *
7
+ * Does NOT own the shared capability broker in @mrclrchtr/supi-code-runtime
8
+ * — sessions read from it.
9
+ */
10
+
11
+ import { WorkspaceCodeIntelligenceSession } from "../session/session.ts";
12
+
13
+ /**
14
+ * Manages per-cwd workspace session instances.
15
+ */
16
+ export class WorkspaceManager {
17
+ /** Active sessions keyed by cwd. */
18
+ readonly #sessions = new Map<string, WorkspaceCodeIntelligenceSession>();
19
+
20
+ /**
21
+ * Get the session for a cwd, or undefined if none exists.
22
+ */
23
+ getSession(cwd: string): WorkspaceCodeIntelligenceSession | undefined {
24
+ return this.#sessions.get(cwd);
25
+ }
26
+
27
+ /**
28
+ * Get or create a session for the given cwd.
29
+ * Returns the existing session if one already exists for this cwd.
30
+ */
31
+ getOrCreateSession(cwd: string): WorkspaceCodeIntelligenceSession {
32
+ let session = this.#sessions.get(cwd);
33
+ if (!session) {
34
+ session = new WorkspaceCodeIntelligenceSession(cwd);
35
+ this.#sessions.set(cwd, session);
36
+ }
37
+ return session;
38
+ }
39
+
40
+ /**
41
+ * Release a session for a specific cwd.
42
+ * Does NOT affect the shared capability broker.
43
+ */
44
+ releaseSession(cwd: string): void {
45
+ this.#sessions.delete(cwd);
46
+ }
47
+
48
+ /**
49
+ * Release all sessions.
50
+ * Does NOT affect the shared capability broker.
51
+ */
52
+ shutdown(): void {
53
+ this.#sessions.clear();
54
+ }
55
+
56
+ /** Get the number of active sessions. */
57
+ get size(): number {
58
+ return this.#sessions.size;
59
+ }
60
+
61
+ /** Iterate over all active sessions. */
62
+ allSessions(): IterableIterator<WorkspaceCodeIntelligenceSession> {
63
+ return this.#sessions.values();
64
+ }
65
+ }
package/src/extension.ts CHANGED
@@ -1 +1,132 @@
1
- export { default } from "./code-intelligence.ts";
1
+ // Code Intelligence extension entry point — registers the focused code-intelligence tools,
2
+ // the LSP adapter with diagnostics, overrides, and settings, and the unified /supi-ci-status command.
3
+
4
+ import type { BeforeAgentStartEventResult, ExtensionAPI } from "@earendil-works/pi-coding-agent";
5
+ import { buildArchitectureModel } from "./analysis/architecture/discovery.ts";
6
+ import {
7
+ evaluateCoverageWarnings,
8
+ gatherCoverageEvalInput,
9
+ } from "./analysis/coverage/coverage-warnings.ts";
10
+ import { createCodeIntelligenceApp } from "./app/app.ts";
11
+ import type { WorkspaceCodeIntelligenceSession } from "./session/session.ts";
12
+ import { registerDiagnosticInjectionHandlers } from "./substrate/lsp/diagnostic-injection.ts";
13
+ import { registerLspSessionLifecycle } from "./substrate/lsp/lifecycle.ts";
14
+ import { registerLspAwareToolOverrides } from "./substrate/lsp/overrides.ts";
15
+ import { registerWorkspaceRecoveryHandler } from "./substrate/lsp/recovery.ts";
16
+ import { registerLspSettings } from "./substrate/lsp/settings.ts";
17
+ import { createLspAdapterState } from "./substrate/lsp/state.ts";
18
+ import {
19
+ createTsAdapterState,
20
+ registerTsSessionLifecycle,
21
+ } from "./substrate/tree-sitter/lifecycle.ts";
22
+ import { registerCodeIntelligenceTools } from "./tool/register.ts";
23
+ import { registerLspFooterContribution } from "./ui/footer.ts";
24
+ import { renderOverview } from "./ui/markdown/overview.ts";
25
+ import { buildOverviewData } from "./ui/markdown/overview-data.ts";
26
+ import { registerLspMessageRenderer } from "./ui/message-renderer.ts";
27
+ import { registerCiStatusCommand } from "./ui/status-command.ts";
28
+
29
+ const OVERVIEW_CUSTOM_TYPE = "code-intelligence-overview";
30
+
31
+ export default function codeIntelligenceExtension(
32
+ pi: ExtensionAPI,
33
+ getOrCreateSession?: (cwd: string) => WorkspaceCodeIntelligenceSession,
34
+ ) {
35
+ const app = createCodeIntelligenceApp(pi);
36
+
37
+ const lspState = createLspAdapterState();
38
+ const tsState = createTsAdapterState();
39
+
40
+ // ── Substrate wiring ──────────────────────────────────────────────
41
+ registerLspSettings();
42
+ registerLspSessionLifecycle(pi, lspState);
43
+ registerLspAwareToolOverrides(pi, lspState);
44
+ registerDiagnosticInjectionHandlers(pi, lspState);
45
+ registerWorkspaceRecoveryHandler(pi, lspState);
46
+ registerTsSessionLifecycle(pi, tsState);
47
+
48
+ // ── Attach controller refs to sessions on startup (ADR 0008) ──────
49
+ pi.on("session_start", (_event, ctx) => {
50
+ const session = app.getSession(ctx.cwd);
51
+ if (!session) return;
52
+ if (lspState.controller) session.lspController = lspState.controller;
53
+ if (tsState.controller) session.tsController = tsState.controller;
54
+ });
55
+
56
+ // ── Tool registration ─────────────────────────────────────────────
57
+ registerCodeIntelligenceTools(
58
+ pi,
59
+ getOrCreateSession ?? ((cwd) => app.getSession(cwd) ?? app.createSession(cwd)),
60
+ );
61
+
62
+ // ── UI registration ───────────────────────────────────────────────
63
+ registerLspMessageRenderer(pi);
64
+ registerCiStatusCommand(pi);
65
+ registerLspFooterContribution(lspState);
66
+
67
+ // ── Coverage warning emission ─────────────────────────────────────
68
+ pi.on(
69
+ "before_agent_start",
70
+ async (_event, ctx): Promise<BeforeAgentStartEventResult | undefined> => {
71
+ const session = app.getSession(ctx.cwd);
72
+ if (!session) return;
73
+
74
+ const report = evaluateCoverageWarnings(
75
+ gatherCoverageEvalInput(ctx.cwd, session.lspController),
76
+ );
77
+ const pending = session.coverageWarningState.getPendingWarnings(report);
78
+ if (pending.length === 0) return;
79
+
80
+ const lines = [
81
+ '<extension-context source="supi-code-intelligence">',
82
+ "Code intelligence coverage is degraded:",
83
+ ];
84
+ for (const w of pending) {
85
+ const lang = w.language ? `[${w.language}] ` : "";
86
+ const detail = w.detail ? ` — ${w.detail}` : "";
87
+ lines.push(`- ${lang}${w.message}${detail}`);
88
+ }
89
+ lines.push("</extension-context>");
90
+ const warningContext = lines.join("\n");
91
+
92
+ return {
93
+ message: {
94
+ customType: "code-intelligence-coverage",
95
+ display: true,
96
+ content: warningContext,
97
+ },
98
+ systemPrompt:
99
+ (await ctx.getSystemPrompt()) +
100
+ `\n\nThe code intelligence stack has degraded coverage. This means some code-understanding tools (code_* tools) may return limited or structural-only information. The agent should still attempt using them, but be aware that semantic coverage for some languages may be unavailable.`,
101
+ };
102
+ },
103
+ );
104
+
105
+ // ── Overview injection — uses the app-managed session state ────────
106
+ pi.on(
107
+ "before_agent_start",
108
+ async (_event, ctx): Promise<BeforeAgentStartEventResult | undefined> => {
109
+ const session = app.getSession(ctx.cwd);
110
+ if (!session) return;
111
+ if (session.hasInjectedOverview) return;
112
+ session.hasInjectedOverview = true;
113
+
114
+ const model = await buildArchitectureModel(ctx.cwd);
115
+ if (!model || model.modules.length === 0) return;
116
+
117
+ const data = buildOverviewData(model);
118
+ if (!data) return;
119
+
120
+ const overview = renderOverview(data);
121
+ if (!overview) return;
122
+
123
+ return {
124
+ message: {
125
+ customType: OVERVIEW_CUSTOM_TYPE,
126
+ display: false,
127
+ content: overview,
128
+ },
129
+ };
130
+ },
131
+ );
132
+ }
package/src/index.ts CHANGED
@@ -1,57 +1 @@
1
- // Package root exports for @mrclrchtr/supi-code-intelligence.
2
- // Peer extensions can import these APIs for programmatic access.
3
-
4
- // Provider contracts re-exported from the shared runtime for convenience.
5
- export type {
6
- SemanticProvider,
7
- StructuralProvider,
8
- StructuralResult,
9
- } from "@mrclrchtr/supi-code-runtime/api";
10
- export { generateFocusedBrief, generateOverview, generateProjectBrief } from "./brief.ts";
11
- export type {
12
- ArchitectureModel,
13
- DependencyEdge,
14
- ModuleInfo,
15
- } from "./model.ts";
16
- export {
17
- buildArchitectureModel,
18
- findModuleForPath,
19
- getDependencies,
20
- getDependents,
21
- } from "./model.ts";
22
- // Substrate adapters (type aliases for provider contracts)
23
- export type {
24
- SemanticSubstrate,
25
- StructuralSubstrate,
26
- } from "./substrates/types.ts";
27
- export type { ResolvedTarget, TargetResolutionResult } from "./target-resolution.ts";
28
- export {
29
- normalizePath,
30
- resolveAnchoredTarget,
31
- resolveSymbolTarget,
32
- toZeroBased,
33
- } from "./target-resolution.ts";
34
- // Shared canonical types
35
- export type {
36
- AffectedDetails,
37
- BriefDetails,
38
- CalleesData,
39
- CodeIntelResult,
40
- CodeLocation,
41
- CodePosition,
42
- CodeResult,
43
- CodeSymbol,
44
- ConfidenceMode,
45
- DisambiguationCandidate,
46
- ExportData,
47
- ImportData,
48
- MapDetails,
49
- NodeAtData,
50
- OutlineData,
51
- ProviderAvailability,
52
- SearchDetails,
53
- SourceRange,
54
- } from "./types.ts";
55
- // Code provider — reads capabilities from the shared workspace runtime.
56
- export type { CodeProvider, CodeProviderState } from "./workspace/request-context.ts";
57
- export { getCodeProvider } from "./workspace/request-context.ts";
1
+ export type * from "./api.ts";
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Refactor plan storage — per-session map for plan id → plan data.
3
+ *
4
+ * Plans are stored in-memory on the WorkspaceSession for the session lifetime.
5
+ * The store map is passed in from the caller; this module provides pure
6
+ * functions without module-level state.
7
+ */
8
+
9
+ import { createHash } from "node:crypto";
10
+ import { readFileSync } from "node:fs";
11
+ import type { RefactorOperation, WorkspaceEdit } from "@mrclrchtr/supi-code-runtime/api";
12
+
13
+ export interface RefactorPlan {
14
+ id: string;
15
+ operation: Exclude<RefactorOperation, "rename">;
16
+ newName?: string;
17
+ destination?: string;
18
+ targetFile: string;
19
+ targetLine: number;
20
+ targetCharacter: number;
21
+ edits: WorkspaceEdit;
22
+ fileFingerprints: Array<{ file: string; fingerprint: string }>;
23
+ createdAt: number;
24
+ }
25
+
26
+ /** Compute a SHA-256 hex fingerprint for a file's current contents. */
27
+ export function computeFileFingerprint(file: string): string {
28
+ try {
29
+ const content = readFileSync(file, "utf-8");
30
+ return createHash("sha256").update(content).digest("hex");
31
+ } catch {
32
+ return "unreadable";
33
+ }
34
+ }
35
+
36
+ /** Generate a stable plan id from operation details. */
37
+ // biome-ignore lint/complexity/useMaxParams: plan id construction needs all positional args
38
+ export function generatePlanId(
39
+ operation: string,
40
+ file: string,
41
+ line: number,
42
+ character: number,
43
+ discriminator: string = "",
44
+ ): string {
45
+ const hash = createHash("sha256")
46
+ .update(`${operation}:${file}:${line}:${character}:${discriminator}:${Date.now()}`)
47
+ .digest("hex")
48
+ .slice(0, 12);
49
+ return `plan-${hash}`;
50
+ }
51
+
52
+ /** Store a plan in the given session-scoped map and return its id. */
53
+ export function storePlan(store: Map<string, RefactorPlan>, plan: RefactorPlan): string {
54
+ store.set(plan.id, plan);
55
+ return plan.id;
56
+ }
57
+
58
+ /** Retrieve a plan by id from the given session-scoped map, or undefined if not found. */
59
+ export function getPlan(store: Map<string, RefactorPlan>, id: string): RefactorPlan | undefined {
60
+ return store.get(id);
61
+ }
62
+
63
+ /** Remove a plan from the given session-scoped map after successful apply. */
64
+ export function removePlan(store: Map<string, RefactorPlan>, id: string): void {
65
+ store.delete(id);
66
+ }
67
+
68
+ /** Check if a plan is still fresh (all file fingerprints match). */
69
+ export function isPlanFresh(
70
+ plan: RefactorPlan,
71
+ ): { fresh: true } | { fresh: false; reason: string } {
72
+ for (const fp of plan.fileFingerprints) {
73
+ const current = computeFileFingerprint(fp.file);
74
+ if (current !== fp.fingerprint) {
75
+ return {
76
+ fresh: false,
77
+ reason: `File ${fp.file} has changed since the plan was generated. Regenerate with code_refactor_plan.`,
78
+ };
79
+ }
80
+ }
81
+ return { fresh: true };
82
+ }