@mrclrchtr/supi-code-intelligence 3.2.0 → 4.1.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 (577) hide show
  1. package/README.md +157 -435
  2. package/node_modules/@mrclrchtr/supi-code-runtime/README.md +8 -0
  3. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +2 -4
  4. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -4
  5. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +3 -2
  6. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -4
  7. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -10
  8. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +19 -15
  9. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +1 -0
  10. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +9 -0
  11. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings.ts +1 -0
  12. package/node_modules/@mrclrchtr/supi-code-runtime/package.json +2 -2
  13. package/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +10 -1
  14. package/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +19 -29
  15. package/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +7 -1
  16. package/node_modules/@mrclrchtr/supi-code-runtime/src/query-result.ts +42 -0
  17. package/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +15 -10
  18. package/node_modules/@mrclrchtr/supi-core/package.json +2 -4
  19. package/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -4
  20. package/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +3 -2
  21. package/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -4
  22. package/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -10
  23. package/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +19 -15
  24. package/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +1 -0
  25. package/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +9 -0
  26. package/node_modules/@mrclrchtr/supi-core/src/settings.ts +1 -0
  27. package/node_modules/@mrclrchtr/supi-lsp/README.md +72 -62
  28. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/README.md +8 -0
  29. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +2 -8
  30. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -4
  31. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +3 -2
  32. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -4
  33. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -10
  34. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +19 -15
  35. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +1 -0
  36. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +9 -0
  37. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings.ts +1 -0
  38. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/package.json +2 -2
  39. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +10 -1
  40. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +19 -29
  41. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +7 -1
  42. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/query-result.ts +42 -0
  43. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +15 -10
  44. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/package.json +2 -4
  45. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -4
  46. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +3 -2
  47. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -4
  48. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -10
  49. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +19 -15
  50. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +1 -0
  51. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +9 -0
  52. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings.ts +1 -0
  53. package/node_modules/@mrclrchtr/supi-lsp/package.json +4 -5
  54. package/node_modules/@mrclrchtr/supi-lsp/src/api.ts +9 -9
  55. package/node_modules/@mrclrchtr/supi-lsp/src/client/client.ts +70 -41
  56. package/node_modules/@mrclrchtr/supi-lsp/src/client/transport.ts +16 -13
  57. package/node_modules/@mrclrchtr/supi-lsp/src/config/config.ts +2 -2
  58. package/node_modules/@mrclrchtr/supi-lsp/src/config/lsp-settings.ts +0 -2
  59. package/node_modules/@mrclrchtr/supi-lsp/src/index.ts +6 -6
  60. package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-diagnostics.ts +5 -95
  61. package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-workspace-recovery.ts +4 -3
  62. package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-workspace-symbol.ts +44 -6
  63. package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager.ts +47 -65
  64. package/node_modules/@mrclrchtr/supi-lsp/src/provider/lsp-semantic-provider.ts +132 -79
  65. package/node_modules/@mrclrchtr/supi-lsp/src/provider/refactor-planning.ts +6 -14
  66. package/node_modules/@mrclrchtr/supi-lsp/src/session/readiness.ts +38 -0
  67. package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-controller.ts +87 -75
  68. package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-registration.ts +5 -5
  69. package/node_modules/@mrclrchtr/supi-lsp/src/session/{service-registry.ts → runtime-registry.ts} +163 -71
  70. package/node_modules/@mrclrchtr/supi-tree-sitter/README.md +4 -0
  71. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/README.md +8 -0
  72. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +2 -8
  73. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -4
  74. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +3 -2
  75. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -4
  76. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -10
  77. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +19 -15
  78. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +1 -0
  79. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +9 -0
  80. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings.ts +1 -0
  81. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/package.json +2 -2
  82. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +10 -1
  83. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +19 -29
  84. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +7 -1
  85. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/query-result.ts +42 -0
  86. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +15 -10
  87. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/package.json +2 -4
  88. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -4
  89. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +3 -2
  90. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -4
  91. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -10
  92. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +19 -15
  93. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +1 -0
  94. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +9 -0
  95. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings.ts +1 -0
  96. package/node_modules/@mrclrchtr/supi-tree-sitter/package.json +4 -21
  97. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/bash/tree-sitter-bash.wasm +0 -0
  98. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/bash/tree-sitter-bash.wasm.json +2 -2
  99. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/c/tree-sitter-c.wasm +0 -0
  100. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/c/tree-sitter-c.wasm.json +2 -2
  101. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/go/tree-sitter-go.wasm +0 -0
  102. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/go/tree-sitter-go.wasm.json +2 -2
  103. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/javascript/tree-sitter-javascript.wasm +0 -0
  104. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/javascript/tree-sitter-javascript.wasm.json +2 -2
  105. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/kotlin/tree-sitter-kotlin.wasm +0 -0
  106. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/kotlin/tree-sitter-kotlin.wasm.json +2 -2
  107. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/python/tree-sitter-python.wasm +0 -0
  108. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/python/tree-sitter-python.wasm.json +2 -2
  109. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/r/tree-sitter-r.wasm +0 -0
  110. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/r/tree-sitter-r.wasm.json +2 -2
  111. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/rust/tree-sitter-rust.wasm.json +1 -1
  112. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/sql/tree-sitter-sql.wasm +0 -0
  113. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/sql/tree-sitter-sql.wasm.json +3 -3
  114. package/node_modules/@mrclrchtr/supi-tree-sitter/scripts/generate-kotlin-wasm.mjs +6 -0
  115. package/node_modules/@mrclrchtr/supi-tree-sitter/scripts/generate-sql-wasm.mjs +18 -4
  116. package/node_modules/@mrclrchtr/supi-tree-sitter/scripts/vendor-wasm.mjs +17 -1
  117. package/node_modules/@mrclrchtr/supi-tree-sitter/src/api.ts +2 -0
  118. package/node_modules/@mrclrchtr/supi-tree-sitter/src/coordinates.ts +20 -41
  119. package/node_modules/@mrclrchtr/supi-tree-sitter/src/index.ts +2 -0
  120. package/node_modules/@mrclrchtr/supi-tree-sitter/src/language.ts +7 -0
  121. package/node_modules/@mrclrchtr/supi-tree-sitter/src/operation-support.ts +40 -0
  122. package/node_modules/@mrclrchtr/supi-tree-sitter/src/session/session.ts +9 -7
  123. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/call-sites.ts +6 -1
  124. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/callees.ts +76 -37
  125. package/node_modules/yaml/LICENSE +13 -0
  126. package/node_modules/yaml/README.md +172 -0
  127. package/node_modules/yaml/bin.mjs +11 -0
  128. package/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
  129. package/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
  130. package/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
  131. package/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
  132. package/node_modules/yaml/browser/dist/compose/composer.js +219 -0
  133. package/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
  134. package/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
  135. package/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
  136. package/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
  137. package/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
  138. package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +225 -0
  139. package/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
  140. package/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
  141. package/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
  142. package/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
  143. package/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
  144. package/node_modules/yaml/browser/dist/doc/Document.js +335 -0
  145. package/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
  146. package/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
  147. package/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
  148. package/node_modules/yaml/browser/dist/doc/directives.js +176 -0
  149. package/node_modules/yaml/browser/dist/errors.js +57 -0
  150. package/node_modules/yaml/browser/dist/index.js +17 -0
  151. package/node_modules/yaml/browser/dist/log.js +11 -0
  152. package/node_modules/yaml/browser/dist/nodes/Alias.js +116 -0
  153. package/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
  154. package/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
  155. package/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
  156. package/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
  157. package/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
  158. package/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
  159. package/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
  160. package/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
  161. package/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
  162. package/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
  163. package/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
  164. package/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
  165. package/node_modules/yaml/browser/dist/parse/cst.js +98 -0
  166. package/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
  167. package/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
  168. package/node_modules/yaml/browser/dist/parse/parser.js +975 -0
  169. package/node_modules/yaml/browser/dist/public-api.js +102 -0
  170. package/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
  171. package/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
  172. package/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
  173. package/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
  174. package/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
  175. package/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
  176. package/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
  177. package/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
  178. package/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
  179. package/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
  180. package/node_modules/yaml/browser/dist/schema/tags.js +96 -0
  181. package/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
  182. package/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
  183. package/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
  184. package/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
  185. package/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
  186. package/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
  187. package/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
  188. package/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
  189. package/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
  190. package/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
  191. package/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
  192. package/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
  193. package/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
  194. package/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
  195. package/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
  196. package/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
  197. package/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
  198. package/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
  199. package/node_modules/yaml/browser/dist/util.js +11 -0
  200. package/node_modules/yaml/browser/dist/visit.js +233 -0
  201. package/node_modules/yaml/browser/index.js +5 -0
  202. package/node_modules/yaml/browser/package.json +3 -0
  203. package/node_modules/yaml/dist/cli.d.ts +8 -0
  204. package/node_modules/yaml/dist/cli.mjs +201 -0
  205. package/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
  206. package/node_modules/yaml/dist/compose/compose-collection.js +90 -0
  207. package/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
  208. package/node_modules/yaml/dist/compose/compose-doc.js +45 -0
  209. package/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
  210. package/node_modules/yaml/dist/compose/compose-node.js +112 -0
  211. package/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
  212. package/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
  213. package/node_modules/yaml/dist/compose/composer.d.ts +63 -0
  214. package/node_modules/yaml/dist/compose/composer.js +224 -0
  215. package/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
  216. package/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
  217. package/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
  218. package/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
  219. package/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
  220. package/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
  221. package/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
  222. package/node_modules/yaml/dist/compose/resolve-end.js +39 -0
  223. package/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
  224. package/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
  225. package/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
  226. package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +227 -0
  227. package/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
  228. package/node_modules/yaml/dist/compose/resolve-props.js +148 -0
  229. package/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
  230. package/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
  231. package/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
  232. package/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
  233. package/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
  234. package/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
  235. package/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
  236. package/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
  237. package/node_modules/yaml/dist/doc/Document.d.ts +141 -0
  238. package/node_modules/yaml/dist/doc/Document.js +337 -0
  239. package/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
  240. package/node_modules/yaml/dist/doc/anchors.js +76 -0
  241. package/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
  242. package/node_modules/yaml/dist/doc/applyReviver.js +57 -0
  243. package/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
  244. package/node_modules/yaml/dist/doc/createNode.js +90 -0
  245. package/node_modules/yaml/dist/doc/directives.d.ts +49 -0
  246. package/node_modules/yaml/dist/doc/directives.js +178 -0
  247. package/node_modules/yaml/dist/errors.d.ts +21 -0
  248. package/node_modules/yaml/dist/errors.js +62 -0
  249. package/node_modules/yaml/dist/index.d.ts +25 -0
  250. package/node_modules/yaml/dist/index.js +50 -0
  251. package/node_modules/yaml/dist/log.d.ts +3 -0
  252. package/node_modules/yaml/dist/log.js +19 -0
  253. package/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
  254. package/node_modules/yaml/dist/nodes/Alias.js +118 -0
  255. package/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
  256. package/node_modules/yaml/dist/nodes/Collection.js +151 -0
  257. package/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
  258. package/node_modules/yaml/dist/nodes/Node.js +40 -0
  259. package/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
  260. package/node_modules/yaml/dist/nodes/Pair.js +39 -0
  261. package/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
  262. package/node_modules/yaml/dist/nodes/Scalar.js +27 -0
  263. package/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
  264. package/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
  265. package/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
  266. package/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
  267. package/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
  268. package/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
  269. package/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
  270. package/node_modules/yaml/dist/nodes/identity.js +53 -0
  271. package/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
  272. package/node_modules/yaml/dist/nodes/toJS.js +39 -0
  273. package/node_modules/yaml/dist/options.d.ts +350 -0
  274. package/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
  275. package/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
  276. package/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
  277. package/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
  278. package/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
  279. package/node_modules/yaml/dist/parse/cst-visit.js +99 -0
  280. package/node_modules/yaml/dist/parse/cst.d.ts +109 -0
  281. package/node_modules/yaml/dist/parse/cst.js +112 -0
  282. package/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
  283. package/node_modules/yaml/dist/parse/lexer.js +723 -0
  284. package/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
  285. package/node_modules/yaml/dist/parse/line-counter.js +41 -0
  286. package/node_modules/yaml/dist/parse/parser.d.ts +84 -0
  287. package/node_modules/yaml/dist/parse/parser.js +980 -0
  288. package/node_modules/yaml/dist/public-api.d.ts +44 -0
  289. package/node_modules/yaml/dist/public-api.js +107 -0
  290. package/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
  291. package/node_modules/yaml/dist/schema/Schema.js +39 -0
  292. package/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
  293. package/node_modules/yaml/dist/schema/common/map.js +19 -0
  294. package/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
  295. package/node_modules/yaml/dist/schema/common/null.js +17 -0
  296. package/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
  297. package/node_modules/yaml/dist/schema/common/seq.js +19 -0
  298. package/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
  299. package/node_modules/yaml/dist/schema/common/string.js +16 -0
  300. package/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
  301. package/node_modules/yaml/dist/schema/core/bool.js +21 -0
  302. package/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
  303. package/node_modules/yaml/dist/schema/core/float.js +47 -0
  304. package/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
  305. package/node_modules/yaml/dist/schema/core/int.js +42 -0
  306. package/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
  307. package/node_modules/yaml/dist/schema/core/schema.js +25 -0
  308. package/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
  309. package/node_modules/yaml/dist/schema/json/schema.js +64 -0
  310. package/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
  311. package/node_modules/yaml/dist/schema/tags.d.ts +48 -0
  312. package/node_modules/yaml/dist/schema/tags.js +99 -0
  313. package/node_modules/yaml/dist/schema/types.d.ts +92 -0
  314. package/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
  315. package/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
  316. package/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
  317. package/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
  318. package/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
  319. package/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
  320. package/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
  321. package/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
  322. package/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
  323. package/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
  324. package/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
  325. package/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
  326. package/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
  327. package/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
  328. package/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
  329. package/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
  330. package/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
  331. package/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
  332. package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
  333. package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
  334. package/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
  335. package/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
  336. package/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
  337. package/node_modules/yaml/dist/stringify/stringify.js +132 -0
  338. package/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
  339. package/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
  340. package/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
  341. package/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
  342. package/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
  343. package/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
  344. package/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
  345. package/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
  346. package/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
  347. package/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
  348. package/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
  349. package/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
  350. package/node_modules/yaml/dist/test-events.d.ts +4 -0
  351. package/node_modules/yaml/dist/test-events.js +134 -0
  352. package/node_modules/yaml/dist/util.d.ts +16 -0
  353. package/node_modules/yaml/dist/util.js +28 -0
  354. package/node_modules/yaml/dist/visit.d.ts +102 -0
  355. package/node_modules/yaml/dist/visit.js +236 -0
  356. package/node_modules/yaml/package.json +97 -0
  357. package/node_modules/yaml/util.js +2 -0
  358. package/package.json +10 -8
  359. package/src/analysis/architecture/discovery.ts +213 -227
  360. package/src/analysis/architecture/manifest.ts +147 -0
  361. package/src/analysis/architecture/model.ts +119 -52
  362. package/src/analysis/architecture/workspace-config.ts +229 -0
  363. package/src/analysis/{coverage/coverage-warnings.ts → capability/capability-warnings.ts} +41 -78
  364. package/src/analysis/evidence.ts +22 -5
  365. package/src/analysis/health/diagnostics.ts +183 -0
  366. package/src/analysis/health/recovery.ts +39 -0
  367. package/src/analysis/health/signals.ts +20 -0
  368. package/src/analysis/instruction-files.ts +60 -48
  369. package/src/analysis/provider.ts +31 -12
  370. package/src/analysis/readiness.ts +29 -9
  371. package/src/{tool/refactor-apply → analysis/refactor}/apply.ts +120 -26
  372. package/src/analysis/refactor/position.ts +6 -0
  373. package/src/analysis/refactor/safety.ts +4 -11
  374. package/src/analysis/references/locations.ts +20 -0
  375. package/src/analysis/references/semantic-refs.ts +21 -11
  376. package/src/{tool/graph → analysis/relations}/implementations.ts +27 -23
  377. package/src/analysis/relations/provider-locations.ts +179 -0
  378. package/src/{tool/graph → analysis/relations}/references.ts +25 -21
  379. package/src/{tool/graph → analysis/relations}/types.ts +4 -19
  380. package/src/analysis/search/ast-scan.ts +376 -0
  381. package/src/analysis/search/call-name.ts +68 -0
  382. package/src/analysis/search/deadline.ts +84 -0
  383. package/src/analysis/search/paths.ts +88 -0
  384. package/src/analysis/search/pattern.ts +290 -246
  385. package/src/analysis/target/anchored.ts +72 -27
  386. package/src/analysis/target/file.ts +292 -132
  387. package/src/analysis/target/identity.ts +237 -0
  388. package/src/analysis/target/symbol.ts +169 -86
  389. package/src/analysis/target/types.ts +36 -4
  390. package/src/api.ts +21 -4
  391. package/src/app/app.ts +54 -44
  392. package/src/extension.ts +21 -97
  393. package/src/headless.ts +41 -0
  394. package/src/session/capability-adapter.ts +26 -118
  395. package/src/session/find-types.ts +38 -0
  396. package/src/session/find-workflow.ts +141 -0
  397. package/src/session/graph/collect.ts +181 -0
  398. package/src/session/graph-types.ts +77 -0
  399. package/src/session/graph-workflow.ts +152 -0
  400. package/src/session/health-types.ts +134 -0
  401. package/src/session/health-workflow.ts +341 -0
  402. package/src/session/input/common.ts +216 -0
  403. package/src/session/input/health-refactor.ts +169 -0
  404. package/src/session/input/workflows.ts +211 -0
  405. package/src/session/inspect/collect.ts +304 -0
  406. package/src/session/inspect/file-point.ts +69 -0
  407. package/src/session/inspect-types.ts +78 -0
  408. package/src/session/inspect-workflow.ts +157 -0
  409. package/src/session/orientation/collect.ts +718 -0
  410. package/src/session/orientation/context-facts.ts +319 -0
  411. package/src/session/orientation/context-sections.ts +352 -0
  412. package/src/session/orientation-types.ts +97 -0
  413. package/src/session/orientation-workflow.ts +307 -0
  414. package/src/session/refactor-plans.ts +1 -1
  415. package/src/session/refactor-types.ts +51 -0
  416. package/src/session/refactor-workflow.ts +263 -0
  417. package/src/session/session.ts +263 -234
  418. package/src/session/target-candidates.ts +60 -0
  419. package/src/session/target-input.ts +98 -0
  420. package/src/session/target-store.ts +132 -29
  421. package/src/session/target-workflow.ts +254 -302
  422. package/src/session/workflow-control.ts +35 -0
  423. package/src/substrate/lsp/lifecycle.ts +26 -53
  424. package/src/substrate/lsp/maintenance.ts +75 -0
  425. package/src/substrate/lsp/recovery.ts +41 -25
  426. package/src/substrate/lsp/settings.ts +1 -10
  427. package/src/substrate/lsp/state.ts +5 -13
  428. package/src/substrate/workspace-provider-host.ts +129 -0
  429. package/src/tool/find/ast-kinds.ts +35 -0
  430. package/src/tool/find/execute.ts +22 -113
  431. package/src/tool/find/markdown.ts +85 -221
  432. package/src/tool/find/modes.ts +5 -0
  433. package/src/tool/find/render.ts +57 -0
  434. package/src/tool/find/tui.ts +1 -1
  435. package/src/tool/graph/calls-md.ts +17 -30
  436. package/src/tool/graph/execute.ts +42 -103
  437. package/src/tool/graph/implementations-md.ts +32 -54
  438. package/src/tool/graph/markdown-base.ts +73 -196
  439. package/src/tool/graph/provider-location-md.ts +9 -0
  440. package/src/tool/graph/references-md.ts +34 -27
  441. package/src/tool/graph/tui.ts +8 -26
  442. package/src/tool/guidance.ts +31 -48
  443. package/src/tool/health/execute.ts +15 -56
  444. package/src/tool/health/markdown.ts +199 -148
  445. package/src/tool/health/semantic-state.ts +24 -0
  446. package/src/tool/health/tui.ts +262 -36
  447. package/src/tool/infra/error-results.ts +0 -2
  448. package/src/tool/infra/progress.ts +2 -2
  449. package/src/tool/infra/workflow-control.ts +11 -0
  450. package/src/tool/inspect/execute.ts +23 -63
  451. package/src/tool/inspect/markdown.ts +114 -95
  452. package/src/tool/inspect/tui.ts +7 -7
  453. package/src/tool/orientation/execute.ts +50 -37
  454. package/src/tool/orientation/markdown.ts +26 -31
  455. package/src/tool/orientation/tui.ts +41 -39
  456. package/src/tool/refactor-apply/execute.ts +23 -9
  457. package/src/tool/refactor-apply/tui.ts +7 -3
  458. package/src/tool/refactor-plan/execute.ts +44 -61
  459. package/src/tool/refactor-plan/markdown.ts +33 -56
  460. package/src/tool/refactor-plan/tui.ts +10 -11
  461. package/src/tool/register.ts +6 -5
  462. package/src/tool/resolve/execute.ts +23 -69
  463. package/src/tool/resolve/markdown.ts +125 -114
  464. package/src/tool/resolve/tui.ts +11 -9
  465. package/src/tool/result/assembly.ts +125 -0
  466. package/src/tool/result/errors.ts +20 -34
  467. package/src/tool/result/find.ts +107 -21
  468. package/src/tool/result/graph.ts +163 -64
  469. package/src/tool/result/health.ts +170 -73
  470. package/src/tool/result/inspect.ts +183 -41
  471. package/src/tool/result/orientation.ts +118 -16
  472. package/src/tool/result/refactor.ts +101 -21
  473. package/src/tool/result/resolve.ts +243 -80
  474. package/src/tool/result/types.ts +100 -56
  475. package/src/tool/schemas.ts +160 -231
  476. package/src/tool/specs.ts +57 -168
  477. package/src/types/details.ts +2 -4
  478. package/src/types/execution.ts +6 -15
  479. package/src/types/index.ts +2 -4
  480. package/src/types/tool-names.ts +1 -2
  481. package/src/ui/footer.ts +3 -3
  482. package/src/ui/markdown/gather.ts +17 -65
  483. package/src/ui/markdown/overview-data.ts +143 -21
  484. package/src/ui/markdown/overview.ts +27 -8
  485. package/src/ui/markdown/types.ts +12 -16
  486. package/src/ui/status-command.ts +39 -31
  487. package/src/ui/status-overlay.ts +23 -15
  488. package/src/ui/tui/common.ts +121 -74
  489. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
  490. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
  491. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
  492. package/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
  493. package/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
  494. package/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
  495. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
  496. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
  497. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
  498. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
  499. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
  500. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
  501. package/node_modules/@mrclrchtr/supi-lsp/src/diagnostics/diagnostic-augmentation.ts +0 -82
  502. package/node_modules/@mrclrchtr/supi-lsp/src/diagnostics/diagnostic-context.ts +0 -116
  503. package/node_modules/@mrclrchtr/supi-lsp/src/diagnostics/diagnostic-display.ts +0 -69
  504. package/node_modules/@mrclrchtr/supi-lsp/src/manager/capability-index.ts +0 -24
  505. package/node_modules/@mrclrchtr/supi-lsp/src/manager/client-pool.ts +0 -33
  506. package/node_modules/@mrclrchtr/supi-lsp/src/manager/diagnostic-store.ts +0 -51
  507. package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-stale-resync.ts +0 -47
  508. package/node_modules/@mrclrchtr/supi-lsp/src/manager/recovery-coordinator.ts +0 -37
  509. package/node_modules/@mrclrchtr/supi-lsp/src/manager/workspace-router.ts +0 -44
  510. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
  511. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
  512. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
  513. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
  514. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
  515. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
  516. package/src/analysis/brief/directory.ts +0 -324
  517. package/src/analysis/brief/enrich.ts +0 -157
  518. package/src/analysis/brief/file.ts +0 -84
  519. package/src/analysis/brief/inventory.ts +0 -177
  520. package/src/analysis/brief/main.ts +0 -176
  521. package/src/analysis/brief/models.ts +0 -75
  522. package/src/analysis/brief/public-brief.ts +0 -179
  523. package/src/analysis/brief/summarize.ts +0 -208
  524. package/src/analysis/brief/types.ts +0 -27
  525. package/src/analysis/brief/use-case.ts +0 -264
  526. package/src/analysis/search/ripgrep.ts +0 -558
  527. package/src/analysis/signals/git.ts +0 -89
  528. package/src/analysis/signals/project.ts +0 -189
  529. package/src/analysis/target/bridge.ts +0 -152
  530. package/src/analysis/target/file-resolution.ts +0 -125
  531. package/src/analysis/target/planner.ts +0 -92
  532. package/src/analysis/target/query.ts +0 -74
  533. package/src/analysis/target/resolve-common.ts +0 -115
  534. package/src/analysis/target/service.ts +0 -229
  535. package/src/analysis/tests/likely-tests.ts +0 -174
  536. package/src/analysis/tests/test-discovery.ts +0 -540
  537. package/src/analysis/tests/vitest.ts +0 -87
  538. package/src/app/manager.ts +0 -65
  539. package/src/substrate/lsp/diagnostic-injection.ts +0 -203
  540. package/src/substrate/lsp/overrides.ts +0 -132
  541. package/src/substrate/tree-sitter/lifecycle.ts +0 -52
  542. package/src/tool/find/orchestrate.ts +0 -317
  543. package/src/tool/find/semantic-search.ts +0 -128
  544. package/src/tool/graph/collect-relation.ts +0 -372
  545. package/src/tool/graph/orchestrate.ts +0 -259
  546. package/src/tool/health/orchestrate.ts +0 -151
  547. package/src/tool/health/sections/diagnostics.ts +0 -182
  548. package/src/tool/health/sections/recovery.ts +0 -89
  549. package/src/tool/health/sections/signals.ts +0 -89
  550. package/src/tool/impact/analysis.ts +0 -220
  551. package/src/tool/impact/change-set-impact.ts +0 -152
  552. package/src/tool/impact/execute.ts +0 -125
  553. package/src/tool/impact/file-level-impact.ts +0 -82
  554. package/src/tool/impact/markdown.ts +0 -283
  555. package/src/tool/impact/orchestrate.ts +0 -97
  556. package/src/tool/impact/result.ts +0 -2
  557. package/src/tool/impact/single-impact.ts +0 -90
  558. package/src/tool/impact/tui.ts +0 -39
  559. package/src/tool/impact/types.ts +0 -34
  560. package/src/tool/infra/cross-field.ts +0 -335
  561. package/src/tool/infra/pipeline.ts +0 -334
  562. package/src/tool/infra/readiness-message.ts +0 -5
  563. package/src/tool/inspect/orchestrate.ts +0 -154
  564. package/src/tool/orientation/deps.ts +0 -63
  565. package/src/tool/orientation/mode.ts +0 -139
  566. package/src/tool/orientation/orchestrate.ts +0 -475
  567. package/src/tool/orientation/precise-target.ts +0 -253
  568. package/src/tool/params.ts +0 -15
  569. package/src/tool/refactor-apply/markdown.ts +0 -118
  570. package/src/tool/refactor-apply/orchestrate.ts +0 -84
  571. package/src/tool/refactor-plan/orchestrate.ts +0 -355
  572. package/src/tool/resolve/orchestrate.ts +0 -38
  573. package/src/tool/result/impact.ts +0 -50
  574. package/src/ui/markdown/brief.ts +0 -218
  575. package/src/ui/message-renderer.ts +0 -121
  576. package/src/ui/tui/index.ts +0 -37
  577. /package/src/{tool/graph → analysis/relations}/callees.ts +0 -0
