scip-query 0.23.0 → 0.26.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 (650) hide show
  1. package/CHANGELOG.md +491 -2
  2. package/README.md +111 -122
  3. package/dist/augment-vue-worker.js +1 -1
  4. package/dist/by-kind-PRVFAGTQ.js +2 -0
  5. package/dist/call-graph-DVPAQV2F.js +2 -0
  6. package/dist/call-graph-evidence-CUtj8V2I.d.ts +19 -0
  7. package/dist/chunk-2FSBGL5P.js +2 -0
  8. package/dist/chunk-2HLAFUCY.js +2 -0
  9. package/dist/chunk-2IWUT6CJ.js +3 -0
  10. package/dist/chunk-2KNN7GTQ.js +2 -0
  11. package/dist/chunk-2LHXRE2B.js +8 -0
  12. package/dist/{chunk-EG2CPZMJ.js → chunk-2YXE77TJ.js} +2 -2
  13. package/dist/chunk-36SGVCGX.js +2 -0
  14. package/dist/chunk-3ABBFPTP.js +2 -0
  15. package/dist/chunk-3IVFU4FD.js +3 -0
  16. package/dist/chunk-3JIQS44J.js +7 -0
  17. package/dist/chunk-3ZRB6DNK.js +7 -0
  18. package/dist/{chunk-6YTSKJJ3.js → chunk-42EOW5VI.js} +1 -1
  19. package/dist/{chunk-6I6L7Z62.js → chunk-4BHGBMNO.js} +2 -2
  20. package/dist/chunk-4BP3UBDG.js +2 -0
  21. package/dist/chunk-4D6RO7G4.js +2 -0
  22. package/dist/chunk-4FEWQ6RH.js +2 -0
  23. package/dist/chunk-4IGEOBG7.js +2 -0
  24. package/dist/chunk-4QZXBUKC.js +2 -0
  25. package/dist/chunk-4WBDEVX2.js +4 -0
  26. package/dist/chunk-4WCUBZU3.js +8 -0
  27. package/dist/chunk-4WTUBQ36.js +40 -0
  28. package/dist/chunk-4XQ4O6IM.js +3 -0
  29. package/dist/chunk-55UQAMZO.js +4 -0
  30. package/dist/chunk-5D2LVK7O.js +125 -0
  31. package/dist/chunk-5IYJ56TT.js +2 -0
  32. package/dist/chunk-5PLMJC7Q.js +2 -0
  33. package/dist/chunk-5TNQJUR2.js +5 -0
  34. package/dist/chunk-62BDNPMI.js +2 -0
  35. package/dist/chunk-64DZ5TXR.js +7 -0
  36. package/dist/chunk-65245JCM.js +2 -0
  37. package/dist/chunk-6FFVZZL4.js +2 -0
  38. package/dist/chunk-6KO5JHAR.js +2 -0
  39. package/dist/chunk-6LRXOOSX.js +2 -0
  40. package/dist/chunk-6LSEIIF7.js +2 -0
  41. package/dist/chunk-6YMNWD3H.js +6 -0
  42. package/dist/chunk-72AD6ZRR.js +5 -0
  43. package/dist/chunk-73AAKPUC.js +4 -0
  44. package/dist/chunk-76CZ77DF.js +2 -0
  45. package/dist/chunk-7VPEEAAG.js +2 -0
  46. package/dist/chunk-7WTPQ4NX.js +14 -0
  47. package/dist/chunk-7Y5T6XDP.js +2 -0
  48. package/dist/chunk-A2IIGFMJ.js +5 -0
  49. package/dist/chunk-AB5KCTEV.js +2 -0
  50. package/dist/chunk-AC566WBP.js +6 -0
  51. package/dist/chunk-AGWFSTXC.js +3 -0
  52. package/dist/chunk-AOSIYPTA.js +2 -0
  53. package/dist/chunk-AUVEWPIF.js +2 -0
  54. package/dist/chunk-B56T42J3.js +25 -0
  55. package/dist/chunk-BIQEF5NE.js +2 -0
  56. package/dist/chunk-BL6XJKTA.js +3 -0
  57. package/dist/chunk-BMKOQJRI.js +2 -0
  58. package/dist/chunk-BOZ4EXBB.js +3 -0
  59. package/dist/chunk-BUTWYEPH.js +2 -0
  60. package/dist/chunk-BZB4QPIP.js +2 -0
  61. package/dist/{chunk-ILTDAWEF.js → chunk-CE357GEE.js} +4 -4
  62. package/dist/chunk-CFN45HFP.js +2 -0
  63. package/dist/chunk-CFYMZFXT.js +368 -0
  64. package/dist/chunk-CN5EH7O3.js +2 -0
  65. package/dist/chunk-D254DNNQ.js +4 -0
  66. package/dist/chunk-D3FDISIC.js +2 -0
  67. package/dist/chunk-D3NX5XIE.js +3 -0
  68. package/dist/chunk-DA7RPPDF.js +3 -0
  69. package/dist/chunk-DDMC3FON.js +3 -0
  70. package/dist/chunk-DIO3FUSG.js +2 -0
  71. package/dist/chunk-DJ2NNSUK.js +3 -0
  72. package/dist/chunk-DKYQIM3C.js +18 -0
  73. package/dist/{chunk-JTQVMR42.js → chunk-DOOEL2IV.js} +2 -2
  74. package/dist/chunk-DVFP6PZI.js +2 -0
  75. package/dist/chunk-E3FDPXZK.js +2 -0
  76. package/dist/chunk-E7YNJLCB.js +2 -0
  77. package/dist/chunk-EFGW5JPH.js +2 -0
  78. package/dist/chunk-EJVTR244.js +13 -0
  79. package/dist/chunk-EOV7RTRZ.js +2 -0
  80. package/dist/chunk-ETOIKRHO.js +2 -0
  81. package/dist/chunk-EYK3ZAO2.js +3 -0
  82. package/dist/chunk-F2V2LPET.js +52 -0
  83. package/dist/chunk-F4LUHJTF.js +2 -0
  84. package/dist/chunk-F4PUT6IT.js +2 -0
  85. package/dist/chunk-F56GCXXS.js +5 -0
  86. package/dist/chunk-FC2EVQRM.js +2 -0
  87. package/dist/chunk-FL7NBMHP.js +3 -0
  88. package/dist/chunk-FMRN2TRL.js +3 -0
  89. package/dist/chunk-FVULPZDF.js +20 -0
  90. package/dist/chunk-GCKCF5FL.js +43 -0
  91. package/dist/chunk-GH2PYF46.js +2 -0
  92. package/dist/chunk-GHJAGXIP.js +2 -0
  93. package/dist/{chunk-WIWY3CRX.js → chunk-GMVSHUKZ.js} +2 -2
  94. package/dist/chunk-GS6KDO4R.js +2 -0
  95. package/dist/chunk-GUUBXNN7.js +2 -0
  96. package/dist/chunk-GVWX5T43.js +80 -0
  97. package/dist/chunk-GZKFETP5.js +2 -0
  98. package/dist/chunk-H4EQHO6J.js +9 -0
  99. package/dist/chunk-H73WY2RM.js +2 -0
  100. package/dist/chunk-H75GSPRV.js +60 -0
  101. package/dist/chunk-HDR3AHSV.js +61 -0
  102. package/dist/chunk-HQBSL74Y.js +2 -0
  103. package/dist/chunk-HRRFKWPZ.js +2 -0
  104. package/dist/chunk-HXENDJC6.js +2 -0
  105. package/dist/chunk-IIBAZNSW.js +21 -0
  106. package/dist/chunk-INLMWEUU.js +12 -0
  107. package/dist/chunk-IWQPAF4F.js +2 -0
  108. package/dist/chunk-IZJ6YUKP.js +35 -0
  109. package/dist/chunk-J2TMAIN5.js +60 -0
  110. package/dist/chunk-J5FJMODQ.js +142 -0
  111. package/dist/chunk-J7HZPIO3.js +2 -0
  112. package/dist/chunk-JEVRKFRL.js +2 -0
  113. package/dist/chunk-JFXSGAEB.js +30 -0
  114. package/dist/chunk-JVRTHGFS.js +3 -0
  115. package/dist/chunk-JYWEX7RR.js +360 -0
  116. package/dist/chunk-K3YL22N6.js +2 -0
  117. package/dist/chunk-K4CN7GXK.js +12 -0
  118. package/dist/chunk-K5TBVXU4.js +30 -0
  119. package/dist/chunk-KDDIE2DP.js +9 -0
  120. package/dist/chunk-KHWRRPV4.js +2 -0
  121. package/dist/chunk-KI6NBKDY.js +14 -0
  122. package/dist/chunk-KU3QRSTH.js +2 -0
  123. package/dist/chunk-KZBJWZJB.js +2 -0
  124. package/dist/chunk-L7GFM3NP.js +3 -0
  125. package/dist/chunk-LMO6PK3V.js +35 -0
  126. package/dist/chunk-LN4YXJJU.js +2 -0
  127. package/dist/chunk-LOVIZBJ4.js +43 -0
  128. package/dist/chunk-LPCRK4A2.js +11 -0
  129. package/dist/chunk-MMHZKBFA.js +2 -0
  130. package/dist/{chunk-M2O5NY6W.js → chunk-MOQQBQRD.js} +2 -2
  131. package/dist/chunk-N2WN6I3L.js +2 -0
  132. package/dist/chunk-N3ORQT7L.js +2 -0
  133. package/dist/chunk-NAZ3RAIW.js +2 -0
  134. package/dist/chunk-NDUNO5JQ.js +2 -0
  135. package/dist/chunk-NEIWRNAZ.js +4 -0
  136. package/dist/chunk-NJJMVD65.js +2 -0
  137. package/dist/chunk-NLOQOBXI.js +20 -0
  138. package/dist/chunk-NOLZOVCU.js +2 -0
  139. package/dist/chunk-NOWINRRN.js +2 -0
  140. package/dist/chunk-NZAXKGRL.js +16 -0
  141. package/dist/chunk-O2C4UILI.js +2 -0
  142. package/dist/chunk-O3RHA6ZT.js +3 -0
  143. package/dist/chunk-O4UZSPPI.js +3 -0
  144. package/dist/chunk-OGFV2BUX.js +2 -0
  145. package/dist/chunk-OZCJXZK6.js +499 -0
  146. package/dist/chunk-P6ODM7BY.js +2 -0
  147. package/dist/{chunk-XBGWL66K.js → chunk-PAVGPRHJ.js} +2 -2
  148. package/dist/chunk-PH52RA7D.js +2 -0
  149. package/dist/chunk-PKN354TH.js +3 -0
  150. package/dist/chunk-PWOASWEG.js +11 -0
  151. package/dist/chunk-QIWXRW72.js +2 -0
  152. package/dist/chunk-QJRMOK5N.js +2 -0
  153. package/dist/{chunk-YXPUP5G2.js → chunk-QOIXNWQR.js} +2 -2
  154. package/dist/chunk-QXEUDXBT.js +3 -0
  155. package/dist/chunk-QYUVVBMR.js +6 -0
  156. package/dist/chunk-QZ7KQZRN.js +2 -0
  157. package/dist/chunk-R6LQBUDH.js +2 -0
  158. package/dist/chunk-RBS42E55.js +20 -0
  159. package/dist/chunk-RSJKPCFX.js +26 -0
  160. package/dist/chunk-S6CZA3MV.js +2 -0
  161. package/dist/chunk-STMVAHJP.js +2 -0
  162. package/dist/chunk-SYVPTTVW.js +2 -0
  163. package/dist/chunk-T3I6NHBH.js +2 -0
  164. package/dist/chunk-T6DK3ZP7.js +2 -0
  165. package/dist/chunk-TKD34PHN.js +4 -0
  166. package/dist/chunk-TNNQFH7W.js +2 -0
  167. package/dist/chunk-TNV7SSUF.js +2 -0
  168. package/dist/chunk-TO7ZR3EH.js +8 -0
  169. package/dist/chunk-TOU3CHK4.js +2 -0
  170. package/dist/chunk-TRBI4UKT.js +2 -0
  171. package/dist/chunk-TZCVNCAN.js +4 -0
  172. package/dist/chunk-U4LZA5LL.js +3 -0
  173. package/dist/chunk-U5RIG3JP.js +3 -0
  174. package/dist/chunk-UP5KXN2I.js +2 -0
  175. package/dist/chunk-UQFR3NDH.js +5 -0
  176. package/dist/chunk-UXYXF7GV.js +2 -0
  177. package/dist/chunk-VB3GOKOS.js +2 -0
  178. package/dist/chunk-VF5JZICY.js +2 -0
  179. package/dist/chunk-VTY3VK6E.js +2 -0
  180. package/dist/chunk-VX2O4RIS.js +2 -0
  181. package/dist/chunk-WKPV2TDZ.js +2 -0
  182. package/dist/chunk-WOFQ5DTB.js +2 -0
  183. package/dist/chunk-WS4C6TCK.js +2 -0
  184. package/dist/chunk-WXU3DGPU.js +2 -0
  185. package/dist/chunk-X6RMKHJQ.js +81 -0
  186. package/dist/{chunk-4ILJCCXV.js → chunk-XHMN6ZX7.js} +2 -2
  187. package/dist/chunk-XHTVFLWW.js +2 -0
  188. package/dist/chunk-XKIDJCIK.js +2 -0
  189. package/dist/chunk-XTYTYZPT.js +2 -0
  190. package/dist/chunk-Y2JHHTTA.js +2 -0
  191. package/dist/chunk-YGVRMGYN.js +4 -0
  192. package/dist/chunk-YNQCGEQE.js +2 -0
  193. package/dist/chunk-YOQVEXVE.js +14 -0
  194. package/dist/chunk-YRT2WLYY.js +2 -0
  195. package/dist/chunk-YTAP5Y2G.js +2 -0
  196. package/dist/chunk-YTYWI7VB.js +2 -0
  197. package/dist/chunk-YULZRALL.js +2 -0
  198. package/dist/chunk-Z33WQG4Q.js +2 -0
  199. package/dist/chunk-ZGTYGDMF.js +16 -0
  200. package/dist/chunk-ZHMRSZFD.js +43 -0
  201. package/dist/chunk-ZHSP366W.js +10 -0
  202. package/dist/chunk-ZIBYCYKK.js +7 -0
  203. package/dist/{chunk-GAS2LJMP.js → chunk-ZLADLUE6.js} +3 -3
  204. package/dist/chunk-ZO4YXUT6.js +4 -0
  205. package/dist/{chunk-HYO3NP5Q.js → chunk-ZR4HBC2H.js} +2 -2
  206. package/dist/cli-main.js +6 -6
  207. package/dist/cli.js +1 -1
  208. package/dist/{code-B17qEMbt.d.ts → code-BNyrCF3_.d.ts} +3 -2
  209. package/dist/code-IL5WH3NZ.js +2 -0
  210. package/dist/code-result-json-ANTBEDFP.js +4 -0
  211. package/dist/command-descriptors-HEEMDHTU.js +222 -0
  212. package/dist/deps-EOWFC6FD.js +2 -0
  213. package/dist/direct-navigation-Y5B6OSIQ.js +3 -0
  214. package/dist/{exploration-topology-BG4v30HZ.d.ts → exploration-topology-CSgEyAz-.d.ts} +3 -1
  215. package/dist/files-K4AI3JUM.js +2 -0
  216. package/dist/frontend-profile-roles-D7eCum8P.d.ts +10 -0
  217. package/dist/{health-CPp2Jf1Z.d.ts → health-BtfmNrfa.d.ts} +58 -74
  218. package/dist/hierarchy-6W5NDIFI.js +2 -0
  219. package/dist/imports-WH365QY4.js +2 -0
  220. package/dist/index.d.ts +13 -1
  221. package/dist/index.js +1 -1
  222. package/dist/members-K3PHMF5S.js +2 -0
  223. package/dist/methods-E7KVMBX4.js +2 -0
  224. package/dist/output-continuation-command-BJSY67SN.js +3 -0
  225. package/dist/output-pagination-UZJ5ACIX.js +24 -0
  226. package/dist/postinstall.js +1 -1
  227. package/dist/project-reindex-EP24WT4X.js +3 -0
  228. package/dist/queries/affected.js +1 -1
  229. package/dist/queries/architecture.d.ts +15 -4
  230. package/dist/queries/architecture.js +1 -1
  231. package/dist/queries/bottlenecks.js +1 -1
  232. package/dist/queries/by-kind.js +1 -1
  233. package/dist/queries/call-graph.d.ts +3 -1
  234. package/dist/queries/call-graph.js +1 -1
  235. package/dist/queries/change-surface.d.ts +1 -0
  236. package/dist/queries/change-surface.js +1 -1
  237. package/dist/queries/cleanup-plan.d.ts +3 -3
  238. package/dist/queries/cleanup-plan.js +1 -1
  239. package/dist/queries/co-change.d.ts +20 -2
  240. package/dist/queries/co-change.js +1 -1
  241. package/dist/queries/code.d.ts +1 -1
  242. package/dist/queries/code.js +1 -1
  243. package/dist/queries/complexity.d.ts +6 -3
  244. package/dist/queries/complexity.js +1 -1
  245. package/dist/queries/context.d.ts +1 -7
  246. package/dist/queries/context.js +1 -1
  247. package/dist/queries/coupling.js +1 -1
  248. package/dist/queries/cycles.js +1 -1
  249. package/dist/queries/dead.d.ts +2 -0
  250. package/dist/queries/dead.js +1 -1
  251. package/dist/queries/decorative-checkers.js +1 -1
  252. package/dist/queries/dependence-slice.d.ts +46 -22
  253. package/dist/queries/dependence-slice.js +1 -1
  254. package/dist/queries/dependency-depth.d.ts +1 -7
  255. package/dist/queries/dependency-depth.js +1 -1
  256. package/dist/queries/deps.js +1 -1
  257. package/dist/queries/diff-impact.d.ts +3 -1
  258. package/dist/queries/diff-impact.js +1 -1
  259. package/dist/queries/doc-drift.js +1 -1
  260. package/dist/queries/drift.d.ts +1 -1
  261. package/dist/queries/drift.js +1 -1
  262. package/dist/queries/duplicate-bodies.d.ts +29 -2
  263. package/dist/queries/duplicate-bodies.js +1 -1
  264. package/dist/queries/entry-map.d.ts +2 -4
  265. package/dist/queries/entry-map.js +1 -1
  266. package/dist/queries/evidence.d.ts +121 -61
  267. package/dist/queries/evidence.js +1 -1
  268. package/dist/queries/fan.js +1 -1
  269. package/dist/queries/files.js +1 -1
  270. package/dist/queries/health.d.ts +1 -1
  271. package/dist/queries/health.js +1 -1
  272. package/dist/queries/hierarchy.d.ts +2 -2
  273. package/dist/queries/hierarchy.js +1 -1
  274. package/dist/queries/hotspots.d.ts +1 -1
  275. package/dist/queries/hotspots.js +1 -1
  276. package/dist/queries/imports.d.ts +1 -0
  277. package/dist/queries/imports.js +1 -1
  278. package/dist/queries/incomplete-migration.d.ts +3 -3
  279. package/dist/queries/incomplete-migration.js +1 -1
  280. package/dist/queries/index.d.ts +17 -65
  281. package/dist/queries/index.js +1 -1
  282. package/dist/queries/locality-candidates.d.ts +4 -4
  283. package/dist/queries/locality-candidates.js +1 -1
  284. package/dist/queries/members.d.ts +2 -2
  285. package/dist/queries/members.js +1 -1
  286. package/dist/queries/methods.js +1 -1
  287. package/dist/queries/not-implemented.d.ts +2 -6
  288. package/dist/queries/not-implemented.js +1 -1
  289. package/dist/queries/outline.js +1 -1
  290. package/dist/queries/passthrough-candidates.d.ts +9 -1
  291. package/dist/queries/passthrough-candidates.js +1 -1
  292. package/dist/queries/react-component-duplicates.d.ts +19 -3
  293. package/dist/queries/react-component-duplicates.js +1 -1
  294. package/dist/queries/react-hook-candidates.d.ts +22 -3
  295. package/dist/queries/react-hook-candidates.js +1 -1
  296. package/dist/queries/react-large-component-pressure.d.ts +17 -3
  297. package/dist/queries/react-large-component-pressure.js +1 -1
  298. package/dist/queries/recent-duplicates.js +1 -1
  299. package/dist/queries/redundant-reexports.d.ts +4 -14
  300. package/dist/queries/redundant-reexports.js +1 -1
  301. package/dist/queries/refs.d.ts +4 -1
  302. package/dist/queries/refs.js +1 -1
  303. package/dist/queries/review.d.ts +188 -0
  304. package/dist/queries/review.js +2 -0
  305. package/dist/queries/similar-files.d.ts +7 -10
  306. package/dist/queries/similar-files.js +1 -1
  307. package/dist/queries/similar-signatures.js +1 -1
  308. package/dist/queries/similar.d.ts +19 -1
  309. package/dist/queries/similar.js +1 -1
  310. package/dist/queries/slice-cohesion.d.ts +205 -0
  311. package/dist/queries/slice-cohesion.js +2 -0
  312. package/dist/queries/source-inspection.d.ts +6 -202
  313. package/dist/queries/source-inspection.js +1 -1
  314. package/dist/queries/source-search.d.ts +2 -3
  315. package/dist/queries/source-search.js +1 -1
  316. package/dist/queries/stats.d.ts +1 -0
  317. package/dist/queries/stats.js +1 -1
  318. package/dist/queries/surface.js +1 -1
  319. package/dist/queries/symbols.js +1 -1
  320. package/dist/queries/system.d.ts +4 -2
  321. package/dist/queries/system.js +1 -1
  322. package/dist/queries/test-quality.d.ts +1 -1
  323. package/dist/queries/test-quality.js +1 -1
  324. package/dist/queries/twin-drift.d.ts +23 -7
  325. package/dist/queries/twin-drift.js +1 -1
  326. package/dist/queries/unused-imports.js +1 -1
  327. package/dist/queries/unused-params.d.ts +3 -15
  328. package/dist/queries/unused-params.js +1 -1
  329. package/dist/queries/vue-component-duplicates.js +1 -1
  330. package/dist/queries/vue-composable-candidates.js +1 -1
  331. package/dist/queries/vue-large-view-pressure.js +1 -1
  332. package/dist/query-service-fastpath.js +5 -5
  333. package/dist/query-service-server.js +4 -4
  334. package/dist/refs-CCBJG7WK.js +2 -0
  335. package/dist/refs-pagination-DRNLVU4S.js +2 -0
  336. package/dist/reindex-worker.js +79 -29
  337. package/dist/reindex.js +45 -45
  338. package/dist/repository-cache-worker.js +2 -0
  339. package/dist/runtime.d.ts +8 -8
  340. package/dist/runtime.js +3 -4
  341. package/dist/rust-semantic-session-server.js +1 -1
  342. package/dist/rust-semantic-session-worker.js +1 -1
  343. package/dist/rust-semantic-worker.js +1 -1
  344. package/dist/service-queries-2WAJI7R6.js +6 -0
  345. package/dist/source-inspection-91U9zdO3.d.ts +341 -0
  346. package/dist/{source-search-types-Dwz8KeuW.d.ts → source-search-types-DWGYNg8M.d.ts} +15 -2
  347. package/dist/stats-G7DIV6VU.js +2 -0
  348. package/dist/surface-IO55UALI.js +2 -0
  349. package/dist/system-ZBMSHJXU.js +2 -0
  350. package/dist/{queries/trace.d.ts → trace-BMjw3prn.d.ts} +1 -18
  351. package/dist/typescript-indexer.js +2 -0
  352. package/dist/typescript-mailbox-worker.js +1 -1
  353. package/dist/watch-server.js +3 -3
  354. package/docs/AGENT_GUIDE.md +19 -128
  355. package/docs/CLI_JSON_OUTPUT.md +21 -17
  356. package/docs/COMMAND_REFERENCE.md +34 -49
  357. package/docs/CURRENT_COMMANDS.md +123 -0
  358. package/docs/DETECTOR_EVIDENCE_CONTRACTS.md +0 -40
  359. package/docs/DETECTOR_GUIDE.md +55 -12
  360. package/docs/PRODUCT_VISION.md +135 -0
  361. package/docs/PROPERTY_TESTING.md +73 -0
  362. package/docs/REVIEW.md +76 -0
  363. package/docs/SKILLS.md +51 -0
  364. package/docs/WINDOWS_SIDECAR_RELEASE.md +12 -3
  365. package/docs/accuracy-audit-checklist.md +70 -13
  366. package/docs/analyzer-inventory.md +2 -2
  367. package/docs/locality-analyzer-design.md +9 -9
  368. package/package.json +18 -80
  369. package/scripts/evidence-product-contract.mjs +7 -3
  370. package/scripts/record-review-coverage.mjs +118 -0
  371. package/scripts/scip-windows-provenance.mjs +29 -19
  372. package/skills/scip-architecture-review/SKILL.md +57 -0
  373. package/skills/scip-architecture-review/agents/openai.yaml +4 -0
  374. package/skills/scip-architecture-review/references/design-checks.md +17 -0
  375. package/skills/scip-explore/SKILL.md +15 -59
  376. package/skills/scip-explore/agents/openai.yaml +3 -3
  377. package/skills/scip-explore/references/external-evidence.md +2 -2
  378. package/skills/scip-explore/references/information-model.md +26 -29
  379. package/skills/scip-explore/scripts/capture-evidence.mjs +68 -34
  380. package/skills/scip-integrity-audit/SKILL.md +53 -181
  381. package/skills/scip-integrity-audit/agents/openai.yaml +3 -3
  382. package/skills/scip-integrity-audit/references/integrity-probes.md +27 -0
  383. package/skills/scip-plan/SKILL.md +39 -65
  384. package/skills/scip-plan/agents/openai.yaml +2 -2
  385. package/skills/scip-query/SKILL.md +28 -81
  386. package/skills/scip-query/agents/openai.yaml +2 -2
  387. package/skills/scip-query/references/command-guide.md +169 -0
  388. package/skills/scip-setup/SKILL.md +4 -2
  389. package/skills/scip-setup/agents/openai.yaml +3 -3
  390. package/dist/by-kind-XI2CSWEY.js +0 -2
  391. package/dist/call-graph-UONR6JR5.js +0 -2
  392. package/dist/call-graph-evidence-lZa2dwQA.d.ts +0 -11
  393. package/dist/chunk-26CT72HM.js +0 -2
  394. package/dist/chunk-2E7CX53V.js +0 -2
  395. package/dist/chunk-2GRUZAQF.js +0 -43
  396. package/dist/chunk-2LDBDR6J.js +0 -29
  397. package/dist/chunk-2OOY75BW.js +0 -2
  398. package/dist/chunk-2R3V3PSD.js +0 -4
  399. package/dist/chunk-2WC2OEDO.js +0 -4
  400. package/dist/chunk-35NLDRZC.js +0 -2
  401. package/dist/chunk-3AF4TUFK.js +0 -3
  402. package/dist/chunk-3D3QG236.js +0 -2
  403. package/dist/chunk-3FHOF22C.js +0 -21
  404. package/dist/chunk-3JKSW6LJ.js +0 -2
  405. package/dist/chunk-3L2ZBPEX.js +0 -133
  406. package/dist/chunk-3PJABJSU.js +0 -2
  407. package/dist/chunk-3SVF22I5.js +0 -2
  408. package/dist/chunk-3WR4E3A3.js +0 -3
  409. package/dist/chunk-4FTZ4P5G.js +0 -2
  410. package/dist/chunk-4UX2F3JX.js +0 -2
  411. package/dist/chunk-4WNW27SX.js +0 -2
  412. package/dist/chunk-5ENOG4VP.js +0 -61
  413. package/dist/chunk-64BFSI5I.js +0 -2
  414. package/dist/chunk-66DVSJQG.js +0 -455
  415. package/dist/chunk-6HFCYNYE.js +0 -9
  416. package/dist/chunk-6PQNKL3G.js +0 -3
  417. package/dist/chunk-6V5CNXL6.js +0 -2
  418. package/dist/chunk-6VVV4WRR.js +0 -4
  419. package/dist/chunk-7BWFZPPZ.js +0 -2
  420. package/dist/chunk-7CYG22FH.js +0 -2
  421. package/dist/chunk-7F45LJKI.js +0 -2
  422. package/dist/chunk-7IWV2EG3.js +0 -3
  423. package/dist/chunk-7KCZELVM.js +0 -2
  424. package/dist/chunk-AFHTBORT.js +0 -2
  425. package/dist/chunk-AVRYW5OZ.js +0 -2
  426. package/dist/chunk-B3X6KU75.js +0 -2
  427. package/dist/chunk-B5D7QPBE.js +0 -4
  428. package/dist/chunk-BBCIS4DX.js +0 -16
  429. package/dist/chunk-BDUVI7TO.js +0 -3
  430. package/dist/chunk-BE7ZZTMC.js +0 -2
  431. package/dist/chunk-BHVUJOCQ.js +0 -3
  432. package/dist/chunk-BJT7LSPK.js +0 -3
  433. package/dist/chunk-BKVWUP7Y.js +0 -2
  434. package/dist/chunk-BQGB4HBD.js +0 -2
  435. package/dist/chunk-BRV7PIFF.js +0 -2
  436. package/dist/chunk-CEEZJXEF.js +0 -2
  437. package/dist/chunk-CIYLO6SI.js +0 -7
  438. package/dist/chunk-CJZXN4NU.js +0 -2
  439. package/dist/chunk-CNO7TOKL.js +0 -2
  440. package/dist/chunk-COF23M5F.js +0 -2
  441. package/dist/chunk-CWFP7GM5.js +0 -2
  442. package/dist/chunk-D2DHWI3D.js +0 -2
  443. package/dist/chunk-D4N5SQ2M.js +0 -4
  444. package/dist/chunk-DBRSYFXR.js +0 -2
  445. package/dist/chunk-DHUIOLDT.js +0 -2
  446. package/dist/chunk-DIRJWYBM.js +0 -6
  447. package/dist/chunk-DIUFNHRJ.js +0 -35
  448. package/dist/chunk-DRENNWRG.js +0 -2
  449. package/dist/chunk-DTZCKZEU.js +0 -4
  450. package/dist/chunk-DULC3QFP.js +0 -5
  451. package/dist/chunk-DYGHBZ2N.js +0 -16
  452. package/dist/chunk-E5R6AQ73.js +0 -40
  453. package/dist/chunk-E73UNJTF.js +0 -38
  454. package/dist/chunk-EKV5HX33.js +0 -2
  455. package/dist/chunk-EQHFIL6T.js +0 -3
  456. package/dist/chunk-ESIQ66Z7.js +0 -2
  457. package/dist/chunk-EVFUMY4R.js +0 -3
  458. package/dist/chunk-F7DY272B.js +0 -2
  459. package/dist/chunk-FBN2FGXG.js +0 -2
  460. package/dist/chunk-FDLOBR6P.js +0 -4
  461. package/dist/chunk-FESCRNVV.js +0 -5
  462. package/dist/chunk-FFRKR4EQ.js +0 -2
  463. package/dist/chunk-FGA2U4OR.js +0 -8
  464. package/dist/chunk-FIQRSHVM.js +0 -2
  465. package/dist/chunk-FPYLNQPT.js +0 -2
  466. package/dist/chunk-FRUSVINH.js +0 -2
  467. package/dist/chunk-GSP44ENC.js +0 -2
  468. package/dist/chunk-GUFSG5TX.js +0 -2
  469. package/dist/chunk-GYIZ4NXB.js +0 -2
  470. package/dist/chunk-GZIUDL6G.js +0 -2
  471. package/dist/chunk-H5EXS3HM.js +0 -2
  472. package/dist/chunk-HCXEQRFF.js +0 -18
  473. package/dist/chunk-HEHOQQKH.js +0 -2
  474. package/dist/chunk-HKGFPJ4T.js +0 -4
  475. package/dist/chunk-HLZTEXRA.js +0 -2
  476. package/dist/chunk-HOENASQM.js +0 -3
  477. package/dist/chunk-HVF5VBG6.js +0 -2
  478. package/dist/chunk-I55I7XXP.js +0 -2
  479. package/dist/chunk-IDFEUFKS.js +0 -2
  480. package/dist/chunk-IHGQTTVW.js +0 -2
  481. package/dist/chunk-IICPE7B2.js +0 -20
  482. package/dist/chunk-IL676XCC.js +0 -18
  483. package/dist/chunk-IW5XQG5G.js +0 -2
  484. package/dist/chunk-IZDPJ2QI.js +0 -2
  485. package/dist/chunk-J66VOFW6.js +0 -5
  486. package/dist/chunk-JFMEXGFE.js +0 -2
  487. package/dist/chunk-JGKUET5J.js +0 -3
  488. package/dist/chunk-JS4PGXMV.js +0 -3
  489. package/dist/chunk-JWTGMPIT.js +0 -80
  490. package/dist/chunk-JYR66JN5.js +0 -5
  491. package/dist/chunk-KFOYCQAJ.js +0 -9
  492. package/dist/chunk-KLFEXGQA.js +0 -2
  493. package/dist/chunk-KMVGRIO2.js +0 -2
  494. package/dist/chunk-KYSDI3GE.js +0 -5
  495. package/dist/chunk-L6PJPETJ.js +0 -29
  496. package/dist/chunk-LDVT66YM.js +0 -2
  497. package/dist/chunk-LEECKFCJ.js +0 -2
  498. package/dist/chunk-LMZ5PRUV.js +0 -2
  499. package/dist/chunk-LQRQN2XA.js +0 -2
  500. package/dist/chunk-LXABEJX3.js +0 -2
  501. package/dist/chunk-MNV5FSBW.js +0 -3
  502. package/dist/chunk-MPQ4OTBM.js +0 -2
  503. package/dist/chunk-MTDBHTSF.js +0 -2
  504. package/dist/chunk-MV3CDXPI.js +0 -38
  505. package/dist/chunk-MWN53KRN.js +0 -60
  506. package/dist/chunk-MXNGIEPU.js +0 -3
  507. package/dist/chunk-N2ZSIIGR.js +0 -117
  508. package/dist/chunk-N5B2NILC.js +0 -5
  509. package/dist/chunk-NJITK2GP.js +0 -2
  510. package/dist/chunk-NOGJXYFO.js +0 -2
  511. package/dist/chunk-NOYBFVJA.js +0 -554
  512. package/dist/chunk-NWQXSFFU.js +0 -3
  513. package/dist/chunk-ODDUPDP7.js +0 -13
  514. package/dist/chunk-OLIWTZI3.js +0 -3
  515. package/dist/chunk-OLNV6I6U.js +0 -2
  516. package/dist/chunk-OR2E3AGZ.js +0 -2
  517. package/dist/chunk-OSR2GEHQ.js +0 -2
  518. package/dist/chunk-OSSESPDX.js +0 -3
  519. package/dist/chunk-OWOOWNJ5.js +0 -7
  520. package/dist/chunk-P42EIXTA.js +0 -2
  521. package/dist/chunk-PJFGPYTU.js +0 -2
  522. package/dist/chunk-PP7KNN7L.js +0 -2
  523. package/dist/chunk-PU7T5QYQ.js +0 -2
  524. package/dist/chunk-PWWAJSKV.js +0 -74
  525. package/dist/chunk-PZL5T7SU.js +0 -73
  526. package/dist/chunk-QBE3YX64.js +0 -23
  527. package/dist/chunk-QGVTFRY2.js +0 -7
  528. package/dist/chunk-QOJONDS7.js +0 -2
  529. package/dist/chunk-QU5XRYB5.js +0 -4
  530. package/dist/chunk-QUU5OBVK.js +0 -11
  531. package/dist/chunk-RBLQNW26.js +0 -20
  532. package/dist/chunk-RTQ7NEKG.js +0 -81
  533. package/dist/chunk-SQXRS7BG.js +0 -4
  534. package/dist/chunk-SSK6LDPC.js +0 -2
  535. package/dist/chunk-SZHGTCPP.js +0 -7
  536. package/dist/chunk-T4N4P2K5.js +0 -16
  537. package/dist/chunk-TA3QKLLU.js +0 -2
  538. package/dist/chunk-TEBQMNVI.js +0 -43
  539. package/dist/chunk-TPFHAQ2G.js +0 -2
  540. package/dist/chunk-TQPCBMWT.js +0 -5
  541. package/dist/chunk-TQZV7KV4.js +0 -2
  542. package/dist/chunk-TRNAEQ6P.js +0 -3
  543. package/dist/chunk-TY7CRN3Z.js +0 -2
  544. package/dist/chunk-UHFYCMZO.js +0 -35
  545. package/dist/chunk-UICY4GTQ.js +0 -7
  546. package/dist/chunk-UVGEWT4Y.js +0 -26
  547. package/dist/chunk-UXW33INU.js +0 -29
  548. package/dist/chunk-VMPRET3I.js +0 -5
  549. package/dist/chunk-VNLGKHS6.js +0 -6
  550. package/dist/chunk-VQILFTEH.js +0 -2
  551. package/dist/chunk-VUPHCS7Y.js +0 -57
  552. package/dist/chunk-VVZSBTSU.js +0 -23
  553. package/dist/chunk-VZRNID6A.js +0 -2
  554. package/dist/chunk-W5OXRYGE.js +0 -7
  555. package/dist/chunk-W6STWDQI.js +0 -57
  556. package/dist/chunk-W7CXK74K.js +0 -2
  557. package/dist/chunk-WB3WYIRE.js +0 -4
  558. package/dist/chunk-WDNVY4E7.js +0 -20
  559. package/dist/chunk-WK46TNUM.js +0 -3
  560. package/dist/chunk-WNTFFKAX.js +0 -12
  561. package/dist/chunk-WOIKCX6A.js +0 -2
  562. package/dist/chunk-WUN6KBHV.js +0 -2
  563. package/dist/chunk-WYCTJDVR.js +0 -2
  564. package/dist/chunk-WYPL7GF7.js +0 -2
  565. package/dist/chunk-XDAUYDFT.js +0 -2
  566. package/dist/chunk-XDQMU3BT.js +0 -2
  567. package/dist/chunk-XFA4SSO3.js +0 -3
  568. package/dist/chunk-XGZEP6GR.js +0 -8
  569. package/dist/chunk-XPDPNWTQ.js +0 -368
  570. package/dist/chunk-XRYABF57.js +0 -8
  571. package/dist/chunk-YBGKCQIS.js +0 -2
  572. package/dist/chunk-YEN6CYC7.js +0 -16
  573. package/dist/chunk-YF5IB2LF.js +0 -2
  574. package/dist/chunk-YI2AWIHC.js +0 -3
  575. package/dist/chunk-YPWBKGFU.js +0 -2
  576. package/dist/chunk-YPWHBBIS.js +0 -2
  577. package/dist/chunk-YSH6U3L4.js +0 -3
  578. package/dist/chunk-YU5DZUZI.js +0 -10
  579. package/dist/chunk-YWO5DDRC.js +0 -16
  580. package/dist/chunk-Z4CDXYNQ.js +0 -2
  581. package/dist/chunk-ZF5KHH7C.js +0 -2
  582. package/dist/chunk-ZOHS7AQV.js +0 -21
  583. package/dist/chunk-ZTI4SBFV.js +0 -3
  584. package/dist/code-MI6F2TTU.js +0 -2
  585. package/dist/code-result-json-FXALY4HE.js +0 -2
  586. package/dist/command-descriptors-P34VABY5.js +0 -343
  587. package/dist/dataflow-4KEMJPC6.js +0 -2
  588. package/dist/dependence-slice-R7FPWD5M.js +0 -2
  589. package/dist/deps-7EMQUYUT.js +0 -2
  590. package/dist/direct-navigation-6YO234F2.js +0 -3
  591. package/dist/entry-map-KOOLR26E.js +0 -2
  592. package/dist/files-OPIPJIGZ.js +0 -2
  593. package/dist/graph-evidence-Bjyky2V4.d.ts +0 -126
  594. package/dist/hierarchy-QPD2CAER.js +0 -2
  595. package/dist/imports-M6HUXRXC.js +0 -2
  596. package/dist/members-I5MEFOCT.js +0 -2
  597. package/dist/methods-5JYGGHXA.js +0 -2
  598. package/dist/next-anchor-candidates-BwMczMvX.d.ts +0 -90
  599. package/dist/output-continuation-command-UPQAAKBP.js +0 -3
  600. package/dist/output-pagination-3OFL2MJV.js +0 -19
  601. package/dist/project-reindex-UKKQ5PLS.js +0 -3
  602. package/dist/queries/anchors.d.ts +0 -123
  603. package/dist/queries/anchors.js +0 -2
  604. package/dist/queries/complexity-hotspots.d.ts +0 -40
  605. package/dist/queries/complexity-hotspots.js +0 -2
  606. package/dist/queries/convergence.d.ts +0 -33
  607. package/dist/queries/convergence.js +0 -2
  608. package/dist/queries/dataflow.d.ts +0 -77
  609. package/dist/queries/dataflow.js +0 -2
  610. package/dist/queries/deep-chains.d.ts +0 -5
  611. package/dist/queries/deep-chains.js +0 -2
  612. package/dist/queries/extract-candidates.d.ts +0 -52
  613. package/dist/queries/extract-candidates.js +0 -2
  614. package/dist/queries/isolated.d.ts +0 -24
  615. package/dist/queries/isolated.js +0 -2
  616. package/dist/queries/plan-context.d.ts +0 -33
  617. package/dist/queries/plan-context.js +0 -2
  618. package/dist/queries/reference-neighborhood.d.ts +0 -4
  619. package/dist/queries/reference-neighborhood.js +0 -2
  620. package/dist/queries/reference-reachability.d.ts +0 -48
  621. package/dist/queries/reference-reachability.js +0 -2
  622. package/dist/queries/self-audit.d.ts +0 -63
  623. package/dist/queries/self-audit.js +0 -2
  624. package/dist/queries/similar-chains.d.ts +0 -48
  625. package/dist/queries/similar-chains.js +0 -2
  626. package/dist/queries/slice.d.ts +0 -4
  627. package/dist/queries/slice.js +0 -2
  628. package/dist/queries/stale-abstractions.d.ts +0 -72
  629. package/dist/queries/stale-abstractions.js +0 -2
  630. package/dist/queries/system-map.d.ts +0 -449
  631. package/dist/queries/system-map.js +0 -2
  632. package/dist/queries/trace.js +0 -2
  633. package/dist/queries/twin-ab.d.ts +0 -66
  634. package/dist/queries/twin-ab.js +0 -2
  635. package/dist/queries/value-flow.d.ts +0 -43
  636. package/dist/queries/value-flow.js +0 -2
  637. package/dist/queries/wrapper-candidates.d.ts +0 -34
  638. package/dist/queries/wrapper-candidates.js +0 -2
  639. package/dist/refs-PSU4JZZW.js +0 -2
  640. package/dist/refs-pagination-JG6CJMRC.js +0 -2
  641. package/dist/slice-HYRATV64.js +0 -2
  642. package/dist/source-snippet-_wrcgmZc.d.ts +0 -15
  643. package/dist/stats-OOJ74B32.js +0 -2
  644. package/dist/surface-VTGDYWF5.js +0 -2
  645. package/dist/symbol-resolution-WD5EU5JE.js +0 -2
  646. package/dist/system-LRQNFOR2.js +0 -2
  647. package/dist/trace-F4B6OLL4.js +0 -2
  648. package/dist/value-flow-VRPZY72V.js +0 -2
  649. package/skills/concrete-plan/SKILL.md +0 -8
  650. package/skills/concrete-plan/agents/openai.yaml +0 -4
