@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,200 +1,285 @@
1
- import { execFileSync } from "node:child_process";
2
- import * as path from "node:path";
3
- import type { StructuralProvider as StructuralSubstrate } from "@mrclrchtr/supi-code-runtime/api";
4
- import { getSupportedExtensions } from "@mrclrchtr/supi-tree-sitter/api";
5
-
6
- /** Soft file cap warn when a workspace has more source files than this. */
7
- const FILE_SOFT_CAP = 5000;
8
- const STRUCTURED_PATTERN_TIMEOUT_MS = 10_000;
9
-
10
- export type StructuredPatternKind =
11
- | "definition"
12
- | "export"
13
- | "import"
14
- | "call"
15
- | "type"
16
- | "interface"
17
- | "class"
18
- | "method"
19
- | "enum"
20
- | "test";
1
+ import type {
2
+ CodeResult,
3
+ OutlineData,
4
+ StructuralProvider as StructuralSubstrate,
5
+ } from "@mrclrchtr/supi-code-runtime/api";
6
+ import type { StructuralSearchOperation } from "@mrclrchtr/supi-tree-sitter/api";
7
+ import type { CodeFindAstKind } from "../../tool/find/ast-kinds.ts";
8
+ import type { EvidencePartialReason } from "../evidence.ts";
9
+ import {
10
+ type AstScanExclusion,
11
+ type AstScanLimitation,
12
+ type AstScanOperations,
13
+ type AstScanPolicy,
14
+ DEFAULT_AST_SCAN_MAX_FILES,
15
+ DEFAULT_AST_SCAN_TIMEOUT_MS,
16
+ enumerateAstFiles,
17
+ } from "./ast-scan.ts";
18
+ import { callableExpressionForMatching } from "./call-name.ts";
19
+ import { settleByDeadline } from "./deadline.ts";
20
+ import { relativeDisplayPath } from "./paths.ts";
21
21
 
22
22
  export interface StructuredPatternParams {
23
- pattern: string;
24
- kind: StructuredPatternKind;
25
- regex?: boolean;
23
+ readonly pattern: string;
24
+ readonly kind: CodeFindAstKind;
26
25
  }
27
26
 
28
27
  export interface StructuredMatch {
29
- file: string;
30
- name: string;
31
- kind: string;
32
- line: number;
28
+ readonly file: string;
29
+ readonly name: string;
30
+ readonly kind: string;
31
+ readonly line: number;
33
32
  }
34
33
 
35
- export interface StructuredPatternResult {
36
- matches: StructuredMatch[];
37
- omittedCount: number;
38
- partialReason: "file-cap" | "timeout" | null;
39
- /** Per-file parse/analysis failures surfaced to the agent. */
40
- failures: StructuredFailure[];
41
- }
34
+ export type StructuredFailureKind = Exclude<CodeResult<never>, { kind: "success" }>["kind"];
42
35
 
43
36
  export interface StructuredFailure {
44
- file: string;
45
- reason: string;
37
+ readonly file: string;
38
+ readonly kind: StructuredFailureKind;
39
+ readonly reason: string;
46
40
  }
47
41
 
