@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
@@ -18,6 +18,10 @@ import type {
18
18
  } from "@mrclrchtr/supi-code-runtime/api";
19
19
  import type { AnchorKind } from "../../session/target-store.ts";
20
20
  import type { AnchoredResolutionMetadata, AnchoredResolutionSource } from "../../types/index.ts";
21
+ import {
22
+ createCodeSymbolIdentityResolver,
23
+ type DeclarationOccurrenceIdentity,
24
+ } from "./identity.ts";
21
25
  import type { DisambiguationCandidateData, ResolvedTargetData, TargetOutcome } from "./types.ts";
22
26
 
23
27
  /** 1-based symbol anchor position (mirrors the runtime `SymbolAnchor`). */
@@ -149,7 +153,12 @@ function buildResolution(
149
153
  function resolvedFromSymbol(
150
154
  file: string,
151
155
  s: CodeSymbol,
152
- opts: { snapped: boolean; requested: Anchor; source: AnchoredResolutionSource },
156
+ opts: {
157
+ snapped: boolean;
158
+ requested: Anchor;
159
+ source: AnchoredResolutionSource;
160
+ identity: DeclarationOccurrenceIdentity;
161
+ },
153
162
  ): { kind: "resolved"; target: ResolvedTargetData } {
154
163
  const a = (s.nameAnchor ?? s.declarationAnchor) as Anchor;
155
164
  return {
@@ -159,9 +168,13 @@ function resolvedFromSymbol(
159
168
  position: { line: a.line - 1, character: a.character - 1 },
160
169
  displayLine: a.line,
161
170
  displayCharacter: a.character,
171
+ declarationAnchor: { ...s.declarationAnchor },
172
+ declarationOccurrence: opts.identity.declarationOccurrence,
162
173
  name: s.name,
163
174
  kind: s.kind,
175
+ identityKind: opts.identity.identityKind,
164
176
  confidence: "semantic",
177
+ provenance: opts.identity.structuralEvidence ? ["semantic", "structural"] : ["semantic"],
165
178
  anchorKind: (s.nameAnchor ? "name" : "declaration") as AnchorKind,
166
179
  container: s.container ?? null,
167
180
  resolution: buildResolution(opts.requested, a, opts.snapped, opts.source),
@@ -169,24 +182,37 @@ function resolvedFromSymbol(
169
182
  };
170
183
  }
171
184
 
172
- function candidatesFromSymbols(
185
+ async function candidatesFromSymbols(
173
186
  file: string,
174
187
  matched: CodeSymbol[],
175
- ): { kind: "disambiguation"; candidates: DisambiguationCandidateData[]; omittedCount: number } {
176
- const candidates = matched.map((s, idx) => {
177
- const a = (s.nameAnchor ?? s.declarationAnchor) as Anchor;
178
- return {
179
- name: s.name,
180
- kind: s.kind,
181
- container: s.container ?? null,
182
- file,
183
- line: a.line,
184
- character: a.character,
185
- reason: `${a.line}:${a.character}`,
186
- rank: idx + 1,
187
- anchorKind: (s.nameAnchor ? "name" : "declaration") as AnchorKind,
188
- } satisfies DisambiguationCandidateData;
189
- });
188
+ resolveIdentity: (symbol: CodeSymbol) => Promise<DeclarationOccurrenceIdentity>,
189
+ ): Promise<{
190
+ kind: "disambiguation";
191
+ candidates: DisambiguationCandidateData[];
192
+ omittedCount: number;
193
+ }> {
194
+ const candidates = await Promise.all(
195
+ matched.map(async (s, idx) => {
196
+ const a = (s.nameAnchor ?? s.declarationAnchor) as Anchor;
197
+ const identity = await resolveIdentity(s);
198
+ return {
199
+ name: s.name,
200
+ kind: s.kind,
201
+ identityKind: identity.identityKind,
202
+ provenance: identity.structuralEvidence
203
+ ? (["semantic", "structural"] as const)
204
+ : (["semantic"] as const),
205
+ container: s.container ?? null,
206
+ file,
207
+ line: a.line,
208
+ character: a.character,
209
+ declarationAnchor: { ...s.declarationAnchor },
210
+ declarationOccurrence: identity.declarationOccurrence,
211
+ rank: idx + 1,
212
+ anchorKind: (s.nameAnchor ? "name" : "declaration") as AnchorKind,
213
+ } satisfies DisambiguationCandidateData;
214
+ }),
215
+ );
190
216
  return { kind: "disambiguation", candidates, omittedCount: 0 };
191
217
  }
192
218
 
@@ -197,13 +223,14 @@ async function resolveFromSemantic(
197
223
  provider: AnchoredResolverProvider,
198
224
  ): Promise<TargetOutcome | null> {
199
225
  if (!provider.documentSymbols) return null;
200
- let symbols: CodeSymbol[] | null = null;
226
+ let symbols: CodeSymbol[] = [];
201
227
  try {
202
- symbols = await provider.documentSymbols(file);
228
+ const result = await provider.documentSymbols(file);
229
+ if (result.kind !== "unavailable") symbols = result.data;
203
230
  } catch {
204
- symbols = null;
231
+ symbols = [];
205
232
  }
206
- if (!symbols || symbols.length === 0) return null;
233
+ if (symbols.length === 0) return null;
207
234
 
208
235
  const exact: CodeSymbol[] = [];
209
236
  const snap: CodeSymbol[] = [];
@@ -213,14 +240,26 @@ async function resolveFromSemantic(
213
240
  else if (m === "snap") snap.push(s);
214
241
  }
215
242
 
243
+ const structural = provider.nodeAt ? { nodeAt: provider.nodeAt } : undefined;
244
+ const resolveIdentity = createCodeSymbolIdentityResolver(file, symbols, structural);
216
245
  if (exact.length === 1) {
217
- return resolvedFromSymbol(file, exact[0], { snapped: false, requested, source: "semantic" });
246
+ return resolvedFromSymbol(file, exact[0], {
247
+ snapped: false,
248
+ requested,
249
+ source: "semantic",
250
+ identity: await resolveIdentity(exact[0]),
251
+ });
218
252
  }
219
- if (exact.length > 1) return candidatesFromSymbols(file, exact);
253
+ if (exact.length > 1) return candidatesFromSymbols(file, exact, resolveIdentity);
220
254
  if (snap.length === 1) {
221
- return resolvedFromSymbol(file, snap[0], { snapped: true, requested, source: "semantic" });
255
+ return resolvedFromSymbol(file, snap[0], {
256
+ snapped: true,
257
+ requested,
258
+ source: "semantic",
259
+ identity: await resolveIdentity(snap[0]),
260
+ });
222
261
  }
223
- if (snap.length > 1) return candidatesFromSymbols(file, snap);
262
+ if (snap.length > 1) return candidatesFromSymbols(file, snap, resolveIdentity);
224
263
  return null;
225
264
  }
226
265
 
@@ -277,9 +316,15 @@ async function resolveFromStructural(
277
316
  position: { line: nameAnchor.line - 1, character: nameAnchor.character - 1 },
278
317
  displayLine: nameAnchor.line,
279
318
  displayCharacter: nameAnchor.character,
319
+ declarationAnchor: {
320
+ line: declAncestor.startLine,
321
+ character: declAncestor.startCharacter,
322
+ },
323
+ declarationOccurrence: 0,
280
324
  name: node.text,
281
325
  kind: kindFromDeclarationType(declAncestor.type),
282
326
  confidence: "structural",
327
+ provenance: ["structural"],
283
328
  anchorKind: "name",
284
329
  container: null,
285
330
  resolution: buildResolution(requested, nameAnchor, snapped, "structural-identifier"),
@@ -318,7 +363,7 @@ export async function resolveAnchoredSymbolTarget(
318
363
  if (isBinaryFile(file)) {
319
364
  return {
320
365
  kind: "error",
321
- message: `File type not supported for semantic analysis: \`${file}\`. Use \`code_find\` with \`mode: "text"\` for explicit text search.`,
366
+ message: `File type not supported for semantic analysis: \`${file}\`. Use PI read or grep for explicit filesystem inspection when appropriate.`,
322
367
  };
323
368
  }
324
369
 
@@ -342,7 +387,7 @@ function coordinateNotOnSymbolMessage(
342
387
  const at = `${path.basename(file)}:${line}:${character}`;
343
388
  const reason = detail ? ` (on \`${detail}\`)` : "";
344
389
  return (
345
- `**Error:** No symbol target resolved at \`${at}\`${reason}. ` +
390
+ `No symbol target resolved at \`${at}\`${reason}. ` +
346
391
  "`code_resolve` resolves real symbol targets from provider-backed evidence; " +
347
392
  "use `code_inspect` for point-level facts at this coordinate, or pass the identifier coordinate of a declaration."
348
393
  );
@@ -1,22 +1,24 @@
1
1
  /**
2
- * File-surface target resolutiondiscovers actionable targets within a file
3
- * using injected semantic (LSP document symbols) and structural (Tree-sitter exports)
4
- * substrates with explicit fallback policy.
2
+ * File target discoverycollects every evidence-backed declaration in one
3
+ * file after the Target workflow has established semantic readiness.
5
4
  *
6
- * Policy: LSP document symbols preferred (semantic). Falls back to Tree-sitter
7
- * exports (structural) when LSP is unavailable or returns no results.
5
+ * Semantic and structural facts are merged. Semantic facts win duplicate
6
+ * members; structural outline facts may supplement declarations omitted by
7
+ * the language server.
8
8
  */
9
9
 
10
10
  import * as fs from "node:fs";
11
11
  import * as path from "node:path";
12
12
  import type {
13
+ DeclarationNesting,
14
+ DocumentCodeSymbol,
15
+ OutlineData,
13
16
  SemanticProvider as SemanticSubstrate,
14
17
  StructuralProvider as StructuralSubstrate,
15
18
  } from "@mrclrchtr/supi-code-runtime/api";
16
19
  import type { AnchorKind } from "../../session/target-store.ts";
17
- import { highestConfidence } from "../helpers.ts";
18
- import { getCodeProvider } from "../provider.ts";
19
- import { normalizePath } from "../search/ripgrep.ts";
20
+ import { normalizePath } from "../search/paths.ts";
21
+ import { canonicalDeclarationKind, refineTypeAliasIdentity } from "./identity.ts";
20
22
  import type { ResolvedTargetData, ResolvedTargetGroupData } from "./types.ts";
21
23
 
22
24
  const BINARY_EXTENSIONS = new Set([
@@ -46,18 +48,31 @@ const BINARY_EXTENSIONS = new Set([
46
48
  ".node",
47
49
  ]);
48
50
 
49
- function isBinaryFile(filePath: string): boolean {
50
- return BINARY_EXTENSIONS.has(path.extname(filePath).toLowerCase());
51
+ interface DiscoveredTargetData extends ResolvedTargetData {
52
+ /** Provider-backed hierarchy used only for file-result presentation ranking. */
53
+ readonly nesting: DeclarationNesting;
51
54
  }
52
55
 
53
- /**
54
- * Resolve a file into a group of discoverable targets.
55
- *
56
- * @param file - the file path (absolute or cwd-relative)
57
- * @param cwd - session working directory
58
- * @param deps - injected substrates (both optional)
59
- * @returns typed group outcome or error
60
- */
56
+ interface DiscoveryResult {
57
+ readonly available: boolean;
58
+ readonly targets: DiscoveredTargetData[];
59
+ }
60
+
61
+ /** Validated file-discovery input with its normalized absolute path. */
62
+ export type FileDiscoveryValidation =
63
+ | { kind: "valid"; file: string }
64
+ | { kind: "invalid-input"; message: string };
65
+
66
+ /** Validate a file selector before any semantic startup or provider call. */
67
+ export function validateFileTargetDiscovery(file: string, cwd: string): FileDiscoveryValidation {
68
+ const resolvedFile = normalizePath(file, cwd);
69
+ const validationError = validateDiscoveryFile(resolvedFile, file);
70
+ return validationError
71
+ ? { kind: "invalid-input", message: validationError }
72
+ : { kind: "valid", file: resolvedFile };
73
+ }
74
+
75
+ /** Discover a Target group for one file without rendering or registering handles. */
61
76
  export async function resolveFileTargetGroup(
62
77
  file: string,
63
78
  cwd: string,
@@ -66,149 +81,294 @@ export async function resolveFileTargetGroup(
66
81
  structural?: StructuralSubstrate;
67
82
  } = {},
68
83
  ): Promise<
69
- { kind: "resolved"; group: ResolvedTargetGroupData } | { kind: "error"; message: string }
84
+ | { kind: "resolved"; group: ResolvedTargetGroupData }
85
+ | { kind: "invalid-input"; message: string }
86
+ | { kind: "unavailable"; message: string }
70
87
  > {
71
- const resolvedFile = normalizePath(file, cwd);
72
-
73
- if (!fs.existsSync(resolvedFile)) {
74
- return { kind: "error", message: `File not found: \`${file}\`` };
75
- }
76
-
77
- if (isBinaryFile(resolvedFile)) {
78
- return {
79
- kind: "error",
80
- message: `File type not supported for semantic analysis: \`${file}\`. Use \`code_find\` with \`mode: "text"\` for explicit text search.`,
81
- };
82
- }
88
+ const validation = validateFileTargetDiscovery(file, cwd);
89
+ if (validation.kind === "invalid-input") return validation;
90
+ const resolvedFile = validation.file;
83
91
 
84
- const relPath = path.relative(cwd, resolvedFile);
85
-
86
- // Try structure-based discovery first (faster, no LSP needed)
87
- const structuralTargets = await resolveViaStructral(relPath, resolvedFile, cwd, deps.structural);
88
-
89
- // Try semantic discovery (richer), preferring it over structural
90
- const semanticTargets = await resolveViaSemantic(resolvedFile, deps.semantic, structuralTargets);
91
-
92
- const targets = semanticTargets ?? structuralTargets;
93
-
94
- if (!targets || targets.length === 0) {
92
+ const [semantic, structural] = await Promise.all([
93
+ discoverSemantic(resolvedFile, deps.semantic, deps.structural),
94
+ discoverStructural(resolvedFile, deps.structural),
95
+ ]);
96
+ if (!semantic.available && !structural.available) {
97
+ const displayFile = path.relative(cwd, resolvedFile) || file;
95
98
  return {
96
- kind: "error",
97
- message:
98
- `**Error:** File-level semantic exploration is not available for \`${file}\`. ` +
99
- "Provide `line` and `character`, or a `symbol` for discovery.",
99
+ kind: "unavailable",
100
+ message: `Declaration discovery is unavailable for \`${displayFile}\`.`,
100
101
  };
101
102
  }
102
103
 
104
+ const targets = mergeDiscoveries(structural.targets, semantic.targets);
105
+ const unknownNestingCount = targets.filter((target) => target.nesting === "unknown").length;
106
+ const discoveryProvenance = [
107
+ ...(semantic.available ? (["semantic"] as const) : []),
108
+ ...(structural.available ? (["structural"] as const) : []),
109
+ ];
103
110
  return {
104
111
  kind: "resolved",
105
112
  group: {
106
113
  file: resolvedFile,
107
- displayName: relPath,
114
+ displayName: path.relative(cwd, resolvedFile) || resolvedFile,
108
115
  targets,
109
- confidence: highestConfidence(targets.map((t) => t.confidence)),
116
+ discoveryProvenance,
117
+ confidence: targetGroupConfidence(targets, discoveryProvenance),
118
+ unknownNestingCount,
110
119
  },
111
120
  };
112
121
  }
113
122
 
114
- // ── Resolution helpers ───────────────────────────────────────────────
123
+ function targetGroupConfidence(
124
+ targets: readonly ResolvedTargetData[],
125
+ discoveryProvenance: ResolvedTargetGroupData["discoveryProvenance"],
126
+ ): ResolvedTargetGroupData["confidence"] {
127
+ if (targets.length === 0) {
128
+ return discoveryProvenance.includes("semantic") ? "semantic" : "structural";
129
+ }
130
+ if (targets.some((target) => target.confidence === "unavailable")) return "unavailable";
131
+ if (targets.some((target) => target.confidence === "heuristic")) return "heuristic";
132
+ if (targets.some((target) => target.confidence === "structural")) return "structural";
133
+ return "semantic";
134
+ }
115
135
 
116
- async function resolveViaSemantic(
117
- resolvedFile: string,
118
- semantic?: SemanticSubstrate,
119
- structuralTargets: ResolvedTargetData[] | null = null,
120
- ): Promise<ResolvedTargetData[] | null> {
121
- if (!semantic) return structuralTargets;
136
+ function validateDiscoveryFile(resolvedFile: string, requestedFile: string): string | null {
137
+ if (!fs.existsSync(resolvedFile)) return `File not found: \`${requestedFile}\``;
138
+ try {
139
+ if (!fs.statSync(resolvedFile).isFile()) return `Not a file: \`${requestedFile}\``;
140
+ } catch {
141
+ return `Cannot access file: \`${requestedFile}\``;
142
+ }
143
+ if (!BINARY_EXTENSIONS.has(path.extname(resolvedFile).toLowerCase())) return null;
144
+ return `File type not supported for code analysis: \`${requestedFile}\`. Use PI read or grep for explicit filesystem inspection when appropriate.`;
145
+ }
122
146
 
147
+ async function discoverSemantic(
148
+ file: string,
149
+ semantic: SemanticSubstrate | undefined,
150
+ structural: StructuralSubstrate | undefined,
151
+ ): Promise<DiscoveryResult> {
152
+ if (!semantic) return { available: false, targets: [] };
123
153
  try {
124
- const symbols = await semantic.documentSymbols(resolvedFile);
125
- if (!symbols || symbols.length === 0) return structuralTargets;
126
-
127
- const topLevel = symbols
128
- .filter((s) => !s.container)
129
- .map((s) => {
130
- const a = s.nameAnchor ?? s.declarationAnchor;
131
- return {
132
- file: resolvedFile,
133
- position: { line: a.line - 1, character: a.character - 1 },
134
- displayLine: a.line,
135
- displayCharacter: a.character,
136
- name: s.name,
137
- kind: s.kind,
138
- confidence: "semantic" as const,
139
- anchorKind: (s.nameAnchor ? "name" : "declaration") as AnchorKind,
140
- container: s.container ?? null,
141
- };
142
- });
143
-
144
- if (topLevel.length === 0) return structuralTargets;
145
-
146
- // Semantic symbols are available — prefer them over structural exports.
147
- // Only fall back to structural targets that have no semantic counterpart
148
- // (different position).
149
- if (!structuralTargets || structuralTargets.length === 0) return dedupeTargets(topLevel);
150
-
151
- // Build a position-based dedup: for each position, prefer the semantic entry.
152
- const byPos = new Map<string, ResolvedTargetData>();
153
- for (const t of structuralTargets) {
154
- byPos.set(`${t.position.line}:${t.position.character}`, t);
155
- }
156
- for (const t of topLevel) {
157
- byPos.set(`${t.position.line}:${t.position.character}`, t);
158
- }
159
- return [...byPos.values()];
154
+ const result = await semantic.documentSymbols(file);
155
+ if (result.kind === "unavailable") return { available: false, targets: [] };
156
+ return {
157
+ available: true,
158
+ targets: await Promise.all(
159
+ result.data.map(async (symbol) => {
160
+ const target = targetFromSymbol(file, symbol);
161
+ const refined = await refineTypeAliasIdentity(target, structural);
162
+ return { ...refined, nesting: target.nesting };
163
+ }),
164
+ ),
165
+ };
160
166
  } catch {
161
- return structuralTargets;
167
+ return { available: false, targets: [] };
162
168
  }
163
169
  }
164
170
 
165
- async function resolveViaStructral(
166
- relPath: string,
167
- resolvedFile: string,
168
- cwd: string,
169
- structural?: StructuralSubstrate,
170
- ): Promise<ResolvedTargetData[] | null> {
171
- // Resolve a substrate to use — prefer injected, fall back to auto-created
172
- const substrate = structural ?? createFallbackSubstrate(cwd);
173
- if (!substrate) return null;
171
+ function targetFromSymbol(file: string, symbol: DocumentCodeSymbol): DiscoveredTargetData {
172
+ const anchor = symbol.nameAnchor ?? symbol.declarationAnchor;
173
+ return {
174
+ file,
175
+ position: { line: anchor.line - 1, character: anchor.character - 1 },
176
+ displayLine: anchor.line,
177
+ displayCharacter: anchor.character,
178
+ declarationAnchor: { ...symbol.declarationAnchor },
179
+ declarationOccurrence: 0,
180
+ name: symbol.name,
181
+ kind: symbol.kind,
182
+ confidence: "semantic",
183
+ provenance: ["semantic"],
184
+ anchorKind: (symbol.nameAnchor ? "name" : "declaration") as AnchorKind,
185
+ container: symbol.container ?? null,
186
+ nesting: normalizeNesting(symbol.nesting),
187
+ };
188
+ }
189
+
190
+ /** Normalize process-global or legacy provider observations at the discovery seam. */
191
+ function normalizeNesting(value: unknown): DeclarationNesting {
192
+ if (value === "top-level" || value === "nested" || value === "unknown") return value;
193
+ return "unknown";
194
+ }
174
195
 
196
+ async function discoverStructural(
197
+ file: string,
198
+ structural: StructuralSubstrate | undefined,
199
+ ): Promise<DiscoveryResult> {
200
+ if (!structural) return { available: false, targets: [] };
175
201
  try {
176
- const exportsResult = await substrate.exports(relPath);
177
- if (exportsResult.kind !== "success" || exportsResult.data.length === 0) return null;
178
-
179
- return dedupeTargets(
180
- exportsResult.data.map((record) => ({
181
- file: resolvedFile,
182
- position: { line: record.startLine - 1, character: record.startCharacter - 1 },
183
- displayLine: record.startLine,
184
- displayCharacter: record.startCharacter,
185
- name: record.name,
186
- kind: record.kind,
187
- confidence: "structural" as const,
188
- // Structural exports use the node start (startLine/startCharacter) =
189
- // declaration anchor; no name anchor is derivable from exports alone.
190
- anchorKind: "declaration",
191
- container: null,
192
- })),
193
- );
202
+ const result = await structural.outline(file);
203
+ if (result.kind !== "success") return { available: false, targets: [] };
204
+ return { available: true, targets: flattenOutline(file, result.data) };
194
205
  } catch {
195
- return null;
206
+ return { available: false, targets: [] };
196
207
  }
197
208
  }
198
209
 
199
- /** Create a fallback substrate from a working directory using the unified registry. */
200
- function createFallbackSubstrate(dir: string): StructuralSubstrate | null {
201
- const state = getCodeProvider(dir);
202
- return state.kind === "ready" ? state.provider : null;
210
+ function flattenOutline(
211
+ file: string,
212
+ items: readonly OutlineData[],
213
+ container: string | null = null,
214
+ nesting: DeclarationNesting = "top-level",
215
+ ): DiscoveredTargetData[] {
216
+ return items.flatMap((item) => {
217
+ const target: DiscoveredTargetData = {
218
+ file,
219
+ position: { line: item.startLine - 1, character: item.startCharacter - 1 },
220
+ displayLine: item.startLine,
221
+ displayCharacter: item.startCharacter,
222
+ declarationAnchor: { line: item.startLine, character: item.startCharacter },
223
+ declarationOccurrence: 0,
224
+ name: item.name,
225
+ kind: item.kind,
226
+ identityKind: canonicalDeclarationKind(item.kind),
227
+ confidence: "structural",
228
+ provenance: ["structural"],
229
+ anchorKind: "declaration",
230
+ container,
231
+ nesting,
232
+ };
233
+ return [target, ...flattenOutline(file, item.children ?? [], item.name, "nested")];
234
+ });
235
+ }
236
+
237
+ /**
238
+ * Merge duplicate provider observations without collapsing repeated declarations.
239
+ * Semantic facts win a matched pair while retaining both provider sources.
240
+ */
241
+ function mergeDiscoveries(
242
+ structural: readonly DiscoveredTargetData[],
243
+ semantic: readonly DiscoveredTargetData[],
244
+ ): DiscoveredTargetData[] {
245
+ const unmatchedSemantic = new Set(semantic.map((_target, index) => index));
246
+ const mergedStructural = structural.flatMap((structuralTarget) => {
247
+ const semanticIndex = findSemanticMatch(structuralTarget, semantic, unmatchedSemantic);
248
+ if (semanticIndex === null) return [structuralTarget];
249
+ unmatchedSemantic.delete(semanticIndex);
250
+ const semanticTarget = semantic[semanticIndex];
251
+ return [
252
+ {
253
+ ...semanticTarget,
254
+ provenance: ["semantic", "structural"] as const,
255
+ container: reconcileContainer(semanticTarget, structuralTarget),
256
+ nesting: reconcileNesting(semanticTarget.nesting, structuralTarget.nesting),
257
+ },
258
+ ];
259
+ });
260
+ const semanticOnly = semantic.filter((_target, index) => unmatchedSemantic.has(index));
261
+ const sourceOrdered = [...mergedStructural, ...semanticOnly].sort(compareDeclarations);
262
+ const identified = assignDeclarationOccurrences(sourceOrdered);
263
+ return identified.sort(compareFileOrientationDeclarations);
264
+ }
265
+
266
+ /** Let provider-backed known hierarchy refine unknown without guessing through a conflict. */
267
+ function reconcileNesting(
268
+ semantic: DeclarationNesting,
269
+ structural: DeclarationNesting,
270
+ ): DeclarationNesting {
271
+ if (semantic === structural) return semantic;
272
+ if (semantic === "unknown") return structural;
273
+ if (structural === "unknown") return semantic;
274
+ return "unknown";
203
275
  }
204
276
 
205
- function dedupeTargets(targets: ResolvedTargetData[]): ResolvedTargetData[] {
206
- const deduped = new Map<string, ResolvedTargetData>();
207
- for (const target of targets) {
208
- const key = `${target.name ?? ""}:${target.displayLine}:${target.displayCharacter}`;
209
- if (!deduped.has(key)) {
210
- deduped.set(key, target);
211
- }
277
+ /** Preserve known container evidence while clearing explicit provider conflicts. */
278
+ function reconcileContainer(
279
+ semantic: DiscoveredTargetData,
280
+ structural: DiscoveredTargetData,
281
+ ): string | null {
282
+ if (semantic.container === structural.container) return semantic.container;
283
+ if (semantic.nesting === "unknown" && semantic.container === null) {
284
+ return structural.container;
285
+ }
286
+ if (structural.nesting === "unknown" && structural.container === null) {
287
+ return semantic.container;
212
288
  }
213
- return [...deduped.values()];
289
+ return null;
290
+ }
291
+
292
+ function findSemanticMatch(
293
+ structural: DiscoveredTargetData,
294
+ semantic: readonly DiscoveredTargetData[],
295
+ unmatched: ReadonlySet<number>,
296
+ ): number | null {
297
+ const matches = semantic
298
+ .map((target, index) => ({ target, index }))
299
+ .filter(({ target, index }) => unmatched.has(index) && sameDeclaration(target, structural))
300
+ .sort(
301
+ (left, right) =>
302
+ Math.abs(left.target.declarationAnchor.character - structural.declarationAnchor.character) -
303
+ Math.abs(
304
+ right.target.declarationAnchor.character - structural.declarationAnchor.character,
305
+ ) ||
306
+ left.target.declarationAnchor.character - right.target.declarationAnchor.character ||
307
+ compareDeclarations(left.target, right.target) ||
308
+ (left.target.container ?? "").localeCompare(right.target.container ?? "") ||
309
+ left.target.nesting.localeCompare(right.target.nesting) ||
310
+ left.index - right.index,
311
+ );
312
+ return matches[0]?.index ?? null;
313
+ }
314
+
315
+ function sameDeclaration(left: DiscoveredTargetData, right: DiscoveredTargetData): boolean {
316
+ return (
317
+ left.name === right.name &&
318
+ compatibleContainerEvidence(left, right) &&
319
+ left.declarationAnchor.line === right.declarationAnchor.line &&
320
+ declarationIdentityKind(left) === declarationIdentityKind(right)
321
+ );
322
+ }
323
+
324
+ /** Container conflicts match only when both providers report the exact declaration anchor. */
325
+ function compatibleContainerEvidence(
326
+ left: DiscoveredTargetData,
327
+ right: DiscoveredTargetData,
328
+ ): boolean {
329
+ return (
330
+ left.container === right.container ||
331
+ left.declarationAnchor.character === right.declarationAnchor.character
332
+ );
333
+ }
334
+
335
+ function assignDeclarationOccurrences(
336
+ targets: readonly DiscoveredTargetData[],
337
+ ): DiscoveredTargetData[] {
338
+ const occurrences = new Map<string, number>();
339
+ return targets.map((target) => {
340
+ const key = [
341
+ target.declarationAnchor.line,
342
+ target.name ?? "",
343
+ declarationIdentityKind(target),
344
+ target.container ?? "",
345
+ ].join("\0");
346
+ const occurrence = occurrences.get(key) ?? 0;
347
+ occurrences.set(key, occurrence + 1);
348
+ return { ...target, declarationOccurrence: occurrence };
349
+ });
350
+ }
351
+
352
+ function declarationIdentityKind(target: ResolvedTargetData): string {
353
+ return target.identityKind ?? canonicalDeclarationKind(target.kind);
354
+ }
355
+
356
+ function compareFileOrientationDeclarations(
357
+ left: DiscoveredTargetData,
358
+ right: DiscoveredTargetData,
359
+ ): number {
360
+ return topLevelRank(left) - topLevelRank(right) || compareDeclarations(left, right);
361
+ }
362
+
363
+ function topLevelRank(target: DiscoveredTargetData): number {
364
+ return target.nesting === "top-level" ? 0 : 1;
365
+ }
366
+
367
+ function compareDeclarations(left: ResolvedTargetData, right: ResolvedTargetData): number {
368
+ return (
369
+ left.displayLine - right.displayLine ||
370
+ left.displayCharacter - right.displayCharacter ||
371
+ (left.name ?? "").localeCompare(right.name ?? "") ||
372
+ (left.kind ?? "").localeCompare(right.kind ?? "")
373
+ );
214
374
  }