@mrclrchtr/supi-code-intelligence 3.2.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (556) hide show
  1. package/README.md +154 -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/package.json +2 -2
  10. package/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +10 -1
  11. package/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +19 -29
  12. package/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +7 -1
  13. package/node_modules/@mrclrchtr/supi-code-runtime/src/query-result.ts +42 -0
  14. package/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +15 -10
  15. package/node_modules/@mrclrchtr/supi-core/package.json +2 -4
  16. package/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -4
  17. package/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +3 -2
  18. package/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -4
  19. package/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -10
  20. package/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +19 -15
  21. package/node_modules/@mrclrchtr/supi-lsp/README.md +72 -62
  22. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/README.md +8 -0
  23. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +2 -4
  24. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -4
  25. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +3 -2
  26. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -4
  27. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -10
  28. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +19 -15
  29. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/package.json +2 -2
  30. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +10 -1
  31. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +19 -29
  32. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +7 -1
  33. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/query-result.ts +42 -0
  34. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +15 -10
  35. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/package.json +2 -4
  36. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -4
  37. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +3 -2
  38. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -4
  39. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -10
  40. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +19 -15
  41. package/node_modules/@mrclrchtr/supi-lsp/package.json +4 -5
  42. package/node_modules/@mrclrchtr/supi-lsp/src/api.ts +9 -9
  43. package/node_modules/@mrclrchtr/supi-lsp/src/client/client.ts +70 -41
  44. package/node_modules/@mrclrchtr/supi-lsp/src/client/transport.ts +16 -13
  45. package/node_modules/@mrclrchtr/supi-lsp/src/config/config.ts +2 -2
  46. package/node_modules/@mrclrchtr/supi-lsp/src/config/lsp-settings.ts +0 -2
  47. package/node_modules/@mrclrchtr/supi-lsp/src/index.ts +6 -6
  48. package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-diagnostics.ts +5 -95
  49. package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-workspace-recovery.ts +4 -3
  50. package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-workspace-symbol.ts +44 -6
  51. package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager.ts +47 -65
  52. package/node_modules/@mrclrchtr/supi-lsp/src/provider/lsp-semantic-provider.ts +132 -79
  53. package/node_modules/@mrclrchtr/supi-lsp/src/provider/refactor-planning.ts +6 -14
  54. package/node_modules/@mrclrchtr/supi-lsp/src/session/readiness.ts +38 -0
  55. package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-controller.ts +87 -75
  56. package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-registration.ts +5 -5
  57. package/node_modules/@mrclrchtr/supi-lsp/src/session/{service-registry.ts → runtime-registry.ts} +163 -71
  58. package/node_modules/@mrclrchtr/supi-tree-sitter/README.md +4 -0
  59. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/README.md +8 -0
  60. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +2 -4
  61. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -4
  62. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +3 -2
  63. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -4
  64. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -10
  65. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +19 -15
  66. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/package.json +2 -2
  67. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +10 -1
  68. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +19 -29
  69. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +7 -1
  70. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/query-result.ts +42 -0
  71. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +15 -10
  72. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/package.json +2 -4
  73. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -4
  74. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +3 -2
  75. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -4
  76. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -10
  77. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +19 -15
  78. package/node_modules/@mrclrchtr/supi-tree-sitter/package.json +4 -21
  79. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/bash/tree-sitter-bash.wasm +0 -0
  80. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/bash/tree-sitter-bash.wasm.json +2 -2
  81. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/c/tree-sitter-c.wasm +0 -0
  82. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/c/tree-sitter-c.wasm.json +2 -2
  83. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/go/tree-sitter-go.wasm +0 -0
  84. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/go/tree-sitter-go.wasm.json +2 -2
  85. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/javascript/tree-sitter-javascript.wasm +0 -0
  86. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/javascript/tree-sitter-javascript.wasm.json +2 -2
  87. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/kotlin/tree-sitter-kotlin.wasm +0 -0
  88. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/kotlin/tree-sitter-kotlin.wasm.json +2 -2
  89. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/python/tree-sitter-python.wasm +0 -0
  90. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/python/tree-sitter-python.wasm.json +2 -2
  91. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/r/tree-sitter-r.wasm +0 -0
  92. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/r/tree-sitter-r.wasm.json +2 -2
  93. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/rust/tree-sitter-rust.wasm.json +1 -1
  94. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/sql/tree-sitter-sql.wasm +0 -0
  95. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/sql/tree-sitter-sql.wasm.json +3 -3
  96. package/node_modules/@mrclrchtr/supi-tree-sitter/scripts/generate-kotlin-wasm.mjs +6 -0
  97. package/node_modules/@mrclrchtr/supi-tree-sitter/scripts/generate-sql-wasm.mjs +18 -4
  98. package/node_modules/@mrclrchtr/supi-tree-sitter/scripts/vendor-wasm.mjs +17 -1
  99. package/node_modules/@mrclrchtr/supi-tree-sitter/src/api.ts +2 -0
  100. package/node_modules/@mrclrchtr/supi-tree-sitter/src/coordinates.ts +20 -41
  101. package/node_modules/@mrclrchtr/supi-tree-sitter/src/index.ts +2 -0
  102. package/node_modules/@mrclrchtr/supi-tree-sitter/src/language.ts +7 -0
  103. package/node_modules/@mrclrchtr/supi-tree-sitter/src/operation-support.ts +40 -0
  104. package/node_modules/@mrclrchtr/supi-tree-sitter/src/session/session.ts +9 -7
  105. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/call-sites.ts +6 -1
  106. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/callees.ts +76 -37
  107. package/node_modules/yaml/LICENSE +13 -0
  108. package/node_modules/yaml/README.md +172 -0
  109. package/node_modules/yaml/bin.mjs +11 -0
  110. package/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
  111. package/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
  112. package/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
  113. package/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
  114. package/node_modules/yaml/browser/dist/compose/composer.js +219 -0
  115. package/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
  116. package/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
  117. package/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
  118. package/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
  119. package/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
  120. package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +225 -0
  121. package/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
  122. package/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
  123. package/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
  124. package/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
  125. package/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
  126. package/node_modules/yaml/browser/dist/doc/Document.js +335 -0
  127. package/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
  128. package/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
  129. package/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
  130. package/node_modules/yaml/browser/dist/doc/directives.js +176 -0
  131. package/node_modules/yaml/browser/dist/errors.js +57 -0
  132. package/node_modules/yaml/browser/dist/index.js +17 -0
  133. package/node_modules/yaml/browser/dist/log.js +11 -0
  134. package/node_modules/yaml/browser/dist/nodes/Alias.js +116 -0
  135. package/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
  136. package/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
  137. package/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
  138. package/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
  139. package/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
  140. package/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
  141. package/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
  142. package/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
  143. package/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
  144. package/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
  145. package/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
  146. package/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
  147. package/node_modules/yaml/browser/dist/parse/cst.js +98 -0
  148. package/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
  149. package/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
  150. package/node_modules/yaml/browser/dist/parse/parser.js +975 -0
  151. package/node_modules/yaml/browser/dist/public-api.js +102 -0
  152. package/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
  153. package/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
  154. package/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
  155. package/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
  156. package/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
  157. package/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
  158. package/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
  159. package/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
  160. package/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
  161. package/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
  162. package/node_modules/yaml/browser/dist/schema/tags.js +96 -0
  163. package/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
  164. package/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
  165. package/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
  166. package/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
  167. package/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
  168. package/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
  169. package/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
  170. package/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
  171. package/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
  172. package/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
  173. package/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
  174. package/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
  175. package/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
  176. package/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
  177. package/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
  178. package/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
  179. package/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
  180. package/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
  181. package/node_modules/yaml/browser/dist/util.js +11 -0
  182. package/node_modules/yaml/browser/dist/visit.js +233 -0
  183. package/node_modules/yaml/browser/index.js +5 -0
  184. package/node_modules/yaml/browser/package.json +3 -0
  185. package/node_modules/yaml/dist/cli.d.ts +8 -0
  186. package/node_modules/yaml/dist/cli.mjs +201 -0
  187. package/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
  188. package/node_modules/yaml/dist/compose/compose-collection.js +90 -0
  189. package/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
  190. package/node_modules/yaml/dist/compose/compose-doc.js +45 -0
  191. package/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
  192. package/node_modules/yaml/dist/compose/compose-node.js +112 -0
  193. package/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
  194. package/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
  195. package/node_modules/yaml/dist/compose/composer.d.ts +63 -0
  196. package/node_modules/yaml/dist/compose/composer.js +224 -0
  197. package/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
  198. package/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
  199. package/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
  200. package/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
  201. package/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
  202. package/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
  203. package/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
  204. package/node_modules/yaml/dist/compose/resolve-end.js +39 -0
  205. package/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
  206. package/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
  207. package/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
  208. package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +227 -0
  209. package/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
  210. package/node_modules/yaml/dist/compose/resolve-props.js +148 -0
  211. package/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
  212. package/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
  213. package/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
  214. package/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
  215. package/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
  216. package/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
  217. package/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
  218. package/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
  219. package/node_modules/yaml/dist/doc/Document.d.ts +141 -0
  220. package/node_modules/yaml/dist/doc/Document.js +337 -0
  221. package/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
  222. package/node_modules/yaml/dist/doc/anchors.js +76 -0
  223. package/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
  224. package/node_modules/yaml/dist/doc/applyReviver.js +57 -0
  225. package/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
  226. package/node_modules/yaml/dist/doc/createNode.js +90 -0
  227. package/node_modules/yaml/dist/doc/directives.d.ts +49 -0
  228. package/node_modules/yaml/dist/doc/directives.js +178 -0
  229. package/node_modules/yaml/dist/errors.d.ts +21 -0
  230. package/node_modules/yaml/dist/errors.js +62 -0
  231. package/node_modules/yaml/dist/index.d.ts +25 -0
  232. package/node_modules/yaml/dist/index.js +50 -0
  233. package/node_modules/yaml/dist/log.d.ts +3 -0
  234. package/node_modules/yaml/dist/log.js +19 -0
  235. package/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
  236. package/node_modules/yaml/dist/nodes/Alias.js +118 -0
  237. package/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
  238. package/node_modules/yaml/dist/nodes/Collection.js +151 -0
  239. package/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
  240. package/node_modules/yaml/dist/nodes/Node.js +40 -0
  241. package/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
  242. package/node_modules/yaml/dist/nodes/Pair.js +39 -0
  243. package/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
  244. package/node_modules/yaml/dist/nodes/Scalar.js +27 -0
  245. package/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
  246. package/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
  247. package/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
  248. package/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
  249. package/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
  250. package/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
  251. package/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
  252. package/node_modules/yaml/dist/nodes/identity.js +53 -0
  253. package/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
  254. package/node_modules/yaml/dist/nodes/toJS.js +39 -0
  255. package/node_modules/yaml/dist/options.d.ts +350 -0
  256. package/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
  257. package/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
  258. package/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
  259. package/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
  260. package/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
  261. package/node_modules/yaml/dist/parse/cst-visit.js +99 -0
  262. package/node_modules/yaml/dist/parse/cst.d.ts +109 -0
  263. package/node_modules/yaml/dist/parse/cst.js +112 -0
  264. package/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
  265. package/node_modules/yaml/dist/parse/lexer.js +723 -0
  266. package/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
  267. package/node_modules/yaml/dist/parse/line-counter.js +41 -0
  268. package/node_modules/yaml/dist/parse/parser.d.ts +84 -0
  269. package/node_modules/yaml/dist/parse/parser.js +980 -0
  270. package/node_modules/yaml/dist/public-api.d.ts +44 -0
  271. package/node_modules/yaml/dist/public-api.js +107 -0
  272. package/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
  273. package/node_modules/yaml/dist/schema/Schema.js +39 -0
  274. package/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
  275. package/node_modules/yaml/dist/schema/common/map.js +19 -0
  276. package/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
  277. package/node_modules/yaml/dist/schema/common/null.js +17 -0
  278. package/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
  279. package/node_modules/yaml/dist/schema/common/seq.js +19 -0
  280. package/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
  281. package/node_modules/yaml/dist/schema/common/string.js +16 -0
  282. package/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
  283. package/node_modules/yaml/dist/schema/core/bool.js +21 -0
  284. package/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
  285. package/node_modules/yaml/dist/schema/core/float.js +47 -0
  286. package/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
  287. package/node_modules/yaml/dist/schema/core/int.js +42 -0
  288. package/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
  289. package/node_modules/yaml/dist/schema/core/schema.js +25 -0
  290. package/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
  291. package/node_modules/yaml/dist/schema/json/schema.js +64 -0
  292. package/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
  293. package/node_modules/yaml/dist/schema/tags.d.ts +48 -0
  294. package/node_modules/yaml/dist/schema/tags.js +99 -0
  295. package/node_modules/yaml/dist/schema/types.d.ts +92 -0
  296. package/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
  297. package/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
  298. package/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
  299. package/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
  300. package/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
  301. package/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
  302. package/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
  303. package/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
  304. package/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
  305. package/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
  306. package/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
  307. package/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
  308. package/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
  309. package/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
  310. package/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
  311. package/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
  312. package/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
  313. package/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
  314. package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
  315. package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
  316. package/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
  317. package/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
  318. package/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
  319. package/node_modules/yaml/dist/stringify/stringify.js +132 -0
  320. package/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
  321. package/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
  322. package/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
  323. package/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
  324. package/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
  325. package/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
  326. package/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
  327. package/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
  328. package/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
  329. package/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
  330. package/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
  331. package/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
  332. package/node_modules/yaml/dist/test-events.d.ts +4 -0
  333. package/node_modules/yaml/dist/test-events.js +134 -0
  334. package/node_modules/yaml/dist/util.d.ts +16 -0
  335. package/node_modules/yaml/dist/util.js +28 -0
  336. package/node_modules/yaml/dist/visit.d.ts +102 -0
  337. package/node_modules/yaml/dist/visit.js +236 -0
  338. package/node_modules/yaml/package.json +97 -0
  339. package/node_modules/yaml/util.js +2 -0
  340. package/package.json +9 -8
  341. package/src/analysis/architecture/discovery.ts +213 -227
  342. package/src/analysis/architecture/manifest.ts +147 -0
  343. package/src/analysis/architecture/model.ts +119 -52
  344. package/src/analysis/architecture/workspace-config.ts +229 -0
  345. package/src/analysis/{coverage/coverage-warnings.ts → capability/capability-warnings.ts} +41 -78
  346. package/src/analysis/evidence.ts +22 -5
  347. package/src/analysis/health/diagnostics.ts +183 -0
  348. package/src/analysis/health/recovery.ts +39 -0
  349. package/src/analysis/health/signals.ts +20 -0
  350. package/src/analysis/instruction-files.ts +60 -48
  351. package/src/analysis/provider.ts +31 -12
  352. package/src/analysis/readiness.ts +29 -9
  353. package/src/{tool/refactor-apply → analysis/refactor}/apply.ts +120 -26
  354. package/src/analysis/refactor/position.ts +6 -0
  355. package/src/analysis/refactor/safety.ts +4 -11
  356. package/src/analysis/references/locations.ts +20 -0
  357. package/src/analysis/references/semantic-refs.ts +21 -11
  358. package/src/{tool/graph → analysis/relations}/implementations.ts +27 -23
  359. package/src/analysis/relations/provider-locations.ts +179 -0
  360. package/src/{tool/graph → analysis/relations}/references.ts +25 -21
  361. package/src/{tool/graph → analysis/relations}/types.ts +4 -19
  362. package/src/analysis/search/ast-scan.ts +376 -0
  363. package/src/analysis/search/call-name.ts +68 -0
  364. package/src/analysis/search/deadline.ts +84 -0
  365. package/src/analysis/search/paths.ts +88 -0
  366. package/src/analysis/search/pattern.ts +290 -246
  367. package/src/analysis/target/anchored.ts +72 -27
  368. package/src/analysis/target/file.ts +292 -132
  369. package/src/analysis/target/identity.ts +237 -0
  370. package/src/analysis/target/symbol.ts +169 -86
  371. package/src/analysis/target/types.ts +36 -4
  372. package/src/api.ts +21 -4
  373. package/src/app/app.ts +53 -46
  374. package/src/extension.ts +68 -66
  375. package/src/session/capability-adapter.ts +26 -118
  376. package/src/session/find-types.ts +38 -0
  377. package/src/session/find-workflow.ts +141 -0
  378. package/src/session/graph/collect.ts +181 -0
  379. package/src/session/graph-types.ts +77 -0
  380. package/src/session/graph-workflow.ts +152 -0
  381. package/src/session/health-types.ts +134 -0
  382. package/src/session/health-workflow.ts +341 -0
  383. package/src/session/input/common.ts +216 -0
  384. package/src/session/input/health-refactor.ts +169 -0
  385. package/src/session/input/workflows.ts +211 -0
  386. package/src/session/inspect/collect.ts +304 -0
  387. package/src/session/inspect/file-point.ts +69 -0
  388. package/src/session/inspect-types.ts +78 -0
  389. package/src/session/inspect-workflow.ts +157 -0
  390. package/src/session/orientation/collect.ts +718 -0
  391. package/src/session/orientation/context-facts.ts +319 -0
  392. package/src/session/orientation/context-sections.ts +352 -0
  393. package/src/session/orientation-types.ts +97 -0
  394. package/src/session/orientation-workflow.ts +307 -0
  395. package/src/session/refactor-plans.ts +1 -1
  396. package/src/session/refactor-types.ts +51 -0
  397. package/src/session/refactor-workflow.ts +263 -0
  398. package/src/session/session.ts +263 -234
  399. package/src/session/target-candidates.ts +60 -0
  400. package/src/session/target-input.ts +98 -0
  401. package/src/session/target-store.ts +132 -29
  402. package/src/session/target-workflow.ts +254 -302
  403. package/src/session/workflow-control.ts +35 -0
  404. package/src/substrate/lsp/lifecycle.ts +9 -22
  405. package/src/substrate/lsp/maintenance.ts +75 -0
  406. package/src/substrate/lsp/recovery.ts +41 -25
  407. package/src/substrate/lsp/settings.ts +1 -10
  408. package/src/substrate/lsp/state.ts +2 -13
  409. package/src/tool/find/ast-kinds.ts +35 -0
  410. package/src/tool/find/execute.ts +22 -113
  411. package/src/tool/find/markdown.ts +85 -221
  412. package/src/tool/find/modes.ts +5 -0
  413. package/src/tool/find/render.ts +57 -0
  414. package/src/tool/find/tui.ts +1 -1
  415. package/src/tool/graph/calls-md.ts +17 -30
  416. package/src/tool/graph/execute.ts +42 -103
  417. package/src/tool/graph/implementations-md.ts +32 -54
  418. package/src/tool/graph/markdown-base.ts +73 -196
  419. package/src/tool/graph/provider-location-md.ts +9 -0
  420. package/src/tool/graph/references-md.ts +34 -27
  421. package/src/tool/graph/tui.ts +8 -26
  422. package/src/tool/guidance.ts +31 -48
  423. package/src/tool/health/execute.ts +15 -56
  424. package/src/tool/health/markdown.ts +199 -148
  425. package/src/tool/health/semantic-state.ts +24 -0
  426. package/src/tool/health/tui.ts +262 -36
  427. package/src/tool/infra/error-results.ts +0 -2
  428. package/src/tool/infra/progress.ts +2 -2
  429. package/src/tool/infra/workflow-control.ts +11 -0
  430. package/src/tool/inspect/execute.ts +23 -63
  431. package/src/tool/inspect/markdown.ts +114 -95
  432. package/src/tool/inspect/tui.ts +7 -7
  433. package/src/tool/orientation/execute.ts +50 -37
  434. package/src/tool/orientation/markdown.ts +26 -31
  435. package/src/tool/orientation/tui.ts +41 -39
  436. package/src/tool/refactor-apply/execute.ts +23 -9
  437. package/src/tool/refactor-apply/tui.ts +7 -3
  438. package/src/tool/refactor-plan/execute.ts +44 -61
  439. package/src/tool/refactor-plan/markdown.ts +33 -56
  440. package/src/tool/refactor-plan/tui.ts +10 -11
  441. package/src/tool/register.ts +6 -5
  442. package/src/tool/resolve/execute.ts +23 -69
  443. package/src/tool/resolve/markdown.ts +125 -114
  444. package/src/tool/resolve/tui.ts +11 -9
  445. package/src/tool/result/assembly.ts +125 -0
  446. package/src/tool/result/errors.ts +20 -34
  447. package/src/tool/result/find.ts +107 -21
  448. package/src/tool/result/graph.ts +163 -64
  449. package/src/tool/result/health.ts +170 -73
  450. package/src/tool/result/inspect.ts +183 -41
  451. package/src/tool/result/orientation.ts +118 -16
  452. package/src/tool/result/refactor.ts +101 -21
  453. package/src/tool/result/resolve.ts +243 -80
  454. package/src/tool/result/types.ts +100 -56
  455. package/src/tool/schemas.ts +160 -231
  456. package/src/tool/specs.ts +57 -168
  457. package/src/types/details.ts +2 -4
  458. package/src/types/execution.ts +6 -15
  459. package/src/types/index.ts +2 -4
  460. package/src/types/tool-names.ts +1 -2
  461. package/src/ui/footer.ts +3 -3
  462. package/src/ui/markdown/gather.ts +17 -65
  463. package/src/ui/markdown/overview-data.ts +143 -21
  464. package/src/ui/markdown/overview.ts +27 -8
  465. package/src/ui/markdown/types.ts +12 -16
  466. package/src/ui/status-command.ts +39 -31
  467. package/src/ui/status-overlay.ts +23 -15
  468. package/src/ui/tui/common.ts +121 -74
  469. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
  470. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
  471. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
  472. package/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
  473. package/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
  474. package/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
  475. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
  476. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
  477. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
  478. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
  479. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
  480. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
  481. package/node_modules/@mrclrchtr/supi-lsp/src/diagnostics/diagnostic-augmentation.ts +0 -82
  482. package/node_modules/@mrclrchtr/supi-lsp/src/diagnostics/diagnostic-context.ts +0 -116
  483. package/node_modules/@mrclrchtr/supi-lsp/src/diagnostics/diagnostic-display.ts +0 -69
  484. package/node_modules/@mrclrchtr/supi-lsp/src/manager/capability-index.ts +0 -24
  485. package/node_modules/@mrclrchtr/supi-lsp/src/manager/client-pool.ts +0 -33
  486. package/node_modules/@mrclrchtr/supi-lsp/src/manager/diagnostic-store.ts +0 -51
  487. package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-stale-resync.ts +0 -47
  488. package/node_modules/@mrclrchtr/supi-lsp/src/manager/recovery-coordinator.ts +0 -37
  489. package/node_modules/@mrclrchtr/supi-lsp/src/manager/workspace-router.ts +0 -44
  490. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
  491. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
  492. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
  493. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
  494. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
  495. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
  496. package/src/analysis/brief/directory.ts +0 -324
  497. package/src/analysis/brief/enrich.ts +0 -157
  498. package/src/analysis/brief/file.ts +0 -84
  499. package/src/analysis/brief/inventory.ts +0 -177
  500. package/src/analysis/brief/main.ts +0 -176
  501. package/src/analysis/brief/models.ts +0 -75
  502. package/src/analysis/brief/public-brief.ts +0 -179
  503. package/src/analysis/brief/summarize.ts +0 -208
  504. package/src/analysis/brief/types.ts +0 -27
  505. package/src/analysis/brief/use-case.ts +0 -264
  506. package/src/analysis/search/ripgrep.ts +0 -558
  507. package/src/analysis/signals/git.ts +0 -89
  508. package/src/analysis/signals/project.ts +0 -189
  509. package/src/analysis/target/bridge.ts +0 -152
  510. package/src/analysis/target/file-resolution.ts +0 -125
  511. package/src/analysis/target/planner.ts +0 -92
  512. package/src/analysis/target/query.ts +0 -74
  513. package/src/analysis/target/resolve-common.ts +0 -115
  514. package/src/analysis/target/service.ts +0 -229
  515. package/src/analysis/tests/likely-tests.ts +0 -174
  516. package/src/analysis/tests/test-discovery.ts +0 -540
  517. package/src/analysis/tests/vitest.ts +0 -87
  518. package/src/app/manager.ts +0 -65
  519. package/src/substrate/lsp/diagnostic-injection.ts +0 -203
  520. package/src/substrate/lsp/overrides.ts +0 -132
  521. package/src/tool/find/orchestrate.ts +0 -317
  522. package/src/tool/find/semantic-search.ts +0 -128
  523. package/src/tool/graph/collect-relation.ts +0 -372
  524. package/src/tool/graph/orchestrate.ts +0 -259
  525. package/src/tool/health/orchestrate.ts +0 -151
  526. package/src/tool/health/sections/diagnostics.ts +0 -182
  527. package/src/tool/health/sections/recovery.ts +0 -89
  528. package/src/tool/health/sections/signals.ts +0 -89
  529. package/src/tool/impact/analysis.ts +0 -220
  530. package/src/tool/impact/change-set-impact.ts +0 -152
  531. package/src/tool/impact/execute.ts +0 -125
  532. package/src/tool/impact/file-level-impact.ts +0 -82
  533. package/src/tool/impact/markdown.ts +0 -283
  534. package/src/tool/impact/orchestrate.ts +0 -97
  535. package/src/tool/impact/result.ts +0 -2
  536. package/src/tool/impact/single-impact.ts +0 -90
  537. package/src/tool/impact/tui.ts +0 -39
  538. package/src/tool/impact/types.ts +0 -34
  539. package/src/tool/infra/cross-field.ts +0 -335
  540. package/src/tool/infra/pipeline.ts +0 -334
  541. package/src/tool/infra/readiness-message.ts +0 -5
  542. package/src/tool/inspect/orchestrate.ts +0 -154
  543. package/src/tool/orientation/deps.ts +0 -63
  544. package/src/tool/orientation/mode.ts +0 -139
  545. package/src/tool/orientation/orchestrate.ts +0 -475
  546. package/src/tool/orientation/precise-target.ts +0 -253
  547. package/src/tool/params.ts +0 -15
  548. package/src/tool/refactor-apply/markdown.ts +0 -118
  549. package/src/tool/refactor-apply/orchestrate.ts +0 -84
  550. package/src/tool/refactor-plan/orchestrate.ts +0 -355
  551. package/src/tool/resolve/orchestrate.ts +0 -38
  552. package/src/tool/result/impact.ts +0 -50
  553. package/src/ui/markdown/brief.ts +0 -218
  554. package/src/ui/message-renderer.ts +0 -121
  555. package/src/ui/tui/index.ts +0 -37
  556. /package/src/{tool/graph → analysis/relations}/callees.ts +0 -0