@@ -0,0 +1,2 @@
1
+ import{a,b}from"./chunk-2YXE77TJ.js";import"./chunk-OGFV2BUX.js";import"./chunk-LOVIZBJ4.js";import"./chunk-QXEUDXBT.js";import"./chunk-J5FJMODQ.js";import"./chunk-WOFQ5DTB.js";import"./chunk-PH52RA7D.js";import"./chunk-7Y5T6XDP.js";import"./chunk-X6RMKHJQ.js";import"./chunk-JEVRKFRL.js";import"./chunk-QOIXNWQR.js";import"./chunk-GZKFETP5.js";import"./chunk-HRRFKWPZ.js";import"./chunk-YULZRALL.js";import"./chunk-HGFDYOVB.js";import"./chunk-TKD34PHN.js";import"./chunk-2HLAFUCY.js";import"./chunk-U5RIG3JP.js";import"./chunk-62BDNPMI.js";export{a as deps,b as rdeps};
2
+ //# sourceMappingURL=deps-EOWFC6FD.js.map
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import{A as a}from"./chunk-EJVTR244.js";import"./chunk-EYK3ZAO2.js";import"./chunk-JYWEX7RR.js";import"./chunk-OZCJXZK6.js";export{a as directNavigationQueryCommandDescriptors};
3
+ //# sourceMappingURL=direct-navigation-Y5B6OSIQ.js.map
@@ -8,6 +8,8 @@ interface ExplorationSourceLocation {
8
8
  file: string;
9
9
  line: number;
10
10
  endLine?: number;
11
+ startColumn?: number;
12
+ endColumn?: number;
11
13
  }
