@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
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
+ }