@@ -1,558 +0,0 @@
1
- // biome-ignore-all lint/style/noExcessiveLinesPerFile: ripgrep abort/process handling, JSON parsing, and path/scope helpers are cohesive search infrastructure
2
- // Shared search helpers for code-intelligence search and routing helpers.
3
-
4
- import { type ChildProcess, spawn } from "node:child_process";
5
- import { existsSync } from "node:fs";
6
- import * as path from "node:path";
7
- import { resolveToolPath, uriToFile as uriToFileShared } from "@mrclrchtr/supi-core/path";
8
-
9
- const LOW_SIGNAL_DIRS = new Set([
10
- "node_modules",
11
- ".git",
12
- ".pnpm",
13
- "dist",
14
- "build",
15
- "out",
16
- ".next",
17
- ".nuxt",
18
- "coverage",
19
- ".turbo",
20
- ".cache",
21
- "__pycache__",
22
- ".tsbuildinfo",
23
- ]);
24
-
25
- /** Check if a file path contains an obviously low-signal directory segment. */
26
- export function isLowSignalPath(filePath: string): boolean {
27
- const segments = filePath.split(path.sep);
28
- return segments.some((s) => LOW_SIGNAL_DIRS.has(s));
29
- }
30
-
31
- /** Convert a file:// URI to a file path, matching the shared SuPi normalization. */
32
- export const uriToFile = uriToFileShared;
33
-
34
- /** Check whether a resolved file path is inside the current project (within cwd, not under node_modules or .pnpm). */
35
- export function isInProjectPath(filePath: string, cwd: string): boolean {
36
- const relativePath = path.relative(cwd, path.resolve(cwd, filePath));
37
- if (relativePath.startsWith(`..${path.sep}`) || relativePath === "..") return false;
38
- const normalized = relativePath.replaceAll("\\", "/");
39
- return !(
40
- normalized.includes("/node_modules/") ||
41
- normalized.startsWith("node_modules/") ||
42
- normalized.includes("/.pnpm/") ||
43
- normalized.startsWith(".pnpm/")
44
- );
45
- }
46
-
47
- /** Result of resolving a user-provided `scope` value to an absolute path. */
48
- export type ScopeResolution = { kind: "ok"; path: string } | { kind: "error"; reason: string };
49
-
50
- /** Result of resolving a code_find `scope` value to one or more absolute paths. */
51
- export type ScopeSetResolution =
52
- | { kind: "ok"; paths: string[]; display: string | null }
53
- | { kind: "error"; reason: string };
54
-
55
- /**
56
- * Resolve a `scope` value to an absolute path using pi scope semantics:
57
- * - strip leading `@`
58
- * - resolve relative paths from `cwd`
59
- * - require the resolved path to exist
60
- */
61
- export function resolveScope(scope: string | undefined, cwd: string): ScopeResolution {
62
- if (!scope) return { kind: "ok", path: cwd };
63
- if (/[,;\s]/.test(scope)) {
64
- return {
65
- kind: "error",
66
- reason: `Scope accepts a single directory or file path, not multiple: \`${scope}\``,
67
- };
68
- }
69
- return resolveSingleScope(scope, cwd);
70
- }
71
-
72
- /**
73
- * Resolve a code_find scope input to one or more absolute paths.
74
- *
75
- * `code_find` is intentionally more flexible than other code-intelligence tools:
76
- * it accepts `scope: ["docs", "packages"]` and also splits delimiter-separated
77
- * strings such as `"docs packages"` only when no exact path by that name exists.
78
- */
79
- export function resolveScopeSet(
80
- scope: string | readonly string[] | undefined,
81
- cwd: string,
82
- ): ScopeSetResolution {
83
- if (scope === undefined) {
84
- return { kind: "ok", paths: [cwd], display: null };
85
- }
86
-
87
- const labels = typeof scope === "string" ? splitScopeString(scope, cwd) : [...scope];
88
- if (labels.length === 0) {
89
- return { kind: "error", reason: "Scope must include at least one directory or file path." };
90
- }
91
-
92
- const resolved: Array<{ label: string; path: string }> = [];
93
- for (const label of labels) {
94
- const trimmed = label.trim();
95
- if (!trimmed) {
96
- return { kind: "error", reason: "Scope must not include empty path entries." };
97
- }
98
- const single = resolveSingleScope(trimmed, cwd);
99
- if (single.kind === "error") return single;
100
- resolved.push({ label: trimmed, path: single.path });
101
- }
102
-
103
- const byPath = new Map<string, string>();
104
- for (const entry of resolved) {
105
- if (!byPath.has(entry.path)) byPath.set(entry.path, entry.label);
106
- }
107
- const paths = [...byPath.keys()];
108
- const uniqueLabels = paths.map((p) => byPath.get(p) ?? p);
109
-
110
- return {
111
- kind: "ok",
112
- paths,
113
- display: uniqueLabels.length > 0 ? uniqueLabels.join(", ") : null,
114
- };
115
- }
116
-
117
- function resolveSingleScope(scope: string, cwd: string): ScopeResolution {
118
- const resolved = normalizePath(scope, cwd);
119
- if (!existsSync(resolved)) {
120
- return { kind: "error", reason: `Scope path not found: \`${scope}\`` };
121
- }
122
- return { kind: "ok", path: resolved };
123
- }
124
-
125
- function splitScopeString(scope: string, cwd: string): string[] {
126
- const trimmed = scope.trim();
127
- if (!trimmed) return [];
128
-
129
- const exact = resolveSingleScope(trimmed, cwd);
130
- if (exact.kind === "ok") return [trimmed];
131
-
132
- const parts = trimmed
133
- .split(/[,;\s]+/)
134
- .map((part) => part.trim())
135
- .filter((part) => part.length > 0);
136
- return parts.length > 1 ? parts : [trimmed];
137
- }
138
-
139
- /** Escape regex special characters. */
140
- export function escapeRegex(s: string): string {
141
- return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
142
- }
143
-
144
- /** Normalize a file/path value: strip leading @, resolve relative to cwd. */
145
- export function normalizePath(input: string, cwd: string): string {
146
- return resolveToolPath(cwd, input);
147
- }
148
-
149
- /** Render a file path relative to cwd when it is inside the workspace. */
150
- export function toDisplayPath(cwd: string, filePath: string): string {
151
- if (!path.isAbsolute(filePath)) {
152
- return filePath.replaceAll("\\", "/");
153
- }
154
-
155
- const relativePath = path.relative(cwd, filePath);
156
- if (!relativePath || relativePath === ".") {
157
- return filePath;
158
- }
159
- if (relativePath.startsWith(`..${path.sep}`) || relativePath === "..") {
160
- return filePath;
161
- }
162
-
163
- return relativePath.replaceAll("\\", "/");
164
- }
165
-
166
- export interface RgMatch {
167
- file: string;
168
- line: number;
169
- text: string;
170
- /** Context lines surrounding this match (from -C flag). */
171
- context?: Array<{ line: number; text: string }>;
172
- }
173
-
174
- /** Result of a ripgrep invocation for callers that need both matches and execution errors. */
175
- export interface RipgrepRunResult {
176
- /** Parsed ripgrep matches, if any. */
177
- matches: RgMatch[];
178
- /** Non-no-match ripgrep execution error text, such as invalid regex syntax. */
179
- error?: string;
180
- }
181
-
182
- /** Options for {@link runRipgrep} / {@link runRipgrepDetailed}. */
183
- export interface RipgrepOptions {
184
- maxMatches?: number;
185
- contextLines?: number;
186
- literal?: boolean;
187
- filterLowSignal?: boolean;
188
- /**
189
- * Abort signal from the agent runtime. When aborted, the ripgrep child is
190
- * killed and the call rejects with {@link RipgrepAbortedError} so the
191
- * executor (and pi) can treat the tool call as cancelled rather than
192
- * silently completing with partial matches.
193
- */
194
- signal?: AbortSignal;
195
- }
196
-
197
- /** Hard upper bound on a single ripgrep invocation, matching the prior `execFileSync` timeout. */
198
- const RIPGREP_TIMEOUT_MS = 10_000;
199
-
200
- /**
201
- * Thrown by {@link runRipgrepDetailed} when the supplied `AbortSignal` fires.
202
- * Propagates out of executors so pi cancels the tool call instead of returning
203
- * partial results.
204
- */
205
- export class RipgrepAbortedError extends Error {
206
- constructor(signal?: AbortSignal) {
207
- const reason = signal?.reason;
208
- super(reason instanceof Error ? reason.message : "ripgrep search was aborted");
209
- this.name = "RipgrepAbortedError";
210
- }
211
- }
212
-
213
- /**
214
- * Run ripgrep with JSON output and parse matches, filtering low-signal paths.
215
- *
216
- * Async and abort-aware: when `opts.signal` aborts, the ripgrep child is killed
217
- * and the returned promise rejects with {@link RipgrepAbortedError}. Any
218
- * non-abort ripgrep execution failure is still treated like an empty match set
219
- * (or surfaces an error via {@link runRipgrepDetailed}).
220
- */
221
- export async function runRipgrep(
222
- pattern: string,
223
- scopePath: string | readonly string[],
224
- cwd: string,
225
- opts?: RipgrepOptions,
226
- ): Promise<RgMatch[]> {
227
- return (await runRipgrepDetailed(pattern, scopePath, cwd, opts)).matches;
228
- }
229
-
230
- /**
231
- * Run ripgrep and preserve non-no-match execution errors for callers that need
232
- * to distinguish invalid regex syntax from a genuine empty search result.
233
- * Abort-aware: rejects with {@link RipgrepAbortedError} when `opts.signal` fires.
234
- */
235
- export async function runRipgrepDetailed(
236
- pattern: string,
237
- scopePath: string | readonly string[],
238
- cwd: string,
239
- opts?: RipgrepOptions,
240
- ): Promise<RipgrepRunResult> {
241
- const filter = opts?.filterLowSignal ?? true;
242
- let proc: RgProcessResult;
243
- try {
244
- proc = await runRgProcess(
245
- buildRipgrepArgs(pattern, scopePath, opts),
246
- cwd,
247
- RIPGREP_TIMEOUT_MS,
248
- opts?.signal,
249
- );
250
- } catch (err: unknown) {
251
- // Abort propagates so pi cancels the tool call. Any other unexpected spawn
252
- // failure is treated like an empty match set, preserving prior behavior.
253
- if (err instanceof RipgrepAbortedError) throw err;
254
- return { matches: [] };
255
- }
256
-
257
- switch (proc.kind) {
258
- case "missing":
259
- return {
260
- matches: [],
261
- error:
262
- "ripgrep (rg) is not available. Install it (e.g., `apt install ripgrep` or `brew install ripgrep`).",
263
- };
264
- case "ok":
265
- case "nomatch":
266
- return { matches: dedupeMatches(parseRgJson(proc.stdout, filter)) };
267
- case "timeout":
268
- // Timeout: yield any partial stdout matches with no error surfaced — an
269
- // improvement over the prior execFileSync path, which discarded partial
270
- // output on timeout (the timeout error lacked a `status`, so the old
271
- // handleRipgrepError returned an empty match set).
272
- return { matches: proc.stdout ? dedupeMatches(parseRgJson(proc.stdout, filter)) : [] };
273
- case "error":
274
- return {
275
- matches: proc.stdout ? dedupeMatches(parseRgJson(proc.stdout, filter)) : [],
276
- ...(proc.stderr.trim() ? { error: proc.stderr.trim() } : {}),
277
- };
278
- }
279
- }
280
-
281
- function buildRipgrepArgs(
282
- pattern: string,
283
- scopePath: string | readonly string[],
284
- opts?: { maxMatches?: number; contextLines?: number; literal?: boolean },
285
- ): string[] {
286
- const args = ["--json", "-m", String(opts?.maxMatches ?? 30)];
287
- if ((opts?.contextLines ?? 0) > 0) {
288
- args.push("-C", String(opts?.contextLines ?? 0));
289
- }
290
- if (opts?.literal) {
291
- args.push("-F");
292
- }
293
- args.push("-e", pattern, ...normalizeScopePathArgs(scopePath));
294
- return args;
295
- }
296
-
297
- function normalizeScopePathArgs(scopePath: string | readonly string[]): string[] {
298
- const paths = Array.isArray(scopePath) ? scopePath : [scopePath];
299
- return paths.length > 0 ? [...paths] : ["."];
300
- }
301
-
302
- /** Discriminated result of a single ripgrep process run (see {@link runRgProcess}). */
303
- type RgProcessResult =
304
- | { kind: "ok"; stdout: string; stderr: string; status: number }
305
- | { kind: "nomatch"; stdout: string; stderr: string; status: 1 }
306
- | { kind: "error"; stdout: string; stderr: string; status: number }
307
- | { kind: "timeout"; stdout: string; stderr: string }
308
- | { kind: "missing" };
309
-
310
- /**
311
- * Spawn ripgrep, collect stdout/stderr, and resolve a discriminated result.
312
- * Rejects with {@link RipgrepAbortedError} when `signal` aborts (the child is
313
- * killed with SIGKILL). Maps exit codes: 0 → ok, 1 → nomatch, 2+ → error;
314
- * ENOENT → missing (rg not installed); timeout → timeout.
315
- */
316
- function runRgProcess(
317
- args: string[],
318
- cwd: string,
319
- timeoutMs: number,
320
- signal?: AbortSignal,
321
- ): Promise<RgProcessResult> {
322
- return new Promise<RgProcessResult>((resolve, reject) => {
323
- let child: ChildProcess;
324
- try {
325
- child = spawn("rg", args, { cwd, stdio: ["pipe", "pipe", "pipe"] });
326
- } catch (err: unknown) {
327
- if (isCodeError(err, "ENOENT")) {
328
- resolve({ kind: "missing" });
329
- return;
330
- }
331
- reject(err);
332
- return;
333
- }
334
-
335
- let stdout = "";
336
- let stderr = "";
337
- let timedOut = false;
338
- let settled = false;
339
- let timer: ReturnType<typeof setTimeout> | undefined;
340
- let abortListener: (() => void) | null = null;
341
-
342
- const cleanup = (): void => {
343
- if (timer) clearTimeout(timer);
344
- if (abortListener && signal) signal.removeEventListener("abort", abortListener);
345
- };
346
- const settle = (r: RgProcessResult): void => {
347
- if (settled) return;
348
- settled = true;
349
- cleanup();
350
- resolve(r);
351
- };
352
- const failAbort = (): void => {
353
- if (settled) return;
354
- settled = true;
355
- cleanup();
356
- try {
357
- child.kill("SIGKILL");
358
- } catch {
359
- // Child may already have exited; ignore.
360
- }
361
- reject(new RipgrepAbortedError(signal));
362
- };
363
-
364
- // Fast path: signal already aborted before any work is scheduled.
365
- if (signal?.aborted) {
366
- failAbort();
367
- return;
368
- }
369
-
370
- child.stdout?.setEncoding("utf-8");
371
- child.stderr?.setEncoding("utf-8");
372
- child.stdout?.on("data", (d: string) => {
373
- stdout += d;
374
- });
375
- child.stderr?.on("data", (d: string) => {
376
- stderr += d;
377
- });
378
-
379
- timer = setTimeout(() => {
380
- timedOut = true;
381
- try {
382
- child.kill("SIGTERM");
383
- } catch {
384
- // Ignore; the close handler will still fire.
385
- }
386
- }, timeoutMs);
387
-
388
- if (signal) {
389
- abortListener = () => failAbort();
390
- signal.addEventListener("abort", abortListener);
391
- }
392
-
393
- child.on("error", (err: NodeJS.ErrnoException) => {
394
- if (settled) return;
395
- if (isCodeError(err, "ENOENT")) {
396
- settle({ kind: "missing" });
397
- return;
398
- }
399
- settle({ kind: "error", stdout, stderr, status: -1 });
400
- });
401
-
402
- child.on("close", (status: number | null) => {
403
- if (settled) return;
404
- if (timedOut) {
405
- settle({ kind: "timeout", stdout, stderr });
406
- return;
407
- }
408
- if (status === 0) settle({ kind: "ok", stdout, stderr, status });
409
- else if (status === 1) settle({ kind: "nomatch", stdout, stderr, status });
410
- else settle({ kind: "error", stdout, stderr, status: status ?? -1 });
411
- });
412
- });
413
- }
414
-
415
- function isCodeError(err: unknown, code: string): boolean {
416
- return (
417
- typeof err === "object" &&
418
- err !== null &&
419
- "code" in err &&
420
- (err as { code: unknown }).code === code
421
- );
422
- }
423
-
424
- interface RawRgEvent {
425
- type: string;
426
- data?: {
427
- path?: { text: string };
428
- line_number?: number;
429
- lines?: { text: string };
430
- };
431
- }
432
-
433
- // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: JSON ripgrep output parsing with context line collection
434
- function parseRgJson(output: string, filterLowSignal: boolean): RgMatch[] {
435
- const matches: RgMatch[] = [];
436
- // Pending context lines that precede the next match
437
- let pendingContext: Array<{ line: number; text: string }> = [];
438
-
439
- for (const line of output.split("\n")) {
440
- if (!line.trim()) continue;
441
- let parsed: RawRgEvent;
442
- try {
443
- parsed = JSON.parse(line);
444
- } catch {
445
- continue;
446
- }
447
-
448
- if (parsed.type === "context" && parsed.data) {
449
- const lineNum = parsed.data.line_number;
450
- const text = (parsed.data.lines?.text ?? "").trim();
451
- if (lineNum) pendingContext.push({ line: lineNum, text });
452
- continue;
453
- }
454
-
455
- if (parsed.type === "match" && parsed.data) {
456
- const filePath = parsed.data.path?.text;
457
- const lineNum = parsed.data.line_number;
458
- const text = (parsed.data.lines?.text ?? "").trim();
459
- if (filePath && lineNum) {
460
- // Split pendingContext: lines before this match are "before" context,
461
- // lines from before this match line that trail the previous match stay with it.
462
- const beforeCtx = pendingContext.filter((c) => c.line < lineNum);
463
- const trailingCtx = pendingContext.filter((c) => c.line >= lineNum);
464
-
465
- // Attach trailing context from previous match to the last accepted match
466
- if (beforeCtx.length > 0 && matches.length > 0) {
467
- const prev = matches[matches.length - 1];
468
- const prevTrailing = beforeCtx.filter((c) => c.line > prev.line);
469
- if (prevTrailing.length > 0) {
470
- prev.context = [...(prev.context ?? []), ...prevTrailing];
471
- }
472
- }
473
-
474
- if (filterLowSignal && isLowSignalPath(filePath)) {
475
- pendingContext = [];
476
- continue;
477
- }
478
-
479
- const match: RgMatch = { file: filePath, line: lineNum, text };
480
- // Leading context: lines just before this match
481
- const leadingCtx =
482
- matches.length > 0
483
- ? beforeCtx.filter(
484
- (c) => c.line <= lineNum && c.line > (matches[matches.length - 1]?.line ?? 0),
485
- )
486
- : beforeCtx;
487
- if (leadingCtx.length > 0) {
488
- match.context = leadingCtx;
489
- }
490
- // Also include any pending context at/after this match's line (trailing from rg ordering)
491
- pendingContext = trailingCtx;
492
- matches.push(match);
493
- } else {
494
- pendingContext = [];
495
- }
496
- }
497
- }
498
-
499
- // Attach any trailing context lines to the last match
500
- if (pendingContext.length > 0 && matches.length > 0) {
501
- const last = matches[matches.length - 1];
502
- last.context = [...(last.context ?? []), ...pendingContext];
503
- }
504
-
505
- return matches;
506
- }
507
-
508
- function dedupeMatches(matches: RgMatch[]): RgMatch[] {
509
- const seen = new Set<string>();
510
- const deduped: RgMatch[] = [];
511
- for (const match of matches) {
512
- const key = `${match.file}\u0000${match.line}\u0000${match.text}`;
513
- if (seen.has(key)) continue;
514
- seen.add(key);
515
- deduped.push(match);
516
- }
517
- return deduped;
518
- }
519
-
520
- /**
521
- * Minimal interface for a reference-like object with a URI and range start.
522
- * Used by {@link filterOutDeclaration} to avoid coupling to a specific LspRef type.
523
- */
524
- export interface HasLspPosition {
525
- uri: string;
526
- range: { start: { line: number; character: number } };
527
- }
528
-
529
- /**
530
- * Filter out the declaration/definition location from LSP references.
531
- * LSP's `textDocument/references` includes the declaration by default;
532
- * for callers/affected analysis, the declaration is not a call site or affected reference.
533
- *
534
- * Uses {@link uriToFile} for robust URI-to-path conversion.
535
- */
536
- export function filterOutDeclaration<T extends HasLspPosition>(
537
- refs: T[],
538
- targetFile: string,
539
- targetPos: { line: number; character: number },
540
- ): T[] {
541
- return refs.filter((ref) => {
542
- const filePath = uriToFile(ref.uri);
543
- if (filePath !== targetFile) return true;
544
- const start = ref.range.start;
545
- return start.line !== targetPos.line || start.character !== targetPos.character;
546
- });
547
- }
548
-
549
- /** Group matches by file. */
550
- export function groupByFile(matches: RgMatch[]): Map<string, RgMatch[]> {
551
- const byFile = new Map<string, RgMatch[]>();
552
- for (const m of matches) {
553
- const group = byFile.get(m.file) ?? [];
554
- group.push(m);
555
- byFile.set(m.file, group);
556
- }
557
- return byFile;
558
- }
@@ -1,89 +0,0 @@
1
- import { execFileSync } from "node:child_process";
2
- import { createEvidenceList, renderEvidenceListDisclosure } from "../evidence.ts";
3
-
4
- function scrubGitEnv(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv {
5
- const next = { ...env };
6
- for (const key of Object.keys(next)) {
7
- if (key.startsWith("GIT_")) {
8
- delete next[key];
9
- }
10
- }
11
- return next;
12
- }
13
-
14
- function execGit(cwd: string, args: string[]): string {
15
- return execFileSync("git", args, {
16
- cwd,
17
- encoding: "utf-8",
18
- env: scrubGitEnv(process.env),
19
- stdio: ["ignore", "pipe", "ignore"],
20
- timeout: 5000,
21
- });
22
- }
23
-
24
- export interface GitContext {
25
- branch: string;
26
- dirtyFiles: string[];
27
- lastCommitMessage: string | null;
28
- }
29
-
30
- export function gatherGitContext(cwd: string): GitContext | null {
31
- try {
32
- const branch = execGit(cwd, ["branch", "--show-current"]).trim();
33
-
34
- const status = execGit(cwd, ["status", "--porcelain"]).trim();
35
-
36
- const dirtyFiles = status.split("\n").filter(Boolean).map(parsePorcelainPath);
37
-
38
- let lastCommitMessage: string | null = null;
39
- try {
40
- lastCommitMessage = execGit(cwd, ["log", "-1", "--format=%s"]).trim();
41
- } catch {
42
- // No commits yet
43
- }
44
-
45
- return { branch, dirtyFiles, lastCommitMessage };
46
- } catch {
47
- return null;
48
- }
49
- }
50
-
51
- export function formatGitContext(ctx: GitContext): string {
52
- const lines: string[] = [];
53
- lines.push("## Git Context");
54
- lines.push("");
55
- lines.push(`Branch: \`${ctx.branch}\``);
56
- if (ctx.dirtyFiles.length > 0) {
57
- lines.push(
58
- `Uncommitted: ${ctx.dirtyFiles.length} file${ctx.dirtyFiles.length !== 1 ? "s" : ""}`,
59
- );
60
- const evidence = createEvidenceList({
61
- key: "health.dirtyFiles",
62
- items: ctx.dirtyFiles,
63
- maxResults: 5,
64
- });
65
- for (const f of evidence.items) {
66
- lines.push(`- \`${f}\``);
67
- }
68
- const disclosure = renderEvidenceListDisclosure(evidence);
69
- if (disclosure) {
70
- lines.push(disclosure);
71
- }
72
- } else {
73
- lines.push("Working tree clean.");
74
- }
75
- if (ctx.lastCommitMessage) {
76
- lines.push(`Last commit: \`${ctx.lastCommitMessage}\``);
77
- }
78
- lines.push("");
79
- return lines.join("\n");
80
- }
81
-
82
- function parsePorcelainPath(line: string): string {
83
- const rawPath = line[2] === " " ? line.slice(3) : line.slice(2);
84
- const renameSeparator = " -> ";
85
- const renamedPath = rawPath.includes(renameSeparator)
86
- ? (rawPath.split(renameSeparator).at(-1) ?? rawPath)
87
- : rawPath;
88
- return renamedPath.trim();
89
- }