@@ -1,335 +0,0 @@
1
- /**
2
- * Cross-field validation rules for tool parameters.
3
- *
4
- * pi validates structural types, required fields, and enum values against
5
- * the TypeBox schemas in ./schemas.ts before calling tool executors. These
6
- * composable rules cover constraints that TypeBox cannot express:
7
- *
8
- * - Cross-field requirements (e.g. "query OR file required")
9
- * - Filesystem checks (e.g. "file exists and is not a directory")
10
- * - Semantic consistency (e.g. "kind only valid with mode: ast")
11
- *
12
- * TypeBox already enforces, and rules here must NOT duplicate:
13
- * - Required vs optional fields
14
- * - Enum value membership (StringEnum)
15
- * - Number ranges (minimum/maximum)
16
- * - additionalProperties: false
17
- */
18
-
19
- import { existsSync, statSync } from "node:fs";
20
- import { normalizePath } from "../../analysis/search/ripgrep.ts";
21
- import { inspectParam } from "./pipeline.ts";
22
-
23
- /** A cross-field validation rule. Returns an error message string or null if valid. */
24
- export type CrossFieldRule<P> = (params: P, cwd: string) => string | null;
25
-
26
- /** Compose multiple cross-field rules — stops at the first error. */
27
- export function composeRules<P>(...rules: CrossFieldRule<P>[]): CrossFieldRule<P> {
28
- return (params, cwd) => {
29
- for (const rule of rules) {
30
- const error = rule(params, cwd);
31
- if (error) return error;
32
- }
33
- return null;
34
- };
35
- }
36
-
37
- // ── Primitives ────────────────────────────────────────────────────────
38
-
39
- /**
40
- * Require at least one of the named keys to be present and non-empty.
41
- * A key is "present" when its value is not undefined, null, or empty-string.
42
- */
43
- export function requireAtLeastOne<P>(...keys: (keyof P & string)[]): CrossFieldRule<P> {
44
- return (params) => {
45
- const present = keys.filter((k) => {
46
- const v = inspectParam(params, k);
47
- return v !== undefined && v !== null && (typeof v !== "string" || v.length > 0);
48
- });
49
- if (present.length === 0) {
50
- const names = keys.map((k) => `\`${k}\``).join(" or ");
51
- return `**Error:** At least one of ${names} is required.`;
52
- }
53
- return null;
54
- };
55
- }
56
-
57
- /**
58
- * Require that the named keys appear together — all present or all absent.
59
- * A key is "present" when its value is not undefined or null.
60
- */
61
- export function requirePaired<P>(...keys: (keyof P & string)[]): CrossFieldRule<P> {
62
- return (params) => {
63
- const present = keys.map(
64
- (k) => inspectParam(params, k) !== undefined && inspectParam(params, k) !== null,
65
- );
66
- const allPresent = present.every(Boolean);
67
- const allAbsent = present.every((p) => !p);
68
- if (!allPresent && !allAbsent) {
69
- const names = keys.map((k) => `\`${k}\``).join(" and ");
70
- return `**Error:** ${names} must be provided together.`;
71
- }
72
- return null;
73
- };
74
- }
75
-
76
- /**
77
- * Require that when any of `dependentKeys` is present, `requiredKey` must
78
- * also be present.
79
- */
80
- export function requireWith<P>(
81
- requiredKey: keyof P & string,
82
- ...dependentKeys: (keyof P & string)[]
83
- ): CrossFieldRule<P> {
84
- return (params) => {
85
- const needed = dependentKeys.some(
86
- (k) => inspectParam(params, k) !== undefined && inspectParam(params, k) !== null,
87
- );
88
- if (
89
- needed &&
90
- (inspectParam(params, requiredKey) === undefined ||
91
- inspectParam(params, requiredKey) === null)
92
- ) {
93
- const depNames = dependentKeys.map((k) => `\`${k}\``).join(" or ");
94
- return `**Error:** ${depNames} requires \`${requiredKey}\`.`;
95
- }
96
- return null;
97
- };
98
- }
99
-
100
- /**
101
- * Reject when any of `positionKeys` are present alongside `pathKey`.
102
- * Positions (line/character) only anchor into files, not scope/path params.
103
- */
104
- export function noPositionOnPath<P>(
105
- pathKey: keyof P & string,
106
- lineKey: keyof P & string,
107
- charKey: keyof P & string,
108
- ): CrossFieldRule<P> {
109
- return (params) => {
110
- const hasPath = inspectParam(params, pathKey) !== undefined;
111
- const hasPos =
112
- inspectParam(params, lineKey) !== undefined || inspectParam(params, charKey) !== undefined;
113
- if (hasPath && hasPos) {
114
- return `**Error:** \`${lineKey}\` and \`${charKey}\` require \`file\`, not \`${pathKey}\`. Use \`${pathKey}\` to scope; use \`file\` to anchor a position.`;
115
- }
116
- return null;
117
- };
118
- }
119
-
120
- // ── Filesystem primitives ─────────────────────────────────────────────
121
-
122
- /** Ensure the value at `key` resolves to an existing file. */
123
- export function fileMustExist<P>(key: keyof P & string): CrossFieldRule<P> {
124
- return (params, cwd) => {
125
- const file = inspectParam(params, key) as string | undefined;
126
- if (!file) return null;
127
- const resolved = normalizePath(file, cwd);
128
- if (!existsSync(resolved)) {
129
- return `**Error:** File not found: \`${file}\`.`;
130
- }
131
- return null;
132
- };
133
- }
134
-
135
- /** Ensure the value at `key` resolves to a file, not a directory. */
136
- export function fileNotDirectory<P>(key: keyof P & string): CrossFieldRule<P> {
137
- return (params, cwd) => {
138
- const file = inspectParam(params, key) as string | undefined;
139
- if (!file) return null;
140
- const resolved = normalizePath(file, cwd);
141
- if (existsSync(resolved) && statSync(resolved).isDirectory()) {
142
- return `**Error:** \`${key}\` points to a directory. Use \`scope\` for a directory; use \`file\` to anchor a position in a file.`;
143
- }
144
- return null;
145
- };
146
- }
147
-
148
- // ── Tool-specific composed rules ──────────────────────────────────────
149
-
150
- /**
151
- * Standard cross-field rules for tools that accept anchored coordinates
152
- * (file + line + character). Used by code_graph, code_impact, code_inspect,
153
- * and any future tool that takes position params.
154
- *
155
- * TypeBox already enforces:
156
- * - Types: file (String), line (Number >= 1), character (Number >= 1)
157
- * - additionalProperties: false
158
- */
159
- export function focusedToolRules<P>(
160
- pathKey: keyof P & string = "scope" as keyof P & string,
161
- ): CrossFieldRule<P> {
162
- return composeRules<P>(
163
- noPositionOnPath(pathKey, "line" as keyof P & string, "character" as keyof P & string),
164
- fileNotDirectory("file" as keyof P & string),
165
- requireWith(
166
- "file" as keyof P & string,
167
- "line" as keyof P & string,
168
- "character" as keyof P & string,
169
- ),
170
- );
171
- }
172
-
173
- /**
174
- * Cross-field rules for code_resolve.
175
- *
176
- * TypeBox already enforces:
177
- * - kind must be a valid StringEnum value
178
- * - line/character must be numbers >= 1
179
- * - additionalProperties: false
180
- */
181
- export const resolveCrossFieldRules: CrossFieldRule<{
182
- query?: string;
183
- file?: string;
184
- line?: number;
185
- character?: number;
186
- }> = composeRules(
187
- requireAtLeastOne("query", "file"),
188
- requirePaired("line", "character"),
189
- requireWith("file", "line", "character"),
190
- );
191
-
192
- /**
193
- * Cross-field rules for code_orientation coordinate mode
194
- * (focus + line + character).
195
- *
196
- * TypeBox already enforces:
197
- * - line/character types and min >= 1
198
- * - additionalProperties: false
199
- */
200
- export function orientationCoordinateRules<
201
- P extends {
202
- focus?: string;
203
- line?: number;
204
- character?: number;
205
- },
206
- >(): CrossFieldRule<P> {
207
- return composeRules<P>(
208
- requirePaired(
209
- "focus" as keyof P & string,
210
- "line" as keyof P & string,
211
- "character" as keyof P & string,
212
- ),
213
- fileMustExist("focus" as keyof P & string),
214
- fileNotDirectory("focus" as keyof P & string),
215
- );
216
- }
217
-
218
- /**
219
- * Cross-field rules for code_find mode+kind consistency.
220
- *
221
- * TypeBox already enforces:
222
- * - mode must be a valid StringEnum value
223
- * - kind must be a valid StringEnum value
224
- * - query is required (not optional)
225
- */
226
- const SUPPORTED_AST_KINDS = [
227
- "definition",
228
- "import",
229
- "export",
230
- "call",
231
- "type",
232
- "interface",
233
- "class",
234
- "method",
235
- "enum",
236
- "test",
237
- ] as const;
238
-
239
- const SUPPORTED_AST_KINDS_TEXT = SUPPORTED_AST_KINDS.map((k) => `\`${k}\``).join(", ");
240
-
241
- export function findModeKindRules<P extends { mode?: string; kind?: string }>(): CrossFieldRule<P> {
242
- return (params) => {
243
- const mode = params.mode ?? "text";
244
- const kind = params.kind;
245
- if ((mode === "text" || mode === "regex" || mode === "semantic") && kind) {
246
- return `**Error:** code_find does not accept \`kind\` with \`mode: "${mode}"\`. Use \`mode: "ast"\` with \`kind\`.`;
247
- }
248
- if (mode === "ast" && !kind) {
249
- return `**Error:** code_find with \`mode: "ast"\` requires \`kind\`. Supported AST kinds: ${SUPPORTED_AST_KINDS_TEXT}.`;
250
- }
251
- return null;
252
- };
253
- }
254
-
255
- /**
256
- * Cross-field rules for code_refactor_plan.
257
- *
258
- * TypeBox already enforces:
259
- * - operation must be a valid StringEnum value
260
- * - range shape (start/end with line/character)
261
- * - additionalProperties: false
262
- */
263
- // ── Refactor plan sub-rules (split for complexity) ────────────────────
264
-
265
- function checkExtractRange<
266
- P extends {
267
- operation: string;
268
- range?: {
269
- start: { line: number; character: number };
270
- end: { line: number; character: number };
271
- };
272
- },
273
- >(params: P): string | null {
274
- const isExtract =
275
- params.operation === "extract_function" || params.operation === "extract_variable";
276
- if (!isExtract) return null;
277
- if (!params.range) {
278
- return "**Error:** `range` is required for `extract_function` and `extract_variable`.";
279
- }
280
- const { start, end } = params.range;
281
- if (end.line < start.line || (end.line === start.line && end.character <= start.character)) {
282
- return "**Error:** `range.end` must be after `range.start`.";
283
- }
284
- return null;
285
- }
286
-
287
- function checkNewNameRequired<P extends { operation: string; newName?: string }>(
288
- params: P,
289
- ): string | null {
290
- const needsName =
291
- params.operation === "rename_symbol" ||
292
- params.operation === "extract_function" ||
293
- params.operation === "extract_variable";
294
- if (needsName && !params.newName) {
295
- return `**Error:** \`newName\` is required for \`${params.operation}\`.`;
296
- }
297
- return null;
298
- }
299
-
300
- /**
301
- * Cross-field rules for code_refactor_plan.
302
- *
303
- * TypeBox already enforces:
304
- * - operation must be a valid StringEnum value
305
- * - range shape (start/end with line/character)
306
- * - additionalProperties: false
307
- */
308
- export function refactorPlanCrossFieldRules<
309
- P extends {
310
- operation: string;
311
- targetId?: string;
312
- file?: string;
313
- line?: number;
314
- character?: number;
315
- range?: {
316
- start: { line: number; character: number };
317
- end: { line: number; character: number };
318
- };
319
- newName?: string;
320
- },
321
- >(): CrossFieldRule<P> {
322
- return composeRules<P>(
323
- (params) => {
324
- const hasTarget =
325
- Boolean(params.targetId) ||
326
- (Boolean(params.file) && params.line != null && params.character != null);
327
- if (!hasTarget) {
328
- return "**Error:** Refactor preview requires `targetId` (from `code_resolve`) or `file` + `line` + `character`.";
329
- }
330
- return null;
331
- },
332
- checkExtractRange as CrossFieldRule<P>,
333
- checkNewNameRequired as CrossFieldRule<P>,
334
- );
335
- }
@@ -1,334 +0,0 @@
1
- /**
2
- * Lightweight tool-execution pipeline.
3
- *
4
- * Executors compose stages that gate before the tool-specific logic:
5
- * targetId expansion, scope resolution, param validation, semantic
6
- * readiness, and capability checks. Each stage returns a
7
- * {@link PipeOutcome}: `{ kind: "continue" }` to proceed to the next
8
- * stage, or `{ kind: "error", result }` to short-circuit the pipeline.
9
- *
10
- * Usage in an executor:
11
- *
12
- * ```ts
13
- * return runPipe(params, ctx, [
14
- * expandTargetId((msg) => ({ content: msg, details: ... })),
15
- * resolveScopeParam((reason) => ({ content: reason, details: ... })),
16
- * validateParams(myValidator, (msg) => ({ content: msg, details: ... })),
17
- * gateSemanticReadiness("code_graph"),
18
- * ], async (p, c) => {
19
- * // tool-specific execution
20
- * });
21
- * ```
22
- */
23
-
24
- import { match } from "ts-pattern";
25
- import { ensureSemanticReadiness } from "../../analysis/readiness.ts";
26
- import { resolveScope, resolveScopeSet } from "../../analysis/search/ripgrep.ts";
27
- import { routeFor } from "../../analysis/target/planner.ts";
28
- import type {
29
- CodeIntelligenceToolName,
30
- CodeIntelResult,
31
- CodeIntelToolExecCtx,
32
- } from "../../types/index.ts";
33
- import { searchErrorResult } from "./error-results.ts";
34
- import { renderSemanticReadinessTimeout } from "./readiness-message.ts";
35
-
36
- // Re-export for stage consumers
37
- export type { CodeIntelligenceToolName };
38
-
39
- // ── Param accessors ──────────────────────────────────────────────────
40
-
41
- /**
42
- * Read a param value for runtime inspection in generic pipeline stages
43
- * and cross-field validation rules.
44
- *
45
- * Centralizes the {@link Record}<string, unknown> cast needed when
46
- * generic code accesses params by dynamic/computed keys. Callers get
47
- * `unknown` back and must narrow to the expected type.
48
- */
49
- export function inspectParam<P>(params: P, key: keyof P & string): unknown {
50
- return (params as Record<string, unknown>)[key];
51
- }
52
-
53
- /**
54
- * Set a param value in generic pipeline code.
55
- *
56
- * Companion to {@link inspectParam} for mutation stages like
57
- * {@link expandTargetId} and {@link resolveScopeParam}.
58
- */
59
- export function setParam<P>(params: P, key: keyof P & string, value: unknown): void {
60
- (params as Record<string, unknown>)[key] = value;
61
- }
62
-
63
- // ── Types ─────────────────────────────────────────────────────────────
64
-
65
- /**
66
- * Outcome of a single pipeline stage.
67
- *
68
- * `continue` — proceed to the next stage (or the execute function).
69
- * `error` — short-circuit the pipeline with the given result.
70
- */
71
- export type PipeOutcome = { kind: "continue" } | { kind: "error"; result: CodeIntelResult };
72
-
73
- /**
74
- * A pipeline stage: receives (possibly mutated) params and the execution
75
- * context. Returns {@link PipeOutcome} — `{ kind: "continue" }` to
76
- * advance to the next stage, or `{ kind: "error", result }` to
77
- * short-circuit immediately.
78
- */
79
- export type PipeStage<P> = (
80
- params: P,
81
- ctx: CodeIntelToolExecCtx,
82
- ) => Promise<PipeOutcome> | PipeOutcome;
83
-
84
- // ── Orchestrator ──────────────────────────────────────────────────────
85
-
86
- /**
87
- * Run a sequence of gating stages then the tool-specific execute function.
88
- *
89
- * Stages are executed in order. The first stage that returns
90
- * `{ kind: "error" }` short-circuits the pipeline and its result is
91
- * returned to the caller. If every stage returns `{ kind: "continue" }`,
92
- * `execute(params, ctx)` runs.
93
- */
94
- export async function runPipe<P>(
95
- params: P,
96
- ctx: CodeIntelToolExecCtx,
97
- stages: PipeStage<P>[],
98
- execute: (params: P, ctx: CodeIntelToolExecCtx) => Promise<CodeIntelResult>,
99
- ): Promise<CodeIntelResult> {
100
- for (const stage of stages) {
101
- const outcome = await stage(params, ctx);
102
- if (outcome.kind === "error") return outcome.result;
103
- }
104
- return execute(params, ctx);
105
- }
106
-
107
- // ── Stage factories ───────────────────────────────────────────────────
108
-
109
- /** Minimum parameter shape needed by `expandTargetId`. */
110
- export interface HasTargetParams {
111
- targetId?: string;
112
- file?: string;
113
- line?: number;
114
- character?: number;
115
- /** Set by expandTargetId stage — resolved name from the stored target entry. */
116
- _expandedName?: string | null;
117
- /** Set by expandTargetId stage — anchor kind from the stored target entry. */
118
- _expandedAnchorKind?: string | null;
119
- }
120
-
121
- /**
122
- * Expand an optional `targetId` into file/line/character params.
123
- *
124
- * On success the stage mutates `params.file`, `params.line`, and
125
- * `params.character` from the stored entry. On error it calls
126
- * `onError(message)` to build a tool-appropriate error result.
127
- *
128
- * A missing/null targetId is not an error — the stage passes through
129
- * (no expansion, params unchanged).
130
- */
131
- export function expandTargetId<P extends HasTargetParams>(
132
- onError: (message: string) => CodeIntelResult,
133
- ): PipeStage<P> {
134
- return (params, ctx) => {
135
- const expansion = ctx.session.expandTargetId(params);
136
- if (expansion.kind === "error") return { kind: "error", result: onError(expansion.message) };
137
- if (expansion.kind === "ok") {
138
- params.file = expansion.file;
139
- params.line = expansion.line;
140
- params.character = expansion.character;
141
- params._expandedName = expansion.targetName;
142
- params._expandedAnchorKind = expansion.entry.anchorKind;
143
- }
144
- return { kind: "continue" };
145
- };
146
- }
147
-
148
- /** Minimum parameter shape needed by `resolveScope`. */
149
- export interface HasScopeParam {
150
- scope?: string;
151
- }
152
-
153
- /** Minimum parameter shape needed by `resolveScopeSetParam`. */
154
- export interface HasScopeSetParam {
155
- scope?: string | string[];
156
- /** Set by resolveScopeSetParam — absolute search roots for code_find. */
157
- _resolvedScopePaths?: string[];
158
- /** Set by resolveScopeSetParam — display label for requested search roots. */
159
- _resolvedScopeDisplay?: string | null;
160
- }
161
-
162
- /**
163
- * Resolve the `scope` parameter to an absolute path.
164
- *
165
- * Mutates `params.scope` to the resolved absolute path. An undefined
166
- * scope passes through unchanged. On resolution error calls
167
- * `onError(reason)`.
168
- *
169
- * @param paramName — defaults to `"scope"`.
170
- */
171
- export function resolveScopeParam<P extends HasScopeParam>(
172
- onError: (reason: string) => CodeIntelResult,
173
- paramName: keyof P & string = "scope" as keyof P & string,
174
- ): PipeStage<P> {
175
- return (params, ctx) => {
176
- const raw = inspectParam(params, paramName) as string | undefined;
177
- if (raw === undefined) return { kind: "continue" };
178
-
179
- const result = resolveScope(raw, ctx.cwd);
180
- if (result.kind === "error") return { kind: "error", result: onError(result.reason) };
181
-
182
- setParam(params, paramName, result.path);
183
- return { kind: "continue" };
184
- };
185
- }
186
-
187
- /** Resolve code_find's one-or-many `scope` input to absolute search roots. */
188
- export function resolveScopeSetParam<P extends HasScopeSetParam>(
189
- onError: (reason: string) => CodeIntelResult,
190
- ): PipeStage<P> {
191
- return (params, ctx) => {
192
- const result = resolveScopeSet(params.scope, ctx.cwd);
193
- if (result.kind === "error") return { kind: "error", result: onError(result.reason) };
194
-
195
- params._resolvedScopePaths = [...result.paths];
196
- params._resolvedScopeDisplay = result.display;
197
- return { kind: "continue" };
198
- };
199
- }
200
-
201
- /**
202
- * Apply cross-field validation rules after TypeBox schema validation.
203
- *
204
- * pi already validates structural types, required fields, and enum
205
- * values against the TypeBox schema in {@link ./schemas.ts} before
206
- * calling executors. This stage handles only cross-field constraints
207
- * that TypeBox cannot express (pairing, mutual exclusion, filesystem
208
- * checks, semantic consistency).
209
- *
210
- * The validator receives `(params, cwd)` and returns `null` when
211
- * valid, or an error message string. The stage calls `onError(message)`
212
- * to build a tool-appropriate error result.
213
- */
214
- export function validateParams<P>(
215
- validator: (params: P, cwd: string) => string | null,
216
- onError: (message: string) => CodeIntelResult,
217
- ): PipeStage<P> {
218
- return (params, ctx) => {
219
- const message = validator(params, ctx.cwd);
220
- if (message) return { kind: "error", result: onError(message) };
221
- return { kind: "continue" };
222
- };
223
- }
224
-
225
- /** Options for {@link gateSemanticReadiness}. */
226
- export interface SemanticGateOptions {
227
- /**
228
- * Optional param key for the file path used for file-scoped readiness.
229
- * When provided, readiness waits for the specific file. Defaults to
230
- * workspace-scoped readiness.
231
- */
232
- fileParam?: string;
233
-
234
- /** Build a result when readiness times out. */
235
- onTimeout?: (toolName: string, timeoutMs: number) => CodeIntelResult;
236
-
237
- /** When true, throw (whole-tool unavailable) instead of returning an error result. */
238
- throwOnUnavailable?: boolean;
239
-
240
- /**
241
- * When true, let "unavailable" pass through to the execute function
242
- * instead of returning an error. Use when the use-case layer handles
243
- * missing providers with explicit unavailable-section notes.
244
- * `throwOnUnavailable` takes precedence when both are true.
245
- */
246
- passThroughOnUnavailable?: boolean;
247
-
248
- /** Build a result when readiness is permanently unavailable. */
249
- onUnavailable?: (reason: string) => CodeIntelResult;
250
- }
251
-
252
- /**
253
- * Gate execution behind semantic (LSP) readiness.
254
- *
255
- * Waits up to the default timeout for the LSP to be ready for the
256
- * workspace (or a specific file). On timeout, calls `onTimeout` if
257
- * provided, otherwise builds a default timeout result. When
258
- * `throwOnUnavailable` is true and the provider is permanently
259
- * unavailable, the stage throws so pi marks the call as an error.
260
- */
261
- export function gateSemanticReadiness<P>(
262
- toolName: CodeIntelligenceToolName,
263
- opts: SemanticGateOptions = {},
264
- ): PipeStage<P> {
265
- return async (params, ctx) => {
266
- // opts.fileParam is a runtime string from an options bag, not a
267
- // compile-time keyof P — keep the cast local instead of routing
268
- // through inspectParam which requires keyof P & string.
269
- const file = opts.fileParam
270
- ? ((params as Record<string, unknown>)[opts.fileParam] as string | undefined)
271
- : undefined;
272
-
273
- const scope = file ? { kind: "file" as const, file } : { kind: "workspace" as const };
274
- const readiness = await ensureSemanticReadiness(ctx.cwd, scope);
275
-
276
- if (readiness.kind === "ready") return { kind: "continue" };
277
-
278
- return handleNonReadyReadiness(readiness, toolName, opts);
279
- };
280
- }
281
-
282
- /** Handle timeout or unavailable readiness, applying tool-specific callbacks. */
283
- function handleNonReadyReadiness(
284
- readiness: { kind: "timeout" } | { kind: "unavailable"; reason: string },
285
- toolName: CodeIntelligenceToolName,
286
- opts: SemanticGateOptions,
287
- ): PipeOutcome {
288
- return match(readiness)
289
- .with({ kind: "timeout" }, () => {
290
- if (opts.onTimeout)
291
- return { kind: "error" as const, result: opts.onTimeout(toolName, 15_000) };
292
- return defaultTimeoutOutcome(toolName);
293
- })
294
- .with({ kind: "unavailable" }, ({ reason }) => {
295
- if (opts.throwOnUnavailable) throw new Error(reason);
296
- if (opts.passThroughOnUnavailable) return { kind: "continue" as const };
297
- if (opts.onUnavailable) return { kind: "error" as const, result: opts.onUnavailable(reason) };
298
- return defaultUnavailableOutcome(reason);
299
- })
300
- .exhaustive() as PipeOutcome;
301
- }
302
-
303
- function defaultTimeoutOutcome(toolName: string): PipeOutcome {
304
- return {
305
- kind: "error",
306
- result: searchErrorResult(renderSemanticReadinessTimeout(toolName, 15_000)),
307
- };
308
- }
309
-
310
- function defaultUnavailableOutcome(reason: string): PipeOutcome {
311
- return { kind: "error", result: searchErrorResult(`**Error:** ${reason}`) };
312
- }
313
-
314
- /**
315
- * Gate execution behind capability availability.
316
- *
317
- * Calls `routeFor(cwd, toolName)`. When `preferred === "unavailable"`
318
- * the stage throws (whole-tool capability-unavailable) so pi marks the
319
- * call as an error. Partial per-relation unavailability is NOT gated
320
- * here — executors surface that through best-effort notes.
321
- *
322
- * This is a sync stage — no async work.
323
- */
324
- export function gateCapability<P>(toolName: CodeIntelligenceToolName): PipeStage<P> {
325
- return (_params, ctx) => {
326
- const route = routeFor(ctx.cwd, toolName);
327
- if (route.preferred === "unavailable") {
328
- throw new Error(
329
- `No analysis provider is available for this workspace. Check \`code_health\` for LSP and tree-sitter status.`,
330
- );
331
- }
332
- return { kind: "continue" };
333
- };
334
- }
@@ -1,5 +0,0 @@
1
- /** Render user-facing semantic readiness messages for tool executors. */
2
- export function renderSemanticReadinessTimeout(toolName: string, timeoutMs: number): string {
3
- const seconds = Math.max(1, Math.round(timeoutMs / 1000));
4
- return `**Error:** Semantic analysis for \`${toolName}\` is still warming for this workspace (LSP indexing/startup not finished after ${seconds}s). Try again shortly or check \`code_health\`.`;
5
- }