48
- export function isStructuredPatternKind(kind: string | undefined): kind is StructuredPatternKind {
49
- return (
50
- kind === "definition" ||
51
- kind === "export" ||
52
- kind === "import" ||
53
- kind === "call" ||
54
- kind === "type" ||
55
- kind === "interface" ||
56
- kind === "class" ||
57
- kind === "method" ||
58
- kind === "enum" ||
59
- kind === "test"
60
- );
42
+ export type StructuredScanLimitation = AstScanLimitation | ProviderScanLimitation;
43
+
44
+ export interface ProviderScanLimitation {
45
+ readonly reason: "provider-failure";
46
+ readonly pathCount: number;
47
+ readonly examples: readonly string[];
61
48
  }
62
49
 
63
- // biome-ignore lint/complexity/useMaxParams: substrate injection keeps related inputs explicit for readability
64
- // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: enumeration-interrupted, cap, timeout, and error branches are each necessary
65
- export async function getStructuredPatternMatches(
66
- params: StructuredPatternParams,
67
- scopePath: string | readonly string[],
68
- cwd: string,
69
- relScope: string,
70
- structural: StructuralSubstrate,
71
- ): Promise<StructuredPatternResult | string | null> {
72
- const deadline = Date.now() + STRUCTURED_PATTERN_TIMEOUT_MS;
50
+ /** Structured completeness state for the AST source-file scan. */
51
+ export interface StructuredScanSummary {
52
+ readonly universe: "structural-operation-supported-files";
53
+ readonly roots: readonly string[];
54
+ readonly policy: AstScanPolicy;
55
+ readonly eligibleFileCount: number | null;
56
+ readonly analyzedFileCount: number;
57
+ readonly complete: boolean;
58
+ readonly exclusions: readonly AstScanExclusion[];
59
+ readonly limitations: readonly StructuredScanLimitation[];
60
+ }
73
61
 
74
- // Enumerate all supported source files via ripgrep (language-agnostic).
75
- const enumeration = enumerateSourceFiles(scopePath, cwd);
76
- if (enumeration === null) {
77
- return `Ripgrep (rg) is not available. Install it for structured pattern search.`;
78
- }
62
+ export interface StructuredPatternResult {
63
+ readonly matches: readonly StructuredMatch[];
64
+ readonly partialReason: EvidencePartialReason | null;
65
+ /** Per-file parse/analysis failures surfaced to the agent. */
66
+ readonly failures: readonly StructuredFailure[];
67
+ readonly scan: StructuredScanSummary;
68
+ }
79
69
 
80
- const allFiles = enumeration.files;
81
- let omittedCount = 0;
70
+ export type StructuredPatternOutcome =
71
+ | { readonly kind: "completed"; readonly result: StructuredPatternResult }
72
+ | { readonly kind: "invalid-input"; readonly message: string }
73
+ | { readonly kind: "unavailable"; readonly reason: string };
74
+
75
+ /** Internal controls for deterministic deadline, filesystem, and cancellation tests. */
76
+ export interface StructuredPatternControl {
77
+ readonly signal?: AbortSignal;
78
+ readonly now?: () => number;
79
+ readonly operations?: AstScanOperations;
80
+ readonly maxFiles?: number;
81
+ readonly timeoutMs?: number;
82
+ }
82
83
 
83
- if (enumeration.interrupted) {
84
- // rg was killed before completing the file listing — treat as partial
85
- omittedCount = Math.max(1, omittedCount);
86
- }
84
+ export interface StructuredPatternSearchOptions {
85
+ readonly params: StructuredPatternParams;
86
+ readonly roots: string | readonly string[];
87
+ readonly cwd: string;
88
+ readonly structural: StructuralSubstrate;
89
+ readonly control?: StructuredPatternControl;
90
+ }
87
91
 
88
- if (allFiles.length === 0) {
92
+ /**
93
+ * Enumerate and analyze the declared AST Scan universe.
94
+ *
95
+ * Abort propagates to the tool boundary. Deadline, safety-cap, traversal, and
96
+ * provider limitations instead produce explicit incomplete scan metadata.
97
+ */
98
+ export async function getStructuredPatternMatches(
99
+ options: StructuredPatternSearchOptions,
100
+ ): Promise<StructuredPatternOutcome> {
101
+ const now = options.control?.now ?? Date.now;
102
+ const maxFiles = options.control?.maxFiles ?? DEFAULT_AST_SCAN_MAX_FILES;
103
+ const timeoutMs = options.control?.timeoutMs ?? DEFAULT_AST_SCAN_TIMEOUT_MS;
104
+ const deadline = now() + timeoutMs;
105
+ const roots = Array.isArray(options.roots) ? [...options.roots] : [options.roots];
106
+ const operation = structuralOperationForKind(options.params.kind);
107
+ options.control?.signal?.throwIfAborted();
108
+
109
+ const enumeration = await enumerateAstFiles({
110
+ cwd: options.cwd,
111
+ roots,
112
+ operation,
113
+ deadline,
114
+ maxFiles,
115
+ timeoutMs,
116
+ signal: options.control?.signal,
117
+ now,
118
+ operations: options.control?.operations,
119
+ });
120
+ if (enumeration.kind === "invalid-root") {
89
121
  return {
90
- matches: [],
91
- omittedCount,
92
- partialReason: enumeration.interrupted ? "timeout" : null,
93
- failures: [],
122
+ kind: "invalid-input",
123
+ message: `${enumeration.reason} Scope: \`${enumeration.path}\`.`,
94
124
  };
95
125
  }
96
-
97
- const capped = allFiles.slice(0, FILE_SOFT_CAP);
98
- if (allFiles.length > FILE_SOFT_CAP) {
99
- omittedCount = allFiles.length - FILE_SOFT_CAP;
126
+ if (
127
+ enumeration.files.length === 0 &&
128
+ enumeration.limitations.some((limitation) => limitation.reason === "unreadable-path")
129
+ ) {
130
+ return {
131
+ kind: "unavailable",
132
+ reason: "No AST source file could be enumerated because the requested scope was unreadable.",
133
+ };
100
134
  }
101
-
102
- const matcher = createStructuredMatcher(params.pattern, params.regex ?? false);
103
- if (typeof matcher === "string") {
104
- return matcher;
135
+ if (
136
+ enumeration.files.length === 0 &&
137
+ enumeration.complete &&
138
+ enumeration.exclusions.some((exclusion) => exclusion.reason === "unsupported-operation")
139
+ ) {
140
+ return {
141
+ kind: "unavailable",
142
+ reason: `No file in the requested scope supports AST ${options.params.kind} search.`,
143
+ };
105
144
  }
106
145
 
107
- try {
108
- const matches: StructuredMatch[] = [];
109
- const failures: StructuredFailure[] = [];
110
- let timedOut = false;
111
-
112
- for (const [index, file] of capped.entries()) {
113
- if (Date.now() > deadline) {
114
- omittedCount += capped.length - index;
115
- timedOut = true;
116
- break;
117
- }
118
- const absFile = path.resolve(cwd, file);
119
- const relFile = path.relative(cwd, absFile);
120
- await collectMatchesForFile(matches, failures, structural, relFile, params.kind, matcher);
121
- }
122
-
146
+ const analysis = await analyzeStructuredFiles({
147
+ files: enumeration.files,
148
+ displayBase: enumeration.displayBase,
149
+ params: options.params,
150
+ structural: options.structural,
151
+ deadline,
152
+ now,
153
+ signal: options.control?.signal,
154
+ initialLimitations: enumeration.limitations,
155
+ });
156
+ const capabilityMismatches = analysis.failures.filter(
157
+ (failure) => failure.kind === "unsupported-language",
158
+ );
159
+ if (capabilityMismatches.length > 0) {
123
160
  return {
124
- matches,
125
- failures,
126
- omittedCount: timedOut ? Math.max(1, omittedCount) : omittedCount,
127
- partialReason: timedOut ? "timeout" : omittedCount > 0 ? "file-cap" : null,
161
+ kind: "unavailable",
162
+ reason: `Structural provider rejected ${capabilityMismatches.length} file${capabilityMismatches.length === 1 ? "" : "s"} declared eligible for ${operation} analysis.`,
128
163
  };
129
- } catch {
130
- return `No structured ${params.kind} search data available in \`${relScope}\`. Try omitting \`kind\` for plain text search.`;
131
164
  }
165
+ const complete = enumeration.complete && analysis.limitations.length === 0;
166
+ return {
167
+ kind: "completed",
168
+ result: {
169
+ matches: analysis.matches,
170
+ failures: analysis.failures,
171
+ partialReason: complete ? null : primaryPartialReason(analysis.limitations),
172
+ scan: {
173
+ universe: "structural-operation-supported-files",
174
+ roots: roots.map((root) => relativeDisplayPath(options.cwd, root)),
175
+ policy: enumeration.policy,
176
+ eligibleFileCount: enumeration.eligibleFileCount,
177
+ analyzedFileCount: analysis.analyzedFileCount,
178
+ complete,
179
+ exclusions: enumeration.exclusions,
180
+ limitations: analysis.limitations,
181
+ },
182
+ },
183
+ };
132
184
  }
133
185
 
134
- // ── File enumeration ─────────────────────────────────────────────────
135
-
136
- interface FileEnumeration {
137
- files: string[];
138
- /** True when rg was terminated before completing the listing. */
139
- interrupted: boolean;
186
+ interface AnalyzeStructuredFilesOptions {
187
+ readonly files: readonly string[];
188
+ readonly displayBase: string;
189
+ readonly params: StructuredPatternParams;
190
+ readonly structural: StructuralSubstrate;
191
+ readonly deadline: number;
192
+ readonly now: () => number;
193
+ readonly signal?: AbortSignal;
194
+ readonly initialLimitations: readonly AstScanLimitation[];
140
195
  }
141
196
 
142
- /**
143
- * Enumerate all tree-sitter-supported source files in scopePath using rg --files.
144
- * Returns null if ripgrep is not available.
145
- */
146
- function enumerateSourceFiles(
147
- scopePath: string | readonly string[],
148
- cwd: string,
149
- ): FileEnumeration | null {
150
- const extensions = getSupportedExtensions();
151
- // Strip leading dots — ripgrep -g expects ".ext" without the dot prefix
152
- const globPattern = `*.{${Array.from(extensions)
153
- .map((ext) => ext.replace(/^\./, ""))
154
- .join(",")}}`;
155
-
156
- try {
157
- const output = execFileSync("rg", ["--files", "-g", globPattern, ...scopePathArgs(scopePath)], {
158
- encoding: "utf-8",
159
- cwd,
160
- timeout: 5000,
161
- stdio: ["pipe", "pipe", "pipe"],
162
- });
163
- return {
164
- files: normalizeEnumeratedFiles(output),
165
- interrupted: false,
166
- };
167
- } catch (err: unknown) {
168
- if (isCodeError(err, "ENOENT")) {
169
- return null;
197
+ async function analyzeStructuredFiles(options: AnalyzeStructuredFilesOptions): Promise<{
198
+ matches: StructuredMatch[];
199
+ failures: StructuredFailure[];
200
+ limitations: StructuredScanLimitation[];
201
+ analyzedFileCount: number;
202
+ }> {
203
+ const matches: StructuredMatch[] = [];
204
+ const failures: StructuredFailure[] = [];
205
+ const limitations: StructuredScanLimitation[] = [...options.initialLimitations];
206
+ const matcher = createStructuredMatcher(options.params.pattern);
207
+ let analyzedFileCount = 0;
208
+
209
+ for (const [index, absoluteFile] of options.files.entries()) {
210
+ options.signal?.throwIfAborted();
211
+ if (options.now() > options.deadline) {
212
+ addAnalysisTimeout(limitations, options.files.slice(index), options.displayBase);
213
+ break;
170
214
  }
171
- // Non-zero exit (e.g. no matches) is fine — return what we got
172
- if (isExecError(err)) {
173
- const stdout = typeof err.stdout === "string" ? err.stdout : "";
174
- const wasKilled = (err as { killed?: boolean }).killed === true;
175
- return {
176
- files: normalizeEnumeratedFiles(stdout),
177
- interrupted: wasKilled,
178
- };
215
+ const relativeFile = relativeDisplayPath(options.displayBase, absoluteFile);
216
+ const fileMatches: StructuredMatch[] = [];
217
+ const fileFailures: StructuredFailure[] = [];
218
+ const outcome = await settleByDeadline(
219
+ async () => {
220
+ try {
221
+ await collectMatchesForFile(
222
+ fileMatches,
223
+ fileFailures,
224
+ options.structural,
225
+ relativeFile,
226
+ options.params.kind,
227
+ matcher,
228
+ );
229
+ } catch (error) {
230
+ fileFailures.push({
231
+ file: relativeFile,
232
+ kind: "runtime-error",
233
+ reason: errorMessage(error),
234
+ });
235
+ }
236
+ },
237
+ { deadline: options.deadline, now: options.now, signal: options.signal },
238
+ );
239
+ if (outcome.kind === "timeout") {
240
+ addAnalysisTimeout(limitations, options.files.slice(index), options.displayBase);
241
+ break;
179
242
  }
180
- return { files: [], interrupted: false };
243
+ options.signal?.throwIfAborted();
244
+ matches.push(...fileMatches);
245
+ failures.push(...fileFailures);
246
+ if (fileFailures.length === 0) analyzedFileCount += 1;
181
247
  }
248
+
249
+ if (failures.length > 0) {
250
+ limitations.push({
251
+ reason: "provider-failure",
252
+ pathCount: failures.length,
253
+ examples: failures.slice(0, 5).map((failure) => failure.file),
254
+ });
255
+ }
256
+ return { matches, failures, limitations, analyzedFileCount };
182
257
  }
183
258
 
184
- function scopePathArgs(scopePath: string | readonly string[]): string[] {
185
- const paths = Array.isArray(scopePath) ? scopePath : [scopePath];
186
- return paths.length > 0 ? [...paths] : ["."];
259
+ function addAnalysisTimeout(
260
+ limitations: StructuredScanLimitation[],
261
+ remainingFiles: readonly string[],
262
+ cwd: string,
263
+ ): void {
264
+ if (limitations.some((limitation) => limitation.reason === "timeout")) return;
265
+ limitations.push({
266
+ reason: "timeout",
267
+ pathCount: remainingFiles.length,
268
+ examples: remainingFiles.slice(0, 5).map((file) => relativeDisplayPath(cwd, file)),
269
+ });
187
270
  }
188
271
 
189
- function normalizeEnumeratedFiles(output: string): string[] {
190
- return [
191
- ...new Set(
192
- output
193
- .split("\n")
194
- .map((line) => line.trim())
195
- .filter((line) => line.length > 0),
196
- ),
197
- ].sort((a, b) => a.localeCompare(b));
272
+ function primaryPartialReason(
273
+ limitations: readonly StructuredScanLimitation[],
274
+ ): EvidencePartialReason {
275
+ if (limitations.some((limitation) => limitation.reason === "timeout")) return "timeout";
276
+ if (limitations.some((limitation) => limitation.reason === "safety-limit")) {
277
+ return "safety-limit";
278
+ }
279
+ if (limitations.some((limitation) => limitation.reason === "unreadable-path")) {
280
+ return "interrupted";
281
+ }
282
+ return "provider-limited";
198
283
  }
199
284
 
200
285
  // biome-ignore lint/complexity/useMaxParams: helper takes explicit collection inputs to avoid intermediate objects in the hot path
@@ -204,17 +289,17 @@ async function collectMatchesForFile(
204
289
  failures: StructuredFailure[],
205
290
  structural: StructuralSubstrate,
206
291
  relFile: string,
207
- kind: StructuredPatternKind,
292
+ kind: CodeFindAstKind,
208
293
  matcher: (value: string) => boolean,
209
294
  ): Promise<void> {
210
- const recordFailure = (reason: string) => {
211
- failures.push({ file: relFile, reason });
295
+ const recordFailure = (kind: StructuredFailureKind, reason: string) => {
296
+ failures.push({ file: relFile, kind, reason });
212
297
  };
213
298
 
214
299
  if (kind === "definition") {
215
300
  const outline = await structural.outline(relFile);
216
- if (!handleStructuralResult(outline, relFile, recordFailure)) return;
217
- for (const item of outline.data) {
301
+ if (!handleStructuralResult(outline, recordFailure)) return;
302
+ for (const item of flattenOutlineItems(outline.data)) {
218
303
  if (!matcher(item.name)) continue;
219
304
  matches.push({ file: relFile, name: item.name, kind: item.kind, line: item.startLine });
220
305
  }
@@ -223,7 +308,7 @@ async function collectMatchesForFile(
223
308
 
224
309
  if (kind === "export") {
225
310
  const exportsResult = await structural.exports(relFile);
226
- if (!handleStructuralResult(exportsResult, relFile, recordFailure)) return;
311
+ if (!handleStructuralResult(exportsResult, recordFailure)) return;
227
312
  for (const item of exportsResult.data) {
228
313
  if (!matcher(item.name)) continue;
229
314
  matches.push({ file: relFile, name: item.name, kind: item.kind, line: item.startLine });
@@ -233,7 +318,7 @@ async function collectMatchesForFile(
233
318
 
234
319
  if (kind === "import") {
235
320
  const importsResult = await structural.imports(relFile);
236
- if (!handleStructuralResult(importsResult, relFile, recordFailure)) return;
321
+ if (!handleStructuralResult(importsResult, recordFailure)) return;
237
322
  for (const item of importsResult.data) {
238
323
  if (!matcher(item.moduleSpecifier)) continue;
239
324
  matches.push({
@@ -248,87 +333,61 @@ async function collectMatchesForFile(
248
333
 
249
334
  if (kind === "call") {
250
335
  const callResult = await structural.callSites(relFile);
251
- if (!handleStructuralResult(callResult, relFile, recordFailure)) return;
252
- for (const cs of callResult.data) {
253
- if (!matcher(cs.name)) continue;
254
- matches.push({ file: relFile, name: cs.name, kind: "call", line: cs.startLine });
336
+ if (!handleStructuralResult(callResult, recordFailure)) return;
337
+ for (const call of callResult.data) {
338
+ if (!matcher(callableExpressionForMatching(call.name))) continue;
339
+ matches.push({ file: relFile, name: call.name, kind: "call", line: call.startLine });
255
340
  }
256
341
  return;
257
342
  }
258
343
 
259
- // ── type / interface / class / method / enum / test — use outline with kind-specific filters ─
260
-
261
- if (
262
- kind === "type" ||
263
- kind === "interface" ||
264
- kind === "class" ||
265
- kind === "method" ||
266
- kind === "enum" ||
267
- kind === "test"
268
- ) {
269
- const outline = await structural.outline(relFile);
270
- if (!handleStructuralResult(outline, relFile, recordFailure)) return;
271
- for (const item of outline.data) {
272
- if (kind === "type" && !isTypeLikeKind(item.kind)) continue;
273
- if (kind === "interface" && !isInterfaceKind(item.kind)) continue;
274
- if (kind === "class" && item.kind.toLowerCase() !== "class") continue;
275
- if (kind === "method" && item.kind.toLowerCase() !== "method") continue;
276
- if (kind === "enum" && item.kind.toLowerCase() !== "enum") continue;
277
- if (kind === "test") {
278
- const isTestName =
279
- /^(test|it|describe|spec)\b/.test(item.name) ||
280
- /\b(test|spec|Test|Spec)\b/.test(item.name);
281
- if (!isTestName && !matcher(item.name)) continue;
282
- }
283
- if (!matcher(item.name)) continue;
284
- matches.push({ file: relFile, name: item.name, kind: item.kind, line: item.startLine });
285
- }
344
+ const outline = await structural.outline(relFile);
345
+ if (!handleStructuralResult(outline, recordFailure)) return;
346
+ for (const item of flattenOutlineItems(outline.data)) {
347
+ if (kind === "type" && !TYPE_LIKE_KINDS.has(item.kind.toLowerCase())) continue;
348
+ if (kind === "interface" && item.kind.toLowerCase() !== "interface") continue;
349
+ if (kind === "class" && item.kind.toLowerCase() !== "class") continue;
350
+ if (kind === "method" && item.kind.toLowerCase() !== "method") continue;
351
+ if (kind === "enum" && item.kind.toLowerCase() !== "enum") continue;
352
+ if (!matcher(item.name)) continue;
353
+ matches.push({ file: relFile, name: item.name, kind: item.kind, line: item.startLine });
286
354
  }
287
355
  }
288
356
 
289
- // ── Result handling ──────────────────────────────────────────────────
357
+ /** Flatten provider outlines so nested class/interface/enum declarations remain searchable. */
358
+ function flattenOutlineItems(items: readonly OutlineData[]): OutlineData[] {
359
+ return items.flatMap((item) => [item, ...flattenOutlineItems(item.children ?? [])]);
360
+ }
290
361
 
291
- /**
292
- * Handle a structural CodeResult: surface non-success results as failures,
293
- * return whether the caller should continue processing data.
294
- */
295
362
  function handleStructuralResult<T>(
296
- result: { kind: string; message?: string; file?: string },
297
- _relFile: string,
298
- recordFailure: (reason: string) => void,
363
+ result: CodeResult<T>,
364
+ recordFailure: (kind: StructuredFailureKind, reason: string) => void,
299
365
  ): result is { kind: "success"; data: T } {
300
366
  if (result.kind === "success") return true;
301
- recordFailure(result.message ?? result.kind);
367
+ recordFailure(result.kind, result.message);
302
368
  return false;
303
369
  }
304
370
 
305
- /** Outline kind values that represent type declarations (as normalized by the outline extractor). */
306
371
  const TYPE_LIKE_KINDS = new Set(["class", "interface", "type", "enum"]);
307
372
 
308
- function isTypeLikeKind(kind: string): boolean {
309
- return TYPE_LIKE_KINDS.has(kind.toLowerCase());
310
- }
311
-
312
- function isInterfaceKind(kind: string): boolean {
313
- return kind.toLowerCase() === "interface";
373
+ const AST_KIND_OPERATIONS = {
374
+ definition: "outline",
375
+ import: "imports",
376
+ export: "exports",
377
+ call: "call-sites",
378
+ type: "outline",
379
+ interface: "outline",
380
+ class: "outline",
381
+ method: "outline",
382
+ enum: "outline",
383
+ } as const satisfies Record<CodeFindAstKind, StructuralSearchOperation>;
384
+
385
+ function structuralOperationForKind(kind: CodeFindAstKind): StructuralSearchOperation {
386
+ return AST_KIND_OPERATIONS[kind];
314
387
  }
315
388
 
316
- function createStructuredMatcher(
317
- pattern: string,
318
- regex: boolean,
319
- ): ((value: string) => boolean) | string {
389
+ function createStructuredMatcher(pattern: string): (value: string) => boolean {
320
390
  const ignoreCase = !/[A-Z]/.test(pattern);
321
-
322
- if (regex) {
323
- try {
324
- const compiled = new RegExp(pattern, ignoreCase ? "i" : undefined);
325
- return (value: string) => compiled.test(value);
326
- } catch (error) {
327
- const message = error instanceof Error ? error.message : "Invalid regex";
328
- return `**Error:** Invalid regex pattern \`${pattern}\`: ${message}`;
329
- }
330
- }
331
-
332
391
  const needle = ignoreCase ? pattern.toLowerCase() : pattern;
333
392
  return (value: string) => {
334
393
  const haystack = ignoreCase ? value.toLowerCase() : value;
@@ -336,21 +395,6 @@ function createStructuredMatcher(
336
395
  };
337
396
  }
338
397
 
339
- // ── Error helpers ────────────────────────────────────────────────────
340
-
341
- function isExecError(err: unknown): err is {
342
- status: number;
343
- stdout?: unknown;
344
- stderr?: unknown;
345
- } {
346
- return typeof err === "object" && err !== null && "status" in err;
347
- }
348
-
349
- function isCodeError(err: unknown, code: string): boolean {
350
- return (
351
- typeof err === "object" &&
352
- err !== null &&
353
- "code" in err &&
354
- (err as { code: unknown }).code === code
355
- );
398
+ function errorMessage(error: unknown): string {
399
+ return error instanceof Error ? error.message : "Structural provider failed.";
356
400
  }