12
14
  type ExplorationEvidenceStrength = 'exact' | 'derived' | 'candidate' | 'mixed' | 'unknown';
13
15
  type ExplorationDisposition = 'emitted' | 'folded' | 'excluded' | 'unsupported';
@@ -253,4 +255,4 @@ interface ExplorationRouteCatalog {
253
255
  coverage: ExplorationRouteCatalogCoverage;
254
256
  }
255
257
 
256
- export type { ExplorationSourceLocation as E, ProgramEdgeSemantic as P, ExplorationEvidenceStrength as a, ExplorationTopologyNode as b, ExplorationEvidenceSource as c, ExplorationTopology as d, ExplorationAnchorStatus as e, ExplorationCompletion as f, ExplorationCompletionStatus as g, ExplorationDisposition as h, ExplorationDispositionCounts as i, ExplorationFrontierGroup as j, ExplorationTopologyAnchor as k, ExplorationTopologyCoverage as l, ExplorationTopologyEdge as m, ExplorationTopologyInput as n, ExplorationTopologyPath as o };
258
+ export type { ExplorationSourceLocation as E, ProgramEdgeSemantic as P, ExplorationEvidenceStrength as a, ExplorationAnchorStatus as b, ExplorationCompletion as c, ExplorationCompletionStatus as d, ExplorationDisposition as e, ExplorationDispositionCounts as f, ExplorationEvidenceSource as g, ExplorationFrontierGroup as h, ExplorationTopology as i, ExplorationTopologyAnchor as j, ExplorationTopologyCoverage as k, ExplorationTopologyEdge as l, ExplorationTopologyInput as m, ExplorationTopologyNode as n, ExplorationTopologyPath as o };
@@ -0,0 +1,2 @@
1
+ import{a,b}from"./chunk-XKIDJCIK.js";import"./chunk-QIWXRW72.js";import"./chunk-YUKYB54I.js";import"./chunk-PH52RA7D.js";import"./chunk-JEVRKFRL.js";import"./chunk-GZKFETP5.js";import"./chunk-HRRFKWPZ.js";import"./chunk-TKD34PHN.js";import"./chunk-2HLAFUCY.js";import"./chunk-U5RIG3JP.js";import"./chunk-62BDNPMI.js";export{a as files,b as pathMatchesGlob};
2
+ //# sourceMappingURL=files-K4AI3JUM.js.map
@@ -0,0 +1,10 @@
1
+ type FrontendPairContext = 'product' | 'framework-route-pair' | 'intercepting-route-pair' | 'ui-kit-pair';
2
+ interface FrontendPolicyExclusion {
3
+ /** Stable identifier for the policy that excluded the rows. */
4
+ reason: string;
5
+ /** Reviewer-facing explanation of what was excluded and why. */
6
+ detail: string;
7
+ count: number;
8
+ }
9
+
10
+ export type { FrontendPairContext as F, FrontendPolicyExclusion as a };
@@ -47,10 +47,19 @@ interface CountLocSummary {
47
47
  loc: number;
48
48
  /** Files contributing findings — feeds fix-density validation. */
49
49
  files?: string[];
50
+ /**
51
+ * Rows a detector policy removed from the count (test scaffolding, vendored
52
+ * kit primitives, framework-mandated twins). Disclosed so an excluded row is
53
+ * never mistaken for an absent one.
54
+ */
55
+ exclusions?: PolicyExclusionSummary[];
50
56
  }
51
- interface StaleSummary extends CountLocSummary {
52
- unused: number;
53
- singleUse: number;
57
+ interface PolicyExclusionSummary {
58
+ /** Stable identifier for the excluding policy. */
59
+ reason: string;
60
+ /** Reviewer-facing explanation of what was excluded and why. */
61
+ detail: string;
62
+ count: number;
54
63
  }
55
64
  interface DriftSummary {
56
65
  count: number;
@@ -61,19 +70,13 @@ interface DriftSummary {
61
70
  direct: number;
62
71
  signal: number;
63
72
  }
64
- interface ComplexitySummary {
65
- top: Array<{
66
- symbol: string;
67
- score: number;
68
- file?: string;
69
- }>;
70
- extremeCount: number;
71
- }
72
73
  interface GitEvidenceSummary {
73
74
  amplification: ChangeAmplificationSummary | null;
74
75
  hiddenCoupling: {
75
76
  pairCount: number;
76
77
  scoreCount: number;
78
+ /** Co-change pairs policy did not count as hidden coupling (disclosed). */
79
+ exclusions?: PolicyExclusionSummary[];
77
80
  top: Array<{
78
81
  fileA: string;
79
82
  fileB: string;
@@ -120,25 +123,15 @@ interface HealthAction {
120
123
  /** Descriptor id in detectorEvidence; absent for analyses without a typed detector contract. */
121
124
  evidenceContractId?: string;
122
125
  }
123
- /** One deduction line the score is the sum of these, so it is auditable. */
124
- interface ScoreDeduction {
125
- axis: string;
126
- points: number;
126
+ /** One detector policy that removed rows from a finding count, with the count it removed. */
127
+ interface HealthPolicyExclusion {
128
+ detector: string;
129
+ reason: string;
127
130
  detail: string;
128
- /** Risk deductions use graph/change evidence; hygiene deductions use candidate signals. */
129
- kind: 'risk' | 'hygiene';
130
- }
131
- interface HealthPressure {
132
- axis: string;
133
- category: string;
134
- kind: ScoreDeduction['kind'];
135
131
  count: number;
136
- threshold: number;
137
- ratio: number;
138
- extraPenalty: number;
139
132
  }
140
133
  interface HealthAxes {
141
- /** LOC in indexed zero-reference or disconnected candidates (legacy field name: deletable). */
134
+ /** LOC in indexed no-observed-reference candidates (legacy field name: deletable). */
142
135
  deletable: {
143
136
  loc: number;
144
137
  symbols: number;
@@ -146,9 +139,9 @@ interface HealthAxes {
146
139
  cycles: {
147
140
  count: number;
148
141
  };
149
- /** Files touched per commit the measured cost of one conceptual change. */
142
+ /** Files touched per observed commit; a commit may contain several unrelated changes. */
150
143
  changeAmplification: ChangeAmplificationSummary | null;
151
- /** File pairs that co-change without a structural link concepts the visible graph can't see. */
144
+ /** File pairs changed in the same commits without an observed structural link; this is historical association. */
152
145
  hiddenCoupling: {
153
146
  pairCount: number;
154
147
  scoreCount: number;
@@ -160,14 +153,6 @@ interface HealthAxes {
160
153
  scoreWeight?: number;
161
154
  }>;
162
155
  } | null;
163
- /** Complexity hotspots weighted by churn — complex code nobody touches costs nothing. */
164
- churnWeightedComplexity: Array<{
165
- symbol: string;
166
- file?: string;
167
- score: number;
168
- changes: number;
169
- weighted: number;
170
- }> | null;
171
156
  /** What fraction of findings rest on graph facts vs heuristics, and how many the user has rejected. */
172
157
  evidenceQuality: {
173
158
  graphFindings: number;
@@ -193,24 +178,35 @@ interface HealthValidation {
193
178
  commitsScanned: number;
194
179
  };
195
180
  }
181
+ /** What a report was computed from, so two runs can be compared as the same or different input. */
182
+ interface HealthProvenance {
183
+ computedAt: string;
184
+ generation: {
185
+ /** Immutable index generation identity the report read. */
186
+ identity: string;
187
+ /** When that generation was published, when the generation store records it. */
188
+ publishedAt: string | null;
189
+ /** How that generation was produced, when the generation store records it. */
190
+ mode: 'incremental' | 'full' | null;
191
+ };
192
+ /** Null when the project is not a git repository. */
193
+ git: {
194
+ head: string;
195
+ branch: string | null;
196
+ dirtyPaths: number;
197
+ } | null;
198
+ }
196
199
  interface HealthReport {
197
- /** Headline = min(riskScore, hygieneScore); kept for compatibility. */
198
- score: number;
199
- /** Risk-oriented graph facts and change-graph signals; the composite remains experimental. */
200
- riskScore: number;
201
- /** Tidiness signals (candidate detectors) — real but not fix-predictive. */
202
- hygieneScore: number;
203
- scoreBreakdown: ScoreDeduction[];
204
200
  overview: {
205
201
  documents: number;
206
202
  symbols: number;
207
203
  indexSizeBytes: number;
208
204
  };
205
+ /** Absent only on reports written by older builds. */
206
+ provenance?: HealthProvenance;
209
207
  findings: {
210
208
  deadSymbols: number;
211
209
  deadLoc: number;
212
- isolatedSymbols: number;
213
- isolatedLoc: number;
214
210
  cycles: number;
215
211
  similarPairs: number;
216
212
  duplicateBodyGroups: number;
@@ -225,13 +221,8 @@ interface HealthReport {
225
221
  vueComposableCandidatePairs: number;
226
222
  vueComposableCandidateScoreCount: number;
227
223
  vueLargeViewPressureFiles: number;
228
- extractionCandidates: number;
229
- wrappers: number;
230
- wrapperScoreCount: number;
231
224
  passthroughs: number;
232
- staleTypes: number;
233
225
  driftedFiles: number;
234
- complexityHotspotCount: number;
235
226
  hiddenCouplingPairs: number | null;
236
227
  hiddenCouplingScoreCount: number | null;
237
228
  coverageContractViolations: number;
@@ -243,18 +234,19 @@ interface HealthReport {
243
234
  byCategory: Record<string, number>;
244
235
  } | null;
245
236
  actions: HealthAction[];
246
- pressure: HealthPressure[];
247
- topComplexity: Array<{
248
- symbol: string;
249
- score: number;
250
- file?: string;
251
- }>;
237
+ /**
238
+ * Rows detector policies removed from the counts above (test scaffolding,
239
+ * vendored kit primitives, framework-mandated twins). Each row is still
240
+ * listed by its detector command; it is disclosed here so an excluded
241
+ * finding is never mistaken for an absent one.
242
+ */
243
+ policyExclusions: HealthPolicyExclusion[];
252
244
  /** Calibrated claim limits and recovery paths for detector evidence. */
253
245
  detectorEvidence: DetectorEvidenceAssessment[];
254
246
  warnings?: string[];
255
247
  }
256
248
 
257
- declare const HEALTH_PHASES: readonly ["overview", "dead", "isolated", "cycles", "similar", "duplicate-bodies", "twin-drift", "react-component-duplicates", "react-hook-candidates", "react-large-component-pressure", "vue-component-duplicates", "vue-composable-candidates", "vue-large-view-pressure", "extract-candidates", "wrapper-candidates", "passthrough-candidates", "stale-abstractions", "drift", "complexity-hotspots", "git-evidence", "suppressions", "coverage-contracts"];
249
+ declare const HEALTH_PHASES: readonly ["overview", "dead", "cycles", "similar", "duplicate-bodies", "twin-drift", "react-component-duplicates", "react-hook-candidates", "react-large-component-pressure", "vue-component-duplicates", "vue-composable-candidates", "vue-large-view-pressure", "passthrough-candidates", "drift", "git-evidence", "suppressions", "coverage-contracts"];
258
250
  type HealthPhaseName = (typeof HEALTH_PHASES)[number];
259
251
  type HealthPhaseResult = {
260
252
  phase: 'overview';
@@ -263,12 +255,10 @@ type HealthPhaseResult = {
263
255
  } | {
264
256
  phase: 'dead';
265
257
  dead: CountLocSummary;
266
- } | {
267
- phase: 'isolated';
268
- isolated: CountLocSummary;
269
258
  } | {
270
259
  phase: 'cycles';
271
260
  realCycleCount: number;
261
+ cycleExclusions: PolicyExclusionSummary[];
272
262
  } | {
273
263
  phase: 'similar';
274
264
  similarCount: number;
@@ -296,24 +286,12 @@ type HealthPhaseResult = {
296
286
  } | {
297
287
  phase: 'vue-large-view-pressure';
298
288
  vueLargeViewPressure: CountLocSummary;
299
- } | {
300
- phase: 'extract-candidates';
301
- extractCount: number;
302
- } | {
303
- phase: 'wrapper-candidates';
304
- wrappers: CountLocSummary;
305
289
  } | {
306
290
  phase: 'passthrough-candidates';
307
291
  passthroughs: CountLocSummary;
308
- } | {
309
- phase: 'stale-abstractions';
310
- stale: StaleSummary;
311
292
  } | {
312
293
  phase: 'drift';
313
294
  drift: DriftSummary;
314
- } | {
315
- phase: 'complexity-hotspots';
316
- complexity: ComplexitySummary;
317
295
  } | {
318
296
  phase: 'git-evidence';
319
297
  gitEvidence: GitEvidenceSummary | null;
@@ -338,6 +316,12 @@ declare function health(db: ScipDatabase, opts?: {
338
316
  scope?: string;
339
317
  full?: boolean;
340
318
  }): HealthReport;
319
+ /**
320
+ * The generation and git state this run read. Two reports are comparable
321
+ * only when these match; the "files | symbols" header alone cannot tell a
322
+ * detector change from a repository change.
323
+ */
324
+ declare function healthProvenance(db: ScipDatabase): HealthProvenance;
341
325
  declare function healthPhase(db: ScipDatabase, phase: HealthPhaseName, opts?: {
342
326
  scope?: string;
343
327
  full?: boolean;
@@ -346,6 +330,6 @@ declare function healthPhases(db: ScipDatabase, phases: readonly HealthPhaseName
346
330
  scope?: string;
347
331
  full?: boolean;
348
332
  }): HealthPhaseResult[];
349
- declare function healthReportFromPhases(phaseResults: HealthPhaseResult[]): HealthReport;
333
+ declare function healthReportFromPhases(phaseResults: HealthPhaseResult[], db?: ScipDatabase): HealthReport;
350
334
 
351
- export { HEALTH_PHASES as H, type HealthAction as a, type HealthReport as b, healthPhase as c, healthReportFromPhases as d, type HealthPhaseName as e, healthPhases as f, health as h };
335
+ export { HEALTH_PHASES as H, type HealthAction as a, type HealthProvenance as b, type HealthReport as c, healthPhase as d, healthProvenance as e, healthReportFromPhases as f, type HealthPhaseName as g, health as h, healthPhases as i };
@@ -0,0 +1,2 @@
1
+ import{a,b}from"./chunk-DDMC3FON.js";import"./chunk-QXEUDXBT.js";import"./chunk-J5FJMODQ.js";import"./chunk-WOFQ5DTB.js";import"./chunk-PH52RA7D.js";import"./chunk-7Y5T6XDP.js";import"./chunk-X6RMKHJQ.js";import"./chunk-JEVRKFRL.js";import"./chunk-QOIXNWQR.js";import"./chunk-GZKFETP5.js";import"./chunk-HRRFKWPZ.js";import"./chunk-YULZRALL.js";import"./chunk-HGFDYOVB.js";import"./chunk-TKD34PHN.js";import"./chunk-2HLAFUCY.js";import"./chunk-U5RIG3JP.js";import"./chunk-62BDNPMI.js";export{a as hierarchy,b as ownershipChain};
2
+ //# sourceMappingURL=hierarchy-6W5NDIFI.js.map
@@ -0,0 +1,2 @@
1
+ import{a,b,c}from"./chunk-IZJ6YUKP.js";import"./chunk-S6CZA3MV.js";import"./chunk-OGFV2BUX.js";import"./chunk-65245JCM.js";import"./chunk-NJJMVD65.js";import"./chunk-WRQXLNYE.js";import"./chunk-LOVIZBJ4.js";import"./chunk-QXEUDXBT.js";import"./chunk-TRBI4UKT.js";import"./chunk-WKPV2TDZ.js";import"./chunk-F4FNK44D.js";import"./chunk-ZLADLUE6.js";import"./chunk-6FFVZZL4.js";import"./chunk-4XQ4O6IM.js";import"./chunk-BZB4QPIP.js";import"./chunk-CN5EH7O3.js";import"./chunk-T3I6NHBH.js";import"./chunk-J5FJMODQ.js";import"./chunk-WOFQ5DTB.js";import"./chunk-PH52RA7D.js";import"./chunk-7Y5T6XDP.js";import"./chunk-X6RMKHJQ.js";import"./chunk-JEVRKFRL.js";import"./chunk-QOIXNWQR.js";import"./chunk-GZKFETP5.js";import"./chunk-3JIQS44J.js";import"./chunk-O4UZSPPI.js";import"./chunk-B3PYOSCX.js";import"./chunk-HRRFKWPZ.js";import"./chunk-YULZRALL.js";import"./chunk-HGFDYOVB.js";import"./chunk-QZ7KQZRN.js";import"./chunk-TKD34PHN.js";import"./chunk-2HLAFUCY.js";import"./chunk-U5RIG3JP.js";import"./chunk-62BDNPMI.js";export{b as importedBy,a as imports,c as unusedImports};
2
+ //# sourceMappingURL=imports-WH365QY4.js.map
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { S as ScipDatabase } from './db-BwIVAYNB.js';
2
+ import { C as CalleeRow, a as CalleeEvidenceSource } from './call-graph-evidence-CUtj8V2I.js';
2
3
  import { I as IndexedDefinition, S as SymbolMatch, a as ScipSymbol, b as ScipLocalSymbol } from './symbol-types-BIQwfoAx.js';
3
4
  import { c as classifyFile } from './file-kind-BKCVMNUf.js';
4
- import { C as CalleeRow } from './call-graph-evidence-lZa2dwQA.js';
5
5
  export { S as ScipQueryConfig } from './config-types-B9B60MiR.js';
6
6
  import 'better-sqlite3';
7
7
 
@@ -109,6 +109,18 @@ declare class ProjectIndex {
109
109
  additive?: boolean;
110
110
  semantic?: boolean;
111
111
  }): Map<number, CalleeRow[]>;
112
+ /** The same invocation filter and evidence calibration used by the public call graph. */
113
+ callableCallees(definition: SymbolMatch, opts?: {
114
+ semantic?: boolean;
115
+ }): {
116
+ evidenceStrength: "exact" | "candidate";
117
+ symbol: string;
118
+ file: string;
119
+ chunkId: number;
120
+ source: CalleeEvidenceSource;
121
+ callsiteLine?: number;
122
+ kind?: "jsx-render";
123
+ }[];
112
124
  crossFileCallerMap(definitions?: ReadonlyArray<SymbolMatch>, opts?: {
113
125
  semantic?: boolean;
114
126
  }): Map<number, Set<string>>;
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{a as e}from"./chunk-WDNVY4E7.js";import{x as m}from"./chunk-5ENOG4VP.js";import{c as p}from"./chunk-CJZXN4NU.js";import"./chunk-BGBBVSH4.js";import"./chunk-W7CXK74K.js";import"./chunk-NWQXSFFU.js";import"./chunk-P5XHIJHI.js";import"./chunk-E73UNJTF.js";import"./chunk-WB3WYIRE.js";import"./chunk-DYGHBZ2N.js";import"./chunk-KK7GPALL.js";import"./chunk-OSSESPDX.js";import"./chunk-TRNAEQ6P.js";import"./chunk-XRYABF57.js";import"./chunk-NJITK2GP.js";import"./chunk-YUKYB54I.js";import"./chunk-DHEQMPLW.js";import"./chunk-TEBQMNVI.js";import"./chunk-MTDBHTSF.js";import{b as o,d as r,e as t}from"./chunk-N2ZSIIGR.js";import"./chunk-ODDUPDP7.js";import"./chunk-ZOHS7AQV.js";import"./chunk-FESCRNVV.js";import"./chunk-JWTGMPIT.js";import"./chunk-N5B2NILC.js";export{p as ProjectIndex,e as ScipDatabase,m as createGitignoreFilter,t as leafName,o as parseSymbol,r as shortenSymbol};
1
+ import{a as e}from"./chunk-NLOQOBXI.js";import{a as m}from"./chunk-J2TMAIN5.js";import"./chunk-PKN354TH.js";import{b as p}from"./chunk-6LSEIIF7.js";import"./chunk-BGBBVSH4.js";import"./chunk-36SGVCGX.js";import"./chunk-AGWFSTXC.js";import"./chunk-P5XHIJHI.js";import"./chunk-73AAKPUC.js";import"./chunk-KZBJWZJB.js";import"./chunk-4WTUBQ36.js";import"./chunk-NZAXKGRL.js";import"./chunk-KK7GPALL.js";import"./chunk-YNQCGEQE.js";import"./chunk-FMRN2TRL.js";import"./chunk-DA7RPPDF.js";import"./chunk-4WCUBZU3.js";import"./chunk-E3FDPXZK.js";import"./chunk-DHEQMPLW.js";import"./chunk-KHWRRPV4.js";import"./chunk-72AD6ZRR.js";import"./chunk-YUKYB54I.js";import"./chunk-GCKCF5FL.js";import"./chunk-DVFP6PZI.js";import{b as o,d as r,e as t}from"./chunk-5D2LVK7O.js";import"./chunk-7WTPQ4NX.js";import"./chunk-FVULPZDF.js";import"./chunk-D3FDISIC.js";import"./chunk-A2IIGFMJ.js";import"./chunk-PH52RA7D.js";import"./chunk-GVWX5T43.js";import"./chunk-T6DK3ZP7.js";import"./chunk-5TNQJUR2.js";export{p as ProjectIndex,e as ScipDatabase,m as createGitignoreFilter,t as leafName,o as parseSymbol,r as shortenSymbol};
2
2
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,2 @@
1
+ import{a}from"./chunk-4D6RO7G4.js";import"./chunk-QXEUDXBT.js";import"./chunk-J5FJMODQ.js";import"./chunk-WOFQ5DTB.js";import"./chunk-PH52RA7D.js";import"./chunk-7Y5T6XDP.js";import"./chunk-X6RMKHJQ.js";import"./chunk-JEVRKFRL.js";import"./chunk-QOIXNWQR.js";import"./chunk-GZKFETP5.js";import"./chunk-HRRFKWPZ.js";import"./chunk-YULZRALL.js";import"./chunk-HGFDYOVB.js";import"./chunk-TKD34PHN.js";import"./chunk-2HLAFUCY.js";import"./chunk-U5RIG3JP.js";import"./chunk-62BDNPMI.js";export{a as members};
2
+ //# sourceMappingURL=members-K3PHMF5S.js.map
@@ -0,0 +1,2 @@
1
+ import{a,b}from"./chunk-P6ODM7BY.js";import"./chunk-TZCVNCAN.js";import"./chunk-BGBBVSH4.js";import"./chunk-7VPEEAAG.js";import"./chunk-S6CZA3MV.js";import"./chunk-65245JCM.js";import"./chunk-NJJMVD65.js";import"./chunk-H73WY2RM.js";import"./chunk-ZHMRSZFD.js";import"./chunk-ZGTYGDMF.js";import"./chunk-WRQXLNYE.js";import"./chunk-DVFP6PZI.js";import"./chunk-QIWXRW72.js";import"./chunk-LOVIZBJ4.js";import"./chunk-QXEUDXBT.js";import"./chunk-O2C4UILI.js";import"./chunk-WXU3DGPU.js";import"./chunk-YUKYB54I.js";import"./chunk-TRBI4UKT.js";import"./chunk-WKPV2TDZ.js";import"./chunk-F4FNK44D.js";import"./chunk-ZLADLUE6.js";import"./chunk-6FFVZZL4.js";import"./chunk-DHEQMPLW.js";import"./chunk-4XQ4O6IM.js";import"./chunk-BZB4QPIP.js";import"./chunk-CN5EH7O3.js";import"./chunk-T3I6NHBH.js";import"./chunk-J5FJMODQ.js";import"./chunk-WOFQ5DTB.js";import"./chunk-PH52RA7D.js";import"./chunk-7Y5T6XDP.js";import"./chunk-X6RMKHJQ.js";import"./chunk-JEVRKFRL.js";import"./chunk-QOIXNWQR.js";import"./chunk-GZKFETP5.js";import"./chunk-3JIQS44J.js";import"./chunk-O4UZSPPI.js";import"./chunk-B3PYOSCX.js";import"./chunk-HRRFKWPZ.js";import"./chunk-YULZRALL.js";import"./chunk-HGFDYOVB.js";import"./chunk-QZ7KQZRN.js";import"./chunk-TKD34PHN.js";import"./chunk-2HLAFUCY.js";import"./chunk-U5RIG3JP.js";import"./chunk-62BDNPMI.js";export{b as methods,a as resolveMethods};
2
+ //# sourceMappingURL=methods-E7KVMBX4.js.map
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import{a}from"./chunk-XHMN6ZX7.js";import"./chunk-B56T42J3.js";import"./chunk-JYWEX7RR.js";import"./chunk-OZCJXZK6.js";export{a as outputContinuationCommandDescriptor};
3
+ //# sourceMappingURL=output-continuation-command-BJSY67SN.js.map
@@ -0,0 +1,24 @@
1
+ import{A as z,B as lt,D as ht,G as E,e as _,f as A,g as I,h as R,i as N,j,q as $,s as b,u as O,x as ct,y as dt,z as pt}from"./chunk-QYUVVBMR.js";import{writeSync as Yt}from"fs";function gt(t,e,n="File"){let r=0;for(;r<e.byteLength;){let i=Yt(t,e,r,e.byteLength-r);if(i<=0)throw new Error(`${n} write made no forward progress.`);r+=i}}import{createHash as x,randomBytes as Et}from"crypto";import{writeSync as ae,chmodSync as ue,closeSync as T,fstatSync as D,lstatSync as ce,mkdirSync as Ct,openSync as Q,readSync as de,readdirSync as xt,renameSync as Tt,rmSync as X,statSync as Lt}from"fs";import{tmpdir as pe}from"os";import{dirname as le,join as L,resolve as he}from"path";import{StringDecoder as Y}from"string_decoder";import{InvalidArgumentError as yt}from"commander";var Zt=/^[A-Za-z0-9_@%+=:,./-]+$/u;function q(t,e={}){return e.omitSafeQuotes&&Zt.test(t)?t:(e.platform??process.platform)==="win32"?`"${t.replaceAll("%","%%").replaceAll('"','\\"')}"`:`'${t.replaceAll("'",`'"'"'`)}'`}import{AsyncLocalStorage as Kt}from"async_hooks";import{createHash as Un}from"crypto";import{existsSync as Bn,mkdirSync as Mn}from"fs";import{tmpdir as zn}from"os";import{isAbsolute as Vn,join as Dn,resolve as te}from"path";var ee="SCIP_QUERY_SESSION";var ne=128,ft=new Kt;function mt(t,e){let n=t.sessionEnabled===!1||t.json?void 0:se(),r={enabled:n!==void 0,reemit:t.reemit===!0,command:t.command,projectRoot:te(t.cwd),sessionIdentity:n,staged:[],stagedEvidence:[],finalized:!1};return ft.run(r,e)}function C(t){let e=ft.getStore();if(!e||e.finalized)return;e.finalized=!0;let n=e.state;if(!n){e.staged.length=0,e.stagedEvidence.length=0;return}try{if(t&&(e.staged.length>0||e.stagedEvidence.length>0)){let r=n.ledger.nextOrdinal,i=re(e.staged).map(o=>({...o,ordinal:r,command:e.command})),s=oe(e.stagedEvidence).map(o=>({...o,ordinal:r,command:e.command}));n.ledger.ranges.push(...i),n.ledger.evidence.push(...s),n.ledger.nextOrdinal+=1,n.ledger.updatedAt=new Date().toISOString(),E(n.ledgerPath,n.ledger,{spacing:2,trailingNewline:!0})}}catch{}finally{n.lock.release(),e.state=null,e.staged.length=0,e.stagedEvidence.length=0}}function re(t){let e=[...t].sort((r,i)=>r.relativePath.localeCompare(i.relativePath)||r.startLine-i.startLine||r.endLine-i.endLine),n=[];for(let r of e){let i=n[n.length-1];if(i&&i.relativePath===r.relativePath&&i.ownerSymbol===r.ownerSymbol&&i.policy===r.policy&&r.startLine<=i.endLine+1&&ie(i,r)){let s=r.startLine-i.startLine;for(let o=0;o<r.lineHashes.length;o+=1)i.lineHashes[s+o]??=r.lineHashes[o];i.endLine=Math.max(i.endLine,r.endLine)}else n.push({...r,lineHashes:[...r.lineHashes]})}return n}function ie(t,e){let n=Math.max(t.startLine,e.startLine),r=Math.min(t.endLine,e.endLine);for(let i=n;i<=r;i+=1)if(t.lineHashes[i-t.startLine]!==e.lineHashes[i-e.startLine])return!1;return!0}function oe(t){let e=new Set,n=[];for(let r of t){let i=`${r.kind}\0${r.identity}\0${r.contentHash}`;e.has(i)||(e.add(i),n.push(r))}return n}function se(){let t=process.env[ee]?.trim();if(t&&!(t.length>ne||!/^[A-Za-z0-9._:-]+$/.test(t)))return`explicit:${t}`}var Z="scip-query-output-page",K=1,ge="continue",y=256,w=1e5,U=4096,g=32e6,_t=64*1024*1024,fe=256*1024*1024,me=32,At=32768,Rt=16,ye=N*Rt,k=4096,St=_t,tt=3600*1e3,Se="scip-query-json-export",Oe=1,Nt=3;function et(){return L(pe(),`scip-query-output-pages-${typeof process.getuid=="function"?process.getuid():"user"}`)}var nt=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u,$t=/^[A-Za-z0-9_][A-Za-z0-9_-]{11}$/u,ve=/^4\.([A-Za-z0-9_-]{22})\.([0-9a-z]{1,10})$/u,be=/^([A-Za-z0-9_][A-Za-z0-9_-]{11})(?:\.([0-9a-z]{1,10}))?$/u,kt=1,we="quota.lock",Pe=2e3,Ie=5,Ot=1024*1024,Ee=new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)),V,Ce=Object.freeze({maxSnapshotBytes:_t,maxAggregateBytes:fe,maxSnapshotCount:me});function xe(t){if(!$(t))return{kind:"malformed",reason:"Output page envelope must be an object."};if(t.kind!==Z||t.schemaVersion!==K)return{kind:"malformed",reason:"Output page envelope kind or schema version is unsupported."};if(!Te(t))return{kind:"malformed",reason:"Output page envelope contains invalid common fields."};let e=Le(t.page,t.content)??_e(t.page);return e?{kind:"malformed",reason:e}:{kind:"supported",envelope:t}}function Te(t){return ct(t.producer)&&typeof t.command=="string"&&t.command.length>0&&(t.contentType==="text/plain"||t.contentType==="application/json")&&(t.agentInstruction===void 0||typeof t.agentInstruction=="string")&&typeof t.content=="string"&&$(t.page)}function Le(t,e){if(["offset","returnedCharacters","totalCharacters","omittedCharacters","remainingCharacters"].some(u=>!b(t[u]))||!O(t.outputHash))return"Output page counts or output hash are invalid.";let r=Number(t.offset),i=Number(t.returnedCharacters),s=Number(t.totalCharacters),o=Number(t.omittedCharacters),a=Number(t.remainingCharacters);return i!==e.length||o!==s-i||a!==s-r-i||a<0?"Output page character counts are inconsistent.":null}function _e(t){if(t.complete===!0){if(t.remainingCharacters!==0||t.continuation!==void 0)return"A complete output page cannot have remaining content or a continuation."}else if(t.complete===!1){if(t.remainingCharacters===0||!Ae(t.continuation))return"An incomplete output page requires a non-empty continuation."}else return"Output page complete must be a Boolean.";return null}function Ae(t){return $(t)&&typeof t.cursor=="string"&&t.cursor.length>0&&typeof t.command=="string"&&t.command.length>0}function cr(t){let e=xe(t);if(e.kind==="malformed")throw new Error(e.reason);return e.envelope}var Ut={writeStdout:t=>{process.stdout.write(t)},writeStderr:t=>{process.stderr.write(t)},stdoutIsRegularFile:()=>{try{return D(1).isFile()}catch{return!1}}};async function Re(t,e,n=Ut){return mt({command:t.command,cwd:t.cwd,argv:t.argv,json:t.json,sessionEnabled:t.sourceSession,reemit:t.reemitSource},async()=>{try{await Ne(t,e,n)}finally{C(!1)}})}async function Ne(t,e,n){let r=t.pageSize??A,i=t.snapshotRoot??et(),s=rn(t.snapshotLimits),o=$e(t);switch(ke(t,r),He(t,n)){case"json-file":await qe(t,e,n,o);return;case"json":await Ve(t,e,n);return;case"human-file":await De(t,e,o);return}let a=Ft(t.argv),u=Wt(t.invocationPrefix),c=Dt(t.command,t.cwd,u,a),d={pageSize:r,snapshotRoot:i,snapshotLimits:s,maxOutputCharacters:o,filteredArgv:a,invocationPrefix:u,invocationHash:c},l=t.cursor===void 0?void 0:vn(t.cursor,c),p=l?Be(l,t,d):await Me(t,e,d);je(t,n,d,p)}function $e(t){let e=t.maxOutputCharacters??g;if(!Number.isSafeInteger(e)||e<=0)throw new Error("Output character safety limit must be a positive integer.");return Math.min(e,g,t.agentOutput?ye:g)}function ke(t,e){if(Bt(e),t.cursor!==void 0&&t.cursor.length>U)throw new Error(`Output cursor exceeds the ${U}-character limit. Run the command again without --output-cursor.`)}function Ue(t){if(!t.json)throw new Error("--json-output requires --json.");if(t.agentOutput||t.pageSize!==void 0||t.cursor!==void 0)throw new Error("--json-output cannot be combined with --agent-output or output pagination.")}function He(t,e){if(t.jsonOutputPath!==void 0)return Ue(t),"json-file";if(t.json)return!t.agentOutput&&t.pageSize===void 0&&t.cursor===void 0?"json":void 0;if(t.cursor===void 0&&t.pageSize===void 0&&e.stdoutIsRegularFile?.()===!0)return"human-file"}function Be(t,e,n){let{invocationHash:r,pageSize:i,maxOutputCharacters:s,snapshotRoot:o,invocationPrefix:a,filteredArgv:u}=n;try{return{snapshotId:t.snapshotId,completed:Fe(t,r,i,s,o,e.onSnapshotRead)}}catch(c){let d=c instanceof Error?c.message:String(c);throw new Error(`${d} Restart with: ${Jt(a,u,i)}`,{cause:c})}}async function Me(t,e,n){let{invocationHash:r,invocationPrefix:i,filteredArgv:s,pageSize:o,maxOutputCharacters:a,snapshotRoot:u,snapshotLimits:c}=n,d=new J(r,i,t.command,t.cwd,s,o,a,Ht(t)?R:Sn(t,i),u,c,t.agentOutput?Rt:At,!t.json,H(a,t.agentOutput===!0)),l=Mt(m=>d.write(m)),p=!1;try{await e(),p=!0}finally{l(),p||d.abort()}let h;try{h=d.complete()}catch(m){throw d.abort(),m}return{snapshotId:h.snapshotId,completed:{content:h.content,offset:0,pageIndex:0,pageCount:h.pageCount,totalCharacters:h.totalCharacters,outputHash:h.outputHash}}}function Ht(t){return!t.json&&t.pageSize===void 0&&t.cursor===void 0}function je(t,e,n,{snapshotId:r,completed:i}){let{invocationPrefix:s,snapshotRoot:o}=n,a=i.offset+i.content.length,u=i.pageIndex+1>=i.pageCount;if(!u&&Ht(t)){let l=bt(r),p=f(o,l,"output");W(o,l,Lt(p).size,"saved",n.snapshotLimits);let h=Vt(i.content,1800,1800,!0),m=i.content.slice(0,h).split(`
2
+ `).slice(0,24).join(`
3
+ `).trimEnd();e.writeStdout(`Full result: ${j(p)}
4
+ Preview (${i.totalCharacters} characters saved):
5
+ ${m}
6
+ `);return}let c=u?void 0:yn({invocationPrefix:s,nextPageIndex:i.pageIndex+1,snapshotId:bt(r)});if(ze(t,e,n,{snapshotId:r,completed:i}))return;let d=Tn(t,i,c,a);t.json?e.writeStdout(`${JSON.stringify(d)}
7
+ `):e.writeStdout(xn(d)),u&&r&&P(r,o)}function ze(t,e,n,{snapshotId:r,completed:i}){let s=i.pageIndex+1>=i.pageCount;return i.offset===0&&s&&t.cursor===void 0?(e.writeStdout(i.content),C(!0),r&&P(r,n.snapshotRoot),!0):!1}async function dr(t,e,n=et(),r=Ut){if(t.length>U)throw new Error(`Output cursor exceeds the ${U}-character limit.`);let i=at(t);if(!i)throw new Error("Invalid output cursor. Run the original command again.");let s=it(i.snapshotId,n);await Re({command:s.command,producerVersion:e,invocationPrefix:s.invocationPrefix,argv:[...s.argv,"--output-page-size",String(s.pageSize),"--output-cursor",t],cwd:s.cwd,json:s.argv.some(o=>o==="--json"||o.startsWith("--json=")),sourceSession:!s.argv.some(o=>o==="--no-session"),agentOutput:s.argv.some(o=>o==="--agent-output"),pageSize:s.pageSize,cursor:t,snapshotRoot:n},()=>{throw new Error("Output continuation attempted to rerun the original command.")},r)}async function qe(t,e,n,r){let i=t.jsonOutputPath;if(i===void 0||i.length===0||Buffer.byteLength(i)>k||i.includes("\0"))throw new Error(`--json-output requires a path from 1 through ${k} UTF-8 bytes.`);let s=he(t.cwd,i);if(Buffer.byteLength(s)>k)throw new Error(`The resolved --json-output path exceeds ${k} UTF-8 bytes.`);let o=new Y("utf8"),a=x("sha256"),u=0,c=0,d=v=>{if(c+=v.length,!Number.isSafeInteger(c)||c>r)throw new Error(H(r,!1))};Ct(le(s),{recursive:!0});let l=`${s}.tmp-${Et(12).toString("hex")}`,p=Q(l,"wx",384),h=!0,m=Mt(v=>{let M=u+v.length;if(!Number.isSafeInteger(M)||M>St)throw new Error(`JSON export exceeds the ${St}-byte file safety limit. Narrow the query before retrying.`);if(d(o.write(v)),p===void 0)throw new Error("JSON export writer is closed.");gt(p,v,"JSON export"),a.update(v),u=M});try{await e(),d(o.end()),m(),T(p),p=void 0,Tt(l,s),h=!1}finally{if(m(),p!==void 0)try{T(p)}catch{}h&&X(l,{force:!0})}let Xt={kind:Se,schemaVersion:Oe,producer:{name:"scip-query",version:t.producerVersion},command:t.command,path:s,bytes:u,sha256:a.digest("hex")};n.writeStdout(`${JSON.stringify(Xt)}
8
+ `),C(!0)}function H(t,e){let n=`Command output exceeds the ${t}-character safety limit. Narrow the query before retrying.`;return e?`${n} For the complete machine result, use --json --json-output <path> and inspect the file programmatically.`:n}function pr(t){if(!/^\d+$/u.test(t))throw new yt(`Output page size must be an integer from ${y} through ${w}.`);let e=Number(t);try{Bt(e)}catch{throw new yt(`Output page size must be an integer from ${y} through ${w}.`)}return e}function Bt(t){if(!Number.isSafeInteger(t)||t<y||t>w)throw new Error(`Output page size must be an integer from ${y} through ${w}.`)}async function Ve(t,e,n){let r=new F(I,t.maxOutputCharacters??g),i=process.stdout.write,s=!1,o=`${j(`scip-query: JSON output exceeds the ${I}-byte client-safe budget and may be truncated by the client. Do not use possibly partial client output as evidence. Read every page with: ${Jt(Wt(t.invocationPrefix),En(Ft(t.argv)),A)}`)}
9
+ `;process.stdout.write=((a,u,c)=>{let d=r.push(a,u);return d!==void 0&&(s||(s=!0,n.writeStderr(o)),i.call(process.stdout,d)),rt(u,c),!0});try{await e();let a=r.finish();a.crossedPageBoundary&&!s&&(s=!0,n.writeStderr(o)),a.bytes.length>0&&i.call(process.stdout,a.bytes),s&&n.writeStderr(o)}finally{process.stdout.write=i}}async function De(t,e,n){let r=process.stdout.write,i=0;process.stdout.write=((s,o,a)=>{let u=jt(s,o);if(i+=u.length,i>n)throw new Error(H(n,!1));return r.call(process.stdout,u),rt(o,a),!0});try{await e()}finally{process.stdout.write=r}C(!0)}function Mt(t){let e=process.stdout.write;return process.stdout.write=((n,r,i)=>{let s=jt(n,r);return t(s),rt(r,i),!0}),()=>{process.stdout.write=e}}function jt(t,e){return typeof t=="string"?Buffer.from(t,typeof e=="string"?e:"utf8"):Buffer.from(t)}function rt(t,e){let n=typeof t=="function"?t:e;typeof n=="function"&&n()}var F=class{constructor(e,n){this.byteLimit=e;this.maxOutputCharacters=n}byteLimit;maxOutputCharacters;decoder=new Y("utf8");chunks=[];overflowed=!1;totalCharacters=0;totalBytes=0;push(e,n){let r=typeof e=="string"?Buffer.from(e,typeof n=="string"?n:"utf8"):Buffer.from(e);if(this.totalBytes+=r.length,this.addCharacters(this.decoder.write(r)),this.overflowed)return r;if(this.chunks.push(r),this.totalBytes<=this.byteLimit)return;this.overflowed=!0;let i=Buffer.concat(this.chunks);return this.chunks.length=0,i}finish(){this.addCharacters(this.decoder.end());let e=this.totalBytes>this.byteLimit,n=Buffer.concat(this.chunks);return this.chunks.length=0,{bytes:n,crossedPageBoundary:e}}addCharacters(e){if(this.totalCharacters+=e.length,!Number.isSafeInteger(this.totalCharacters)||this.totalCharacters>this.maxOutputCharacters)throw new Error(`Command output exceeds the ${this.maxOutputCharacters}-character safety limit. Narrow the query before retrying.`)}},J=class{constructor(e,n,r,i,s,o,a,u,c,d,l,p,h=H(a,!1)){this.invocationHash=e;this.invocationPrefix=n;this.command=r;this.cwd=i;this.argv=s;this.pageSize=o;this.maxOutputCharacters=a;this.pageContentByteLimit=u;this.snapshotRoot=c;this.limits=d;this.maxPages=l;this.preferLineBoundaries=p;this.overflowMessage=h;ot(c);do this.snapshotId=Et(9).toString("base64url");while(this.snapshotId.startsWith("-"));this.temporaryPath=f(c,this.snapshotId,"tmp")}invocationHash;invocationPrefix;command;cwd;argv;pageSize;maxOutputCharacters;pageContentByteLimit;snapshotRoot;limits;maxPages;preferLineBoundaries;overflowMessage;snapshotId;temporaryPath;decoder=new Y("utf8");hash=x("sha256");pages=[];descriptor=null;pending="";firstPageContent="";totalCharacters=0;pageCharacterOffset=0;byteLength=0;reservedBytes=0;opened=!1;finished=!1;write(e){if(this.finished)throw new Error("Output snapshot writer is closed.");this.appendDecoded(this.decoder.write(e))}complete(){if(this.finished)throw new Error("Output snapshot writer is closed.");if(this.appendDecoded(this.decoder.end()),this.finished=!0,!this.opened){let i=this.pending,s=Buffer.from(i);return this.assertWithinByteLimit(s.length),this.hash.update(s),this.pending="",{content:i,totalCharacters:this.totalCharacters,outputHash:this.hash.digest("hex"),pageCount:1}}if((this.pending.length>0||this.pages.length===0)&&(this.flushPage(this.pending),this.pending=""),this.descriptor===null)throw new Error("Output snapshot writer is not open.");T(this.descriptor),this.descriptor=null;let e=this.hash.digest("hex"),n=f(this.snapshotRoot,this.snapshotId,"output"),r=f(this.snapshotRoot,this.snapshotId,"json");try{Tt(this.temporaryPath,n);let i={version:Nt,snapshotId:this.snapshotId,invocationHash:this.invocationHash,invocationPrefix:[...this.invocationPrefix],command:this.command,cwd:this.cwd,argv:[...this.argv],outputHash:e,pageSize:this.pageSize,pages:this.pages,totalCharacters:this.totalCharacters,byteLength:this.byteLength,createdAtMs:Date.now()};return E(r,i),W(this.snapshotRoot,this.snapshotId,this.byteLength,"complete",this.limits),this.reservedBytes=this.byteLength,{content:this.firstPageContent,totalCharacters:this.totalCharacters,outputHash:e,pageCount:this.pages.length,snapshotId:this.snapshotId}}catch(i){throw P(this.snapshotId,this.snapshotRoot),i}}abort(){this.descriptor!==null&&(T(this.descriptor),this.descriptor=null),this.finished=!0,P(this.snapshotId,this.snapshotRoot)}appendDecoded(e){if(e.length===0)return;let n=this.totalCharacters+e.length;if(!Number.isSafeInteger(n)||n>this.maxOutputCharacters)throw new Error(this.overflowMessage);for(this.totalCharacters=n,this.pending+=e,this.assertWithinByteLimit(this.byteLength+Buffer.byteLength(this.pending));this.pending.length>this.pageSize||Buffer.byteLength(this.pending)>this.pageContentByteLimit;){this.open();let r=Vt(this.pending,this.pageSize,this.pageContentByteLimit,this.preferLineBoundaries),i=this.pending.slice(0,r);this.pending=this.pending.slice(r),this.flushPage(i)}}open(){if(!this.opened){on(this.snapshotRoot,this.snapshotId,0,this.limits);try{this.descriptor=Q(this.temporaryPath,"wx",384),this.opened=!0}catch(e){throw an(this.snapshotRoot,this.snapshotId),e}}}flushPage(e){if(this.descriptor===null)throw new Error("Output snapshot writer is not open.");if(this.pages.length>=this.maxPages)throw new Error(`Command output requires more than ${this.maxPages} snapshot pages. Retry with a larger --output-page-size, narrow the query, or use --json --json-output <path>.`);let n=Buffer.from(e),r=this.byteLength+n.length;if(this.assertWithinByteLimit(r),r>this.reservedBytes){let o=Math.min(this.limits.maxSnapshotBytes,Math.ceil(r/Ot)*Ot);W(this.snapshotRoot,this.snapshotId,o,"active",this.limits),this.reservedBytes=o}let i=0;for(;i<n.length;){let o=ae(this.descriptor,n,i,n.length-i);if(o<=0)throw new Error("Output snapshot write made no progress.");i+=o}let s={characterOffset:this.pageCharacterOffset,characterLength:e.length,byteOffset:this.byteLength,byteLength:n.length,hash:x("sha256").update(n).digest("hex")};this.pages.length===0&&(this.firstPageContent=e),this.pages.push(s),this.hash.update(n),this.pageCharacterOffset+=e.length,this.byteLength=r}assertWithinByteLimit(e){if(!Number.isSafeInteger(e)||e>this.limits.maxSnapshotBytes)throw new Error(`Command output exceeds the ${this.limits.maxSnapshotBytes}-byte snapshot limit. Narrow the query before retrying.`)}};function Fe(t,e,n,r,i,s){ot(i);let o=it(t.snapshotId,i);Je(o,t,e,n);let a=o.pages[t.pageIndex];if(!a)throw new Error("Output cursor points past the current result.");if(o.totalCharacters>r)throw new Error(`Output snapshot exceeds the ${r}-character safety limit.`);if(Date.now()-o.createdAtMs>tt)throw P(t.snapshotId,i),new Error("Output snapshot expired before all pages were read.");let u=f(i,t.snapshotId,"output"),c=Q(u,"r");try{return{content:We(c,o,a,s),offset:a.characterOffset,pageIndex:t.pageIndex,pageCount:o.pages.length,totalCharacters:o.totalCharacters,outputHash:o.outputHash}}catch(d){throw P(t.snapshotId,i),d}finally{T(c)}}function Je(t,e,n,r){if(t.invocationHash!==n)throw new Error("This output cursor belongs to a different command, working directory, or argument set. Run again without --output-cursor.");if(t.snapshotId!==e.snapshotId||e.version===3&&(t.invocationHash!==e.invocationHash||t.outputHash!==e.outputHash))throw new Error("Output snapshot identity does not match this cursor.");if(t.pageSize!==r||e.version===3&&e.pageSize!==r)throw new Error(`Output page size changed after this cursor was issued; use ${t.pageSize}.`)}function We(t,e,n,r){let i=D(t);if(!i.isFile()||i.size!==e.byteLength)throw new Error("Output snapshot size or type changed.");let{bytes:s,bytesRead:o}=Ge(t,n,r),a=D(t);if(a.dev!==i.dev||a.ino!==i.ino||a.size!==i.size||o!==n.byteLength)throw new Error("Output snapshot changed while it was being read.");if(x("sha256").update(s).digest("hex")!==n.hash)throw new Error("Output snapshot page no longer matches its metadata.");let u=s.toString("utf8");if(u.length!==n.characterLength)throw new Error("Output snapshot page character count changed.");return u}function Ge(t,e,n){let r=Buffer.allocUnsafe(e.byteLength),i=0;for(;i<r.length;){let s=de(t,r,i,r.length-i,e.byteOffset+i);if(s===0)break;i+=s,n?.(s)}return{bytes:r,bytesRead:i}}function it(t,e){if(!S(t))throw new Error("Output snapshot identifier is invalid.");let n;try{n=JSON.parse(_(f(e,t,"json"),"output snapshot metadata"))}catch(r){throw new Error("Output snapshot is unavailable.",{cause:r})}if(!Qe(n))throw new Error("Output snapshot metadata is invalid.");return n}function Qe(t){if(!t||typeof t!="object")return!1;let e=t;return e.version===Nt&&Xe(e)&&Ze(e)&&b(e.createdAtMs)}function vt(t,e){return typeof t=="string"&&t.length>0&&t.length<=e}function Xe(t){return typeof t.snapshotId=="string"&&S(t.snapshotId)&&O(t.invocationHash)&&Gt(t.invocationPrefix)&&vt(t.command,256)&&vt(t.cwd,8192)&&Cn(t.argv)&&Dt(t.command,t.cwd,t.invocationPrefix,t.argv)===t.invocationHash}function Ye(t){return Array.isArray(t)&&t.length>1&&t.length<=At&&t.every(Ke)&&nn(t)}function Ze(t){return O(t.outputHash)&&b(t.pageSize)&&t.pageSize>=y&&t.pageSize<=w&&Ye(t.pages)&&b(t.totalCharacters)&&t.pages.reduce((e,n)=>e+n.characterLength,0)===t.totalCharacters&&b(t.byteLength)&&t.pages.reduce((e,n)=>e+n.byteLength,0)===t.byteLength}function Ke(t){if(!t||typeof t!="object")return!1;let e=t;return tn(e)&&en(e)&&O(e.hash)}function tn(t){return Number.isSafeInteger(t.characterOffset)&&(t.characterOffset??-1)>=0&&Number.isSafeInteger(t.characterLength)&&(t.characterLength??0)>0}function en(t){return Number.isSafeInteger(t.byteOffset)&&(t.byteOffset??-1)>=0&&Number.isSafeInteger(t.byteLength)&&(t.byteLength??0)>0}function nn(t){let e=0,n=0;for(let r of t){if(r.characterOffset!==e||r.byteOffset!==n)return!1;e+=r.characterLength,n+=r.byteLength}return!0}function ot(t){Ct(t,{recursive:!0,mode:448});let e=ce(t);if(!e.isDirectory()||e.isSymbolicLink())throw new Error(`Output snapshot root is not a private directory: ${t}`);if(typeof process.getuid=="function"&&e.uid!==process.getuid())throw new Error(`Output snapshot root is not owned by the current user: ${t}`);process.platform!=="win32"&&ue(t,448)}function rn(t){let e={...Ce,...t};for(let[n,r]of Object.entries(e))if(!Number.isSafeInteger(r)||r<=0)throw new Error(`Output snapshot ${n} must be a positive integer.`);if(e.maxSnapshotBytes>e.maxAggregateBytes)throw new Error("Output snapshot maxSnapshotBytes cannot exceed maxAggregateBytes.");return e}function on(t,e,n,r){B(t,()=>{ln(t),zt(t,e,n,"active",r)})}function W(t,e,n,r,i){if(!Number.isSafeInteger(n)||n<0||n>i.maxSnapshotBytes)throw new Error(`Command output exceeds the ${i.maxSnapshotBytes}-byte snapshot limit.`);B(t,()=>{zt(t,e,n,r,i)})}function sn(t,e,n,r,i){for(let s of t.filter(o=>o.state==="saved"&&o.snapshotId!==n).sort((o,a)=>o.updatedAtMs-a.updatedAtMs)){let o=t.filter(a=>a.snapshotId!==n);if(o.length+1<=i.maxSnapshotCount&&o.reduce((a,u)=>a+u.reservedBytes,r)<=i.maxAggregateBytes)break;st(s.snapshotId,e),t.splice(t.indexOf(s),1)}}function zt(t,e,n,r,i){if(!Number.isSafeInteger(n)||n<0||n>i.maxSnapshotBytes)throw new Error(`Command output exceeds the ${i.maxSnapshotBytes}-byte snapshot limit.`);let s=un(t);sn(s,t,e,n,i);let o=s.find(l=>l.snapshotId===e),a=s.reduce((l,p)=>l+p.reservedBytes,0)-(o?.reservedBytes??0)+n,u=s.length+(o?0:1);if(u>i.maxSnapshotCount||a>i.maxAggregateBytes)throw new Error(`Output snapshot capacity is full (${u}/${i.maxSnapshotCount} snapshots, ${a}/${i.maxAggregateBytes} bytes). Redirect output to a file, narrow the query, or finish an explicit pagination sequence before retrying.`);let c=Date.now(),d={version:kt,snapshotId:e,pid:process.pid,...G()?{processIdentity:G()}:{},reservedBytes:n,state:r,createdAtMs:o?.createdAtMs??c,updatedAtMs:c};E(f(t,e,"reserve"),d)}function an(t,e){B(t,()=>{X(f(t,e,"reserve"),{force:!0})})}function un(t){let e=[];for(let n of xt(t,{withFileTypes:!0})){if(!n.isFile()||!n.name.endsWith(".reserve"))continue;let r=n.name.slice(0,-8);if(S(r))try{let i=JSON.parse(_(L(t,n.name),"output snapshot reservation"));if(!qt(i)||i.snapshotId!==r)throw new Error("reservation identity is invalid");e.push(i)}catch(i){throw new Error(`Output snapshot reservation ${n.name} is invalid; retry after its owning process or snapshot expires.`,{cause:i})}}return e}function qt(t){if(!t||typeof t!="object")return!1;let e=t;return cn(e)&&dn(e)&&pn(e)}function cn(t){return t.version===kt&&typeof t.snapshotId=="string"&&S(t.snapshotId)}function dn(t){return Number.isSafeInteger(t.pid)&&(t.pid??0)>0&&(t.processIdentity===void 0||dt(t.processIdentity)!==null&&t.processIdentity.pid===t.pid)}function pn(t){return Number.isSafeInteger(t.reservedBytes)&&(t.reservedBytes??-1)>=0&&(t.state==="active"||t.state==="complete"||t.state==="saved")&&Number.isSafeInteger(t.createdAtMs)&&Number.isSafeInteger(t.updatedAtMs)}function ln(t){let e=Date.now();for(let n of xt(t,{withFileTypes:!0})){if(!n.isFile()||!n.name.endsWith(".reserve"))continue;let r=n.name.slice(0,-8);if(!S(r))continue;let i=gn(L(t,n.name)),s=mn(f(t,r,"json"));hn(i,s,e)||st(r,t)}}function hn(t,e,n){let r=fn(t),i=t?n-t.updatedAtMs>tt:!1;return r||e&&!i?!0:!e&&t!==null&&!i&&t.state==="complete"}function gn(t){try{let e=JSON.parse(_(t,"output snapshot reservation"));return qt(e)?e:null}catch{return null}}function fn(t){return t?.state==="active"&&lt(t.pid)&&(t.processIdentity===void 0||(()=>{let e=z(t.pid);return e!==null&&pt(t.processIdentity,e)})())}function mn(t){try{return Lt(t),!0}catch{return!1}}function B(t,e){ot(t);let n=L(t,we),r=Date.now()+Pe;for(;;){let i=ht(n,{kind:"output-snapshot-quota",processIdentity:G()});if(i.kind==="acquired")try{return e()}finally{i.lock.release()}if(Date.now()>=r)throw new Error("Output snapshot quota is busy. Retry the command.");Atomics.wait(Ee,0,0,Ie)}}function G(){return V===void 0&&(V=z(process.pid)),V}function P(t,e){S(t)&&B(e,()=>st(t,e))}function st(t,e){for(let n of["json","output","tmp","reserve"])X(f(e,t,n),{force:!0})}function f(t,e,n){if(!S(e))throw new Error("Output snapshot identifier is invalid.");return L(t,`${e}.${n}`)}function bt(t){if(!t)throw new Error("Incomplete output did not create a resumable snapshot.");return t}function wt(t){return t>=55296&&t<=56319}function Vt(t,e,n,r){let i=Math.min(t.length,e);if(wt(t.charCodeAt(i-1))&&(i-=1),Buffer.byteLength(t.slice(0,i))>n){let s=0,o=i;for(;s<o;){let a=Math.ceil((s+o)/2);Buffer.byteLength(t.slice(0,a))<=n?s=a:o=a-1}i=s,wt(t.charCodeAt(i-1))&&(i-=1)}if(i<=0)throw new Error("Output page byte limit cannot contain one UTF-8 character.");if(r){let s=t.lastIndexOf(`
10
+ `,i-1);if(s>=0)return s+1}return i}function yn(t){let e=On({pageIndex:t.nextPageIndex,snapshotId:t.snapshotId});return{cursor:e,command:ut(t.invocationPrefix,e)}}function Sn(t,e){let n="c".repeat(64),r={cursor:n,command:ut(e,n)};if(!t.json){let o="9".repeat(String(g).length),a=`[scip-query output page: characters ${o}-${o} of ${o}]
11
+
12
+ [Incomplete: ${o} characters remain.]
13
+ Continue exactly:
14
+ ${r.command}
15
+ `;return Pt(R,Buffer.byteLength(a),1)}let i={kind:Z,schemaVersion:K,producer:{name:"scip-query",version:t.producerVersion},command:t.command,contentType:"application/json",agentInstruction:"INCOMPLETE EVIDENCE: do not draw conclusions or report completion from this partial page. Run page.continuation.command exactly, then repeat until page.complete is true.",page:{offset:g,returnedCharacters:g,totalCharacters:g,omittedCharacters:g,remainingCharacters:g,complete:!1,outputHash:"f".repeat(64),continuation:r},content:""},s=Buffer.byteLength(`${JSON.stringify(i)}
16
+ `);return Pt(N,s,2)}function Pt(t,e,n){let r=Math.floor((I-e)/n);if(r<y)throw new Error(`The command invocation leaves fewer than ${y} bytes for client-safe output content. Use a shorter executable path.`);return Math.min(t,r)}function On(t){return $t.test(t.snapshotId)?t.pageIndex===1?t.snapshotId:`${t.snapshotId}.${t.pageIndex.toString(36)}`:`4.${Pn(t.snapshotId)}.${t.pageIndex.toString(36)}`}function vn(t,e){let n=at(t);if(!n)throw new Error("Invalid output cursor. Run the command again without --output-cursor.");if(n.version===3&&n.invocationHash!==e)throw new Error("This output cursor belongs to a different command, working directory, or argument set. Run again without --output-cursor.");return n}function at(t){let e=be.exec(t);if(e){let r=e[2]??"1",i=Number.parseInt(r,36);return It(i,r)?{version:4,pageIndex:i,snapshotId:e[1]}:null}let n=ve.exec(t);if(n){let r=In(n[1]),i=Number.parseInt(n[2],36);return r&&It(i,n[2])?{version:4,pageIndex:i,snapshotId:r}:null}try{let r=JSON.parse(Buffer.from(t,"base64url").toString("utf8"));return bn(r)?r:null}catch{return null}}function lr(t,e=et()){let n=at(t);if(n)try{let r=it(n.snapshotId,e);if(r.snapshotId!==n.snapshotId||n.version===3&&(r.invocationHash!==n.invocationHash||r.outputHash!==n.outputHash||r.pageSize!==n.pageSize)||Date.now()-r.createdAtMs>tt||!r.pages[n.pageIndex])return;let i=r.pages[n.pageIndex];return{snapshotId:r.snapshotId,pageIndex:n.pageIndex,command:r.command,cwd:r.cwd,continuationCommand:ut(r.invocationPrefix,t),remainingCharacters:r.totalCharacters-i.characterOffset,totalCharacters:r.totalCharacters,outputHash:r.outputHash,createdAtMs:r.createdAtMs}}catch{return}}function bn(t){if(!t||typeof t!="object")return!1;let e=t;return e.version===3&&O(e.invocationHash)&&wn(e)&&O(e.outputHash)&&typeof e.snapshotId=="string"&&S(e.snapshotId)}function wn(t){return Number.isSafeInteger(t.pageIndex)&&(t.pageIndex??-1)>=1&&Number.isSafeInteger(t.pageSize)&&(t.pageSize??0)>=y&&(t.pageSize??0)<=w}function Pn(t){if(!nt.test(t))throw new Error("Output snapshot identifier is invalid.");return Buffer.from(t.replaceAll("-",""),"hex").toString("base64url")}function In(t){let e=Buffer.from(t,"base64url");if(e.length!==16)return null;let n=e.toString("hex"),r=`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`;return nt.test(r)?r:null}function S(t){return typeof t=="string"&&($t.test(t)||nt.test(t))}function Dt(t,e,n,r){return x("sha256").update(JSON.stringify({command:t,cwd:e,invocationPrefix:n,argv:r})).digest("hex")}function Ft(t){let e=[];for(let n=0;n<t.length;n+=1){let r=t[n];if(r==="--output-page-size"||r==="--output-cursor"){n+=1;continue}r.startsWith("--output-page-size=")||r.startsWith("--output-cursor=")||e.push(r)}return e}function En(t){return t.filter(e=>e!=="--raw-json"&&e!=="--raw-json=true")}function Jt(t,e,n){return Qt([...t,...e,"--output-page-size",String(n)])}function ut(t,e){return Qt([...t,ge,e])}function Wt(t){let e=t===void 0?["scip-query"]:[...t];if(!Gt(e))throw new Error("Output pagination invocation prefix must contain one to sixteen non-empty shell arguments.");return e}function Gt(t){return Array.isArray(t)&&t.length>0&&t.length<=16&&t.every(e=>typeof e=="string"&&e.length>0&&e.length<=2048&&!e.includes("\0")&&!e.includes("\r")&&!e.includes(`
17
+ `))}function Cn(t){return Array.isArray(t)&&t.length>0&&t.length<=256&&t.every(e=>typeof e=="string"&&e.length<=8192&&!e.includes("\0")&&!e.includes("\r")&&!e.includes(`
18
+ `))}function Qt(t){return t.map(e=>q(e,{omitSafeQuotes:!0})).join(" ")}function xn(t){let e=t.page.continuation,n=Math.max(t.page.offset,t.page.offset+t.page.returnedCharacters-1),r=`[scip-query output page: characters ${t.page.offset}-${n} of ${t.page.totalCharacters}]
19
+ `,i=e?`
20
+ [Incomplete: ${t.page.remainingCharacters} characters remain.]
21
+ Continue exactly:
22
+ ${e.command}
23
+ `:"";return`${r}${t.content}${i}`}function Tn(t,e,n,r){let i={offset:e.offset,returnedCharacters:e.content.length,totalCharacters:e.totalCharacters,omittedCharacters:e.totalCharacters-e.content.length,remainingCharacters:e.totalCharacters-r};return{kind:Z,schemaVersion:K,producer:{name:"scip-query",version:t.producerVersion},command:t.command,contentType:t.json?"application/json":"text/plain",agentInstruction:n?"INCOMPLETE EVIDENCE: do not draw conclusions or report completion from this partial page. Run page.continuation.command exactly, then repeat until page.complete is true.":"OUTPUT COMPLETE: all rendered characters have been retrieved. Evaluate the command result's own coverage separately.",page:n?{...i,complete:!1,outputHash:e.outputHash,continuation:n}:{...i,complete:!0,outputHash:e.outputHash},content:e.content}}function It(t,e){return Number.isSafeInteger(t)&&t>=1&&t.toString(36)===e}export{I as CLIENT_SAFE_OUTPUT_BYTES,Se as CLI_JSON_EXPORT_RECEIPT_KIND,Oe as CLI_JSON_EXPORT_RECEIPT_SCHEMA_VERSION,ge as CLI_OUTPUT_CONTINUATION_COMMAND,Z as CLI_OUTPUT_PAGE_KIND,K as CLI_OUTPUT_PAGE_SCHEMA_VERSION,A as DEFAULT_OUTPUT_PAGE_SIZE,R as HUMAN_OUTPUT_PAGE_CONTENT_BYTES,N as JSON_OUTPUT_PAGE_CONTENT_BYTES,ye as MAX_AGENT_OUTPUT_CHARACTERS,Rt as MAX_AGENT_OUTPUT_PAGES,St as MAX_JSON_OUTPUT_FILE_BYTES,k as MAX_JSON_OUTPUT_PATH_LENGTH,U as MAX_OUTPUT_CURSOR_LENGTH,w as MAX_OUTPUT_PAGE_SIZE,fe as MAX_OUTPUT_SNAPSHOT_AGGREGATE_BYTES,_t as MAX_OUTPUT_SNAPSHOT_BYTES,me as MAX_OUTPUT_SNAPSHOT_COUNT,At as MAX_OUTPUT_SNAPSHOT_PAGES,g as MAX_TRACKED_OUTPUT_CHARACTERS,y as MIN_OUTPUT_PAGE_SIZE,tt as OUTPUT_SNAPSHOT_TTL_MS,dr as continueCliOutput,xe as decodeCliOutputPageEnvelope,lr as inspectPendingCliOutputCursor,pr as parseOutputPageSize,cr as requireCliOutputPageEnvelope,Re as runWithCliOutputPagination};
24
+ //# sourceMappingURL=output-pagination-UZJ5ACIX.js.map
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import"./chunk-LEECKFCJ.js";import"./chunk-F4FNK44D.js";import"./chunk-WYPL7GF7.js";import"./chunk-3AF4TUFK.js";import"./chunk-B3PYOSCX.js";import"./chunk-JFMEXGFE.js";import"./chunk-7F45LJKI.js";import{existsSync as n,mkdirSync as i,symlinkSync as o,readlinkSync as r,unlinkSync as l,readdirSync as c}from"fs";import{join as u,dirname as p,resolve as d,relative as k,isAbsolute as g}from"path";import{homedir as m,platform as t}from"os";import{fileURLToPath as y}from"url";var h=t()==="win32";function s(){console.log("scip-query installed (Node.js 24 LTS recommended; minimum Node.js 22) -- run 'scip-query setup' in a repo to install skills and build the index.")}s();
2
+ import"./chunk-VX2O4RIS.js";import"./chunk-F4FNK44D.js";import"./chunk-YTAP5Y2G.js";import"./chunk-BL6XJKTA.js";import"./chunk-B3PYOSCX.js";import"./chunk-QZ7KQZRN.js";import"./chunk-2HLAFUCY.js";import"./chunk-62BDNPMI.js";import{existsSync as i,mkdirSync as e,symlinkSync as r,readlinkSync as l,unlinkSync as o,readdirSync as c}from"fs";import{join as a,dirname as p,resolve as d,relative as g,isAbsolute as f}from"path";import{homedir as S,platform as s}from"os";import{fileURLToPath as h}from"url";var $=s()==="win32";function n(){console.log("scip-query installed (Node.js 24 LTS recommended; minimum Node.js 22) -- run 'scip-query setup' in a repo to install skills and build the index.")}n();
3
3
  //# sourceMappingURL=postinstall.js.map
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import{r as a}from"./chunk-CFYMZFXT.js";import"./chunk-OZCJXZK6.js";export{a as reindexConfiguredProject};
3
+ //# sourceMappingURL=project-reindex-EP24WT4X.js.map
@@ -1,2 +1,2 @@
1
- import{a,b}from"../chunk-YU5DZUZI.js";import"../chunk-W7CXK74K.js";import"../chunk-NWQXSFFU.js";import"../chunk-P5XHIJHI.js";import"../chunk-E73UNJTF.js";import"../chunk-WB3WYIRE.js";import"../chunk-DYGHBZ2N.js";import"../chunk-KK7GPALL.js";import"../chunk-OSSESPDX.js";import"../chunk-TRNAEQ6P.js";import"../chunk-TEBQMNVI.js";import"../chunk-MTDBHTSF.js";import"../chunk-N2ZSIIGR.js";import"../chunk-ODDUPDP7.js";import"../chunk-ZOHS7AQV.js";import"../chunk-FESCRNVV.js";import"../chunk-JWTGMPIT.js";import"../chunk-N5B2NILC.js";export{a as affected,b as possibleImpactClosure};
1
+ import{a,b}from"../chunk-ZHSP366W.js";import"../chunk-36SGVCGX.js";import"../chunk-AGWFSTXC.js";import"../chunk-P5XHIJHI.js";import"../chunk-73AAKPUC.js";import"../chunk-KZBJWZJB.js";import"../chunk-4WTUBQ36.js";import"../chunk-NZAXKGRL.js";import"../chunk-KK7GPALL.js";import"../chunk-YNQCGEQE.js";import"../chunk-FMRN2TRL.js";import"../chunk-DA7RPPDF.js";import"../chunk-KHWRRPV4.js";import"../chunk-72AD6ZRR.js";import"../chunk-YUKYB54I.js";import"../chunk-GCKCF5FL.js";import"../chunk-DVFP6PZI.js";import"../chunk-5D2LVK7O.js";import"../chunk-7WTPQ4NX.js";import"../chunk-FVULPZDF.js";import"../chunk-D3FDISIC.js";import"../chunk-A2IIGFMJ.js";import"../chunk-PH52RA7D.js";import"../chunk-GVWX5T43.js";import"../chunk-T6DK3ZP7.js";import"../chunk-5TNQJUR2.js";export{a as affected,b as possibleImpactClosure};
2
2
  //# sourceMappingURL=affected.js.map
@@ -26,8 +26,7 @@ interface ArchitectureBoundaryEdge {
26
26
  examples: ArchitectureFileEdge[];
27
27
  /**
28
28
  * True when the entire boundary dependency rests on a single import. Not a
29
- * violation a signal that the edge is incidental rather than load-bearing,
30
- * and therefore cheap to remove if it was never intended.
29
+ * violation. Import count alone does not establish responsibility or removal cost.
31
30
  */
32
31
  fragile: boolean;
33
32
  }
@@ -47,6 +46,8 @@ interface ArchitectureReciprocalPair {
47
46
  reverse: ArchitectureBoundaryEdge;
48
47
  }
49
48
  interface ArchitectureCycle {
49
+ fileCycleMembers?: string[];
50
+ origin?: 'contains-file-cycle' | 'grouping-only';
50
51
  boundaries: string[];
51
52
  internalEdges: ArchitectureBoundaryEdge[];
52
53
  /** Least-broad internal edge(s), useful as inspection points rather than automatic repairs. */
@@ -54,6 +55,8 @@ interface ArchitectureCycle {
54
55
  violatesPolicy: boolean;
55
56
  }
56
57
  interface ArchitectureCoverage {
58
+ scope?: string;
59
+ limitations?: string[];
57
60
  totalFiles: number;
58
61
  mappedFiles: number;
59
62
  unmappedFiles: string[];
@@ -99,19 +102,26 @@ interface ArchitectureCoarseBoundary {
99
102
  violatesPolicy: boolean;
100
103
  subUnits: string[];
101
104
  internalEdges: ArchitectureSubUnitEdge[];
102
- /** Least-broad internal edge(s) the cheapest inspection points. */
105
+ /** Internal edges with the fewest distinct file dependencies; cost is not measured. */
103
106
  narrowestEdges: ArchitectureSubUnitEdge[];
104
107
  }
105
108
  interface ArchitectureReport {
109
+ dependencyRoles?: {
110
+ excludedTestEdges: number;
111
+ basis: 'production-imports-including-types';
112
+ cycleMeaning: string;
113
+ };
106
114
  configured: boolean;
107
115
  boundaries: ArchitectureBoundarySummary[];
108
116
  edges: ArchitectureBoundaryEdge[];
109
117
  forbiddenEdges: ArchitectureBoundaryEdge[];
118
+ testEdges?: ArchitectureBoundaryEdge[];
119
+ testForbiddenEdges?: ArchitectureBoundaryEdge[];
110
120
  reciprocalPairs: ArchitectureReciprocalPair[];
111
121
  cycles: ArchitectureCycle[];
112
122
  /** Boundaries hiding an internal cycle that the boundary graph cannot express. */
113
123
  coarseBoundaries: ArchitectureCoarseBoundary[];
114
- /** Declared allowances with no observed edge policy wider than reality. */
124
+ /** Declared allowances with no observed edge from a boundary with observed source files. */
115
125
  staleAllowances: ArchitectureStaleAllowance[];
116
126
  /** Boundaries over a configured fan-out or file-count limit. */
117
127
  boundaryLimits: ArchitectureBoundaryLimit[];
@@ -131,6 +141,7 @@ declare const ARCHITECTURE_BASELINE_PREFIX = "architecture:";
131
141
  declare function analyzeArchitectureGraph(fileGraph: ReadonlyMap<string, ReadonlySet<string>>, indexedFiles: readonly string[], config?: ArchitectureConfig, opts?: {
132
142
  isModuleHierarchyFile?: (file: string) => boolean;
133
143
  testBoundaryViolations?: TestBoundaryViolation[];
144
+ scope?: string;
134
145
  }): ArchitectureReport;
135
146
  /** Build and analyze the current project's import dependency graph. */
136
147
  declare function architecture(db: ScipDatabase, opts?: {
@@ -1,2 +1,2 @@
1
- import{b as a,c as b,d as c,e as d,f as e,g as f}from"../chunk-GSP44ENC.js";import"../chunk-SV2LEFVM.js";import"../chunk-35NLDRZC.js";import"../chunk-XRYABF57.js";import"../chunk-NJITK2GP.js";import"../chunk-YUKYB54I.js";import"../chunk-DHEQMPLW.js";import"../chunk-TEBQMNVI.js";import"../chunk-N2ZSIIGR.js";import"../chunk-ODDUPDP7.js";import"../chunk-ZOHS7AQV.js";import"../chunk-FESCRNVV.js";import"../chunk-JWTGMPIT.js";import"../chunk-N5B2NILC.js";export{a as ARCHITECTURE_BASELINE_PREFIX,b as analyzeArchitectureGraph,c as architecture,d as architectureFindingIdentities,f as detectCoarseBoundaries,e as hasEnforceableArchitecturePolicy};
1
+ import{e as a,f as b,g as c,h as d,i as e,j as f}from"../chunk-ETOIKRHO.js";import"../chunk-SV2LEFVM.js";import"../chunk-HXENDJC6.js";import"../chunk-2IWUT6CJ.js";import"../chunk-4WCUBZU3.js";import"../chunk-E3FDPXZK.js";import"../chunk-DHEQMPLW.js";import"../chunk-KHWRRPV4.js";import"../chunk-72AD6ZRR.js";import"../chunk-YUKYB54I.js";import"../chunk-GCKCF5FL.js";import"../chunk-5D2LVK7O.js";import"../chunk-7WTPQ4NX.js";import"../chunk-FVULPZDF.js";import"../chunk-D3FDISIC.js";import"../chunk-A2IIGFMJ.js";import"../chunk-PH52RA7D.js";import"../chunk-GVWX5T43.js";import"../chunk-T6DK3ZP7.js";import"../chunk-5TNQJUR2.js";export{a as ARCHITECTURE_BASELINE_PREFIX,b as analyzeArchitectureGraph,c as architecture,d as architectureFindingIdentities,f as detectCoarseBoundaries,e as hasEnforceableArchitecturePolicy};
2
2
  //# sourceMappingURL=architecture.js.map
@@ -1,2 +1,2 @@
1
- import{a,b}from"../chunk-YPWBKGFU.js";import"../chunk-BOJ5SVE2.js";import"../chunk-CJZXN4NU.js";import"../chunk-BGBBVSH4.js";import"../chunk-W7CXK74K.js";import"../chunk-NWQXSFFU.js";import"../chunk-P5XHIJHI.js";import"../chunk-E73UNJTF.js";import"../chunk-WB3WYIRE.js";import"../chunk-DYGHBZ2N.js";import"../chunk-KK7GPALL.js";import"../chunk-OSSESPDX.js";import"../chunk-TRNAEQ6P.js";import"../chunk-XRYABF57.js";import"../chunk-NJITK2GP.js";import"../chunk-YUKYB54I.js";import"../chunk-DHEQMPLW.js";import"../chunk-TEBQMNVI.js";import"../chunk-MTDBHTSF.js";import"../chunk-N2ZSIIGR.js";import"../chunk-ODDUPDP7.js";import"../chunk-ZOHS7AQV.js";import"../chunk-FESCRNVV.js";import"../chunk-JWTGMPIT.js";import"../chunk-N5B2NILC.js";export{a as bottlenecks,b as coordinationHubs};
1
+ import{a,b}from"../chunk-WS4C6TCK.js";import"../chunk-BOJ5SVE2.js";import"../chunk-6LSEIIF7.js";import"../chunk-BGBBVSH4.js";import"../chunk-36SGVCGX.js";import"../chunk-AGWFSTXC.js";import"../chunk-P5XHIJHI.js";import"../chunk-73AAKPUC.js";import"../chunk-KZBJWZJB.js";import"../chunk-4WTUBQ36.js";import"../chunk-NZAXKGRL.js";import"../chunk-KK7GPALL.js";import"../chunk-YNQCGEQE.js";import"../chunk-FMRN2TRL.js";import"../chunk-DA7RPPDF.js";import"../chunk-4WCUBZU3.js";import"../chunk-E3FDPXZK.js";import"../chunk-DHEQMPLW.js";import"../chunk-KHWRRPV4.js";import"../chunk-72AD6ZRR.js";import"../chunk-YUKYB54I.js";import"../chunk-GCKCF5FL.js";import"../chunk-DVFP6PZI.js";import"../chunk-5D2LVK7O.js";import"../chunk-7WTPQ4NX.js";import"../chunk-FVULPZDF.js";import"../chunk-D3FDISIC.js";import"../chunk-A2IIGFMJ.js";import"../chunk-PH52RA7D.js";import"../chunk-GVWX5T43.js";import"../chunk-T6DK3ZP7.js";import"../chunk-5TNQJUR2.js";export{a as bottlenecks,b as coordinationHubs};
2
2
  //# sourceMappingURL=bottlenecks.js.map
@@ -1,2 +1,2 @@
1
- import{a,b}from"../chunk-QBE3YX64.js";import"../chunk-MTDBHTSF.js";import"../chunk-N2ZSIIGR.js";import"../chunk-ODDUPDP7.js";import"../chunk-ZOHS7AQV.js";import"../chunk-FESCRNVV.js";import"../chunk-JWTGMPIT.js";import"../chunk-N5B2NILC.js";export{a as byKind,b as kindCounts};
1
+ import{a,b}from"../chunk-Z33WQG4Q.js";import"../chunk-DVFP6PZI.js";import"../chunk-5D2LVK7O.js";import"../chunk-7WTPQ4NX.js";import"../chunk-FVULPZDF.js";import"../chunk-D3FDISIC.js";import"../chunk-A2IIGFMJ.js";import"../chunk-PH52RA7D.js";import"../chunk-GVWX5T43.js";import"../chunk-T6DK3ZP7.js";import"../chunk-5TNQJUR2.js";export{a as byKind,b as kindCounts};
2
2
  //# sourceMappingURL=by-kind.js.map
@@ -6,9 +6,11 @@ interface CallGraphEvidenceRow {
6
6
  symbol: string;
7
7
  shortName: string;
8
8
  file: string;
9
- relationship: 'resolved-call' | 'reference-candidate' | 'chunk-candidate';
9
+ relationship: 'resolved-call' | 'source-call-candidate' | 'reference-candidate' | 'chunk-candidate';
10
10
  evidenceStrength: 'exact' | 'candidate';
11
11
  evidenceSource: string;
12
+ /** `render` when the edge is a rendered component element (`<Child />`) rather than a call expression. */
13
+ interaction?: 'render';
12
14
  }
13
15
  interface CallGraphResult {
14
16
  symbol: string;
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-ZF5KHH7C.js";import"../chunk-BOJ5SVE2.js";import"../chunk-BGBBVSH4.js";import"../chunk-W7CXK74K.js";import"../chunk-NWQXSFFU.js";import"../chunk-P5XHIJHI.js";import"../chunk-E73UNJTF.js";import"../chunk-WB3WYIRE.js";import"../chunk-DYGHBZ2N.js";import"../chunk-KK7GPALL.js";import"../chunk-OSSESPDX.js";import"../chunk-TRNAEQ6P.js";import"../chunk-TEBQMNVI.js";import"../chunk-MTDBHTSF.js";import"../chunk-N2ZSIIGR.js";import"../chunk-ODDUPDP7.js";import"../chunk-ZOHS7AQV.js";import"../chunk-FESCRNVV.js";import"../chunk-JWTGMPIT.js";import"../chunk-N5B2NILC.js";export{a as callGraph};
1
+ import{a}from"../chunk-F4LUHJTF.js";import"../chunk-BOJ5SVE2.js";import"../chunk-BGBBVSH4.js";import"../chunk-36SGVCGX.js";import"../chunk-AGWFSTXC.js";import"../chunk-P5XHIJHI.js";import"../chunk-73AAKPUC.js";import"../chunk-KZBJWZJB.js";import"../chunk-4WTUBQ36.js";import"../chunk-NZAXKGRL.js";import"../chunk-KK7GPALL.js";import"../chunk-YNQCGEQE.js";import"../chunk-FMRN2TRL.js";import"../chunk-DA7RPPDF.js";import"../chunk-KHWRRPV4.js";import"../chunk-72AD6ZRR.js";import"../chunk-YUKYB54I.js";import"../chunk-GCKCF5FL.js";import"../chunk-DVFP6PZI.js";import"../chunk-5D2LVK7O.js";import"../chunk-7WTPQ4NX.js";import"../chunk-FVULPZDF.js";import"../chunk-D3FDISIC.js";import"../chunk-A2IIGFMJ.js";import"../chunk-PH52RA7D.js";import"../chunk-GVWX5T43.js";import"../chunk-T6DK3ZP7.js";import"../chunk-5TNQJUR2.js";export{a as callGraph};
2
2
  //# sourceMappingURL=call-graph.js.map
@@ -31,6 +31,7 @@ interface ChangeSurfaceEntry {
31
31
  interface ChangeSurfaceResult {
32
32
  file: string;
33
33
  symbols: ChangeSurfaceEntry[];
34
+ /** Distinct consumer files across all selected symbols, not a sum of per-symbol counts. */
34
35
  totalExternalConsumers: number;
35
36
  fileRisk?: FileChangeRiskMetadata;
36
37
  }