scip-query 0.10.6 → 0.10.8

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 (266) hide show
  1. package/README.md +7 -2
  2. package/dist/augment-vue-worker.js +1 -1
  3. package/dist/{chunk-YQH353VA.js → chunk-24S6MYOC.js} +2 -2
  4. package/dist/{chunk-BNKE4TT5.js → chunk-2H57MJLI.js} +2 -2
  5. package/dist/{chunk-AUVBR62P.js → chunk-2YI45TNM.js} +2 -2
  6. package/dist/{chunk-TM6GVHA6.js → chunk-3FYGJ2GY.js} +2 -2
  7. package/dist/chunk-3LQFMQPY.js +3 -0
  8. package/dist/chunk-4TMJDHC6.js +5 -0
  9. package/dist/{chunk-FNRPGGVI.js → chunk-5G5VI7J4.js} +2 -2
  10. package/dist/chunk-5GVOJOBL.js +2 -0
  11. package/dist/{chunk-4ZUJJRWT.js → chunk-5SMUKUV5.js} +2 -2
  12. package/dist/{chunk-DE7MA6OD.js → chunk-63MSELOP.js} +2 -2
  13. package/dist/{chunk-5FOPAXWY.js → chunk-6BNOACLT.js} +2 -2
  14. package/dist/chunk-6EO3E3IP.js +23 -0
  15. package/dist/{chunk-47UA45TU.js → chunk-6N6QTGSD.js} +2 -2
  16. package/dist/{chunk-QLNGUWR7.js → chunk-6TDOT7B3.js} +2 -2
  17. package/dist/{chunk-MUULWXSJ.js → chunk-7KJBH4IP.js} +2 -2
  18. package/dist/chunk-7XWXGANX.js +4 -0
  19. package/dist/chunk-A536TEU4.js +3 -0
  20. package/dist/{chunk-CJJP64OC.js → chunk-AA7L7GKI.js} +2 -2
  21. package/dist/chunk-AETMKBZR.js +40 -0
  22. package/dist/{chunk-ZQLO2SCU.js → chunk-ANIOISCE.js} +2 -2
  23. package/dist/{chunk-6UFMPECA.js → chunk-B4EHYG6M.js} +2 -2
  24. package/dist/{chunk-OLD6PBU6.js → chunk-BEUQVBE3.js} +2 -2
  25. package/dist/{chunk-EOZIZWW4.js → chunk-BJG67TCR.js} +2 -2
  26. package/dist/{chunk-ICXVNWMI.js → chunk-BJWNO6BU.js} +2 -2
  27. package/dist/chunk-BTCASU5J.js +3 -0
  28. package/dist/{chunk-YUOAAR24.js → chunk-BWL2ECGQ.js} +2 -2
  29. package/dist/{chunk-QUJBXLBY.js → chunk-BZ53S4ZN.js} +2 -2
  30. package/dist/{chunk-EYLXU575.js → chunk-C6BYNIH4.js} +2 -2
  31. package/dist/chunk-C6ROZBJA.js +32 -0
  32. package/dist/chunk-COUFCH64.js +2 -0
  33. package/dist/{chunk-D322LMSA.js → chunk-DS6QEB3G.js} +5 -5
  34. package/dist/{chunk-NVFERV4U.js → chunk-E2CCBFLR.js} +2 -2
  35. package/dist/{chunk-Z4VHYJ5U.js → chunk-EBIQY3RK.js} +2 -2
  36. package/dist/{chunk-5UDFZC4D.js → chunk-EKECQP6Z.js} +2 -2
  37. package/dist/{chunk-O3OKSF6O.js → chunk-FG4NT6VY.js} +2 -2
  38. package/dist/{chunk-X7ZY6FFF.js → chunk-FGTHPJON.js} +2 -2
  39. package/dist/{chunk-QSXQT3NE.js → chunk-FHWEEQVO.js} +2 -2
  40. package/dist/{chunk-CFL2CNIF.js → chunk-FKUCFCLU.js} +2 -2
  41. package/dist/chunk-FVA3NH4P.js +2 -0
  42. package/dist/{chunk-5QJXH6ZL.js → chunk-GZQID3FS.js} +2 -2
  43. package/dist/{chunk-SPE4YCOT.js → chunk-I274B3B3.js} +2 -2
  44. package/dist/{chunk-DAI74TJU.js → chunk-J6ADQKQA.js} +2 -2
  45. package/dist/{chunk-E7KERP7E.js → chunk-JRUKS66S.js} +2 -2
  46. package/dist/{chunk-ZSLT7NWQ.js → chunk-JUIAOOK7.js} +2 -2
  47. package/dist/{chunk-7KCSELEV.js → chunk-JYSAYZNX.js} +2 -2
  48. package/dist/chunk-K7VBTWNR.js +2 -0
  49. package/dist/{chunk-56UN3DMK.js → chunk-KLXVEBVC.js} +2 -2
  50. package/dist/{chunk-E44ZMVNA.js → chunk-KZYHFI2X.js} +2 -2
  51. package/dist/{chunk-FIB4JPEX.js → chunk-L4QKEQ4S.js} +2 -2
  52. package/dist/{chunk-CTCAF3YA.js → chunk-LGX2Y4BA.js} +2 -2
  53. package/dist/{chunk-VAA5FFIW.js → chunk-LM5SHAN4.js} +2 -2
  54. package/dist/{chunk-YYD245WG.js → chunk-LWTML2AN.js} +2 -2
  55. package/dist/{chunk-7OHWPJ5N.js → chunk-MEKSFV6H.js} +2 -2
  56. package/dist/{chunk-5M4TYWVI.js → chunk-N7F5UM6J.js} +2 -2
  57. package/dist/{chunk-YUTRW57I.js → chunk-NWFSC356.js} +2 -2
  58. package/dist/chunk-P3K7LX7M.js +4 -0
  59. package/dist/{chunk-CAWSSEVM.js → chunk-Q34NWRPP.js} +2 -2
  60. package/dist/chunk-QDGKE5HN.js +21 -0
  61. package/dist/{chunk-ESG4HBEF.js → chunk-RHKMQNFI.js} +2 -2
  62. package/dist/chunk-RSKOYTSY.js +3 -0
  63. package/dist/chunk-RY7CAOJF.js +4 -0
  64. package/dist/{chunk-NNDYO2DX.js → chunk-S7YOLFLX.js} +2 -2
  65. package/dist/{chunk-LPLGJ4HO.js → chunk-SHM5D3DQ.js} +2 -2
  66. package/dist/chunk-SOGKYB5I.js +8 -0
  67. package/dist/{chunk-MZ7APUFN.js → chunk-T633QLYF.js} +2 -2
  68. package/dist/{chunk-AW4N6MGC.js → chunk-VAXDTQHE.js} +2 -2
  69. package/dist/chunk-VFLHKRTW.js +2 -0
  70. package/dist/{chunk-77YBOOYT.js → chunk-VMPB52FG.js} +2 -2
  71. package/dist/{chunk-3KLLFNT4.js → chunk-VOYOYC5T.js} +2 -2
  72. package/dist/{chunk-DJMK4DBL.js → chunk-VXT7WVIN.js} +2 -2
  73. package/dist/chunk-W2CBNBEL.js +71 -0
  74. package/dist/{chunk-3UW7VM4H.js → chunk-X3BJUFSN.js} +2 -2
  75. package/dist/chunk-X3Z4MLVL.js +4 -0
  76. package/dist/chunk-XPOZO76D.js +2 -0
  77. package/dist/{chunk-WBJZNPUT.js → chunk-XWC67C3Q.js} +2 -2
  78. package/dist/{chunk-GZCQTZLK.js → chunk-YNSVAJR6.js} +2 -2
  79. package/dist/chunk-YWOOQ4FF.js +2 -0
  80. package/dist/chunk-YZA6PPZL.js +3 -0
  81. package/dist/{chunk-CSWZFD46.js → chunk-ZDR4VTOP.js} +2 -2
  82. package/dist/{chunk-QVCCLDZI.js → chunk-ZL52RLDK.js} +2 -2
  83. package/dist/{chunk-YTR4CO5S.js → chunk-ZMU6IWDK.js} +3 -3
  84. package/dist/cli.js +272 -235
  85. package/dist/{config-types-Bj4sh28g.d.ts → config-types-BDIWAYzr.d.ts} +13 -1
  86. package/dist/{db-CTarohbZ.d.ts → db-BAVwb4Pb.d.ts} +1 -1
  87. package/dist/{health-Bx0x1HAG.d.ts → health-B17sVFYf.d.ts} +6 -2
  88. package/dist/index.d.ts +3 -3
  89. package/dist/index.js +3 -3
  90. package/dist/postinstall.js +1 -1
  91. package/dist/queries/affected.d.ts +2 -2
  92. package/dist/queries/affected.js +1 -1
  93. package/dist/queries/bottlenecks.d.ts +2 -2
  94. package/dist/queries/bottlenecks.js +1 -1
  95. package/dist/queries/by-kind.d.ts +2 -2
  96. package/dist/queries/by-kind.js +1 -1
  97. package/dist/queries/call-graph.d.ts +2 -2
  98. package/dist/queries/call-graph.js +1 -1
  99. package/dist/queries/change-surface.d.ts +2 -2
  100. package/dist/queries/change-surface.js +1 -1
  101. package/dist/queries/cleanup-plan.d.ts +2 -2
  102. package/dist/queries/cleanup-plan.js +1 -1
  103. package/dist/queries/co-change.d.ts +2 -2
  104. package/dist/queries/co-change.js +1 -1
  105. package/dist/queries/code.d.ts +2 -2
  106. package/dist/queries/code.js +1 -1
  107. package/dist/queries/complexity-hotspots.d.ts +2 -2
  108. package/dist/queries/complexity-hotspots.js +1 -1
  109. package/dist/queries/complexity.d.ts +2 -2
  110. package/dist/queries/complexity.js +1 -1
  111. package/dist/queries/convergence.d.ts +2 -2
  112. package/dist/queries/convergence.js +1 -1
  113. package/dist/queries/coupling.d.ts +2 -2
  114. package/dist/queries/coupling.js +1 -1
  115. package/dist/queries/cycles.d.ts +2 -2
  116. package/dist/queries/cycles.js +1 -1
  117. package/dist/queries/dataflow.d.ts +2 -2
  118. package/dist/queries/dataflow.js +1 -1
  119. package/dist/queries/dead.d.ts +2 -2
  120. package/dist/queries/dead.js +1 -1
  121. package/dist/queries/deep-chains.d.ts +2 -2
  122. package/dist/queries/deep-chains.js +1 -1
  123. package/dist/queries/deps.d.ts +2 -2
  124. package/dist/queries/deps.js +1 -1
  125. package/dist/queries/diff-gate.d.ts +8 -5
  126. package/dist/queries/diff-gate.js +1 -1
  127. package/dist/queries/diff-impact.d.ts +7 -3
  128. package/dist/queries/diff-impact.js +1 -1
  129. package/dist/queries/doc-drift.d.ts +2 -2
  130. package/dist/queries/doc-drift.js +1 -1
  131. package/dist/queries/drift.d.ts +2 -2
  132. package/dist/queries/drift.js +1 -1
  133. package/dist/queries/extract-candidates.d.ts +2 -2
  134. package/dist/queries/extract-candidates.js +1 -1
  135. package/dist/queries/fan.d.ts +2 -2
  136. package/dist/queries/fan.js +1 -1
  137. package/dist/queries/files.d.ts +2 -2
  138. package/dist/queries/health.d.ts +3 -3
  139. package/dist/queries/health.js +1 -1
  140. package/dist/queries/hierarchy.d.ts +2 -2
  141. package/dist/queries/hierarchy.js +1 -1
  142. package/dist/queries/hotspots.d.ts +2 -2
  143. package/dist/queries/hotspots.js +1 -1
  144. package/dist/queries/imports.d.ts +2 -2
  145. package/dist/queries/imports.js +1 -1
  146. package/dist/queries/incomplete-migration.d.ts +5 -3
  147. package/dist/queries/incomplete-migration.js +1 -1
  148. package/dist/queries/index.d.ts +3 -3
  149. package/dist/queries/index.js +1 -1
  150. package/dist/queries/isolated.d.ts +2 -2
  151. package/dist/queries/isolated.js +1 -1
  152. package/dist/queries/locality-candidates.d.ts +2 -2
  153. package/dist/queries/locality-candidates.js +1 -1
  154. package/dist/queries/members.d.ts +2 -2
  155. package/dist/queries/members.js +1 -1
  156. package/dist/queries/methods.d.ts +2 -2
  157. package/dist/queries/methods.js +1 -1
  158. package/dist/queries/outline.d.ts +2 -2
  159. package/dist/queries/outline.js +1 -1
  160. package/dist/queries/passthrough-candidates.d.ts +2 -2
  161. package/dist/queries/passthrough-candidates.js +1 -1
  162. package/dist/queries/plan-context.d.ts +2 -2
  163. package/dist/queries/plan-context.js +1 -1
  164. package/dist/queries/react-component-duplicates.d.ts +2 -2
  165. package/dist/queries/react-component-duplicates.js +1 -1
  166. package/dist/queries/react-hook-candidates.d.ts +2 -2
  167. package/dist/queries/react-hook-candidates.js +1 -1
  168. package/dist/queries/react-large-component-pressure.d.ts +2 -2
  169. package/dist/queries/react-large-component-pressure.js +1 -1
  170. package/dist/queries/recent-duplicates.d.ts +2 -2
  171. package/dist/queries/recent-duplicates.js +1 -1
  172. package/dist/queries/redundant-reexports.d.ts +2 -2
  173. package/dist/queries/redundant-reexports.js +1 -1
  174. package/dist/queries/refs.d.ts +2 -2
  175. package/dist/queries/refs.js +1 -1
  176. package/dist/queries/self-audit.d.ts +2 -2
  177. package/dist/queries/self-audit.js +1 -1
  178. package/dist/queries/similar-chains.d.ts +2 -2
  179. package/dist/queries/similar-chains.js +1 -1
  180. package/dist/queries/similar-files.d.ts +2 -2
  181. package/dist/queries/similar-files.js +1 -1
  182. package/dist/queries/similar-signatures.d.ts +2 -2
  183. package/dist/queries/similar-signatures.js +1 -1
  184. package/dist/queries/similar.d.ts +14 -4
  185. package/dist/queries/similar.js +1 -1
  186. package/dist/queries/slice.d.ts +2 -2
  187. package/dist/queries/slice.js +1 -1
  188. package/dist/queries/stale-abstractions.d.ts +2 -2
  189. package/dist/queries/stale-abstractions.js +1 -1
  190. package/dist/queries/stats.d.ts +2 -2
  191. package/dist/queries/surface.d.ts +2 -2
  192. package/dist/queries/surface.js +1 -1
  193. package/dist/queries/symbols.d.ts +2 -2
  194. package/dist/queries/symbols.js +1 -1
  195. package/dist/queries/system.d.ts +2 -2
  196. package/dist/queries/system.js +1 -1
  197. package/dist/queries/trace.d.ts +2 -2
  198. package/dist/queries/trace.js +1 -1
  199. package/dist/queries/unused-imports.d.ts +2 -2
  200. package/dist/queries/unused-imports.js +1 -1
  201. package/dist/queries/unused-params.d.ts +2 -2
  202. package/dist/queries/unused-params.js +1 -1
  203. package/dist/queries/vue-component-duplicates.d.ts +2 -2
  204. package/dist/queries/vue-component-duplicates.js +1 -1
  205. package/dist/queries/vue-composable-candidates.d.ts +2 -2
  206. package/dist/queries/vue-composable-candidates.js +1 -1
  207. package/dist/queries/vue-large-view-pressure.d.ts +2 -2
  208. package/dist/queries/vue-large-view-pressure.js +1 -1
  209. package/dist/queries/wrapper-candidates.d.ts +2 -2
  210. package/dist/queries/wrapper-candidates.js +1 -1
  211. package/dist/reindex-worker.js +11 -11
  212. package/dist/reindex.d.ts +11 -2
  213. package/dist/reindex.js +22 -22
  214. package/dist/runtime.d.ts +17 -20
  215. package/dist/runtime.js +2 -2
  216. package/dist/scip-cli-CnK9Va4O.d.ts +56 -0
  217. package/docs/AGENT_GUIDE.md +1 -1
  218. package/docs/COMMAND_REFERENCE.md +4 -3
  219. package/docs/analyzer-inventory.md +2 -2
  220. package/docs/analyzer-validation-ledger.md +2 -2
  221. package/package.json +1 -1
  222. package/skills/concrete-plan/SKILL.md +2 -2
  223. package/skills/scip-adoption/SKILL.md +4 -2
  224. package/skills/scip-ai-cleanup/SKILL.md +1 -1
  225. package/skills/scip-api-impact/SKILL.md +6 -2
  226. package/skills/scip-debloat/SKILL.md +1 -1
  227. package/skills/scip-debug/SKILL.md +6 -2
  228. package/skills/scip-diagram/SKILL.md +3 -1
  229. package/skills/scip-directory-architecture/SKILL.md +7 -3
  230. package/skills/scip-doc-reconcile/SKILL.md +3 -1
  231. package/skills/scip-explore/SKILL.md +2 -2
  232. package/skills/scip-health-audit/SKILL.md +6 -2
  233. package/skills/scip-health-improve/SKILL.md +6 -2
  234. package/skills/scip-hyper-optimization/SKILL.md +97 -0
  235. package/skills/scip-hyper-optimization/agents/openai.yaml +4 -0
  236. package/skills/scip-maintainability/SKILL.md +6 -3
  237. package/skills/scip-query/SKILL.md +14 -6
  238. package/skills/scip-query-setup/SKILL.md +10 -5
  239. package/skills/scip-react-maintainability/SKILL.md +7 -2
  240. package/skills/scip-triage-issue/SKILL.md +4 -2
  241. package/skills/scip-verify/SKILL.md +5 -3
  242. package/skills/scip-vue-maintainability/SKILL.md +7 -2
  243. package/dist/chunk-237YUOPK.js +0 -8
  244. package/dist/chunk-3UVJJ6Z7.js +0 -2
  245. package/dist/chunk-3ZYF3ELZ.js +0 -2
  246. package/dist/chunk-7JOTOWZO.js +0 -4
  247. package/dist/chunk-A3VNUGKJ.js +0 -2
  248. package/dist/chunk-A4L36SZS.js +0 -22
  249. package/dist/chunk-A7RNHUJH.js +0 -20
  250. package/dist/chunk-AYYIZ4BA.js +0 -4
  251. package/dist/chunk-BKDXBJDQ.js +0 -2
  252. package/dist/chunk-C3MZZ2ZN.js +0 -2
  253. package/dist/chunk-CRU42NJU.js +0 -2
  254. package/dist/chunk-ERHOS6AW.js +0 -2
  255. package/dist/chunk-EWC3UK4V.js +0 -3
  256. package/dist/chunk-FOQHUKNZ.js +0 -4
  257. package/dist/chunk-FUPDW5AC.js +0 -3
  258. package/dist/chunk-G3WGZU5Q.js +0 -2
  259. package/dist/chunk-HVTYSC26.js +0 -40
  260. package/dist/chunk-KPHKX4LP.js +0 -71
  261. package/dist/chunk-MA7OVFHI.js +0 -2
  262. package/dist/chunk-OBBDKQAG.js +0 -3
  263. package/dist/chunk-RHTJBYZ5.js +0 -2
  264. package/dist/chunk-UQJGTVHV.js +0 -5
  265. package/dist/chunk-ZFMPHDAT.js +0 -4
  266. package/dist/scip-cli-Bh1M_JPu.d.ts +0 -20
package/dist/cli.js CHANGED
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
- import{program as Is}from"commander";import{realpathSync as Db}from"fs";import{fileURLToPath as FO}from"url";import{createRequire as v_}from"module";import{fileURLToPath as Sf}from"url";import{statSync as Pb}from"fs";function Oe(e){let t=e.get("SELECT COUNT(*) as c FROM documents").c,n=e.get("SELECT COUNT(*) as c FROM global_symbols").c,i=e.get("SELECT COUNT(*) as c FROM mentions WHERE role = 1").c,r=e.get("SELECT COUNT(*) as c FROM mentions WHERE role != 1").c;return{documents:t,symbols:n,definitions:i,references:r,...Nb(e.config.dbPath)}}function Nb(e){try{let t=Pb(e);return{indexSizeBytes:t.size,lastBuilt:t.mtime}}catch{return{indexSizeBytes:0,lastBuilt:null}}}function j(e,t={}){let n=t.scope?"AND relative_path LIKE ?":"",i=t.like?"AND relative_path LIKE ?":"",r=[...t.scope?[`%${t.scope}%`]:[],...t.like?[t.like]:[]],o=e.all(`SELECT relative_path
2
+ import{program as Js}from"commander";import{realpathSync as Rb}from"fs";import{fileURLToPath as r1}from"url";import{spawn as W0}from"child_process";import{createRequire as G0}from"module";import{availableParallelism as z0}from"os";import{fileURLToPath as dl}from"url";import{statSync as wb}from"fs";function $e(e){let t=e.get("SELECT COUNT(*) as c FROM documents").c,n=e.get("SELECT COUNT(*) as c FROM global_symbols").c,r=e.get("SELECT COUNT(*) as c FROM mentions WHERE role = 1").c,i=e.get("SELECT COUNT(*) as c FROM mentions WHERE role != 1").c;return{documents:t,symbols:n,definitions:r,references:i,...Lb(e.config.dbPath)}}function Lb(e){try{let t=wb(e);return{indexSizeBytes:t.size,lastBuilt:t.mtime}}catch{return{indexSizeBytes:0,lastBuilt:null}}}function j(e,t={}){let n=t.scope?"AND relative_path LIKE ?":"",r=t.like?"AND relative_path LIKE ?":"",i=[...t.scope?[`%${t.scope}%`]:[],...t.like?[t.like]:[]],o=e.all(`SELECT relative_path
3
3
  FROM documents
4
4
  WHERE 1 = 1
5
5
  ${e.pathExclusionsFor("documents")}
6
6
  ${n}
7
- ${i}
8
- ORDER BY relative_path`,...r).map(a=>a.relative_path),s=t.extensions?o.filter(a=>t.extensions.some(c=>a.toLowerCase().endsWith(c.toLowerCase()))):o;return t.includeIgnored===!1?s.filter(a=>!e.isIgnored(a)):s}function Eb(e){return/[*?]/.test(e)?e.replace(/\*\*/g,"%").replace(/\*/g,"%").replace(/\?/g,"_"):`%${e}%`}function Es(e,t){let n=Eb(t);return j(e,{like:n,includeIgnored:!1}).map(i=>({relativePath:i}))}import{extname as Nl}from"path";var Tb={".rs":"rust",".ts":"typescript",".mts":"typescript",".cts":"typescript",".tsx":"tsx",".js":"javascript",".jsx":"javascript",".mjs":"javascript",".cjs":"javascript",".py":"python",".pyi":"python",".java":"java",".kt":"kotlin",".kts":"kotlin",".scala":"scala",".sc":"scala",".rb":"ruby",".c":"c",".h":"c",".cc":"cpp",".cpp":"cpp",".cxx":"cpp",".hpp":"cpp",".hh":"cpp",".hxx":"cpp",".cs":"csharp",".php":"php",".vb":"vb"};function W(e){return Tb[Nl(e).toLowerCase()]??null}function yt(e){return Nl(e).toLowerCase()===".vue"}var El=[];function Et(e){e.groups.length>0&&El.push(e)}function Ts(e,t){let n=new Set(t.groups);for(let i of El)i.groups.some(r=>n.has(r))&&(t.file!==void 0&&i.clearFile?i.clearFile(e,t.file):i.clearAll(e))}function Tl(){let e=new WeakMap;return{cache:e,ensure(t){let n=e.get(t);return n||(n=new Map,e.set(t,n)),n}}}function U(e,t){let{cache:n,ensure:i}=Tl(),r={get(o,s,a){let c=i(o);if(c.has(s))return c.get(s);let l=a();return c.set(s,l),l},invalidate(o,s){n.get(o)?.delete(s)},invalidateAll(o){n.delete(o)},size(o){return n.get(o)?.size??0}};return Et({name:e,groups:t.clearGroups,clearAll:o=>r.invalidateAll(o),clearFile:(o,s)=>r.invalidate(o,s)}),r}function Y(e,t){let n=new WeakMap,i={get(r,o){let s=n.get(r);if(s)return s.value;let a=o();return n.set(r,{value:a}),a},invalidate(r){n.delete(r)},has(r){return n.has(r)}};return Et({name:e,groups:t.clearGroups,clearAll:r=>i.invalidate(r)}),i}var _b={clearGroups:["whole-project","source-file"]};function Dr(e){return Kt(e,_b)}function Kt(e,t){let{cache:n,ensure:i}=Tl(),r={get(o,s,a,c){let l=i(o),u=l.get(s);if(u&&u.source===a)return u.value;let d=c();return l.set(s,{source:a,value:d}),d},invalidate(o,s){n.get(o)?.delete(s)},invalidateAll(o){n.delete(o)}};return Et({name:e,groups:t.clearGroups,clearAll:o=>r.invalidateAll(o),clearFile:(o,s)=>r.invalidate(o,s)}),r}import{createRequire as $b}from"module";var ke=$b(import.meta.url),Ir=null,_l=!1;function Fb(){if(_l)return null;if(Ir)return Ir;try{return Ir=ke("tree-sitter"),Ir}catch{return _l=!0,null}}var $l=new Map,_s=new Set;function Ab(e){if(_s.has(e))return null;let t=$l.get(e);if(t)return t;let n;try{switch(e){case"rust":n=ke("tree-sitter-rust");break;case"typescript":n=ke("tree-sitter-typescript").typescript;break;case"tsx":n=ke("tree-sitter-typescript").tsx;break;case"javascript":n=ke("tree-sitter-javascript");break;case"python":n=ke("tree-sitter-python");break;case"java":n=ke("tree-sitter-java");break;case"kotlin":n=ke("tree-sitter-kotlin");break;case"scala":n=ke("tree-sitter-scala");break;case"ruby":n=ke("tree-sitter-ruby");break;case"c":n=ke("tree-sitter-c");break;case"cpp":n=ke("tree-sitter-cpp");break;case"csharp":n=ke("tree-sitter-c-sharp");break;case"php":n=ke("tree-sitter-php").php;break;case"vb":{let i=ke("tree-sitter-vb-dotnet");n=i.language??i;break}}}catch{return _s.add(e),null}return $l.set(e,n),n}var Fl=new Map;function Mb(e){let t=Fl.get(e);if(t)return t;let n=Ab(e);if(!n)return null;let i=Fb();if(!i)return null;let r=new i;try{r.setLanguage(n)}catch{return _s.add(e),null}return Fl.set(e,r),r}function Ob(e,t){return e.parse(i=>i>=t.length?null:t.slice(i,Math.min(t.length,i+16384)))}function wi(e,t){let n=Mb(e);if(!n)return null;try{return Ob(n,t)}catch{return null}}import{existsSync as jb,readFileSync as Bb}from"fs";import{join as Hb}from"path";var Vb=U("source-text",{clearGroups:["whole-project","source-file"]}),qb=U("source-lines",{clearGroups:["whole-project","source-file"]});function M(e,t){let n=t.replace(/\\/g,"/");return Vb.get(e,n,()=>{let i=Hb(e.config.projectRoot,n);return jb(i)?Bb(i,"utf-8"):""})}function _e(e,t){let n=t.replace(/\\/g,"/");return qb.get(e,n,()=>{let i=M(e,n);return i?i.split(`
9
- `):[]})}var Ub=/^\s*(?:\/\/|#|\/\*+|\*)\s*scip-query[\s:-]*ignore(?:[\s:-]+(dead(?:-code)?|stale|wrapper|passthrough|drift|extract|similar))?\b/i;function Li(e){let t=Ub.exec(e);return t?t[1]??"":null}function Pr(e,t,n){if(n<=0)return!1;let i=_e(e,t);if(i.length===0)return!1;for(let r=n-1;r>=0&&r>=n-5;r-=1){let o=(i[r]??"").trim();if(o!==""){if(Li(o)!==null)return!0;if(!o.startsWith("//")&&!o.startsWith("*")&&!o.startsWith("/*")&&!o.startsWith("@")&&!o.startsWith("#"))return!1}}return!1}import{parse as Qb}from"@vue/compiler-sfc";import{posix as $s}from"path";import{parse as Wb}from"@vue/compiler-sfc";var Gb=Dr("vue-sfc-units");function Er(e,t){let n=Ol(t),i=M(e,n);return Gb.get(e,n,i,()=>zb(e,n,i))}function Ol(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function Fs(e){let t=e?.toLowerCase();return!t||t==="js"||t==="javascript"||t==="jsx"?"javascript":t==="ts"||t==="typescript"?"typescript":t==="tsx"?"tsx":null}function Jt(e){return!e||e.body.length===0?0:e.body.split(`
10
- `).length}function zb(e,t,n){let i={relativePath:t,template:null,scripts:[],styles:[],customBlocks:[],errors:[]};if(!n)return i;let r;try{r=Wb(n,{filename:t})}catch(s){return i.errors.push(Ml(s)),i}i.errors.push(...r.errors.map(Ml));let{descriptor:o}=r;return o.template&&(i.template=Nr(e,t,"template",o.template)),o.script&&i.scripts.push(Al(e,t,o.script,!1)),o.scriptSetup&&i.scripts.push(Al(e,t,o.scriptSetup,!0)),i.styles=o.styles.map(s=>Nr(e,t,"style",s)),i.customBlocks=o.customBlocks.map(s=>Nr(e,t,"custom",s)),i.errors.push(...[i.template,...i.scripts,...i.styles,...i.customBlocks].flatMap(s=>s?.errors??[])),i}function Al(e,t,n,i){let r=Nr(e,t,"script",n);return{...r,kind:"script",setup:i,astLanguage:Fs(r.lang)}}function Nr(e,t,n,i){let r=Jb(i.attrs),o=typeof r.lang=="string"?r.lang:null,s=typeof r.src=="string"?r.src:typeof i.src=="string"?i.src:void 0;if(s){let c=Kb(t,s);if(!c)return{kind:n,ownerPath:t,sourcePath:t,external:!0,src:s,attrs:r,lang:o,body:"",startLine:0,endLine:0,errors:[`Could not resolve Vue ${n} block source: ${s}`]};let l=M(e,c),u=l?Math.max(0,l.split(`
11
- `).length-1):0;return{kind:n,ownerPath:t,sourcePath:c,external:!0,src:s,attrs:r,lang:o,body:l,startLine:0,endLine:u,errors:l?[]:[`Vue ${n} block source not found: ${c}`]}}let a=Math.max(0,i.loc.start.line-1);return{kind:n,ownerPath:t,sourcePath:t,external:!1,attrs:r,lang:o,body:i.content,startLine:a,endLine:Math.max(a,i.loc.end.line-1),errors:[]}}function Kb(e,t){let n=t.split(/[?#]/,1)[0];if(!n||n.startsWith("/")||n.includes("://"))return null;let i=Ol($s.normalize($s.join($s.dirname(e),n)));return i===".."||i.startsWith("../")?null:i}function Jb(e){return{...e}}function Ml(e){return e instanceof Error?e.message:String(e)}function Tr(e){let t=Qb(e),n=t.descriptor.scriptSetup??t.descriptor.script;if(!n||n.src)return null;let i=Fs(n.lang??null);return i?{body:n.content,startLine:Math.max(0,n.loc.start.line-1),language:i}:null}var jl=Kt("ast-trees",{clearGroups:["whole-project","source-file"]});function me(e,t){if(yt(t))return Xb(e,t);let n=W(t);if(!n)return null;let i=M(e,t);return i?jl.get(e,t,i,()=>wi(n,i)):null}function Xb(e,t){let n=M(e,t);return n?jl.get(e,t,n,()=>{let i=Tr(n);if(!i)return null;let r=`
12
- `.repeat(i.startLine)+i.body;return wi(i.language,r)}):null}function An(e,t){let n=Yb(e,t);if(!n)return null;let i=Fn(n);return i?{calleeLeaf:i,memberAccess:Zb(n),line:e.startPosition.row}:null}function Yb(e,t){if(t==="rust")return e.type==="call_expression"?e.childForFieldName("function")??e.namedChild(0):e.type==="macro_invocation"?e.childForFieldName("macro")??e.namedChild(0):null;if(t==="python")return e.type!=="call"?null:e.childForFieldName("function")??e.namedChild(0);if(t==="typescript"||t==="tsx"||t==="javascript"){if(e.type==="call_expression")return e.childForFieldName("function")??e.namedChild(0);if(e.type==="new_expression")return e.childForFieldName("constructor")??e.namedChild(0)}return null}function Zb(e){switch(e.type){case"field_expression":case"member_expression":case"attribute":return!0;default:return!1}}function Fn(e){switch(e.type){case"identifier":case"type_identifier":case"property_identifier":case"shorthand_property_identifier":return e.text;case"field_expression":case"member_expression":case"attribute":{let t=e.namedChild(e.namedChildCount-1);return t?Fn(t):null}case"scoped_identifier":{let t=e.childForFieldName("name")??e.namedChild(e.namedChildCount-1);return t?Fn(t):null}case"super":case"self":case"this":return null;default:return null}}import{createHash as ey}from"crypto";import{createRequire as ty}from"module";import{dirname as ny,join as iy}from"path";import ry from"better-sqlite3";var oy=ty(import.meta.url),sy="evidence.db",_r=new WeakMap,ay=U("evidence-content-hash",{clearGroups:["whole-project","source-file"]});function cy(){for(let e of["../package.json","../../package.json"])try{return oy(e).version}catch{}return"0.0.0"}var $r=cy();function As(e){return ey("sha256").update(e).digest("hex")}function Qt(e,t,n){return ay.get(e,t,()=>As(n))}function Bl(e,t){process.env.SCIP_QUERY_DEBUG&&console.error(`evidence-cache: ${e}: ${t instanceof Error?t.message:String(t)}`)}function Di(e){if(_r.has(e))return _r.get(e)??null;let t=null;try{let n=new ry(iy(ny(e.config.dbPath),sy));n.pragma("journal_mode = WAL"),n.pragma("busy_timeout = 5000"),n.pragma("synchronous = NORMAL"),n.exec(`
7
+ ${r}
8
+ ORDER BY relative_path`,...i).map(a=>a.relative_path),s=t.extensions?o.filter(a=>t.extensions.some(c=>a.toLowerCase().endsWith(c.toLowerCase()))):o;return t.includeIgnored===!1?s.filter(a=>!e.isIgnored(a)):s}function Ib(e){return/[*?]/.test(e)?e.replace(/\*\*/g,"%").replace(/\*/g,"%").replace(/\?/g,"_"):`%${e}%`}function Qs(e,t){let n=Ib(t);return j(e,{like:n,includeIgnored:!1}).map(r=>({relativePath:r}))}import{extname as nu}from"path";var Db={".rs":"rust",".ts":"typescript",".mts":"typescript",".cts":"typescript",".tsx":"tsx",".js":"javascript",".jsx":"javascript",".mjs":"javascript",".cjs":"javascript",".py":"python",".pyi":"python",".java":"java",".kt":"kotlin",".kts":"kotlin",".scala":"scala",".sc":"scala",".rb":"ruby",".c":"c",".h":"c",".cc":"cpp",".cpp":"cpp",".cxx":"cpp",".hpp":"cpp",".hh":"cpp",".hxx":"cpp",".cs":"csharp",".php":"php",".vb":"vb"};function W(e){return Db[nu(e).toLowerCase()]??null}function Rt(e){return nu(e).toLowerCase()===".vue"}var ru=[];function $t(e){e.groups.length>0&&ru.push(e)}function Ys(e,t){let n=new Set(t.groups);for(let r of ru)r.groups.some(i=>n.has(i))&&(t.file!==void 0&&r.clearFile?r.clearFile(e,t.file):r.clearAll(e))}function iu(){let e=new WeakMap;return{cache:e,ensure(t){let n=e.get(t);return n||(n=new Map,e.set(t,n)),n}}}function U(e,t){let{cache:n,ensure:r}=iu(),i={get(o,s,a){let c=r(o);if(c.has(s))return c.get(s);let l=a();return c.set(s,l),l},invalidate(o,s){n.get(o)?.delete(s)},invalidateAll(o){n.delete(o)},size(o){return n.get(o)?.size??0}};return $t({name:e,groups:t.clearGroups,clearAll:o=>i.invalidateAll(o),clearFile:(o,s)=>i.invalidate(o,s)}),i}function Y(e,t){let n=new WeakMap,r={get(i,o){let s=n.get(i);if(s)return s.value;let a=o();return n.set(i,{value:a}),a},invalidate(i){n.delete(i)},has(i){return n.has(i)}};return $t({name:e,groups:t.clearGroups,clearAll:i=>r.invalidate(i)}),r}var Pb={clearGroups:["whole-project","source-file"]};function At(e){return rn(e,Pb)}function rn(e,t){let{cache:n,ensure:r}=iu(),i={get(o,s,a,c){let l=r(o),u=l.get(s);if(u&&u.source===a)return u.value;let d=c();return l.set(s,{source:a,value:d}),d},invalidate(o,s){n.get(o)?.delete(s)},invalidateAll(o){n.delete(o)}};return $t({name:e,groups:t.clearGroups,clearAll:o=>i.invalidateAll(o),clearFile:(o,s)=>i.invalidate(o,s)}),i}import{createRequire as Nb}from"module";var Le=Nb(import.meta.url),Gi=null,ou=!1;function Eb(){if(ou)return null;if(Gi)return Gi;try{return Gi=Le("tree-sitter"),Gi}catch{return ou=!0,null}}var su=new Map,Zs=new Set;function Tb(e){if(Zs.has(e))return null;let t=su.get(e);if(t)return t;let n;try{switch(e){case"rust":n=Le("tree-sitter-rust");break;case"typescript":n=Le("tree-sitter-typescript").typescript;break;case"tsx":n=Le("tree-sitter-typescript").tsx;break;case"javascript":n=Le("tree-sitter-javascript");break;case"python":n=Le("tree-sitter-python");break;case"java":n=Le("tree-sitter-java");break;case"kotlin":n=Le("tree-sitter-kotlin");break;case"scala":n=Le("tree-sitter-scala");break;case"ruby":n=Le("tree-sitter-ruby");break;case"c":n=Le("tree-sitter-c");break;case"cpp":n=Le("tree-sitter-cpp");break;case"csharp":n=Le("tree-sitter-c-sharp");break;case"php":n=Le("tree-sitter-php").php;break;case"vb":{let r=Le("tree-sitter-vb-dotnet");n=r.language??r;break}}}catch{return Zs.add(e),null}return su.set(e,n),n}var au=new Map;function _b(e){let t=au.get(e);if(t)return t;let n=Tb(e);if(!n)return null;let r=Eb();if(!r)return null;let i=new r;try{i.setLanguage(n)}catch{return Zs.add(e),null}return au.set(e,i),i}function Fb(e,t){return e.parse(r=>r>=t.length?null:t.slice(r,Math.min(t.length,r+16384)))}function Or(e,t){let n=_b(e);if(!n)return null;try{return Fb(n,t)}catch{return null}}import{readFileSync as $b}from"fs";import{join as Ab}from"path";var Mb=U("source-text",{clearGroups:["whole-project","source-file"]}),jb=U("source-lines",{clearGroups:["whole-project","source-file"]});function F(e,t){let n=t.replace(/\\/g,"/");return Mb.get(e,n,()=>{let r=Ab(e.config.projectRoot,n);try{return $b(r,"utf-8")}catch(i){if(Ob(i))return"";throw i}})}function Ob(e){return typeof e=="object"&&e!==null&&"code"in e&&(e.code==="ENOENT"||e.code==="ENOTDIR")}function Qe(e,t){let n=t.replace(/\\/g,"/");return jb.get(e,n,()=>{let r=F(e,n);return r?r.split(`
9
+ `):[]})}var Bb=/^\s*(?:\/\/|#|\/\*+|\*)\s*scip-query[\s:-]*ignore(?:[\s:-]+(dead(?:-code)?|stale|wrapper|passthrough|drift|extract|similar))?\b/i;function Br(e){let t=Bb.exec(e);return t?t[1]??"":null}function zi(e,t,n){if(n<=0)return!1;let r=Qe(e,t);if(r.length===0)return!1;for(let i=n-1;i>=0&&i>=n-5;i-=1){let o=(r[i]??"").trim();if(o!==""){if(Br(o)!==null)return!0;if(!o.startsWith("//")&&!o.startsWith("*")&&!o.startsWith("/*")&&!o.startsWith("@")&&!o.startsWith("#"))return!1}}return!1}import{parse as Gb}from"@vue/compiler-sfc";import{posix as ea}from"path";import{parse as Hb}from"@vue/compiler-sfc";var Vb=At("vue-sfc-units");function Ki(e,t){let n=uu(t),r=F(e,n);return Vb.get(e,n,r,()=>qb(e,n,r))}function uu(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function ta(e){let t=e?.toLowerCase();return!t||t==="js"||t==="javascript"||t==="jsx"?"javascript":t==="ts"||t==="typescript"?"typescript":t==="tsx"?"tsx":null}function on(e){return!e||e.body.length===0?0:e.body.split(`
10
+ `).length}function qb(e,t,n){let r={relativePath:t,template:null,scripts:[],styles:[],customBlocks:[],errors:[]};if(!n)return r;let i;try{i=Hb(n,{filename:t})}catch(s){return r.errors.push(lu(s)),r}r.errors.push(...i.errors.map(lu));let{descriptor:o}=i;return o.template&&(r.template=Ji(e,t,"template",o.template)),o.script&&r.scripts.push(cu(e,t,o.script,!1)),o.scriptSetup&&r.scripts.push(cu(e,t,o.scriptSetup,!0)),r.styles=o.styles.map(s=>Ji(e,t,"style",s)),r.customBlocks=o.customBlocks.map(s=>Ji(e,t,"custom",s)),r.errors.push(...[r.template,...r.scripts,...r.styles,...r.customBlocks].flatMap(s=>s?.errors??[])),r}function cu(e,t,n,r){let i=Ji(e,t,"script",n);return{...i,kind:"script",setup:r,astLanguage:ta(i.lang)}}function Ji(e,t,n,r){let i=Wb(r.attrs),o=typeof i.lang=="string"?i.lang:null,s=typeof i.src=="string"?i.src:typeof r.src=="string"?r.src:void 0;if(s){let c=Ub(t,s);if(!c)return{kind:n,ownerPath:t,sourcePath:t,external:!0,src:s,attrs:i,lang:o,body:"",startLine:0,endLine:0,errors:[`Could not resolve Vue ${n} block source: ${s}`]};let l=F(e,c),u=l?Math.max(0,l.split(`
11
+ `).length-1):0;return{kind:n,ownerPath:t,sourcePath:c,external:!0,src:s,attrs:i,lang:o,body:l,startLine:0,endLine:u,errors:l?[]:[`Vue ${n} block source not found: ${c}`]}}let a=Math.max(0,r.loc.start.line-1);return{kind:n,ownerPath:t,sourcePath:t,external:!1,attrs:i,lang:o,body:r.content,startLine:a,endLine:Math.max(a,r.loc.end.line-1),errors:[]}}function Ub(e,t){let n=t.split(/[?#]/,1)[0];if(!n||n.startsWith("/")||n.includes("://"))return null;let r=uu(ea.normalize(ea.join(ea.dirname(e),n)));return r===".."||r.startsWith("../")?null:r}function Wb(e){return{...e}}function lu(e){return e instanceof Error?e.message:String(e)}function Xi(e){let t=Gb(e),n=t.descriptor.scriptSetup??t.descriptor.script;if(!n||n.src)return null;let r=ta(n.lang??null);return r?{body:n.content,startLine:Math.max(0,n.loc.start.line-1),language:r}:null}var du=rn("ast-trees",{clearGroups:["whole-project","source-file"]});function fe(e,t){if(Rt(t))return zb(e,t);let n=W(t);if(!n)return null;let r=F(e,t);return r?du.get(e,t,r,()=>Or(n,r)):null}function zb(e,t){let n=F(e,t);return n?du.get(e,t,n,()=>{let r=Xi(n);if(!r)return null;let i=`
12
+ `.repeat(r.startLine)+r.body;return Or(r.language,i)}):null}function Wn(e,t){let n=Jb(e,t);if(!n)return null;let r=Un(n);return r?{calleeLeaf:r,memberAccess:Kb(n),line:e.startPosition.row}:null}function Jb(e,t){if(t==="rust")return e.type==="call_expression"?e.childForFieldName("function")??e.namedChild(0):e.type==="macro_invocation"?e.childForFieldName("macro")??e.namedChild(0):null;if(t==="python")return e.type!=="call"?null:e.childForFieldName("function")??e.namedChild(0);if(t==="typescript"||t==="tsx"||t==="javascript"){if(e.type==="call_expression")return e.childForFieldName("function")??e.namedChild(0);if(e.type==="new_expression")return e.childForFieldName("constructor")??e.namedChild(0)}return null}function Kb(e){switch(e.type){case"field_expression":case"member_expression":case"attribute":return!0;default:return!1}}function Un(e){switch(e.type){case"identifier":case"type_identifier":case"property_identifier":case"shorthand_property_identifier":return e.text;case"field_expression":case"member_expression":case"attribute":{let t=e.namedChild(e.namedChildCount-1);return t?Un(t):null}case"scoped_identifier":{let t=e.childForFieldName("name")??e.namedChild(e.namedChildCount-1);return t?Un(t):null}case"super":case"self":case"this":return null;default:return null}}import{createHash as Xb}from"crypto";import{readFileSync as Qb}from"fs";import{createRequire as Yb}from"module";import{dirname as mu,join as pu}from"path";import Zb from"better-sqlite3";var eS=Yb(import.meta.url),tS="evidence.db",Qi=new WeakMap,nS=U("evidence-content-hash",{clearGroups:["whole-project","source-file"]}),rS=U("evidence-project-fingerprint",{clearGroups:["whole-project"]});function iS(){for(let e of["../package.json","../../package.json"])try{return eS(e).version}catch{}return"0.0.0"}var Gn=iS();function zn(e){return Xb("sha256").update(e).digest("hex")}function Ye(e,t,n){return nS.get(e,t,()=>zn(n))}function fu(e){return rS.get(e,"current",()=>{try{let t=JSON.parse(Qb(pu(mu(e.config.dbPath),"meta.json"),"utf-8"));if(t.version!==2&&t.version!==3||t.status!=="complete"||t.fingerprint===void 0)return null;let n=Array.isArray(t.indexedLanguages)?[...t.indexedLanguages].sort():[];return zn(JSON.stringify({fingerprint:t.fingerprint,indexedLanguages:n}))}catch(t){return na("project fingerprint unavailable",t),null}})}function na(e,t){process.env.SCIP_QUERY_DEBUG&&console.error(`evidence-cache: ${e}: ${t instanceof Error?t.message:String(t)}`)}function Jn(e){if(Qi.has(e))return Qi.get(e)??null;let t=null;try{let n=new Zb(pu(mu(e.config.dbPath),tS));n.pragma("journal_mode = WAL"),n.pragma("busy_timeout = 5000"),n.pragma("synchronous = NORMAL"),n.exec(`
13
13
  CREATE TABLE IF NOT EXISTS file_evidence (
14
14
  kind TEXT NOT NULL,
15
15
  relative_path TEXT NOT NULL,
@@ -27,17 +27,28 @@ import{program as Is}from"commander";import{realpathSync as Db}from"fs";import{f
27
27
  payload TEXT NOT NULL,
28
28
  PRIMARY KEY (relative_path, symbol)
29
29
  );
30
+ CREATE TABLE IF NOT EXISTS semantic_references (
31
+ relative_path TEXT NOT NULL,
32
+ symbol TEXT NOT NULL,
33
+ project_fingerprint TEXT NOT NULL,
34
+ version TEXT NOT NULL,
35
+ payload TEXT NOT NULL,
36
+ PRIMARY KEY (relative_path, symbol)
37
+ );
30
38
  `),t={evidence:n,readFileEvidence:n.prepare("SELECT payload FROM file_evidence WHERE kind = ? AND relative_path = ? AND content_hash = ? AND version = ?"),writeFileEvidence:n.prepare("INSERT OR REPLACE INTO file_evidence (kind, relative_path, content_hash, version, payload) VALUES (?, ?, ?, ?, ?)"),readCallees:n.prepare(`SELECT payload FROM semantic_callees
31
39
  WHERE relative_path = ? AND symbol = ? AND content_hash = ? AND deps_digest = ? AND version = ?`),writeCallees:n.prepare(`INSERT OR REPLACE INTO semantic_callees
32
- (relative_path, symbol, content_hash, deps_digest, version, payload) VALUES (?, ?, ?, ?, ?, ?)`),dropStaleCallees:n.prepare("DELETE FROM semantic_callees WHERE relative_path = ? AND content_hash != ?")}}catch(n){Bl("disabled (open failed)",n)}return _r.set(e,t),t}function Ii(e,t,n){Bl(`disabled (${t})`,n),_r.set(e,null)}function Fr(e,t,n,i){let r=Di(e);if(!r)return null;try{return r.readFileEvidence.get(t,n,i,$r)?.payload??null}catch(o){return Ii(e,"file_evidence read",o),null}}function Ar(e,t,n,i,r){let o=Di(e);if(o)try{o.writeFileEvidence.run(t,n,i,$r,r)}catch(s){Ii(e,"file_evidence write",s)}}function Hl(e){let t=Di(e);if(!t)return 0;try{return t.evidence.prepare("SELECT COUNT(*) AS count FROM semantic_callees").get()?.count??0}catch(n){return Ii(e,"semantic_callees count",n),0}}function Vl(e,t,n,i,r){let o=Di(e);if(!o)return null;try{return o.readCallees.get(t,n,i,r,$r)?.payload??null}catch(s){return Ii(e,"semantic_callees read",s),null}}function ql(e,t){if(t.length===0)return;let n=Di(e);if(n)try{n.evidence.transaction(()=>{let i=new Set;for(let r of t){let o=`${r.relativePath}\0${r.contentHash}`;i.has(o)||(i.add(o),n.dropStaleCallees.run(r.relativePath,r.contentHash)),n.writeCallees.run(r.relativePath,r.symbol,r.contentHash,r.depsDigest,$r,r.payload)}})()}catch(i){Ii(e,"semantic_callees write",i)}}function Pi(e){return e.type==="comment"||e.type==="line_comment"||e.type==="block_comment"}var ly=new Set(["function_declaration","method_definition","method_signature","function_signature"]);function Mr(e,t){let n=dy(e,t);if(n)return{name:n.name,startLine:n.definitionNode.startPosition.row,endLine:n.definitionNode.endPosition.row,paramCount:Gl(n.functionNode),params:Ul(n.functionNode),paramsEndLine:Wl(n.functionNode),isLiteralPassthrough:zl(n.functionNode,t)};if(!uy(e.type,t))return null;let i=e.childForFieldName("name")??e.namedChildren.find(r=>r.type==="identifier"||r.type==="property_identifier");return i?{name:i.text,startLine:e.startPosition.row,endLine:e.endPosition.row,paramCount:Gl(e),params:Ul(e),paramsEndLine:Wl(e),isLiteralPassthrough:zl(e,t)}:null}function Kl(e){return e.namedChildren.find(t=>t.type==="parameters"||t.type==="formal_parameters")}function Ul(e){let t=Kl(e);if(!t)return[];let n=[];for(let i of t.namedChildren){if(Pi(i))continue;if(i.type==="identifier"){n.push({name:i.text,simple:!0});continue}let r=i.namedChildren.some(a=>a.type.endsWith("_modifier"))||/^\s*(?:public|private|protected|readonly|override)\b/.test(i.text),o=i.childForFieldName("pattern");if(!r&&o&&o.type==="identifier"){n.push({name:o.text,simple:!0});continue}let s=i.namedChildren.find(a=>a.type==="identifier");n.push({name:o?.type==="identifier"?o.text:s?.text??"",simple:!1})}return n}function Wl(e){let t=Kl(e);return t?t.endPosition.row:e.startPosition.row}function uy(e,t){return t==="rust"?e==="function_item"||e==="function_signature_item":t==="python"?e==="function_definition":t==="typescript"||t==="tsx"||t==="javascript"?ly.has(e):!1}function dy(e,t){if(t!=="typescript"&&t!=="tsx"&&t!=="javascript")return null;if(e.type==="variable_declarator"){let n=e.childForFieldName("name")??e.namedChild(0),i=e.childForFieldName("value")??e.namedChild(1);return!n||!i||i.type!=="arrow_function"&&i.type!=="function_expression"?null:{name:n.text,definitionNode:e,functionNode:i}}if(e.type==="public_field_definition"){let n=e.childForFieldName("name")??e.namedChild(0),i=e.childForFieldName("value")??e.namedChild(1);return!n||!i||i.type!=="arrow_function"&&i.type!=="function_expression"?null:{name:n.text,definitionNode:e,functionNode:i}}return null}function Gl(e){let t=e.namedChildren.find(i=>i.type==="parameters"||i.type==="formal_parameters");if(!t)return 0;let n=0;for(let i of t.namedChildren)Pi(i)||(n+=1);return n}function zl(e,t){let n=e.namedChildren.find(d=>d.type==="block"||d.type==="statement_block");if(!n)return!1;let i=n.namedChildren.filter(d=>!Pi(d));if(i.length!==1)return!1;let r=i[0],o=null;if(r.type==="return_statement"||r.type==="expression_statement"?o=r.namedChild(0)??null:t==="rust"&&(r.type==="call_expression"||r.type==="macro_invocation")&&(o=r),!o)return!1;let s=t==="python"?"call":"call_expression";if(o.type!==s)return!1;let a=o.namedChildren.find(d=>d.type==="arguments"||d.type==="argument_list");if(!a)return!1;let c=a.namedChildren.filter(d=>!Pi(d)),l=e.namedChildren.find(d=>d.type==="parameters"||d.type==="formal_parameters");if(!l)return!1;let u=[];for(let d of l.namedChildren){if(d.type==="identifier"){u.push(d.text);continue}let m=d.namedChildren.find(p=>p.type==="identifier");m&&u.push(m.text)}if(c.length!==u.length)return!1;for(let d=0;d<u.length;d+=1){let m=c[d];if(m.type!=="identifier"||m.text!==u[d])return!1}return!0}var my=new Set(["identifier","type_identifier","field_identifier"]),py=new Set(["identifier"]),fy=new Set(["identifier","property_identifier","type_identifier","shorthand_property_identifier","shorthand_property_identifier_pattern"]),gy=new Set(["rust","python"]),hy=/\{([^{}]*)\}/g,by=/\b([A-Za-z_][\w]*)\b/g;function Jl(e,t){return yy(t).has(e.type)}function Ql(e,t){return gy.has(t)&&e.type==="string_content"}function Ms(e){let t=0;for(let i of e.values()){let r=i[i.length-1];r!==void 0&&r>t&&(t=r)}let n=new Array(t+1);for(let i=0;i<=t;i+=1)n[i]=new Set;for(let[i,r]of e)for(let o of r)n[o].add(i);return n}function yy(e){return e==="rust"?my:e==="python"?py:fy}function Xl(e,t){let n=e.startPosition.row;for(let i of e.text.matchAll(hy)){let r=i[1]??"";for(let o of r.matchAll(by))o[1]&&t(o[1],n)}}var Sy=[/\bdefault\s*=\s*"([^"]+)"/g,/\bwith\s*=\s*"([^"]+)"/g,/\bserialize_with\s*=\s*"([^"]+)"/g,/\bdeserialize_with\s*=\s*"([^"]+)"/g,/\bskip_serializing_if\s*=\s*"([^"]+)"/g,/\bgetter\s*=\s*"([^"]+)"/g,/\brename_all_with\s*=\s*"([^"]+)"/g,/\bschema_with\s*=\s*"([^"]+)"/g],xy=/^#!?\[\s*serde\s*\(/,Cy=/^#!?\[\s*schemars\s*\(/,vy=/^#!?\[\s*validate\s*\(/,Ry=new Set(["invoke","invokeTauriCommand","listen","once","emit","subscribe","dispatch","sendCommand","callRust"]);function Yl(e,t,n){if(t!=="typescript"&&t!=="tsx"&&t!=="javascript"||e.type!=="call_expression")return;let i=e.childForFieldName("function")??e.namedChild(0);if(!i)return;let r=Fn(i);if(!r||!Ry.has(r))return;let o=e.namedChildren.find(c=>c.type==="arguments");if(!o)return;let s=o.namedChild(0);if(!s||s.type!=="string")return;let a=s.namedChildren.find(c=>c.type==="string_fragment");a&&n.add(a.text)}function Zl(e,t){let n=xy.test(e),i=Cy.test(e),r=vy.test(e);if(!(!n&&!i&&!r))for(let o of Sy){o.lastIndex=0;let s;for(;(s=o.exec(e))!==null;){let a=s[1],c=a.split("::").pop()??a;c==="is_none"&&/\bOption\b/.test(a)||c==="is_empty"&&/\b(String|Vec|HashMap|BTreeMap|HashSet|BTreeSet)\b/.test(a)||c&&t.add(c)}}}function eu(e,t){let n=new Map,i=(s,a)=>{if(s===a)return;let c=n.get(s);c||(c=new Set,n.set(s,c)),c.add(a)},r=t==="python"?new Set(["identifier"]):new Set(["type_identifier"]),o=(s,a)=>{let c=l=>{r.has(l.type)&&l.text!==a&&i(l.text,a);for(let u of l.children)c(u)};for(let l of s.children)c(l)};if(t==="rust")for(let s of e.rootNode.descendantsOfType(["struct_item","enum_item","union_item","type_item"])){let a=s.namedChildren.find(l=>l.type==="type_identifier")?.text;if(!a)continue;let c=s.namedChildren.find(l=>l.type==="field_declaration_list"||l.type==="enum_variant_list"||l.type==="ordered_field_declaration_list");c&&o(c,a),s.type==="type_item"&&o(s,a)}else if(t==="python")for(let s of e.rootNode.descendantsOfType("class_definition")){let a=s.namedChildren.find(l=>l.type==="identifier")?.text;if(!a)continue;let c=s.namedChildren.find(l=>l.type==="block");if(c)for(let l of c.descendantsOfType("type"))for(let u of l.descendantsOfType("identifier"))u.text!==a&&i(u.text,a)}else for(let s of e.rootNode.descendantsOfType(["interface_declaration","type_alias_declaration","class_declaration"])){let a=s.namedChildren.find(c=>c.type==="type_identifier")?.text;a&&o(s,a)}return n}var ky=Kt("source-facts",{clearGroups:["whole-project","source-file"]});function oe(e,t){let n=M(e,t);if(!n)return null;let i=wy(t,n);return i?ky.get(e,t,n,()=>Ly(e,t,i,n)):null}function wy(e,t){return yt(e)?Tr(t)?.language??null:W(e)}function Ly(e,t,n,i){let r=Qt(e,t,i),o=Fr(e,"source-facts",t,r);if(o){let c=Iy(o);if(c&&c.language===n)return c}let s=me(e,t);if(!s)return null;let a=Ny(s,n);return Ar(e,"source-facts",t,r,Dy(a)),a}function Dy(e){let t={language:e.language,callables:e.callables,callSites:e.callSites,typeContainerMap:[...e.typeContainerMap.entries()].map(([n,i])=>[n,[...i]]),identifierLineMap:[...e.identifierLineMap.entries()],rustAttrReferencedNames:[...e.rustAttrReferencedNames],crossLanguageDispatchNames:[...e.crossLanguageDispatchNames]};return JSON.stringify(t)}function Iy(e){try{let t=JSON.parse(e),n=new Map(t.identifierLineMap);return{language:t.language,callables:t.callables,callSites:t.callSites,typeContainerMap:new Map(t.typeContainerMap.map(([i,r])=>[i,new Set(r)])),identifierLineMap:n,identifiersByLine:Ms(n),fileIdentifiers:new Set(n.keys()),rustAttrReferencedNames:new Set(t.rustAttrReferencedNames),crossLanguageDispatchNames:new Set(t.crossLanguageDispatchNames)}}catch{return null}}function Os(e,t,n,i){let r=oe(e,t);return r?Py(r,n,i)?.isLiteralPassthrough??!0:!0}function Py(e,t,n){return e.callables.find(i=>i.startLine===t&&i.endLine===n)??null}function Ny(e,t){let n=[],i=[],r=new Set,o=new Set,s=new Map,a=(l,u)=>{let d=s.get(l);if(!d){s.set(l,[u]);return}d[d.length-1]!==u&&d.push(u)},c=l=>{let u=Mr(l,t);u&&n.push(u);let d=An(l,t);d&&i.push(d),Yl(l,t,o),t==="rust"&&(l.type==="attribute_item"||l.type==="inner_attribute_item")&&Zl(l.text,r),Jl(l,t)&&a(l.text,l.startPosition.row),Ql(l,t)&&Xl(l,a);for(let m of l.children)c(m)};return c(e.rootNode),{language:t,callables:n,callSites:i,typeContainerMap:eu(e,t),identifierLineMap:s,identifiersByLine:Ms(s),fileIdentifiers:new Set(s.keys()),rustAttrReferencedNames:r,crossLanguageDispatchNames:o}}var tu=new Set(["rust","typescript","tsx","javascript","python"]);function js(e,t){let n=oe(e,t);return!n||!tu.has(n.language)?null:n.callables.map(i=>({name:i.name,startLine:i.startLine,endLine:i.endLine}))}function Mn(e,t){let n=oe(e,t);return!n||!tu.has(n.language)?null:n.callSites}function Bs(e,t){return oe(e,t)?.typeContainerMap??new Map}import{ElementTypes as Ey,NodeTypes as iu,parse as Ty}from"@vue/compiler-dom";import{parse as Uj}from"@vue/compiler-sfc";function Or(e,t){return e.split(t).filter(Boolean).map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join("")}var _y=Dr("vue-template-facts"),$y=new Set(["component","keep-alive","slot","suspense","teleport","template","transition","transition-group"]),Fy=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","link","main","map","mark","menu","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","search","section","select","slot","small","source","span","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr"]),Ay=new Set(["div","span","template"]),My=new Set(["as","await","break","case","catch","class","const","continue","debugger","default","delete","do","else","export","extends","false","finally","for","from","function","if","import","in","instanceof","let","new","null","of","return","super","switch","this","throw","true","try","typeof","undefined","var","void","while","with","yield"]);function ru(e,t){let n=t.replace(/\\/g,"/"),i=M(e,n);return _y.get(e,n,i,()=>Oy(n,Er(e,n).template))}function Oy(e,t){let n={relativePath:e,template:t?{startLine:t.startLine,endLine:t.endLine}:null,componentTags:[],nativeTags:[],builtinTags:[],props:[],events:[],directives:[],slots:[],expressionIdentifiers:[],structuralTokens:[]};if(!t)return n;let i;try{i=Ty(t.body,{comments:!1})}catch{return n}let r=new Set,o=s=>{s.trim()&&r.add(s)};return ou(i.children,t.startLine,n,o),n.structuralTokens=[...r].sort(),n}function ou(e,t,n,i){for(let r of e)r.type===iu.ELEMENT&&(jy(r,t,n,i),ou(r.children,t,n,i))}function jy(e,t,n,i){let r=zy(e.tag),o={tag:e.tag,normalized:r,kind:Gy(e),startLine:On(t,e.loc.start.line),endLine:On(t,e.loc.end.line)};o.kind==="component"?(n.componentTags.push(o),i(`component:${r}`)):o.kind==="builtin"?(n.builtinTags.push(o),i(`builtin:${r}`)):(n.nativeTags.push(o),Ay.has(e.tag)||i(`native:${e.tag}`));for(let s of e.props)By(s,t,n,i)}function By(e,t,n,i){if(e.type===iu.ATTRIBUTE){let a=e.value?.content??null,c=nu("prop",e.name,a,t,e.loc.start.line,e.loc.end.line);n.props.push(c),i(`prop:${e.name}`);return}let r=Vy(e),o=su(e.exp),s=nu(Hy(e.name),r,o,t,e.loc.start.line,e.loc.end.line);switch(s.kind){case"prop":n.props.push(s),i(`prop:${r}`);break;case"event":n.events.push(s),i(`event:${r}`);break;case"slot":n.slots.push(s),i(`slot:${r}`);break;case"directive":n.directives.push(s),i(`directive:${r}`);break}o&&qy(o,t,e.loc.start.line,n,i)}function nu(e,t,n,i,r,o){return{kind:e,name:t,value:n,startLine:On(i,r),endLine:On(i,o)}}function Hy(e){switch(e){case"bind":case"model":return"prop";case"on":return"event";case"slot":return"slot";default:return"directive"}}function Vy(e){let t=su(e.arg);return t||e.name}function su(e){if(!e)return null;let t=("content"in e&&typeof e.content=="string"?e.content:e.loc.source).trim();return t||null}function qy(e,t,n,i,r){for(let o of Uy(e)){let s={name:o,startLine:On(t,n),endLine:On(t,n)};i.expressionIdentifiers.push(s),r(`id:${o}`)}}function Uy(e){let t=new Set,n=Wy(e),i=/\b[A-Za-z_$][A-Za-z0-9_$]*\b/g,r;for(;r=i.exec(n);){let o=r[0];My.has(o)||/^[A-Z_]+$/.test(o)||t.add(o)}return[...t].sort()}function Wy(e){return e.replace(/\/\*[\s\S]*?\*\//g," ").replace(/\/\/.*$/gm," ").replace(/`(?:\\[\s\S]|\$\{([^}]*)\}|[^`\\])*`/g,(t,n)=>n??" ").replace(/'(?:\\[\s\S]|[^'\\])*'/g," ").replace(/"(?:\\[\s\S]|[^"\\])*"/g," ")}function Gy(e){let t=e.tag;return e.tagType===Ey.COMPONENT?"component":$y.has(t)?"builtin":Fy.has(t)?"native":/^[A-Z]/.test(t)||t.includes("-")?"component":"native"}function zy(e){return Or(e,/[-_:]/)}function On(e,t){return e+Math.max(0,t-1)}import{readdirSync as Ky}from"fs";import{execFileSync as Jy}from"child_process";import{extname as Hs,join as Qy}from"path";var Xy=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs",".vue",".rs",".py",".pyi",".java",".kt",".kts",".scala",".sc",".rb",".c",".h",".cc",".cpp",".cxx",".hpp",".hh",".hxx",".cs",".vb",".php",".dart"],au=[".vue"],cu=new Set(Xy.map(e=>e.toLowerCase())),Yy=[...cu].sort().join(","),Vs=new Set(["node_modules",".git","target","dist","build",".next",".nuxt",".cache",".turbo","out","coverage",".scipquery-cache","__pycache__",".venv","venv",".idea",".vscode"]);function De(e,t={}){let n=t.includeIndexed??!0,i=t.includeAuxiliary??!0,r=t.extensions?.map(c=>c.toLowerCase()),o=r?new Set(r):cu,s=r?[...o].sort().join(","):Yy,a=`${n?"1":"0"}|${i?"1":"0"}|${s}`;return Zy.get(e,a,()=>{let c=new Set;if(n)for(let l of j(e,{includeIgnored:!1}))o.has(Hs(l).toLowerCase())&&c.add(l);if(i)for(let l of eS(e.config.projectRoot,o))e.isIgnored(l)||n&&c.has(l)||c.add(l);return[...c].sort()})}var Zy=U("source-files",{clearGroups:[]});function eS(e,t){return tS(e,t)??nS(e,t)}function tS(e,t){try{let n=Jy("git",["ls-files","--cached","--others","--exclude-standard"],{cwd:e,encoding:"utf-8",timeout:1e4,stdio:["ignore","pipe","ignore"]}),i=new Set;for(let r of n.split(`
33
- `)){let o=r.trim();o&&t.has(Hs(o).toLowerCase())&&i.add(o)}return i}catch{return null}}function nS(e,t){let n=new Set,i=r=>{let o=r?Qy(e,r):e,s;try{s=Ky(o,{withFileTypes:!0})}catch{return}for(let a of s)if(!Vs.has(a.name)){if(a.isDirectory()){i(r?`${r}/${a.name}`:a.name);continue}t.has(Hs(a.name).toLowerCase())&&n.add(r?`${r}/${a.name}`:a.name)}};return i(""),n}var iS=new Set(["ref","shallowRef","reactive","computed","watch","watchEffect"]),rS=new Set(["onBeforeMount","onMounted","onBeforeUpdate","onUpdated","onBeforeUnmount","onUnmounted","onActivated","onDeactivated","onErrorCaptured"]),oS=new Set(["axios","fetch","runRequest","useAsyncData","useFetch","useResource"]),sS=new Set(["defineEmits","defineExpose","defineModel","defineOptions","defineProps","withDefaults"]),aS=new Set(["catch","for","function","if","return","switch","while"]);function lu(e){let t={imports:[],functions:[],calls:[],composables:[],stores:[],reactivity:[],lifecycle:[],requests:[],macros:[],lineCount:0,externalLineCount:0,externalScriptPaths:[],unresolvedScripts:[]};for(let n of e.scripts){t.lineCount+=Jt(n),n.external&&(t.externalLineCount+=Jt(n),t.externalScriptPaths.push(n.sourcePath));for(let r of n.errors)t.unresolvedScripts.push({sourcePath:n.sourcePath,reason:r});if(!n.body||!n.astLanguage){n.astLanguage||t.unresolvedScripts.push({sourcePath:n.sourcePath,reason:`Unsupported Vue script language: ${n.lang??"unknown"}`});continue}t.imports.push(...dS(n));let i=wi(n.astLanguage,n.body);i?lS(n,i.rootNode,t):uS(n,t)}return cS(t),t.externalScriptPaths=du(t.externalScriptPaths),t}function cS(e){e.composables=jn(e,"composable"),e.stores=jn(e,"store"),e.reactivity=jn(e,"reactivity"),e.lifecycle=jn(e,"lifecycle"),e.requests=jn(e,"request"),e.macros=jn(e,"macro")}function jn(e,t){return du(e.calls.filter(n=>n.categories.includes(t)).map(n=>n.name))}function lS(e,t,n){let i=new Set,r=new Set,o=s=>{let a=Mr(s,e.astLanguage);if(a){let l=`${a.name}:${a.startLine}:${a.endLine}`;r.has(l)||(r.add(l),n.functions.push({name:a.name,sourcePath:e.sourcePath,startLine:e.startLine+a.startLine,endLine:e.startLine+a.endLine,setup:e.setup}))}let c=An(s,e.astLanguage);if(c){let l=`${c.calleeLeaf}:${c.line}`;i.has(l)||(i.add(l),n.calls.push({name:c.calleeLeaf,sourcePath:e.sourcePath,line:e.startLine+c.line,categories:uu(c.calleeLeaf),setup:e.setup}))}for(let l of s.children)o(l)};o(t)}function uS(e,t){for(let n of e.body.matchAll(/\b([A-Za-z_$][\w$]*)\s*\(/g)){let i=n[1];!i||aS.has(i)||t.calls.push({name:i,sourcePath:e.sourcePath,line:e.startLine+jr(e.body,n.index??0),categories:uu(i),setup:e.setup})}for(let n of e.body.matchAll(/\bfunction\s+([A-Za-z_$][\w$]*)\b/g)){let i=n[1];if(!i)continue;let r=e.startLine+jr(e.body,n.index??0);t.functions.push({name:i,sourcePath:e.sourcePath,startLine:r,endLine:r,setup:e.setup})}for(let n of e.body.matchAll(/\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*(?:async\s*)?(?:function\b|\([^)]*\)\s*=>|[A-Za-z_$][\w$]*\s*=>)/g)){let i=n[1];if(!i)continue;let r=e.startLine+jr(e.body,n.index??0);t.functions.push({name:i,sourcePath:e.sourcePath,startLine:r,endLine:r,setup:e.setup})}}function dS(e){let t=[];for(let n of e.body.matchAll(/\bimport\s+(?:type\s+)?([^'";]+?)\s+from\s+['"]([^'"]+)['"]/g)){let i=n[1]?.trim(),r=n[2];if(!i||!r)continue;let o=e.startLine+jr(e.body,n.index??0);for(let s of mS(i))t.push({local:s,source:r,sourcePath:e.sourcePath,line:o,setup:e.setup})}return t}function mS(e){let t=[],i=e.split(",").map(s=>s.trim()).filter(Boolean)[0];i&&!i.startsWith("{")&&!i.startsWith("*")&&t.push(i);let r=/\{([^}]*)\}/.exec(e)?.[1];if(r)for(let s of r.split(",")){let a=s.trim();if(!a)continue;let c=/\bas\s+([A-Za-z_$][\w$]*)$/.exec(a)?.[1];t.push(c??a.replace(/^type\s+/,"").trim())}let o=/\*\s+as\s+([A-Za-z_$][\w$]*)/.exec(e)?.[1];return o&&t.push(o),t.filter(s=>/^[A-Za-z_$][\w$]*$/.test(s))}function uu(e){let t=["call"];return/^use[A-Z0-9_]/.test(e)&&t.push("composable"),/^use[A-Z0-9_].*Store$/.test(e)&&t.push("store"),iS.has(e)&&t.push("reactivity"),rS.has(e)&&t.push("lifecycle"),oS.has(e)&&t.push("request"),sS.has(e)&&t.push("macro"),t}function jr(e,t){let n=0;for(let i=0;i<t&&i<e.length;i+=1)e.charCodeAt(i)===10&&(n+=1);return n}function du(e){return[...new Set(e)].sort()}var pS=new Set(["in","key","of"]),fS=new Set(["computed","defineEmits","defineProps","reactive","ref","watch","watchEffect"]);function Bn(e,t={}){let n=De(e,{extensions:[".vue"]}).filter(r=>!t.scope||r.includes(t.scope)).sort();return(typeof t.scanLimit=="number"&&t.scanLimit>0?n.slice(0,t.scanLimit):n).map(r=>gS(e,r)).filter(r=>(t.minTemplateTokens===void 0||r.templateTokens.size>=t.minTemplateTokens)&&(t.minBehaviorTokens===void 0||r.behaviorTokens.size>=t.minBehaviorTokens))}function gS(e,t){let n=t.replace(/\\/g,"/"),i=Er(e,n),r=ru(e,n),o=lu(i),s=bS(r),a=r.expressionIdentifiers.map(h=>h.name).filter(h=>!s.includes(h)).filter((h,g,b)=>b.indexOf(h)===g).sort(),c=r.componentTags.map(h=>h.normalized).filter((h,g,b)=>b.indexOf(h)===g).sort(),l=_e(e,n).length,u=Jt(i.template),d=o.lineCount,m=i.styles.reduce((h,g)=>h+Jt(g),0),p=i.customBlocks.reduce((h,g)=>h+Jt(g),0);return{file:n,sfc:i,templateFacts:r,scriptFacts:o,templateTokens:new Set(r.structuralTokens),behaviorTokens:hS(r,o,a),templateBindingNames:a,templateLocalNames:s,componentNames:c,sfcLines:l,totalLines:l+o.externalLineCount,templateLines:u,scriptLines:d,styleLines:m,externalScriptLines:o.externalLineCount,externalScriptPaths:o.externalScriptPaths,customBlockLines:p}}function hS(e,t,n){let i=new Set;for(let r of t.composables)i.add(`composable:${r}`);for(let r of t.stores)i.add(`store:${r}`);for(let r of t.reactivity)i.add(`reactivity:${r}`);for(let r of t.lifecycle)i.add(`lifecycle:${r}`);for(let r of t.requests)i.add(`request:${r}`);for(let r of t.macros)i.add(`macro:${r}`);for(let r of t.functions){if(fS.has(r.name))continue;i.add(`function:${r.name}`);let o=/^[a-z]+/.exec(r.name)?.[0]??null;o&&o.length>2&&o!==r.name&&i.add(`function-verb:${o}`)}for(let r of e.events)i.add(`template-event:${r.name}`);for(let r of n)i.add(`template-binding:${r}`);return i}function bS(e){let t=new Set;for(let n of e.directives)if(n.name==="for"&&n.value)for(let i of yS(n.value))t.add(i);for(let n of e.slots)if(n.value)for(let i of mu(n.value))t.add(i);return[...t].sort()}function yS(e){let t=/^(.*?)\s+(?:in|of)\s+/.exec(e.trim());return t?mu(t[1]??""):[]}function mu(e){let t=[];for(let n of e.matchAll(/\b[A-Za-z_$][\w$]*\b/g)){let i=n[0];pS.has(i)||t.push(i)}return t}import{extname as SS}from"path";var xS=[".tsx",".jsx"],pu=new Set(["useActionState","useCallback","useContext","useDebugValue","useDeferredValue","useEffect","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useOptimistic","useReducer","useRef","useState","useSyncExternalStore","useTransition"]),CS=new Set(["useEffect","useInsertionEffect","useLayoutEffect"]),vS=new Set(["useActionState","useOptimistic","useReducer","useRef","useState"]),RS=new Set(["useLocation","useNavigate","useParams","useSearchParams","useTranslation"]),kS=new Set(["axios","fetch","gql","graphql","mutate","query","request","useMutation","useQuery","useSuspenseQuery"]),wS=new Set(["add","apply","cancel","change","clear","close","create","delete","fetch","filter","handle","load","open","refresh","remove","render","reset","save","select","submit","toggle","update"]),LS=new Set(["children","className","false","key","null","style","true","undefined"]),DS=new Set(["aria-hidden","className","clipRule","d","fill","fillRule","height","role","stroke","strokeLinecap","strokeLinejoin","strokeWidth","style","viewBox","width","xmlns"]);function Hn(e,t={}){let n=De(e,{extensions:xS}).filter(r=>!t.scope||r.includes(t.scope)).sort();return(typeof t.scanLimit=="number"&&t.scanLimit>0?n.slice(0,t.scanLimit):n).flatMap(r=>IS(e,r)).filter(r=>(t.minJsxTokens===void 0||r.jsxTokens.size>=t.minJsxTokens)&&(t.minBehaviorTokens===void 0||r.behaviorTokens.size>=t.minBehaviorTokens))}function IS(e,t){let n=t.replace(/\\/g,"/"),i=PS(n);if(!i)return[];let r=me(e,n);if(!r)return[];let o=_e(e,n).length;return NS(r.rootNode,i).filter(a=>a.kind==="hook"||yu(a.bodyNode)).map(a=>{let c=FS(a.bodyNode),l=BS(a.bodyNode,i);return{file:n,name:a.name,kind:a.kind,startLine:a.node.startPosition.row,endLine:a.node.endPosition.row,loc:Math.max(1,a.node.endPosition.row-a.node.startPosition.row+1),fileLines:o,jsxTokens:c.tokens,behaviorTokens:l.tokens,componentNames:St(c.componentNames),nativeTags:St(c.nativeTags),propNames:St(c.propNames),eventNames:St(c.eventNames),hookNames:St(l.hookNames),requestNames:St(l.requestNames),stateNames:St(l.stateNames),effectNames:St(l.effectNames),handlerNames:St(l.handlerNames)}})}function PS(e){let t=SS(e).toLowerCase();return t!==".tsx"&&t!==".jsx"?null:W(e)}function NS(e,t){let n=[],i=new Set,r=o=>{let s=ES(o);if(s&&!_S(o)){let a=`${s.name}:${s.node.startIndex}:${s.node.endIndex}`;i.has(a)||(i.add(a),n.push(s));return}for(let a of o.namedChildren)r(a)};return(t==="tsx"||t==="javascript")&&r(e),n}function ES(e){if(e.type==="function_declaration"){let o=bu(e);return!o||!fu(o)?null:{name:o,kind:gu(o),node:e,bodyNode:e}}if(e.type!=="variable_declarator")return null;let t=e.childForFieldName("name")??e.namedChild(0),n=e.childForFieldName("value")??e.namedChild(1),i=Ni(t);if(!i||!n||!fu(i))return null;let r=TS(n);return r?{name:i,kind:gu(i),node:e,bodyNode:r}:null}function fu(e){return/^[A-Z]/.test(e)||/^use[A-Z0-9_]/.test(e)}function gu(e){return/^use[A-Z0-9_]/.test(e)?"hook":"component"}function TS(e){if(e.type==="arrow_function"||e.type==="function_expression")return e;if(e.type!=="call_expression")return null;let t=$S(e);return t!=="memo"&&t!=="forwardRef"?null:e.namedChildren.find(r=>r.type==="arguments")?.namedChildren.find(r=>r.type==="arrow_function"||r.type==="function_expression")??null}function _S(e){let t=e.parent;for(;t;){if(t.type==="function_declaration"||t.type==="function_expression"||t.type==="arrow_function"||t.type==="method_definition")return!0;t=t.parent}return!1}function bu(e){return Ni(e.childForFieldName("name")??e.namedChild(0))}function $S(e){let t=e.childForFieldName("function")??e.namedChild(0);return t?t.text.split(".").pop()??t.text:null}function yu(e){return e.type.startsWith("jsx_")?!0:e.namedChildren.some(yu)}function FS(e){let t={tokens:new Set,componentNames:new Set,nativeTags:new Set,propNames:new Set,eventNames:new Set},n=i=>{i.type==="jsx_opening_element"||i.type==="jsx_self_closing_element"?AS(i,t):i.type==="jsx_expression"?MS(i,t):i.type==="jsx_fragment"&&t.tokens.add("jsx:fragment");for(let r of i.namedChildren)n(r)};return n(e),t}function AS(e,t){let n=OS(e),i=!1;if(n){let r=hu(n);i=WS(r),i?(t.componentNames.add(r),t.tokens.add(`component:${r}`)):(t.nativeTags.add(r),t.tokens.add(`native:${r}`))}for(let r of e.namedChildren)if(r.type==="jsx_attribute"){let o=jS(r);if(!o)continue;let s=hu(o);if(s.startsWith("on")&&s.length>2){let a=s.slice(2).replace(/^[A-Z]/,c=>c.toLowerCase());t.eventNames.add(a),t.tokens.add(`event:${a}`)}else DS.has(s)||(t.propNames.add(s),t.tokens.add(`${i?"prop":"native-prop"}:${s}`))}else r.type==="jsx_spread_attribute"&&t.tokens.add("prop:spread")}function MS(e,t){let n=e.text;(n.includes("&&")||n.includes("?"))&&t.tokens.add("jsx:conditional"),(n.includes(".map(")||n.includes(".flatMap("))&&t.tokens.add("jsx:list");for(let i of GS(n))LS.has(i)||t.tokens.add(`binding:${i}`)}function OS(e){for(let t of e.namedChildren)if(t.type==="identifier"||t.type==="jsx_identifier"||t.type==="property_identifier"||t.type==="member_expression"||t.type==="jsx_member_expression")return t.text;return/^<\s*([A-Za-z][\w$.]*)/.exec(e.text)?.[1]??null}function jS(e){for(let t of e.namedChildren)if(t.type==="property_identifier"||t.type==="identifier"||t.type==="jsx_identifier")return t.text;return/^([A-Za-z_$][\w$:-]*)/.exec(e.text)?.[1]??null}function BS(e,t){let n={tokens:new Set,hookNames:new Set,requestNames:new Set,stateNames:new Set,effectNames:new Set,handlerNames:new Set},i=r=>{if(r.type==="call_expression"){let o=An(r,t);o&&HS(o.calleeLeaf,n)}else if(r.type==="variable_declarator")qS(r,n);else if(r.type==="function_declaration"){let o=bu(r);o&&Su(o,n)}for(let o of r.namedChildren)i(o)};return i(e),n}function HS(e,t){/^use[A-Z0-9_]/.test(e)&&(t.hookNames.add(e),!pu.has(e)&&!RS.has(e)&&t.tokens.add(`hook:${e}`)),pu.has(e)&&t.tokens.add(`react-hook:${e}`),CS.has(e)&&(t.effectNames.add(e),t.tokens.add(`effect:${e}`)),vS.has(e)&&t.tokens.add(`state-hook:${e}`),VS(e)&&(t.requestNames.add(e),t.tokens.add(`request:${e}`))}function VS(e){if(kS.has(e))return!0;let t=/^use([A-Z0-9_].*)$/.exec(e)?.[1];return t?/(Query|Mutation|Fetch|Resource)$/.test(t):!1}function qS(e,t){let n=e.childForFieldName("name")??e.namedChild(0),i=e.childForFieldName("value")??e.namedChild(1);if(n?.type==="array_pattern"&&i?.text.includes("useState")){let o=n.namedChildren.find(a=>Ni(a)),s=Ni(o);s&&(t.stateNames.add(s),t.tokens.add(`state:${s}`))}let r=Ni(n);r&&Su(r,t)}function Su(e,t){let n=US(e);!n||!wS.has(n)||(t.handlerNames.add(e),t.tokens.add(`handler:${e}`),t.tokens.add(`handler-verb:${n}`))}function US(e){let t=e.startsWith("handle")&&e.length>6?e.slice(6).replace(/^[A-Z]/,n=>n.toLowerCase()):e;return/^[a-z]+/.exec(t)?.[0]??null}function WS(e){return/^[A-Z]/.test(e)||e.includes(".")}function hu(e){return e.replace(/^this\./,"").replace(/\$/g,".")}function Ni(e){return e&&(e.type==="identifier"||e.type==="property_identifier"||e.type==="shorthand_property_identifier"||/^[A-Za-z_$][\w$]*$/.test(e.text))?e.text:null}function GS(e){let t=[];for(let n of e.matchAll(/\b[A-Za-z_$][\w$]*\b/g)){let i=n[0];t.includes(i)||t.push(i)}return t}function St(e){return[...e].sort()}function Xt(e,t,n={}){let i=oe(e,t);if(!i)return[];let r=[];if(n.includeCrossLanguageDispatchNames)for(let o of i.crossLanguageDispatchNames)r.push({name:o,kind:"cross-language-dispatch",occurrences:1});if(n.includeRustAttributeNames&&i.language==="rust")for(let o of i.rustAttrReferencedNames)r.push({name:o,kind:"rust-attribute",occurrences:1});return r}var zS={"/":"namespace","#":"type",".":"term","[":"type-param",":":"meta","!":"macro"};function pe(e){if(e.startsWith("local "))return{kind:"local",id:e.slice(6),raw:e};let t=e.split(" ");if(t.length<4)return{scheme:t[0]??"",manager:t[1]??"",packageName:t[2]??"",version:"",descriptors:[],raw:e};let n=t[0],i=t[1],r=e.slice(n.length+1+i.length+1),o;if(r.startsWith("`")){let l=r.indexOf("`",1);l===-1?(o=r.slice(1),r=""):(o=r.slice(1,l),r=r.slice(l+2))}else{let l=r.indexOf(" ");l===-1?(o=r,r=""):(o=r.slice(0,l),r=r.slice(l+1))}let s,a=r.indexOf(" ");a===-1?(s=r,r=""):(s=r.slice(0,a),r=r.slice(a+1));let c=KS(r);return{scheme:n,manager:i,packageName:o,version:s,descriptors:c,raw:e}}function it(e){let t=pe(e);if("kind"in t)return null;for(let n=t.descriptors.length-2;n>=0;n--){let i=t.descriptors[n];if(i?.suffix==="type")return i.name}return null}function KS(e){let t=[],n=0;for(;n<e.length;){if(e[n]==="["){let o=e.indexOf("]",n+1);if(o===-1){t.push({name:e.slice(n+1),suffix:"type-param"});break}t.push({name:e.slice(n+1,o),suffix:"type-param"}),n=o+1;continue}if(e[n]==="("&&(t.length===0||n===0||xu(e[n-1]))){let o=e.indexOf(")",n+1);if(o!==-1&&e[o+1]!=="."){t.push({name:e.slice(n+1,o),suffix:"parameter"}),n=o+1;continue}}let i;if(e[n]==="`"){let o=e.indexOf("`",n+1);if(o===-1){i=e.slice(n+1),t.push({name:i,suffix:"term"});break}i=e.slice(n+1,o),n=o+1}else{let o=n;for(;n<e.length&&!xu(e[n]);)n++;i=e.slice(o,n)}if(n>=e.length){i&&t.push({name:i,suffix:"term"});break}let r=e[n];if(r==="("){let o=e.indexOf(")",n+1);o!==-1&&e[o+1]==="."?(t.push({name:i,suffix:"method"}),n=o+2):o!==-1?(t.push({name:i,suffix:"method"}),n=o+1):(t.push({name:i,suffix:"term"}),n++)}else{let o=zS[r];o&&t.push({name:i,suffix:o}),n+=1}}return t}function xu(e){return e==="/"||e==="#"||e==="."||e==="("||e==="["||e===":"||e==="!"}function y(e){let t=pe(e);if("kind"in t&&t.kind==="local")return`local:${t.id}`;let n=t;if(n.descriptors.length===0)return n.raw;let i=[];for(let r of n.descriptors){let o=JS(r);o&&i.push(o)}return i.join(":")}function JS(e){let t=e.suffix==="namespace"?QS(e.name):e.name;return t?e.suffix==="method"?`${t}()`:t:""}function QS(e){return e.replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/,"").replace(/\.(py|pyi)$/,"").replace(/\.(rs)$/,"").replace(/\.(java|scala|kt|kts)$/,"").replace(/\.(rb)$/,"").replace(/\.(go)$/,"").replace(/\.(cs|vb)$/,"").replace(/\.(dart)$/,"").replace(/\.(php)$/,"").replace(/\.(c|cc|cpp|cxx|h|hpp)$/,"")}function $(e){let t=pe(e);if("kind"in t&&t.kind==="local")return t.id;let n=t;return n.descriptors.length===0?"":n.descriptors[n.descriptors.length-1].name}function Z(e){let t=pe(e);if("kind"in t&&t.kind==="local")return null;let n=t;return n.descriptors[n.descriptors.length-1]?.suffix??null}function xe(e){return e.endsWith("().")||Z(e)==="method"}function se(e){let t=Z(e);return t==="method"||t==="term"}function Tt(e){return Z(e)==="namespace"}var XS=/^rust-analyzer\b.*[\s/]impl#\[[^\]]+\]\[[^\]]+\]/;function Br(e){return XS.test(e)}var YS=new Set(["test","tests","_tests"]);function Vn(e){let t=pe(e);if("kind"in t)return!1;for(let n=0;n<t.descriptors.length-1;n+=1){let i=t.descriptors[n];if(i?.suffix==="namespace"&&i.name&&YS.has(i.name))return!0}return!1}function Cu(e,t){let n=pe(e),i=pe(t);if("kind"in n||"kind"in i)return!1;let r=n.descriptors,o=i.descriptors;if(o.length!==r.length+1)return!1;for(let s=0;s<r.length;s++){let a=r[s],c=o[s];if(a.name!==c.name||a.suffix!==c.suffix)return!1}return!0}function vu(e,t){let n=pe(e),i=pe(t);if("kind"in n||"kind"in i)return!1;let r=n.descriptors,o=i.descriptors;if(o.length<=r.length)return!1;for(let s=0;s<r.length;s++){let a=r[s],c=o[s];if(a.name!==c.name||a.suffix!==c.suffix)return!1}return!0}function qn(e,t){return e.all(`SELECT gs.id, gs.symbol, der.document_id, der.start_line, der.end_line, d.relative_path, gs.display_name, gs.documentation
40
+ (relative_path, symbol, content_hash, deps_digest, version, payload) VALUES (?, ?, ?, ?, ?, ?)`),dropStaleCallees:n.prepare("DELETE FROM semantic_callees WHERE relative_path = ? AND content_hash != ?"),readReferences:n.prepare(`SELECT payload FROM semantic_references
41
+ WHERE relative_path = ? AND symbol = ? AND project_fingerprint = ? AND version = ?`),writeReferences:n.prepare(`INSERT OR REPLACE INTO semantic_references
42
+ (relative_path, symbol, project_fingerprint, version, payload) VALUES (?, ?, ?, ?, ?)`),dropStaleReferences:n.prepare("DELETE FROM semantic_references WHERE project_fingerprint != ?")}}catch(n){na("disabled (open failed)",n)}return Qi.set(e,t),t}function Kn(e,t,n){na(`disabled (${t})`,n),Qi.set(e,null)}function Mt(e,t,n,r){let i=Jn(e);if(!i)return null;try{return i.readFileEvidence.get(t,n,r,Gn)?.payload??null}catch(o){return Kn(e,"file_evidence read",o),null}}function jt(e,t,n,r,i){let o=Jn(e);if(o)try{o.writeFileEvidence.run(t,n,r,Gn,i)}catch(s){Kn(e,"file_evidence write",s)}}function gu(e,t,n,r,i){let o=Jn(e);if(!o)return null;try{return o.readCallees.get(t,n,r,i,Gn)?.payload??null}catch(s){return Kn(e,"semantic_callees read",s),null}}function hu(e,t,n,r){let i=Jn(e);if(!i)return null;try{return i.readReferences.get(t,n,r,Gn)?.payload??null}catch(o){return Kn(e,"semantic_references read",o),null}}function yu(e,t){if(t.length===0)return;let n=Jn(e);if(n)try{n.evidence.transaction(()=>{let r=new Set;for(let i of t){let o=`${i.relativePath}\0${i.contentHash}`;r.has(o)||(r.add(o),n.dropStaleCallees.run(i.relativePath,i.contentHash)),n.writeCallees.run(i.relativePath,i.symbol,i.contentHash,i.depsDigest,Gn,i.payload)}})()}catch(r){Kn(e,"semantic_callees write",r)}}function bu(e,t){if(t.length===0)return;let n=Jn(e);if(n)try{n.evidence.transaction(()=>{let r=new Set;for(let i of t)r.has(i.projectFingerprint)||(r.add(i.projectFingerprint),n.dropStaleReferences.run(i.projectFingerprint)),n.writeReferences.run(i.relativePath,i.symbol,i.projectFingerprint,Gn,i.payload)})()}catch(r){Kn(e,"semantic_references write",r)}}function Hr(e){return e.type==="comment"||e.type==="line_comment"||e.type==="block_comment"}var oS=new Set(["function_declaration","method_definition","method_signature","function_signature"]);function Yi(e,t){let n=aS(e,t);if(n)return{name:n.name,startLine:n.definitionNode.startPosition.row,endLine:n.definitionNode.endPosition.row,paramCount:Cu(n.functionNode),params:Su(n.functionNode),paramsEndLine:xu(n.functionNode),isLiteralPassthrough:vu(n.functionNode,t)};if(!sS(e.type,t))return null;let r=e.childForFieldName("name")??e.namedChildren.find(i=>i.type==="identifier"||i.type==="property_identifier");return r?{name:r.text,startLine:e.startPosition.row,endLine:e.endPosition.row,paramCount:Cu(e),params:Su(e),paramsEndLine:xu(e),isLiteralPassthrough:vu(e,t)}:null}function Ru(e){return e.namedChildren.find(t=>t.type==="parameters"||t.type==="formal_parameters")}function Su(e){let t=Ru(e);if(!t)return[];let n=[];for(let r of t.namedChildren){if(Hr(r))continue;if(r.type==="identifier"){n.push({name:r.text,simple:!0});continue}let i=r.namedChildren.some(a=>a.type.endsWith("_modifier"))||/^\s*(?:public|private|protected|readonly|override)\b/.test(r.text),o=r.childForFieldName("pattern");if(!i&&o&&o.type==="identifier"){n.push({name:o.text,simple:!0});continue}let s=r.namedChildren.find(a=>a.type==="identifier");n.push({name:o?.type==="identifier"?o.text:s?.text??"",simple:!1})}return n}function xu(e){let t=Ru(e);return t?t.endPosition.row:e.startPosition.row}function sS(e,t){return t==="rust"?e==="function_item"||e==="function_signature_item":t==="python"?e==="function_definition":t==="typescript"||t==="tsx"||t==="javascript"?oS.has(e):!1}function aS(e,t){if(t!=="typescript"&&t!=="tsx"&&t!=="javascript")return null;if(e.type==="variable_declarator"){let n=e.childForFieldName("name")??e.namedChild(0),r=e.childForFieldName("value")??e.namedChild(1);return!n||!r||r.type!=="arrow_function"&&r.type!=="function_expression"?null:{name:n.text,definitionNode:e,functionNode:r}}if(e.type==="public_field_definition"){let n=e.childForFieldName("name")??e.namedChild(0),r=e.childForFieldName("value")??e.namedChild(1);return!n||!r||r.type!=="arrow_function"&&r.type!=="function_expression"?null:{name:n.text,definitionNode:e,functionNode:r}}return null}function Cu(e){let t=e.namedChildren.find(r=>r.type==="parameters"||r.type==="formal_parameters");if(!t)return 0;let n=0;for(let r of t.namedChildren)Hr(r)||(n+=1);return n}function vu(e,t){let n=e.namedChildren.find(d=>d.type==="block"||d.type==="statement_block");if(!n)return!1;let r=n.namedChildren.filter(d=>!Hr(d));if(r.length!==1)return!1;let i=r[0],o=null;if(i.type==="return_statement"||i.type==="expression_statement"?o=i.namedChild(0)??null:t==="rust"&&(i.type==="call_expression"||i.type==="macro_invocation")&&(o=i),!o)return!1;let s=t==="python"?"call":"call_expression";if(o.type!==s)return!1;let a=o.namedChildren.find(d=>d.type==="arguments"||d.type==="argument_list");if(!a)return!1;let c=a.namedChildren.filter(d=>!Hr(d)),l=e.namedChildren.find(d=>d.type==="parameters"||d.type==="formal_parameters");if(!l)return!1;let u=[];for(let d of l.namedChildren){if(d.type==="identifier"){u.push(d.text);continue}let m=d.namedChildren.find(f=>f.type==="identifier");m&&u.push(m.text)}if(c.length!==u.length)return!1;for(let d=0;d<u.length;d+=1){let m=c[d];if(m.type!=="identifier"||m.text!==u[d])return!1}return!0}var cS=new Set(["identifier","type_identifier","field_identifier"]),lS=new Set(["identifier"]),uS=new Set(["identifier","property_identifier","type_identifier","shorthand_property_identifier","shorthand_property_identifier_pattern"]),dS=new Set(["rust","python"]),mS=/\{([^{}]*)\}/g,pS=/\b([A-Za-z_][\w]*)\b/g;function ku(e,t){return fS(t).has(e.type)}function wu(e,t){return dS.has(t)&&e.type==="string_content"}function ra(e){let t=0;for(let r of e.values()){let i=r[r.length-1];i!==void 0&&i>t&&(t=i)}let n=new Array(t+1);for(let r=0;r<=t;r+=1)n[r]=new Set;for(let[r,i]of e)for(let o of i)n[o].add(r);return n}function fS(e){return e==="rust"?cS:e==="python"?lS:uS}function Lu(e,t){let n=e.startPosition.row;for(let r of e.text.matchAll(mS)){let i=r[1]??"";for(let o of i.matchAll(pS))o[1]&&t(o[1],n)}}var gS=[/\bdefault\s*=\s*"([^"]+)"/g,/\bwith\s*=\s*"([^"]+)"/g,/\bserialize_with\s*=\s*"([^"]+)"/g,/\bdeserialize_with\s*=\s*"([^"]+)"/g,/\bskip_serializing_if\s*=\s*"([^"]+)"/g,/\bgetter\s*=\s*"([^"]+)"/g,/\brename_all_with\s*=\s*"([^"]+)"/g,/\bschema_with\s*=\s*"([^"]+)"/g],hS=/^#!?\[\s*serde\s*\(/,yS=/^#!?\[\s*schemars\s*\(/,bS=/^#!?\[\s*validate\s*\(/,SS=new Set(["invoke","invokeTauriCommand","listen","once","emit","subscribe","dispatch","sendCommand","callRust"]);function Iu(e,t,n){if(t!=="typescript"&&t!=="tsx"&&t!=="javascript"||e.type!=="call_expression")return;let r=e.childForFieldName("function")??e.namedChild(0);if(!r)return;let i=Un(r);if(!i||!SS.has(i))return;let o=e.namedChildren.find(c=>c.type==="arguments");if(!o)return;let s=o.namedChild(0);if(!s||s.type!=="string")return;let a=s.namedChildren.find(c=>c.type==="string_fragment");a&&n.add(a.text)}function Du(e,t){let n=hS.test(e),r=yS.test(e),i=bS.test(e);if(!(!n&&!r&&!i))for(let o of gS){o.lastIndex=0;let s;for(;(s=o.exec(e))!==null;){let a=s[1],c=a.split("::").pop()??a;c==="is_none"&&/\bOption\b/.test(a)||c==="is_empty"&&/\b(String|Vec|HashMap|BTreeMap|HashSet|BTreeSet)\b/.test(a)||c&&t.add(c)}}}function Pu(e,t){let n=new Map,r=(s,a)=>{if(s===a)return;let c=n.get(s);c||(c=new Set,n.set(s,c)),c.add(a)},i=t==="python"?new Set(["identifier"]):new Set(["type_identifier"]),o=(s,a)=>{let c=l=>{i.has(l.type)&&l.text!==a&&r(l.text,a);for(let u of l.children)c(u)};for(let l of s.children)c(l)};if(t==="rust")for(let s of e.rootNode.descendantsOfType(["struct_item","enum_item","union_item","type_item"])){let a=s.namedChildren.find(l=>l.type==="type_identifier")?.text;if(!a)continue;let c=s.namedChildren.find(l=>l.type==="field_declaration_list"||l.type==="enum_variant_list"||l.type==="ordered_field_declaration_list");c&&o(c,a),s.type==="type_item"&&o(s,a)}else if(t==="python")for(let s of e.rootNode.descendantsOfType("class_definition")){let a=s.namedChildren.find(l=>l.type==="identifier")?.text;if(!a)continue;let c=s.namedChildren.find(l=>l.type==="block");if(c)for(let l of c.descendantsOfType("type"))for(let u of l.descendantsOfType("identifier"))u.text!==a&&r(u.text,a)}else for(let s of e.rootNode.descendantsOfType(["interface_declaration","type_alias_declaration","class_declaration"])){let a=s.namedChildren.find(c=>c.type==="type_identifier")?.text;a&&o(s,a)}return n}var xS=rn("source-facts",{clearGroups:["whole-project","source-file"]});function ae(e,t){let n=F(e,t);if(!n)return null;let r=CS(t,n);return r?xS.get(e,t,n,()=>vS(e,t,r,n)):null}function CS(e,t){return Rt(e)?Xi(t)?.language??null:W(e)}function vS(e,t,n,r){let i=Ye(e,t,r),o=Mt(e,"source-facts",t,i);if(o){let c=kS(o);if(c&&c.language===n)return c}let s=fe(e,t);if(!s)return null;let a=LS(s,n);return jt(e,"source-facts",t,i,RS(a)),a}function RS(e){let t={language:e.language,callables:e.callables,callSites:e.callSites,typeContainerMap:[...e.typeContainerMap.entries()].map(([n,r])=>[n,[...r]]),identifierLineMap:[...e.identifierLineMap.entries()],rustAttrReferencedNames:[...e.rustAttrReferencedNames],crossLanguageDispatchNames:[...e.crossLanguageDispatchNames]};return JSON.stringify(t)}function kS(e){try{let t=JSON.parse(e),n=new Map(t.identifierLineMap);return{language:t.language,callables:t.callables,callSites:t.callSites,typeContainerMap:new Map(t.typeContainerMap.map(([r,i])=>[r,new Set(i)])),identifierLineMap:n,identifiersByLine:ra(n),fileIdentifiers:new Set(n.keys()),rustAttrReferencedNames:new Set(t.rustAttrReferencedNames),crossLanguageDispatchNames:new Set(t.crossLanguageDispatchNames)}}catch{return null}}function ia(e,t,n,r){let i=ae(e,t);return i?wS(i,n,r)?.isLiteralPassthrough??!0:!0}function wS(e,t,n){return e.callables.find(r=>r.startLine===t&&r.endLine===n)??null}function LS(e,t){let n=[],r=[],i=new Set,o=new Set,s=new Map,a=(l,u)=>{let d=s.get(l);if(!d){s.set(l,[u]);return}d[d.length-1]!==u&&d.push(u)},c=l=>{let u=Yi(l,t);u&&n.push(u);let d=Wn(l,t);d&&r.push(d),Iu(l,t,o),t==="rust"&&(l.type==="attribute_item"||l.type==="inner_attribute_item")&&Du(l.text,i),ku(l,t)&&a(l.text,l.startPosition.row),wu(l,t)&&Lu(l,a);for(let m of l.children)c(m)};return c(e.rootNode),{language:t,callables:n,callSites:r,typeContainerMap:Pu(e,t),identifierLineMap:s,identifiersByLine:ra(s),fileIdentifiers:new Set(s.keys()),rustAttrReferencedNames:i,crossLanguageDispatchNames:o}}var Nu=new Set(["rust","typescript","tsx","javascript","python"]);function oa(e,t){let n=ae(e,t);return!n||!Nu.has(n.language)?null:n.callables.map(r=>({name:r.name,startLine:r.startLine,endLine:r.endLine}))}function Xn(e,t){let n=ae(e,t);return!n||!Nu.has(n.language)?null:n.callSites}function sa(e,t){return ae(e,t)?.typeContainerMap??new Map}import{ElementTypes as IS,NodeTypes as Tu,parse as DS}from"@vue/compiler-dom";import{parse as pH}from"@vue/compiler-sfc";function Zi(e,t){return e.split(t).filter(Boolean).map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join("")}var PS=At("vue-template-facts"),NS=new Set(["component","keep-alive","slot","suspense","teleport","template","transition","transition-group"]),ES=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","link","main","map","mark","menu","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","search","section","select","slot","small","source","span","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr"]),TS=new Set(["div","span","template"]),_S=new Set(["as","await","break","case","catch","class","const","continue","debugger","default","delete","do","else","export","extends","false","finally","for","from","function","if","import","in","instanceof","let","new","null","of","return","super","switch","this","throw","true","try","typeof","undefined","var","void","while","with","yield"]);function _u(e,t){let n=t.replace(/\\/g,"/"),r=F(e,n);return PS.get(e,n,r,()=>FS(n,Ki(e,n).template))}function FS(e,t){let n={relativePath:e,template:t?{startLine:t.startLine,endLine:t.endLine}:null,componentTags:[],nativeTags:[],builtinTags:[],props:[],events:[],directives:[],slots:[],expressionIdentifiers:[],structuralTokens:[]};if(!t)return n;let r;try{r=DS(t.body,{comments:!1})}catch{return n}let i=new Set,o=s=>{s.trim()&&i.add(s)};return Fu(r.children,t.startLine,n,o),n.structuralTokens=[...i].sort(),n}function Fu(e,t,n,r){for(let i of e)i.type===Tu.ELEMENT&&($S(i,t,n,r),Fu(i.children,t,n,r))}function $S(e,t,n,r){let i=qS(e.tag),o={tag:e.tag,normalized:i,kind:VS(e),startLine:Qn(t,e.loc.start.line),endLine:Qn(t,e.loc.end.line)};o.kind==="component"?(n.componentTags.push(o),r(`component:${i}`)):o.kind==="builtin"?(n.builtinTags.push(o),r(`builtin:${i}`)):(n.nativeTags.push(o),TS.has(e.tag)||r(`native:${e.tag}`));for(let s of e.props)AS(s,t,n,r)}function AS(e,t,n,r){if(e.type===Tu.ATTRIBUTE){let a=e.value?.content??null,c=Eu("prop",e.name,a,t,e.loc.start.line,e.loc.end.line);n.props.push(c),r(`prop:${e.name}`);return}let i=jS(e),o=$u(e.exp),s=Eu(MS(e.name),i,o,t,e.loc.start.line,e.loc.end.line);switch(s.kind){case"prop":n.props.push(s),r(`prop:${i}`);break;case"event":n.events.push(s),r(`event:${i}`);break;case"slot":n.slots.push(s),r(`slot:${i}`);break;case"directive":n.directives.push(s),r(`directive:${i}`);break}o&&OS(o,t,e.loc.start.line,n,r)}function Eu(e,t,n,r,i,o){return{kind:e,name:t,value:n,startLine:Qn(r,i),endLine:Qn(r,o)}}function MS(e){switch(e){case"bind":case"model":return"prop";case"on":return"event";case"slot":return"slot";default:return"directive"}}function jS(e){let t=$u(e.arg);return t||e.name}function $u(e){if(!e)return null;let t=("content"in e&&typeof e.content=="string"?e.content:e.loc.source).trim();return t||null}function OS(e,t,n,r,i){for(let o of BS(e)){let s={name:o,startLine:Qn(t,n),endLine:Qn(t,n)};r.expressionIdentifiers.push(s),i(`id:${o}`)}}function BS(e){let t=new Set,n=HS(e),r=/\b[A-Za-z_$][A-Za-z0-9_$]*\b/g,i;for(;i=r.exec(n);){let o=i[0];_S.has(o)||/^[A-Z_]+$/.test(o)||t.add(o)}return[...t].sort()}function HS(e){return e.replace(/\/\*[\s\S]*?\*\//g," ").replace(/\/\/.*$/gm," ").replace(/`(?:\\[\s\S]|\$\{([^}]*)\}|[^`\\])*`/g,(t,n)=>n??" ").replace(/'(?:\\[\s\S]|[^'\\])*'/g," ").replace(/"(?:\\[\s\S]|[^"\\])*"/g," ")}function VS(e){let t=e.tag;return e.tagType===IS.COMPONENT?"component":NS.has(t)?"builtin":ES.has(t)?"native":/^[A-Z]/.test(t)||t.includes("-")?"component":"native"}function qS(e){return Zi(e,/[-_:]/)}function Qn(e,t){return e+Math.max(0,t-1)}import{readdirSync as US}from"fs";import{execFileSync as WS}from"child_process";import{extname as eo,join as GS}from"path";var aa=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs",".vue",".rs",".py",".pyi",".java",".kt",".kts",".scala",".sc",".rb",".c",".h",".cc",".cpp",".cxx",".hpp",".hh",".hxx",".cs",".vb",".php",".dart"],Au=[".vue"],Mu=[".tsx",".jsx"],ju=[".vue"],zS=[...Mu,...ju],JS=new Set(Mu),KS=new Set(ju),Ou=new Set(aa.map(e=>e.toLowerCase())),XS=[...Ou].sort().join(","),ca=new Set(["node_modules",".git","target","dist","build",".next",".nuxt",".cache",".turbo","out","coverage",".scipquery-cache","__pycache__",".venv","venv",".idea",".vscode"]);function Ie(e,t={}){let n=t.includeIndexed??!0,r=t.includeAuxiliary??!0,i=t.extensions?.map(c=>c.toLowerCase()),o=i?new Set(i):Ou,s=i?[...o].sort().join(","):XS,a=`${n?"1":"0"}|${r?"1":"0"}|${s}`;return QS.get(e,a,()=>{let c=new Set;if(n)for(let l of j(e,{includeIgnored:!1}))o.has(eo(l).toLowerCase())&&c.add(l);if(r)for(let l of YS(e.config.projectRoot,o))e.isIgnored(l)||n&&c.has(l)||c.add(l);return[...c].sort()})}function to(e,t={}){let n=!1,r=!1;for(let i of Ie(e,{extensions:zS})){if(t.scope&&!i.includes(t.scope))continue;let o=eo(i).toLowerCase();if(n||=JS.has(o),r||=KS.has(o),n&&r)break}return{react:n,vue:r}}var QS=U("source-files",{clearGroups:[]});function YS(e,t){return ZS(e,t)??ex(e,t)}function ZS(e,t){try{let n=WS("git",["ls-files","--cached","--others","--exclude-standard"],{cwd:e,encoding:"utf-8",timeout:1e4,stdio:["ignore","pipe","ignore"]}),r=new Set;for(let i of n.split(`
43
+ `)){let o=i.trim();o&&t.has(eo(o).toLowerCase())&&r.add(o)}return r}catch{return null}}function ex(e,t){let n=new Set,r=i=>{let o=i?GS(e,i):e,s;try{s=US(o,{withFileTypes:!0})}catch{return}for(let a of s)if(!ca.has(a.name)){if(a.isDirectory()){r(i?`${i}/${a.name}`:a.name);continue}t.has(eo(a.name).toLowerCase())&&n.add(i?`${i}/${a.name}`:a.name)}};return r(""),n}var tx=new Set(["ref","shallowRef","reactive","computed","watch","watchEffect"]),nx=new Set(["onBeforeMount","onMounted","onBeforeUpdate","onUpdated","onBeforeUnmount","onUnmounted","onActivated","onDeactivated","onErrorCaptured"]),rx=new Set(["axios","fetch","runRequest","useAsyncData","useFetch","useResource"]),ix=new Set(["defineEmits","defineExpose","defineModel","defineOptions","defineProps","withDefaults"]),ox=new Set(["catch","for","function","if","return","switch","while"]);function Bu(e){let t={imports:[],functions:[],calls:[],composables:[],stores:[],reactivity:[],lifecycle:[],requests:[],macros:[],lineCount:0,externalLineCount:0,externalScriptPaths:[],unresolvedScripts:[]};for(let n of e.scripts){t.lineCount+=on(n),n.external&&(t.externalLineCount+=on(n),t.externalScriptPaths.push(n.sourcePath));for(let i of n.errors)t.unresolvedScripts.push({sourcePath:n.sourcePath,reason:i});if(!n.body||!n.astLanguage){n.astLanguage||t.unresolvedScripts.push({sourcePath:n.sourcePath,reason:`Unsupported Vue script language: ${n.lang??"unknown"}`});continue}t.imports.push(...lx(n));let r=Or(n.astLanguage,n.body);r?ax(n,r.rootNode,t):cx(n,t)}return sx(t),t.externalScriptPaths=Vu(t.externalScriptPaths),t}function sx(e){e.composables=Yn(e,"composable"),e.stores=Yn(e,"store"),e.reactivity=Yn(e,"reactivity"),e.lifecycle=Yn(e,"lifecycle"),e.requests=Yn(e,"request"),e.macros=Yn(e,"macro")}function Yn(e,t){return Vu(e.calls.filter(n=>n.categories.includes(t)).map(n=>n.name))}function ax(e,t,n){let r=new Set,i=new Set,o=s=>{let a=Yi(s,e.astLanguage);if(a){let l=`${a.name}:${a.startLine}:${a.endLine}`;i.has(l)||(i.add(l),n.functions.push({name:a.name,sourcePath:e.sourcePath,startLine:e.startLine+a.startLine,endLine:e.startLine+a.endLine,setup:e.setup}))}let c=Wn(s,e.astLanguage);if(c){let l=`${c.calleeLeaf}:${c.line}`;r.has(l)||(r.add(l),n.calls.push({name:c.calleeLeaf,sourcePath:e.sourcePath,line:e.startLine+c.line,categories:Hu(c.calleeLeaf),setup:e.setup}))}for(let l of s.children)o(l)};o(t)}function cx(e,t){for(let n of e.body.matchAll(/\b([A-Za-z_$][\w$]*)\s*\(/g)){let r=n[1];!r||ox.has(r)||t.calls.push({name:r,sourcePath:e.sourcePath,line:e.startLine+no(e.body,n.index??0),categories:Hu(r),setup:e.setup})}for(let n of e.body.matchAll(/\bfunction\s+([A-Za-z_$][\w$]*)\b/g)){let r=n[1];if(!r)continue;let i=e.startLine+no(e.body,n.index??0);t.functions.push({name:r,sourcePath:e.sourcePath,startLine:i,endLine:i,setup:e.setup})}for(let n of e.body.matchAll(/\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*(?:async\s*)?(?:function\b|\([^)]*\)\s*=>|[A-Za-z_$][\w$]*\s*=>)/g)){let r=n[1];if(!r)continue;let i=e.startLine+no(e.body,n.index??0);t.functions.push({name:r,sourcePath:e.sourcePath,startLine:i,endLine:i,setup:e.setup})}}function lx(e){let t=[];for(let n of e.body.matchAll(/\bimport\s+(?:type\s+)?([^'";]+?)\s+from\s+['"]([^'"]+)['"]/g)){let r=n[1]?.trim(),i=n[2];if(!r||!i)continue;let o=e.startLine+no(e.body,n.index??0);for(let s of ux(r))t.push({local:s,source:i,sourcePath:e.sourcePath,line:o,setup:e.setup})}return t}function ux(e){let t=[],r=e.split(",").map(s=>s.trim()).filter(Boolean)[0];r&&!r.startsWith("{")&&!r.startsWith("*")&&t.push(r);let i=/\{([^}]*)\}/.exec(e)?.[1];if(i)for(let s of i.split(",")){let a=s.trim();if(!a)continue;let c=/\bas\s+([A-Za-z_$][\w$]*)$/.exec(a)?.[1];t.push(c??a.replace(/^type\s+/,"").trim())}let o=/\*\s+as\s+([A-Za-z_$][\w$]*)/.exec(e)?.[1];return o&&t.push(o),t.filter(s=>/^[A-Za-z_$][\w$]*$/.test(s))}function Hu(e){let t=["call"];return/^use[A-Z0-9_]/.test(e)&&t.push("composable"),/^use[A-Z0-9_].*Store$/.test(e)&&t.push("store"),tx.has(e)&&t.push("reactivity"),nx.has(e)&&t.push("lifecycle"),rx.has(e)&&t.push("request"),ix.has(e)&&t.push("macro"),t}function no(e,t){let n=0;for(let r=0;r<t&&r<e.length;r+=1)e.charCodeAt(r)===10&&(n+=1);return n}function Vu(e){return[...new Set(e)].sort()}var dx=new Set(["in","key","of"]),mx=new Set(["computed","defineEmits","defineProps","reactive","ref","watch","watchEffect"]),px=At("vue-component-behavior-profiles");function Zn(e,t={}){let n=Ie(e,{extensions:[".vue"]}).filter(i=>!t.scope||i.includes(t.scope)).sort();return(typeof t.scanLimit=="number"&&t.scanLimit>0?n.slice(0,t.scanLimit):n).map(i=>fx(e,i)).filter(i=>(t.minTemplateTokens===void 0||i.templateTokens.size>=t.minTemplateTokens)&&(t.minBehaviorTokens===void 0||i.behaviorTokens.size>=t.minBehaviorTokens))}function fx(e,t){let n=t.replace(/\\/g,"/"),r=F(e,n),i=px.get(e,n,r,()=>gx(e,n,r));return hx(i)}function gx(e,t,n){let r=Ki(e,t),i=_u(e,t),o=Bu(r),s=Sx(i),a=i.expressionIdentifiers.map(h=>h.name).filter(h=>!s.includes(h)).filter((h,g,y)=>y.indexOf(h)===g).sort(),c=i.componentTags.map(h=>h.normalized).filter((h,g,y)=>y.indexOf(h)===g).sort(),l=n?n.split(`
44
+ `).length:0,u=on(r.template),d=o.lineCount,m=r.styles.reduce((h,g)=>h+on(g),0),f=r.customBlocks.reduce((h,g)=>h+on(g),0);return{file:t,sfc:r,templateFacts:i,scriptFacts:o,templateTokens:new Set(i.structuralTokens),behaviorTokens:bx(i,o,a),templateBindingNames:a,templateLocalNames:s,componentNames:c,sfcLines:l,totalLines:l+o.externalLineCount,templateLines:u,scriptLines:d,styleLines:m,externalScriptLines:o.externalLineCount,externalScriptPaths:o.externalScriptPaths,customBlockLines:f}}function hx(e){let t=yx(e.scriptFacts);return{...e,scriptFacts:t,templateTokens:new Set(e.templateTokens),behaviorTokens:new Set(e.behaviorTokens),templateBindingNames:[...e.templateBindingNames],templateLocalNames:[...e.templateLocalNames],componentNames:[...e.componentNames],externalScriptPaths:t.externalScriptPaths}}function yx(e){return{...e,imports:e.imports.map(t=>({...t})),functions:e.functions.map(t=>({...t})),calls:e.calls.map(t=>({...t,categories:[...t.categories]})),composables:[...e.composables],stores:[...e.stores],reactivity:[...e.reactivity],lifecycle:[...e.lifecycle],requests:[...e.requests],macros:[...e.macros],externalScriptPaths:[...e.externalScriptPaths],unresolvedScripts:e.unresolvedScripts.map(t=>({...t}))}}function bx(e,t,n){let r=new Set;for(let i of t.composables)r.add(`composable:${i}`);for(let i of t.stores)r.add(`store:${i}`);for(let i of t.reactivity)r.add(`reactivity:${i}`);for(let i of t.lifecycle)r.add(`lifecycle:${i}`);for(let i of t.requests)r.add(`request:${i}`);for(let i of t.macros)r.add(`macro:${i}`);for(let i of t.functions){if(mx.has(i.name))continue;r.add(`function:${i.name}`);let o=/^[a-z]+/.exec(i.name)?.[0]??null;o&&o.length>2&&o!==i.name&&r.add(`function-verb:${o}`)}for(let i of e.events)r.add(`template-event:${i.name}`);for(let i of n)r.add(`template-binding:${i}`);return r}function Sx(e){let t=new Set;for(let n of e.directives)if(n.name==="for"&&n.value)for(let r of xx(n.value))t.add(r);for(let n of e.slots)if(n.value)for(let r of qu(n.value))t.add(r);return[...t].sort()}function xx(e){let t=/^(.*?)\s+(?:in|of)\s+/.exec(e.trim());return t?qu(t[1]??""):[]}function qu(e){let t=[];for(let n of e.matchAll(/\b[A-Za-z_$][\w$]*\b/g)){let r=n[0];dx.has(r)||t.push(r)}return t}import{extname as Cx}from"path";var vx=[".tsx",".jsx"],Uu=new Set(["useActionState","useCallback","useContext","useDebugValue","useDeferredValue","useEffect","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useOptimistic","useReducer","useRef","useState","useSyncExternalStore","useTransition"]),Rx=new Set(["useEffect","useInsertionEffect","useLayoutEffect"]),kx=new Set(["useActionState","useOptimistic","useReducer","useRef","useState"]),wx=new Set(["useLocation","useNavigate","useParams","useSearchParams","useTranslation"]),Lx=new Set(["axios","fetch","gql","graphql","mutate","query","request","useMutation","useQuery","useSuspenseQuery"]),Ix=new Set(["add","apply","cancel","change","clear","close","create","delete","fetch","filter","handle","load","open","refresh","remove","render","reset","save","select","submit","toggle","update"]),Dx=new Set(["children","className","false","key","null","style","true","undefined"]),Px=new Set(["aria-hidden","className","clipRule","d","fill","fillRule","height","role","stroke","strokeLinecap","strokeLinejoin","strokeWidth","style","viewBox","width","xmlns"]),Nx=At("react-component-behavior-profiles");function er(e,t={}){let n=Ie(e,{extensions:vx}).filter(i=>!t.scope||i.includes(t.scope)).sort();return(typeof t.scanLimit=="number"&&t.scanLimit>0?n.slice(0,t.scanLimit):n).flatMap(i=>Ex(e,i)).filter(i=>(t.minJsxTokens===void 0||i.jsxTokens.size>=t.minJsxTokens)&&(t.minBehaviorTokens===void 0||i.behaviorTokens.size>=t.minBehaviorTokens))}function Ex(e,t){let n=t.replace(/\\/g,"/"),r=F(e,n);return Nx.get(e,n,r,()=>Tx(e,n)).map(_x)}function Tx(e,t){let n=Fx(t);if(!n)return[];let r=fe(e,t);if(!r)return[];let i=Qe(e,t).length;return $x(r.rootNode,n).filter(s=>s.kind==="hook"||Ku(s.bodyNode)).map(s=>{let a=Bx(s.bodyNode),c=Wx(s.bodyNode,n);return{file:t,name:s.name,kind:s.kind,startLine:s.node.startPosition.row,endLine:s.node.endPosition.row,loc:Math.max(1,s.node.endPosition.row-s.node.startPosition.row+1),fileLines:i,jsxTokens:a.tokens,behaviorTokens:c.tokens,componentNames:kt(a.componentNames),nativeTags:kt(a.nativeTags),propNames:kt(a.propNames),eventNames:kt(a.eventNames),hookNames:kt(c.hookNames),requestNames:kt(c.requestNames),stateNames:kt(c.stateNames),effectNames:kt(c.effectNames),handlerNames:kt(c.handlerNames)}})}function _x(e){return{...e,jsxTokens:new Set(e.jsxTokens),behaviorTokens:new Set(e.behaviorTokens),componentNames:[...e.componentNames],nativeTags:[...e.nativeTags],propNames:[...e.propNames],eventNames:[...e.eventNames],hookNames:[...e.hookNames],requestNames:[...e.requestNames],stateNames:[...e.stateNames],effectNames:[...e.effectNames],handlerNames:[...e.handlerNames]}}function Fx(e){let t=Cx(e).toLowerCase();return t!==".tsx"&&t!==".jsx"?null:W(e)}function $x(e,t){let n=[],r=new Set,i=o=>{let s=Ax(o);if(s&&!jx(o)){let a=`${s.name}:${s.node.startIndex}:${s.node.endIndex}`;r.has(a)||(r.add(a),n.push(s));return}for(let a of o.namedChildren)i(a)};return(t==="tsx"||t==="javascript")&&i(e),n}function Ax(e){if(e.type==="function_declaration"){let o=Ju(e);return!o||!Wu(o)?null:{name:o,kind:Gu(o),node:e,bodyNode:e}}if(e.type!=="variable_declarator")return null;let t=e.childForFieldName("name")??e.namedChild(0),n=e.childForFieldName("value")??e.namedChild(1),r=Vr(t);if(!r||!n||!Wu(r))return null;let i=Mx(n);return i?{name:r,kind:Gu(r),node:e,bodyNode:i}:null}function Wu(e){return/^[A-Z]/.test(e)||/^use[A-Z0-9_]/.test(e)}function Gu(e){return/^use[A-Z0-9_]/.test(e)?"hook":"component"}function Mx(e){if(e.type==="arrow_function"||e.type==="function_expression")return e;if(e.type!=="call_expression")return null;let t=Ox(e);return t!=="memo"&&t!=="forwardRef"?null:e.namedChildren.find(i=>i.type==="arguments")?.namedChildren.find(i=>i.type==="arrow_function"||i.type==="function_expression")??null}function jx(e){let t=e.parent;for(;t;){if(t.type==="function_declaration"||t.type==="function_expression"||t.type==="arrow_function"||t.type==="method_definition")return!0;t=t.parent}return!1}function Ju(e){return Vr(e.childForFieldName("name")??e.namedChild(0))}function Ox(e){let t=e.childForFieldName("function")??e.namedChild(0);return t?t.text.split(".").pop()??t.text:null}function Ku(e){return e.type.startsWith("jsx_")?!0:e.namedChildren.some(Ku)}function Bx(e){let t={tokens:new Set,componentNames:new Set,nativeTags:new Set,propNames:new Set,eventNames:new Set},n=r=>{r.type==="jsx_opening_element"||r.type==="jsx_self_closing_element"?Hx(r,t):r.type==="jsx_expression"?Vx(r,t):r.type==="jsx_fragment"&&t.tokens.add("jsx:fragment");for(let i of r.namedChildren)n(i)};return n(e),t}function Hx(e,t){let n=qx(e),r=!1;if(n){let i=zu(n);r=Xx(i),r?(t.componentNames.add(i),t.tokens.add(`component:${i}`)):(t.nativeTags.add(i),t.tokens.add(`native:${i}`))}for(let i of e.namedChildren)if(i.type==="jsx_attribute"){let o=Ux(i);if(!o)continue;let s=zu(o);if(s.startsWith("on")&&s.length>2){let a=s.slice(2).replace(/^[A-Z]/,c=>c.toLowerCase());t.eventNames.add(a),t.tokens.add(`event:${a}`)}else Px.has(s)||(t.propNames.add(s),t.tokens.add(`${r?"prop":"native-prop"}:${s}`))}else i.type==="jsx_spread_attribute"&&t.tokens.add("prop:spread")}function Vx(e,t){let n=e.text;(n.includes("&&")||n.includes("?"))&&t.tokens.add("jsx:conditional"),(n.includes(".map(")||n.includes(".flatMap("))&&t.tokens.add("jsx:list");for(let r of Qx(n))Dx.has(r)||t.tokens.add(`binding:${r}`)}function qx(e){for(let t of e.namedChildren)if(t.type==="identifier"||t.type==="jsx_identifier"||t.type==="property_identifier"||t.type==="member_expression"||t.type==="jsx_member_expression")return t.text;return/^<\s*([A-Za-z][\w$.]*)/.exec(e.text)?.[1]??null}function Ux(e){for(let t of e.namedChildren)if(t.type==="property_identifier"||t.type==="identifier"||t.type==="jsx_identifier")return t.text;return/^([A-Za-z_$][\w$:-]*)/.exec(e.text)?.[1]??null}function Wx(e,t){let n={tokens:new Set,hookNames:new Set,requestNames:new Set,stateNames:new Set,effectNames:new Set,handlerNames:new Set},r=i=>{if(i.type==="call_expression"){let o=Wn(i,t);o&&Gx(o.calleeLeaf,n)}else if(i.type==="variable_declarator")Jx(i,n);else if(i.type==="function_declaration"){let o=Ju(i);o&&Xu(o,n)}for(let o of i.namedChildren)r(o)};return r(e),n}function Gx(e,t){/^use[A-Z0-9_]/.test(e)&&(t.hookNames.add(e),!Uu.has(e)&&!wx.has(e)&&t.tokens.add(`hook:${e}`)),Uu.has(e)&&t.tokens.add(`react-hook:${e}`),Rx.has(e)&&(t.effectNames.add(e),t.tokens.add(`effect:${e}`)),kx.has(e)&&t.tokens.add(`state-hook:${e}`),zx(e)&&(t.requestNames.add(e),t.tokens.add(`request:${e}`))}function zx(e){if(Lx.has(e))return!0;let t=/^use([A-Z0-9_].*)$/.exec(e)?.[1];return t?/(Query|Mutation|Fetch|Resource)$/.test(t):!1}function Jx(e,t){let n=e.childForFieldName("name")??e.namedChild(0),r=e.childForFieldName("value")??e.namedChild(1);if(n?.type==="array_pattern"&&r?.text.includes("useState")){let o=n.namedChildren.find(a=>Vr(a)),s=Vr(o);s&&(t.stateNames.add(s),t.tokens.add(`state:${s}`))}let i=Vr(n);i&&Xu(i,t)}function Xu(e,t){let n=Kx(e);!n||!Ix.has(n)||(t.handlerNames.add(e),t.tokens.add(`handler:${e}`),t.tokens.add(`handler-verb:${n}`))}function Kx(e){let t=e.startsWith("handle")&&e.length>6?e.slice(6).replace(/^[A-Z]/,n=>n.toLowerCase()):e;return/^[a-z]+/.exec(t)?.[0]??null}function Xx(e){return/^[A-Z]/.test(e)||e.includes(".")}function zu(e){return e.replace(/^this\./,"").replace(/\$/g,".")}function Vr(e){return e&&(e.type==="identifier"||e.type==="property_identifier"||e.type==="shorthand_property_identifier"||/^[A-Za-z_$][\w$]*$/.test(e.text))?e.text:null}function Qx(e){let t=[];for(let n of e.matchAll(/\b[A-Za-z_$][\w$]*\b/g)){let r=n[0];t.includes(r)||t.push(r)}return t}function kt(e){return[...e].sort()}function sn(e,t,n={}){let r=ae(e,t);if(!r)return[];let i=[];if(n.includeCrossLanguageDispatchNames)for(let o of r.crossLanguageDispatchNames)i.push({name:o,kind:"cross-language-dispatch",occurrences:1});if(n.includeRustAttributeNames&&r.language==="rust")for(let o of r.rustAttrReferencedNames)i.push({name:o,kind:"rust-attribute",occurrences:1});return i}var Yx={"/":"namespace","#":"type",".":"term","[":"type-param",":":"meta","!":"macro"};function ge(e){if(e.startsWith("local "))return{kind:"local",id:e.slice(6),raw:e};let t=e.split(" ");if(t.length<4)return{scheme:t[0]??"",manager:t[1]??"",packageName:t[2]??"",version:"",descriptors:[],raw:e};let n=t[0],r=t[1],i=e.slice(n.length+1+r.length+1),o;if(i.startsWith("`")){let l=i.indexOf("`",1);l===-1?(o=i.slice(1),i=""):(o=i.slice(1,l),i=i.slice(l+2))}else{let l=i.indexOf(" ");l===-1?(o=i,i=""):(o=i.slice(0,l),i=i.slice(l+1))}let s,a=i.indexOf(" ");a===-1?(s=i,i=""):(s=i.slice(0,a),i=i.slice(a+1));let c=Zx(i);return{scheme:n,manager:r,packageName:o,version:s,descriptors:c,raw:e}}function lt(e){let t=ge(e);if("kind"in t)return null;for(let n=t.descriptors.length-2;n>=0;n--){let r=t.descriptors[n];if(r?.suffix==="type")return r.name}return null}function Zx(e){let t=[],n=0;for(;n<e.length;){if(e[n]==="["){let o=e.indexOf("]",n+1);if(o===-1){t.push({name:e.slice(n+1),suffix:"type-param"});break}t.push({name:e.slice(n+1,o),suffix:"type-param"}),n=o+1;continue}if(e[n]==="("&&(t.length===0||n===0||Qu(e[n-1]))){let o=e.indexOf(")",n+1);if(o!==-1&&e[o+1]!=="."){t.push({name:e.slice(n+1,o),suffix:"parameter"}),n=o+1;continue}}let r;if(e[n]==="`"){let o=e.indexOf("`",n+1);if(o===-1){r=e.slice(n+1),t.push({name:r,suffix:"term"});break}r=e.slice(n+1,o),n=o+1}else{let o=n;for(;n<e.length&&!Qu(e[n]);)n++;r=e.slice(o,n)}if(n>=e.length){r&&t.push({name:r,suffix:"term"});break}let i=e[n];if(i==="("){let o=e.indexOf(")",n+1);o!==-1&&e[o+1]==="."?(t.push({name:r,suffix:"method"}),n=o+2):o!==-1?(t.push({name:r,suffix:"method"}),n=o+1):(t.push({name:r,suffix:"term"}),n++)}else{let o=Yx[i];o&&t.push({name:r,suffix:o}),n+=1}}return t}function Qu(e){return e==="/"||e==="#"||e==="."||e==="("||e==="["||e===":"||e==="!"}function b(e){let t=ge(e);if("kind"in t&&t.kind==="local")return`local:${t.id}`;let n=t;if(n.descriptors.length===0)return n.raw;let r=[];for(let i of n.descriptors){let o=eC(i);o&&r.push(o)}return r.join(":")}function eC(e){let t=e.suffix==="namespace"?tC(e.name):e.name;return t?e.suffix==="method"?`${t}()`:t:""}function tC(e){return e.replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/,"").replace(/\.(py|pyi)$/,"").replace(/\.(rs)$/,"").replace(/\.(java|scala|kt|kts)$/,"").replace(/\.(rb)$/,"").replace(/\.(go)$/,"").replace(/\.(cs|vb)$/,"").replace(/\.(dart)$/,"").replace(/\.(php)$/,"").replace(/\.(c|cc|cpp|cxx|h|hpp)$/,"")}function $(e){let t=ge(e);if("kind"in t&&t.kind==="local")return t.id;let n=t;return n.descriptors.length===0?"":n.descriptors[n.descriptors.length-1].name}function ee(e){let t=ge(e);if("kind"in t&&t.kind==="local")return null;let n=t;return n.descriptors[n.descriptors.length-1]?.suffix??null}function Ce(e){return e.endsWith("().")||ee(e)==="method"}function ce(e){let t=ee(e);return t==="method"||t==="term"}function Ot(e){return ee(e)==="namespace"}var nC=/^rust-analyzer\b.*[\s/]impl#\[[^\]]+\]\[[^\]]+\]/;function ro(e){return nC.test(e)}var rC=new Set(["test","tests","_tests"]);function tr(e){let t=ge(e);if("kind"in t)return!1;for(let n=0;n<t.descriptors.length-1;n+=1){let r=t.descriptors[n];if(r?.suffix==="namespace"&&r.name&&rC.has(r.name))return!0}return!1}function Yu(e,t){let n=ge(e),r=ge(t);if("kind"in n||"kind"in r)return!1;let i=n.descriptors,o=r.descriptors;if(o.length!==i.length+1)return!1;for(let s=0;s<i.length;s++){let a=i[s],c=o[s];if(a.name!==c.name||a.suffix!==c.suffix)return!1}return!0}function Zu(e,t){let n=ge(e),r=ge(t);if("kind"in n||"kind"in r)return!1;let i=n.descriptors,o=r.descriptors;if(o.length<=i.length)return!1;for(let s=0;s<i.length;s++){let a=i[s],c=o[s];if(a.name!==c.name||a.suffix!==c.suffix)return!1}return!0}function nr(e,t){return e.all(`SELECT gs.id, gs.symbol, der.document_id, der.start_line, der.end_line, d.relative_path, gs.display_name, gs.documentation
34
45
  FROM global_symbols gs
35
46
  JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
36
47
  JOIN documents d ON der.document_id = d.id
37
48
  WHERE ${t.where}
38
49
  ${e.pathExclusionsFor("d")}
39
- ${ku(t.orderBy)}
40
- ${wu(t.limit)}`,...t.params??[])}function Un(e,t){return e.all(`SELECT
50
+ ${td(t.orderBy)}
51
+ ${nd(t.limit)}`,...t.params??[])}function rr(e,t){return e.all(`SELECT
41
52
  gs.id,
42
53
  gs.symbol,
43
54
  c.document_id,
@@ -54,8 +65,8 @@ import{program as Is}from"commander";import{realpathSync as Db}from"fs";import{f
54
65
  AND ${t.where}
55
66
  ${e.pathExclusionsFor("d")}
56
67
  GROUP BY gs.id, gs.symbol, c.document_id, d.relative_path, gs.display_name, gs.documentation
57
- ${ku(t.orderBy)}
58
- ${wu(t.limit)}`,...t.params??[])}function ku(e){return e?`ORDER BY ${e}`:""}function wu(e){return typeof e=="number"?`LIMIT ${e}`:""}function Yt(e){return!e||!e.trim()?null:e.replace(/^```\w*\s*/,"").replace(/\s*```$/,"").replace(/^\(method\)\s*/,"").replace(/^\(property\)\s*/,"").replace(/^\(function\)\s*/,"").replace(/^\(class\)\s*/,"").replace(/^\(interface\)\s*/,"").replace(/^\(enum\)\s*/,"").replace(/^\(type alias\)\s*/,"").replace(/^\(const\)\s*/,"").replace(/^\(var\)\s*/,"").trim()||null}function Zt(e){if(!e)return null;let t=Ru(e);if(t)return t.replace(/\n/g," ");let n=e.indexOf("|");if(n===-1)return e.replace(/\n/g," ");let i=e.slice(n+1);return(Ru(i)??i).replace(/\n/g," ")}function Ru(e){return/^```(?:\w+)?\s*\n?([\s\S]*?)\n?```/.exec(e.trimStart())?.[1]?.trim()||null}function ZS(e){if(it(e.symbol)!==null)return!1;let n=(e.documentation??"").replace(/^```\w*\s*/,"").replace(/\s*```$/,"").trim();return/^(?:var|let|const|function|class|interface|type|enum)\b/.test(n)}function Wn(e,t,n={}){let i=new Map;for(let o of t)e.length>0&&!ZS(o)||i.set(o.id,o);for(let o of e)i.set(o.id,o);let r=[...i.values()];return n.sort?r.sort((o,s)=>o.start_line-s.start_line||o.end_line-s.end_line||o.symbol.localeCompare(s.symbol)):r}var ex=U("file-definitions",{clearGroups:["definition-catalog"]}),Lu=new WeakMap;function G(e,t){return ex.get(e,t,()=>{let n=Wn(tx(e,t),nx(e,t),{sort:!0});return rx(e,t,n.map(ix))})}function tx(e,t){return e.all(`SELECT
68
+ ${td(t.orderBy)}
69
+ ${nd(t.limit)}`,...t.params??[])}function td(e){return e?`ORDER BY ${e}`:""}function nd(e){return typeof e=="number"?`LIMIT ${e}`:""}function an(e){return!e||!e.trim()?null:e.replace(/^```\w*\s*/,"").replace(/\s*```$/,"").replace(/^\(method\)\s*/,"").replace(/^\(property\)\s*/,"").replace(/^\(function\)\s*/,"").replace(/^\(class\)\s*/,"").replace(/^\(interface\)\s*/,"").replace(/^\(enum\)\s*/,"").replace(/^\(type alias\)\s*/,"").replace(/^\(const\)\s*/,"").replace(/^\(var\)\s*/,"").trim()||null}function cn(e){if(!e)return null;let t=ed(e);if(t)return t.replace(/\n/g," ");let n=e.indexOf("|");if(n===-1)return e.replace(/\n/g," ");let r=e.slice(n+1);return(ed(r)??r).replace(/\n/g," ")}function ed(e){return/^```(?:\w+)?\s*\n?([\s\S]*?)\n?```/.exec(e.trimStart())?.[1]?.trim()||null}function iC(e){if(lt(e.symbol)!==null)return!1;let n=(e.documentation??"").replace(/^```\w*\s*/,"").replace(/\s*```$/,"").trim();return/^(?:var|let|const|function|class|interface|type|enum)\b/.test(n)}function ir(e,t,n={}){let r=new Map;for(let o of t)e.length>0&&!iC(o)||r.set(o.id,o);for(let o of e)r.set(o.id,o);let i=[...r.values()];return n.sort?i.sort((o,s)=>o.start_line-s.start_line||o.end_line-s.end_line||o.symbol.localeCompare(s.symbol)):i}var oC=U("file-definitions",{clearGroups:["definition-catalog"]}),rd=new WeakMap;function z(e,t){return oC.get(e,t,()=>{let n=ir(sC(e,t),aC(e,t),{sort:!0});return lC(e,t,n.map(cC))})}function sC(e,t){return e.all(`SELECT
59
70
  gs.id,
60
71
  gs.symbol,
61
72
  der.document_id,
@@ -71,7 +82,7 @@ import{program as Is}from"commander";import{realpathSync as Db}from"fs";import{f
71
82
  JOIN documents d ON der.document_id = d.id
72
83
  WHERE d.relative_path = ?
73
84
  ${e.symbolNoiseFor("gs")}
74
- ORDER BY der.start_line, der.end_line`,t)}function nx(e,t){return e.all(`SELECT
85
+ ORDER BY der.start_line, der.end_line`,t)}function aC(e,t){return e.all(`SELECT
75
86
  gs.id,
76
87
  gs.symbol,
77
88
  c.document_id,
@@ -90,10 +101,11 @@ import{program as Is}from"commander";import{realpathSync as Db}from"fs";import{f
90
101
  AND m.role = 1
91
102
  ${e.symbolNoiseFor("gs")}
92
103
  GROUP BY gs.id, gs.symbol, c.document_id, d.relative_path
93
- ORDER BY start_line, end_line`,t)}function ix(e){return{symbolId:e.id,symbol:e.symbol,documentId:e.document_id,startLine:e.start_line,endLine:e.end_line,relativePath:e.relative_path,leaf:$(e.symbol),parentTypeName:it(e.symbol),isFunctionLike:se(e.symbol),isTypeLike:Z(e.symbol)==="type",kind:e.kind??null,documentation:e.documentation??null,enclosingSymbol:e.enclosing_symbol??null}}function rt(e,t={}){return Ei(e,t.scope)}function Ei(e,t){return j(e,{scope:t,includeIgnored:!1}).flatMap(n=>G(e,n)).filter(n=>!e.isIgnored(n.relativePath))}function Hr(e,t,n={}){if(t.length===0)return[];let i=t.flatMap(r=>G(e,r)).filter(r=>!e.isIgnored(r.relativePath));return n.onlyDocumented&&(i=i.filter(r=>r.documentation!==null&&r.documentation!=="")),n.sort&&(i=i.sort((r,o)=>r.relativePath.localeCompare(o.relativePath)||r.startLine-o.startLine||r.endLine-o.endLine)),i.map(r=>({startLine:r.startLine,endLine:r.endLine,symbol:r.symbol,shortName:y(r.symbol),signature:Yt(Zt(r.documentation)),relativePath:r.relativePath,enclosingSymbol:r.enclosingSymbol}))}function qs(e){let t=new Map,n=e.map((i,r)=>({definition:i,index:r,span:i.endLine-i.startLine})).sort((i,r)=>i.span-r.span||i.index-r.index);for(let{definition:i}of n)for(let r=i.startLine;r<=i.endLine;r+=1)t.has(r)||t.set(r,i);return t}function je(e,t){let n=Lu.get(e);return n||(n=qs(e),Lu.set(e,n)),n.get(t)??null}function en(e,t){let n=G(e,t.relative_path).find(i=>i.symbolId===t.id);return n?{symbolId:n.symbolId,symbol:n.symbol,documentId:n.documentId,startLine:n.startLine,endLine:n.endLine,relativePath:n.relativePath}:{symbolId:t.id,symbol:t.symbol,documentId:t.document_id,startLine:t.start_line,endLine:t.end_line,relativePath:t.relative_path}}function rx(e,t,n){let i=M(e,t),r=js(e,t);return r?ux(n,r,i):i?ox(n,i):n}function ox(e,t){let n=t.split(/\r?\n/),i=sx(e,n),r=ax(e,i),o=cx(r,n);return lx(e,o)}function sx(e,t){let n=e.some(r=>Vr(r.symbol))?px(t):null,i=new Map;for(let r of e)i.set(r.symbolId,mx(t,n,r));return i}function ax(e,t){return e.filter(n=>Vr(n.symbol)).map(n=>({definition:n,startLine:t.get(n.symbolId)??n.startLine})).sort((n,i)=>n.startLine-i.startLine||n.definition.startLine-i.definition.startLine||n.definition.symbol.localeCompare(i.definition.symbol))}function cx(e,t){let n=new Map;for(let i=0;i<e.length;i+=1){let r=e[i],o=e[i+1],s=o?Math.max(r.startLine,o.startLine-1):t.length-1;n.set(r.definition.symbolId,{startLine:r.startLine,endLine:fx(t,r.definition,r.startLine,s)})}return n}function lx(e,t){return e.map(n=>{let i=t.get(n.symbolId);return i?{...n,startLine:i.startLine,endLine:i.endLine}:n})}function ux(e,t,n=null){let i=new Map;for(let r of t){let o=i.get(r.name);o?o.push(r):i.set(r.name,[r])}return e.map(r=>{if(!dx(r)||!r.leaf)return Du(r,n);let o=i.get(r.leaf);if(!o||o.length===0)return Du(r,n);let s=o[0],a=Math.abs(s.startLine-r.startLine);for(let c=1;c<o.length;c+=1){let l=o[c],u=Math.abs(l.startLine-r.startLine);u<a&&(s=l,a=u)}return{...r,startLine:s.startLine,endLine:s.endLine}})}function dx(e){return Vr(e.symbol)?!0:Z(e.symbol)==="term"&&it(e.symbol)===null}function Du(e,t){if(!t||!e.leaf||Z(e.symbol)!=="term"||it(e.symbol)!==null)return e;let n=e.leaf.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=new RegExp(`\\b(?:export\\s+)?(?:const|let|var)\\s+${n}\\b`),o=t.split(/\r?\n/).findIndex(s=>i.test(s));return o>=0?{...e,startLine:o,endLine:o}:e}function mx(e,t,n){if(!Vr(n.symbol))return n.startLine;let i=Math.max(0,Math.min(n.startLine,e.length-1));if(!t)return i;let r=t.get(n.leaf);if(!r||r.length===0)return i;let o=null;for(let s of r){let a=Math.abs(s-n.startLine);(!o||a<o.distance)&&(o={line:s,distance:a})}return o?.line??i}function px(e){let t=/\b(?:function|def|fn)\s+([A-Za-z_$][\w$]*)/g,n=/\b([A-Za-z_$][\w$]*)\s*[:=]\s*(?:async\s*)?(?:function\b|\()/g,i=/^\s*(?:(?:export|public|private|protected|static|readonly|async|abstract|get|set)\s+)*([A-Za-z_$][\w$]*)\s*(?:<[^(]*>)?\s*\(/,r=/\b([A-Za-z_$][\w$]*)\s*\(/g,o=new Map,s=(a,c)=>{let l=o.get(a);if(!l){o.set(a,[c]);return}l[l.length-1]!==c&&l.push(c)};for(let a=0;a<e.length;a+=1){let c=e[a]??"";for(let u of c.matchAll(t))u[1]&&s(u[1],a);for(let u of c.matchAll(n))u[1]&&s(u[1],a);let l=c.match(i);l?.[1]&&s(l[1],a);for(let u of c.matchAll(r))u[1]&&s(u[1],a)}return o}function fx(e,t,n,i){let r=Math.max(n,Math.min(e.length-1,i)),o=Math.max(n,Math.min(r,t.endLine)),s=0,a=0,c=!1;for(let l=n;l<=r;l+=1){let u=gx(e[l]??"");for(let d of u)d==="{"?(s+=1,c=!0):d==="}"?s=Math.max(0,s-1):d==="("?a+=1:d===")"&&(a=Math.max(0,a-1));if(c&&s===0||!c&&a===0&&l>=o)return l}return o}function gx(e){let t="",n=null,i=!1;for(let r=0;r<e.length;r+=1){let o=e[r],s=e[r+1];if(!n&&o==="/"&&s==="/"){t+=" ".repeat(e.length-r);break}if(n){if(i){i=!1,t+=" ";continue}if(o==="\\"){i=!0,t+=" ";continue}o===n&&(n=null),t+=" ";continue}if(o==='"'||o==="'"||o==="`"){n=o,t+=" ";continue}t+=o}return t}function Vr(e){return e.includes("().")}function qr(e){let t=pe(e);if("kind"in t)return[];let n=[];for(let i=t.descriptors.length-2;i>=0;i-=1){let r=t.descriptors[i];r?.suffix==="type"&&r.name&&n.push(r.name)}return n}import{existsSync as Px}from"fs";import{basename as Iu,isAbsolute as Nx,join as Ex}from"path";function B(e,t){let n=zn(e,t.trim());if(n)return n;let i=Cx(e,t);if(i)return i;let r=hx(e,t);return r||xx(e,t)}function hx(e,t){let n=Ws(t),i=Us(n);if(!i)return null;let r=`%${i.path}%`,o=i.leaf,a=bx(e,r,o,n)[0];return a?en(e,a):null}function bx(e,t,n,i){let r=Wn([],[...yx(e,t,n),...Sx(e,t,n)]).filter(o=>!e.isIgnored(o.relative_path)).filter(o=>Gn(o,i)>1);return r.sort((o,s)=>Gn(s,i)-Gn(o,i)||o.end_line-o.start_line-(s.end_line-s.start_line)||o.start_line-s.start_line||o.symbol.localeCompare(s.symbol)),r}function yx(e,t,n){return qn(e,{where:"d.relative_path LIKE ? AND (gs.display_name = ? OR gs.symbol LIKE ?)",params:[t,n,`%/${n}.%`]})}function Sx(e,t,n){return Un(e,{where:"d.relative_path LIKE ? AND (gs.display_name = ? OR gs.symbol LIKE ?)",params:[t,n,`%/${n}.%`]})}function xx(e,t){let n=Ws(t),i=Dx(t),r=wx(e,i),o=Ix(r,t,n);if(o&&!e.isIgnored(o.relative_path))return en(e,o);let s=null;for(let a of r){if(e.isIgnored(a.relative_path))continue;let c=Lx(a,t,n,i);c<=0||(!s||c>s.score)&&(s={row:a,score:c})}return s?en(e,s.row):null}function Cx(e,t){let n=t.match(/^(.+):(\d+)-(\d+)$/);if(!n)return null;let[,i,r,o]=n,s=Math.max(0,parseInt(r,10)-1),a=Math.max(s,parseInt(o,10)-1),c=vx(e,i,s,a)??Rx(e,i,s,a);return c&&!e.isIgnored(c.relative_path)?en(e,c):null}function vx(e,t,n,i){return qn(e,{where:"d.relative_path LIKE ? AND der.start_line <= ? AND der.end_line >= ?",params:[`%${t}%`,n,i],orderBy:"(der.end_line - der.start_line) ASC",limit:1})[0]}function Rx(e,t,n,i){return Un(e,{where:"d.relative_path LIKE ? AND c.start_line <= ? AND c.end_line >= ?",params:[`%${t}%`,n,i],orderBy:"(MAX(c.end_line) - MIN(c.start_line)) ASC",limit:1})[0]}function zn(e,t){let i=qn(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, der.start_line",limit:1})[0]??Un(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, start_line",limit:1})[0];return!i||e.isIgnored(i.relative_path)?null:en(e,i)}function Ur(e,t){if("symbol"in t&&"relativePath"in t)return t;let n=kx(e,t.symbolId)[0];return n?en(e,n):null}function kx(e,t){let n=qn(e,{where:"gs.id = ?",params:[t],orderBy:"der.start_line, der.end_line"}),i=Un(e,{where:"gs.id = ?",params:[t],orderBy:"start_line, end_line"});return Wn(n,i)}function wx(e,t){let n=t.map(()=>"(gs.symbol LIKE ? OR d.relative_path LIKE ? OR COALESCE(gs.display_name, '') LIKE ?)"),i=t.flatMap(a=>{let c=`%${a}%`;return[c,c,c]}),r=n.join(`
94
- AND `),o=qn(e,{where:r,params:i,limit:200}),s=Un(e,{where:r,params:i,limit:200});return Wn(o,s)}function Lx(e,t,n,i){let r=t.trim(),o=n,s=o.replace(/\(\)$/,""),a=t.toLowerCase(),c=n.toLowerCase(),l=c.replace(/\(\)$/,""),u=e.symbol,d=y(e.symbol),m=$(e.symbol),p=e.display_name??"",h=e.symbol.toLowerCase(),g=d.toLowerCase(),b=m.toLowerCase(),S=p.toLowerCase(),x=e.relative_path.toLowerCase(),I=/[/:.]/.test(n),L=Us(n),C=L?.leaf.toLowerCase(),D=0;return(u===r||u===o)&&(D+=1150),(d===r||d===o)&&(D+=1100),p===s&&(D+=1180),m===s&&(D+=1160),(`${m}()`===r||`${m}()`===o)&&(D+=955),(h===a||h===c)&&(D+=1e3),(g===a||g===c)&&(D+=950),(x===a||x===c)&&(D+=925),(x.endsWith(`/${c}`)||x.endsWith(`/${a}`))&&(D+=875),S===l&&(D+=850),b===l&&(D+=825),(`${b}()`===a||`${b}()`===c)&&(D+=820),(g.endsWith(`:${c}`)||g.endsWith(`:${l}`)||g.endsWith(`:${l}()`))&&(D+=800),h.includes(c)&&(D+=120),g.includes(c)&&(D+=140),x.includes(c)&&(D+=140),S.includes(c)&&(D+=110),i.every(k=>{let A=k.toLowerCase();return h.includes(A)||g.includes(A)||x.includes(A)||S.includes(A)})&&(D+=100+i.length*15),L&&x.includes(L.path.toLowerCase())&&(D+=360,C&&(b===C||`${b}()`===C||`${b}()`==`${C}()`)&&(D+=700),xe(e.symbol)&&(D+=180)),se(e.symbol)&&b===l&&(D+=60),!I&&Tt(e.symbol)&&(D-=160),D-=Math.min(50,Math.max(0,e.end_line-e.start_line)),D}function Us(e){let t=e.trim().replace(/\\/g,"/"),n=t.lastIndexOf("/");if(n<=0||n===t.length-1)return null;let i=t.slice(n+1).replace(/\(\)$/,"");return!i||i.includes(".")?null:{path:t.slice(0,n),leaf:i}}function Ws(e){return e.trim().replace(/\(\)$/,"").replace(/\(.*$/,"")}function Dx(e){let t=Ws(e),n=t.split(/[^A-Za-z0-9_]+/).map(i=>i.trim()).filter(i=>i.length>0);return n.length>0?[...new Set(n)]:[t]}function Ix(e,t,n){let i=t.trim(),r=e.filter(o=>{let s=y(o.symbol),a=(o.display_name??"").trim();return o.symbol===i||s===i||s===n||a===i||a===n||`${a}()`===i||Gn(o,n)>1||o.relative_path===i});return r.length===0?null:(r.sort((o,s)=>Gn(s,n)-Gn(o,n)||o.end_line-o.start_line-(s.end_line-s.start_line)||o.relative_path.localeCompare(s.relative_path)||o.symbol.localeCompare(s.symbol)),r[0]??null)}function Gn(e,t){let n=Us(t);if(!n)return 0;let i=e.relative_path.toLowerCase(),r=$(e.symbol).toLowerCase(),o=n.path.toLowerCase(),s=n.leaf.toLowerCase();return i.includes(o)?r!==s?1:xe(e.symbol)?it(e.symbol)===null?5:4:it(e.symbol)===null?3:2:0}function Ie(e,t){let n=Pu(e,t,{allowMultiple:!1})[0]?.relativePath;return n||Tx(e,t)}function Kn(e,t){return Pu(e,t,{allowMultiple:!0}).map(n=>n.relativePath)}function Tx(e,t){if(!t)return null;let n=t.replace(/\\/g,"/").replace(/^\.\//,""),i=Nx(n)&&n.startsWith(e.config.projectRoot)?n.slice(e.config.projectRoot.length).replace(/^\/+/,""):n,r=Ex(e.config.projectRoot,i);return Px(r)?i:null}function Pu(e,t,n){let i=Nu(t);if(!i)return[];let r=j(e,{includeIgnored:!1}).map(a=>({relativePath:a,score:_x(a,i)})).filter(a=>a.score>0).sort((a,c)=>c.score-a.score||a.relativePath.localeCompare(c.relativePath));if(r.length===0){let a=B(e,t);return!a||e.isIgnored(a.relativePath)?[]:[{relativePath:a.relativePath,score:700}]}let o=r.filter(a=>a.score>=1100);if(o.length>0)return n.allowMultiple?o:[o[0]];let s=r.filter(a=>a.score>=800);return s.length>0?n.allowMultiple?s:[s[0]]:n.allowMultiple?r:[r[0]]}function _x(e,t){let n=Nu(e),i=Iu(n),r=Iu(t),o=0;return n===t&&(o+=1200),n.endsWith(`/${t}`)&&(o+=1100),i===r&&(o+=900),n.startsWith(`${t}/`)&&(o+=850),n.includes(t)&&(o+=250),o}function Nu(e){return e.trim().replace(/\\/g,"/").replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"")}import{basename as QR}from"path";import{existsSync as Wr}from"fs";import{basename as $x,dirname as _t,extname as xt,join as Ke,relative as Ti,resolve as Be}from"path";var Fx=Y("indexed-paths",{clearGroups:[]}),tn=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs",".vue"],Gr=[".py",".pyi"],$e=[".java",".scala",".kt",".kts"],zr=[".rs"],Kr=[".rb"],Jr=[".c",".h",".cc",".cpp",".cxx",".hpp",".hh",".hxx"],$t=[".cs",".vb"],Qr=[".dart"],nn=[".php"],Ax=new Set(tn),Gs=new Set(Gr),Eu=new Set($e),zs=new Set(zr),Ks=new Set(Kr),Tu=new Set(Jr),_u=new Set($t),Js=new Set(Qr),$u=new Set(nn),Mx=[{extensions:tn,lookup:Ax},{extensions:Gr,lookup:Gs},{extensions:$e,lookup:Eu},{extensions:zr,lookup:zs},{extensions:Kr,lookup:Ks},{extensions:Jr,lookup:Tu},{extensions:$t,lookup:_u},{extensions:Qr,lookup:Js},{extensions:nn,lookup:$u}];function Ft(e,t){return t.has(xt(e).toLowerCase())}function Ox(e){return Ft(e,Gs)}function jx(e){return Ft(e,Eu)}function Bx(e){return Ft(e,zs)}function Hx(e){return Ft(e,Ks)}function Vx(e){return Ft(e,Tu)}function qx(e){return Ft(e,_u)}function Fu(e){return xt(e).toLowerCase()===".vb"}function Ux(e){return Ft(e,Js)}function Wx(e){return Ft(e,$u)}function Qs(e){let t=xt(e).toLowerCase();for(let n of Mx)if(n.lookup.has(t))return n.extensions;return tn}function Gx(e){return jx(e)||qx(e)||Wx(e)}function Qe(e,t,n){return Ox(t)?Jn(e,t,n):Bx(t)?Ct(e,t,n):Hx(t)?Xr(e,t,n):Vx(t)?Yr(e,t,n):Gx(t)?ee(e,n.replace(/\\/g,"."),Qs(t)):Ux(t)?Zr(e,t,n):zx(e,t,n)}function zx(e,t,n){if(!n.startsWith(".")&&!n.startsWith("/"))return null;let i=_t(Ke(e.config.projectRoot,t)),r=Be(i,n),o=_i(e);for(let s of Yx(r)){let a=Je(Ti(e.config.projectRoot,s));if(o.has(a)||Wr(s))return a}return Je(Ti(e.config.projectRoot,r))}function Jn(e,t,n){let i=_i(e),r;if(n.startsWith(".")){let o=n.match(/^(\.+)(.*)$/);if(!o)return null;let s=o[1].length,a=o[2].replace(/^\./,""),c=_t(Ke(e.config.projectRoot,t));for(let l=1;l<s;l++)c=_t(c);r=a?Be(c,a.replace(/\./g,"/")):c}else r=Be(e.config.projectRoot,n.replace(/\./g,"/"));for(let o of Kx(r)){let s=Je(Ti(e.config.projectRoot,o));if(i.has(s)||Wr(o))return s}return null}function Ct(e,t,n){if(!n)return null;let i=n.replace(/\s+as\s+.+$/,"").trim();if(!i.startsWith("crate::")&&!i.startsWith("self::")&&!i.startsWith("super::"))return null;let r=_t(Ke(e.config.projectRoot,t)),o;return i.startsWith("crate::")?o=Be(e.config.projectRoot,"src",i.slice(7).replace(/::/g,"/")):i.startsWith("self::")?o=Be(r,i.slice(6).replace(/::/g,"/")):o=Be(_t(r),i.slice(7).replace(/::/g,"/")),Xs(e,Jx(o))}function Xr(e,t,n){let i=_t(Ke(e.config.projectRoot,t)),r=Be(i,n);return Xs(e,Qx(r))}function Yr(e,t,n){let i=_t(Ke(e.config.projectRoot,t)),r=[Be(i,n),Be(e.config.projectRoot,n),Be(e.config.projectRoot,"include",n),Be(e.config.projectRoot,"src",n)];return Xs(e,r)}function ee(e,t,n){let i=_i(e),r=t.replace(/\\/g,".").replace(/::/g,".").replace(/^global::/,""),o=r.replace(/\./g,"/"),s=r.split(".").pop()??r;for(let c of n){let l=`${o}${c}`,u=[...i].find(d=>d.endsWith(l));if(u)return u}for(let c of n){let l=[...i].find(u=>$x(u)===`${s}${c}`);if(l)return l}let a=[...i].filter(c=>n.includes(xt(c).toLowerCase())).filter(c=>c.includes(`/${o}/`)||c.includes(`/${s}/`)).sort((c,l)=>c.localeCompare(l));return a.length===1?a[0]:null}function Zr(e,t,n){let i=_i(e);if(n.startsWith("package:")){let s=n.slice(8),a=s.indexOf("/");if(a<0)return null;let c=s.slice(a+1),l=Je(c.startsWith("lib/")?c:`lib/${c}`);return i.has(l)?l:null}let r=_t(Ke(e.config.projectRoot,t)),o=Be(r,n);for(let s of Xx(o)){let a=Je(Ti(e.config.projectRoot,s));if(i.has(a)||Wr(s))return a}return null}function Kx(e){let t=xt(e);return Gs.has(t)?[e]:[`${e}.py`,`${e}.pyi`,Ke(e,"__init__.py"),Ke(e,"__init__.pyi")]}function Xs(e,t){let n=_i(e);for(let i of t){let r=Je(Ti(e.config.projectRoot,i));if(n.has(r)||Wr(i))return r}return null}function Jx(e){let t=xt(e);return zs.has(t)?[e]:[`${e}.rs`,Ke(e,"mod.rs")]}function Qx(e){let t=xt(e);return Ks.has(t)?[e]:[`${e}.rb`,Ke(e,"index.rb")]}function Xx(e){let t=xt(e);return Js.has(t)?[e]:[`${e}.dart`,e]}function Yx(e){let t=xt(e),n=new Set;if(t){n.add(e);for(let i of tn)n.add(e.slice(0,-t.length)+i)}else for(let i of tn)n.add(`${e}${i}`),n.add(Ke(e,`index${i}`));return[...n]}function _i(e){return Fx.get(e,()=>new Set(j(e,{includeIgnored:!1}).map(Je)))}function Je(e){return e.replace(/\\/g,"/")}import{basename as Mu}from"path";function rn(e){return e.replace(/'''[\s\S]*?'''/g,At).replace(/"""[\s\S]*?"""/g,At).replace(/#.*$/gm,At).replace(/\/\/.*$/gm,At).replace(/\/\*[\s\S]*?\*\//g,At).replace(/`(?:\\[\s\S]|[^`])*`/g,At).replace(/'(?:\\.|[^'\\\r\n])*'/g,At).replace(/"(?:\\.|[^"\\\r\n])*"/g,At)}function At(e){return e.replace(/[^\r\n]/g," ")}var aB=Kt("stripped-lines",{clearGroups:["whole-project","source-file"]});Et({name:"stripped-source-singleton",groups:["whole-project","source-file"],clearAll:()=>{eo=null,$i=""},clearFile:()=>{eo=null,$i=""}});var eo=null,$i="";function Zx(e){return eo===e||(eo=e,$i=rn(e)),$i}function Mt(e,t,n){let i=Zx(e);return`${i.slice(0,t)}${" ".repeat(n-t)}${i.slice(n)}`}function Pe(e,t){return new RegExp(`\\b${Au(t)}\\b`,"m").test(e)}function Qn(e,t){let n=new Set,i=new RegExp(`\\b${Au(t)}\\s*\\.\\s*([A-Za-z_$][\\w$]*)`,"g");for(let r of e.matchAll(i)){let o=r[1];o&&n.add(o)}return[...n]}function Au(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Fi(e){let t=0;for(let n of e)n==="("&&(t+=1),n===")"&&(t-=1);return t}var eC=new Set(["identifier","type_identifier","property_identifier","shorthand_property_identifier","field_identifier"]);function Ne(e){let t=[],n=0,i=0;for(let r=0;r<e.length;r++){let o=e[r];(o==="{"||o==="["||o==="(")&&n++,(o==="}"||o==="]"||o===")")&&n--,o===","&&n===0&&(t.push(e.slice(i,r)),i=r+1)}return t.push(e.slice(i)),t}function Fe(e,t){for(let n of e.namedChildren)if(n.type===t)return n;return null}function te(e,t){let n=new Set,i=(r,o)=>{let s=o||t.has(r.type);!s&&eC.has(r.type)&&n.add(r.text);for(let a of r.children)i(a,s)};return i(e.rootNode,!1),n}function ot(e,t,n,i,r,o,s){return{importedName:r,localName:o,sourcePath:s??ee(e,i,Qs(t)),kind:"named",used:Pe(n,o),usedMembers:[]}}function J(e,t,n,i,r="named",o={}){return{importedName:e,localName:t,sourcePath:n,kind:r,used:i.has(t),usedMembers:[],isTypeOnly:o.isTypeOnly}}function Xn(e,t,n,i,r="named",o=[],s={}){return{importedName:e,localName:t,sourcePath:n,kind:r,used:i,usedMembers:o,isTypeOnly:s.isTypeOnly}}function on(e,t){return{importedName:e,localName:null,sourcePath:t,kind:"side-effect",used:!0,usedMembers:[]}}function sn(e,t,n={}){return{importedName:e,localName:n.localName??null,sourcePath:t,kind:"namespace",used:n.used??!0,usedMembers:n.usedMembers??[],isTypeOnly:n.isTypeOnly}}function He(e,t,n){let i=[];for(let r of e.matchAll(t)){let o=r[0];if(!o||typeof r.index!="number")continue;let s=Mt(e,r.index,r.index+o.length);for(let a of n(r,s))i.push(a)}return i}function Ve(e,t,n,i){let r=me(e,t);if(r){let o=n(r);if(o)return o}return i()}function to(e,t,n,i){let r=me(e,t),o=W(t),s=o?n[o]:void 0;return r&&s?s(r):i()}function Ou(e,t,n){return Ve(e,t,i=>nC(e,t,i),()=>tC(e,t,n))}function tC(e,t,n){return He(n,/^[ \t]*#include\s+[<"]([^">]+)[">]\s*$/gm,(i,r)=>{let o=i[1]?.trim();if(!o)return[];let s=Mu(o).replace(/\.[^.]+$/,"");return[Xn(o,s,Yr(e,t,o),Pe(r,s))]})}function nC(e,t,n){let i=te(n,new Set(["preproc_include"])),r=[];for(let o of n.rootNode.descendantsOfType("preproc_include")){let s=null;for(let c of o.namedChildren){if(c.type==="system_lib_string"){s=c.text.replace(/^<|>$/g,"");break}if(c.type==="string_literal"){s=c.namedChildren.find(u=>u.type==="string_content")?.text??c.text.replace(/^"|"$/g,"");break}}if(!s)continue;let a=Mu(s).replace(/\.[^.]+$/,"");r.push(J(s,a,Yr(e,t,s),i))}return r}function ju(e,t,n){let i=[];for(let r of n.matchAll(/^[ \t]*import\s+['"]([^'"]+)['"](?:\s+as\s+([A-Za-z_]\w*))?[\s\S]*?;$/gm)){let o=r[1]?.trim(),s=r[2]?.trim()??null,a=r[0];if(!o||!a||typeof r.index!="number")continue;let c=Mt(n,r.index,r.index+a.length);i.push({importedName:o,localName:s,sourcePath:Zr(e,t,o),kind:s?"namespace":"side-effect",used:s?Pe(c,s):!0,usedMembers:s?Qn(c,s):[]})}return i}function Bu(e,t,n){let i=[];for(let r of n.matchAll(/^[ \t]*export\s+['"]([^'"]+)['"][\s\S]*?;$/gm)){let o=r[1]?.trim();o&&i.push({specifier:o,sourcePath:Zr(e,t,o)})}return i}function Hu(e,t,n){return to(e,t,{csharp:i=>rC(e,t,i),vb:i=>iC(e,t,i)},()=>{let i=Fu(t)?/^[ \t]*Imports\s+(.+?)\s*$/gm:/^[ \t]*using\s+(.+?)\s*;$/gm;return He(n,i,(r,o)=>{let s=r[1]?.trim();if(!s)return[];let[a,c]=s.split(/\s*=\s*/),l=!!c,u=(l?c:a)?.trim()??s,d=u.split(".").pop()??u,m=l?a?.trim()??d:d;return[ot(e,t,o,u,d,m,ee(e,u,$t))]})})}function iC(e,t,n){let i=te(n,new Set(["imports_statement"])),r=[];for(let o of n.rootNode.descendantsOfType("imports_statement")){let s=o.namedChildren.filter(m=>m.type==="namespace_name");if(s.length===0)continue;let a=s[s.length-1],c=s.length>1?s[0]:null,l=a.text,u=l.split(".").pop()??l,d=c?.text??u;r.push(J(u,d,ee(e,l,$t),i,c?"namespace":"named"))}return r}function rC(e,t,n){let i=te(n,new Set(["using_directive"])),r=[];for(let o of n.rootNode.descendantsOfType("using_directive")){let s=o.namedChildren;if(s.length===0)continue;let a=null,c;s.length>=2&&s[0].type==="identifier"&&(s[1].type==="qualified_name"||s[1].type==="identifier")?(a=s[0],c=s[1]):c=s[s.length-1];let l=c.text,u=l.split(".").pop()??l,d=a?.text??u;r.push(J(u,d,ee(e,l,$t),i,a?"namespace":"named"))}return r}var oC=U("vue-non-script-identifiers",{clearGroups:["whole-project","source-file"]});function Vu(e,t){return oC.get(e,t,()=>{let n=new Set,i=M(e,t);if(!i)return n;let o=i.replace(/<script\b[^>]*>[\s\S]*?<\/script>/g,s=>s.replace(/[^\r\n]/g," ")).replace(/<!--[\s\S]*?-->/g,s=>s.replace(/[^\r\n]/g," ")).replace(/\/\*[\s\S]*?\*\//g,s=>s.replace(/[^\r\n]/g," "));for(let s of o.matchAll(/[A-Za-z_$][\w$]*/g))n.add(s[0]);return n})}function Ys(e,t,n){return Ve(e,t,i=>aC(e,t,i),()=>sC(e,t,n))}function sC(e,t,n){return yC(n).flatMap(i=>SC(e,t,i.clause,i.specifier,i.start,i.end,n))}function aC(e,t,n){let i=cC(e,t,n),r=[];for(let o of n.rootNode.descendantsOfType("import_statement"))r.push(...lC(e,t,n,o,i));return r}function cC(e,t,n){let i=te(n,new Set(["import_statement"]));if(yt(t))for(let r of Vu(e,t))i.add(r);return i}function lC(e,t,n,i,r){let o=fC(i);if(!o)return[];let s=Qe(e,t,o),a=Fe(i,"import_clause");return a?uC(n,a,s,r,gC(i.text)):[on("*",s)]}function uC(e,t,n,i,r){let o=[];for(let s of t.namedChildren)if(s.type==="identifier")o.push(dC(s.text,n,i,r));else if(s.type==="namespace_import"){let a=mC(e,s,n,i,r);a&&o.push(a)}else s.type==="named_imports"&&o.push(...pC(s,n,i,r));return o}function dC(e,t,n,i){return J("default",e,t,n,"default",{isTypeOnly:i})}function mC(e,t,n,i,r){let s=Fe(t,"identifier")?.text??"";if(!s)return null;let a=bC(e,s);return sn("*",n,{localName:s,usedMembers:a,isTypeOnly:r,used:a.length>0||i.has(s)})}function pC(e,t,n,i){let r=[];for(let o of e.namedChildren){if(o.type!=="import_specifier")continue;let s=o.namedChild(0),a=o.namedChild(1);if(!s)continue;let c=s.text,l=a?.text??c;r.push(J(c,l,t,n,"named",{isTypeOnly:i||hC(o.text)}))}return r}function fC(e){let t=Fe(e,"string");if(!t)return null;let n=Fe(t,"string_fragment");return n?n.text:null}function gC(e){return/^\s*import\s+type\b/.test(e)}function hC(e){return/^\s*type\b/.test(e.trim())}function bC(e,t){let n=new Set;for(let i of e.rootNode.descendantsOfType("member_expression")){let r=i.namedChild(0),o=i.namedChild(1);!r||!o||r.type!=="identifier"||r.text!==t||(o.type==="property_identifier"||o.type==="identifier")&&n.add(o.text)}return[...n]}function yC(e){let t=[],n=/^[ \t]*import\s+([\s\S]*?)\s+from\s+['"]([^'"]+)['"]\s*;?/gm;for(let r of e.matchAll(n)){let o=r[0],s=r[1],a=r[2];!o||!a||typeof r.index!="number"||t.push({clause:s,specifier:a,start:r.index,end:r.index+o.length})}let i=/^[ \t]*import\s+['"]([^'"]+)['"]\s*;?/gm;for(let r of e.matchAll(i)){let o=r[0],s=r[1];!o||!s||typeof r.index!="number"||t.push({clause:null,specifier:s,start:r.index,end:r.index+o.length})}return t.sort((r,o)=>r.start-o.start)}function SC(e,t,n,i,r,o,s){let a=Qe(e,t,i),c=Mt(s,r,o);return n?xC(n).map(u=>({...u,sourcePath:a})).map(u=>{if(u.kind==="namespace"){let d=Qn(c,u.localName);return sn(u.importedName,u.sourcePath,{localName:u.localName,usedMembers:d,used:d.length>0||Pe(c,u.localName),isTypeOnly:u.isTypeOnly})}return u.kind==="side-effect"?on(u.importedName,u.sourcePath):Xn(u.importedName,u.localName??"",u.sourcePath,u.localName?Pe(c,u.localName):!1,u.kind,[],{isTypeOnly:u.isTypeOnly})}):[on("*",a)]}function xC(e){let t=e.trim(),n=/^type\b/.test(t),i=t.replace(/^type\s+/,""),[r,o]=CC(i),s=[];return r&&s.push(...qu(r,n)),o&&s.push(...qu(o,n)),s}function qu(e,t){let n=e.trim();if(!n)return[];if(n.startsWith("{")){let i=n.slice(1,-1).trim();return i?Ne(i).map(r=>{let o=r.trim(),s=t||/^type\b/.test(o),a=o.replace(/^type\s+/,""),[c,l]=a.split(/\s+as\s+/);return{importedName:c.trim(),localName:(l??c).trim(),kind:"named",isTypeOnly:s}}):[]}return n.startsWith("* as ")?[{importedName:"*",localName:n.slice(5).trim(),kind:"namespace",isTypeOnly:t}]:[{importedName:"default",localName:n,kind:"default",isTypeOnly:t}]}function CC(e){let t=0;for(let n=0;n<e.length;n++){let i=e[n];if(i==="{"&&t++,i==="}"&&t--,i===","&&t===0)return[e.slice(0,n).trim(),e.slice(n+1).trim()]}return[e.trim(),null]}function Zs(e,t,n){let i=me(e,t);return i?DC(e,t,i):vC(e,t,n)}function vC(e,t,n){return[...RC(e,t,n),...kC(e,t,n),...wC(e,t,n)]}function RC(e,t,n){let i=[],r=/^[ \t]*export\s+(?:type\s+)?\{([\s\S]*?)\}\s+from\s+['"]([^'"]+)['"]\s*;?/gm;for(let o of n.matchAll(r)){if(typeof o.index!="number")continue;let s=o[1]??"",a=o[2]??"",c=Ne(s).map(d=>LC(d.trim())).filter(d=>!!d),l=Yn(n,o.index),u=Yn(n,o.index+o[0].length-1);i.push({kind:"named",sourcePath:Qe(e,t,a),names:c,startLine:l,endLine:u})}return i}function kC(e,t,n){let i=[],r=/^[ \t]*export\s+\*\s+as\s+(\w+)\s+from\s+['"]([^'"]+)['"]\s*;?/gm;for(let o of n.matchAll(r)){if(typeof o.index!="number")continue;let s=o[2]??"",a=Yn(n,o.index),c=Yn(n,o.index+o[0].length-1);i.push({kind:"star-as",sourcePath:Qe(e,t,s),names:[],startLine:a,endLine:c})}return i}function wC(e,t,n){let i=[],r=/^[ \t]*export\s+\*\s+from\s+['"]([^'"]+)['"]\s*;?/gm;for(let o of n.matchAll(r)){if(typeof o.index!="number")continue;let s=o[1]??"",a=Yn(n,o.index),c=Yn(n,o.index+o[0].length-1);i.push({kind:"star",sourcePath:Qe(e,t,s),names:[],startLine:a,endLine:c})}return i}function LC(e){if(!e)return null;let t=e.replace(/^type\s+/,"").trim();if(!t)return null;let n=t.match(/^(\w+)\s+as\s+(\w+)$/);if(n)return n[2]??null;let i=t.match(/^(\w+)$/);return i?i[1]??null:null}function Yn(e,t){let n=0;for(let i=0;i<t&&i<e.length;i++)e.charCodeAt(i)===10&&n++;return n}function DC(e,t,n){let i=[];for(let r of n.rootNode.descendantsOfType("export_statement")){let o=IC(e,t,r);if(o===void 0)continue;let s=r.startPosition.row,a=r.endPosition.row,c=PC(r,o,s,a);i.push(c)}return i}function IC(e,t,n){let i=Fe(n,"string");if(!i)return;let r=Fe(i,"string_fragment");if(r)return Qe(e,t,r.text)}function PC(e,t,n,i){let r=Fe(e,"export_clause");if(r){let s=[];for(let a of r.namedChildren){if(a.type!=="export_specifier")continue;let c=a.namedChild(0),l=a.namedChild(1);c&&s.push((l??c).text)}return{kind:"named",sourcePath:t,names:s,startLine:n,endLine:i}}return Fe(e,"namespace_export")?{kind:"star-as",sourcePath:t,names:[],startLine:n,endLine:i}:{kind:"star",sourcePath:t,names:[],startLine:n,endLine:i}}function Uu(e,t,n){return to(e,t,{java:i=>NC(e,t,i),kotlin:i=>EC(e,t,i),scala:i=>TC(e,t,i)},()=>He(n,/^[ \t]*import\s+(?:static\s+)?(.+?)\s*;?$/gm,(i,r)=>{let o=i[1]?.trim();return o?_C(e,t,o,r):[]}))}function NC(e,t,n){let i=te(n,new Set(["import_declaration"])),r=[];for(let o of n.rootNode.descendantsOfType("import_declaration")){let s=o.children.some(d=>d.type==="asterisk"),c=o.namedChildren.find(d=>d.type==="scoped_identifier")??o.namedChildren.find(d=>d.type==="identifier");if(!c)continue;let l=c.text;if(s){r.push(sn("*",ee(e,l,$e)));continue}let u=l.split(".").pop()??l;r.push(J(u,u,ee(e,l,$e),i))}return r}function EC(e,t,n){let i=te(n,new Set(["import_header","import_list"])),r=[];for(let o of n.rootNode.descendantsOfType("import_header")){let s=o.namedChildren.find(p=>p.type==="identifier");if(!s)continue;let a=o.namedChildren.some(p=>p.type==="wildcard_import"),c=o.namedChildren.find(p=>p.type==="import_alias");if(a){r.push(sn("*",ee(e,s.text,$e)));continue}let l=s.text,u=l.split(".").pop()??l,m=c?.namedChild(0)?.text??u;r.push(J(u,m,ee(e,l,$e),i))}return r}function TC(e,t,n){let i=te(n,new Set(["import_declaration"])),r=[];for(let o of n.rootNode.descendantsOfType("import_declaration")){let s=o.namedChildren.find(d=>d.type==="namespace_selectors"||d.type==="namespace_wildcard"),a=o.namedChildren.filter(d=>d!==s&&(d.type==="identifier"||d.type==="stable_identifier")),c=a.map(d=>d.text).join(".");if(!c)continue;if(s?.type==="namespace_wildcard"){r.push(sn("*",ee(e,c,$e)));continue}if(s?.type==="namespace_selectors"){for(let d of s.namedChildren)if(d.type==="arrow_renamed_identifier"){let[m,p]=d.namedChildren;if(!m)continue;let h=m.text,g=p?.text??h;if(h==="_")continue;r.push(J(h,g,ee(e,`${c}.${h}`,$e),i))}else if(d.type==="identifier"){let m=d.text;r.push(J(m,m,ee(e,`${c}.${m}`,$e),i))}continue}let l=a[a.length-1]?.text??c,u=a.slice(0,-1).map(d=>d.text).join(".")||c;r.push(J(l,l,ee(e,u&&a.length>1?`${u}.${l}`:c,$e),i))}return r}function _C(e,t,n,i){if(n.includes("{")&&n.includes("}")){let r=n.slice(0,n.indexOf("{")).replace(/\.$/,"").trim(),o=n.slice(n.indexOf("{")+1,n.lastIndexOf("}")).trim();return Ne(o).flatMap(s=>{let a=s.trim();if(!a)return[];let[c,l]=a.includes("=>")?a.split(/\s*=>\s*/):a.split(/\s+as\s+/),u=c?.trim();if(!u||u==="_")return[];let d=(l??u.split(".").pop()??u).trim(),m=u==="_"?r:`${r}.${u}`.replace(/\.\./g,".");return[ot(e,t,i,m,u,d)]})}return[ot(e,t,i,n,n.split(".").pop()??n,n.split(".").pop()??n)]}function Gu(e,t,n){return Ve(e,t,i=>$C(e,t,i),()=>He(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(i,r)=>{let o=i[1]?.trim();return o?Ne(o).flatMap(s=>{let a=s.trim();if(!a)return[];let[c,l]=a.split(/\s+as\s+/i),u=c?.trim()??a,d=u.split("\\").pop()??u,m=(l??d).trim();return[ot(e,t,r,u,d,m,ee(e,u.replace(/\\/g,"."),nn))]}):[]}))}function $C(e,t,n){let i=te(n,new Set(["namespace_use_declaration"])),r=[],o=(s,a,c)=>{r.push(J(a,c,ee(e,s.replace(/\\/g,"."),nn),i))};for(let s of n.rootNode.descendantsOfType("namespace_use_declaration")){let a=s.namedChildren.find(c=>c.type==="namespace_use_group");if(a){let c=s.namedChildren.find(l=>l.type==="namespace_name")?.text??"";for(let l of a.namedChildren){if(l.type!=="namespace_use_clause")continue;let{importedName:u,localName:d,qualified:m}=Wu(l,c);u&&o(m,u,d)}continue}for(let c of s.namedChildren){if(c.type!=="namespace_use_clause")continue;let{importedName:l,localName:u,qualified:d}=Wu(c,"");l&&o(d,l,u)}}return r}function Wu(e,t){let n=e.namedChildren.find(l=>l.type==="qualified_name"),i=e.namedChildren.filter(l=>l.type==="name"),r="";n?r=n.text:i.length>=1&&(r=i[0].text);let o=n&&i.length>0?i[i.length-1]:null,s=r.split("\\").pop()??r,a=o?.text??s,c=t?`${t}\\${r}`:r;return{importedName:s,localName:a,qualified:c}}function Ku(e,t,n){return Ve(e,t,i=>FC(e,t,i),()=>MC(n).flatMap(i=>jC(e,t,i,n)))}function FC(e,t,n){let i=te(n,new Set(["import_statement","import_from_statement"])),r=[];for(let o of n.rootNode.descendantsOfType("import_statement"))for(let s of o.namedChildren){let a=zu(s);if(!a)continue;let c=Jn(e,t,a.qualifiedName);r.push({importedName:a.qualifiedName,localName:a.localName,sourcePath:c,kind:"namespace",used:i.has(a.localName),usedMembers:[]})}for(let o of n.rootNode.descendantsOfType("import_from_statement")){let s=o.namedChild(0);if(!s)continue;let a=AC(s);if(a===null)continue;let c=Jn(e,t,a);for(let l=1;l<o.namedChildCount;l+=1){let u=o.namedChild(l);if(u.type==="wildcard_import"){r.push({importedName:"*",localName:null,sourcePath:c,kind:"side-effect",used:!0,usedMembers:[]});continue}let d=zu(u);d&&r.push({importedName:d.qualifiedName,localName:d.localName,sourcePath:c,kind:"named",used:i.has(d.localName),usedMembers:[]})}}return r}function zu(e){if(e.type==="aliased_import"){let t=e.namedChild(0),n=e.namedChild(1);return!t||!n?null:{qualifiedName:t.text,localName:n.text}}if(e.type==="dotted_name"){let t=e.text;return{qualifiedName:t,localName:t.split(".")[0]??t}}return e.type==="identifier"?{qualifiedName:e.text,localName:e.text}:null}function AC(e){if(e.type==="dotted_name")return e.text;if(e.type==="relative_import"){let t=Fe(e,"import_prefix")?.text??"",n=Fe(e,"dotted_name")?.text??"";return`${t}${n}`}return null}function MC(e){let t=e.split(`
95
- `),n=[],i=0;for(let r=0;r<t.length;r++){let o=t[r],s=o.trimStart(),a=i;if(i+=o.length+1,!s.startsWith("import ")&&!s.startsWith("from "))continue;let c=o,l=a+o.length,u=Fi(o);for(;r+1<t.length&&(u>0||c.trimEnd().endsWith("\\"));){r++;let m=t[r];c+=`
96
- ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,end:l})}return n}function OC(e){let t=e.replace(/\\\s*\n/g," ").trim();if(t.startsWith("import "))return{kind:"import",module:null,clause:t.slice(7).trim()};let n=t.match(/^from\s+([.\w]+)\s+import\s+([\s\S]+)$/);if(!n)return null;let i=n[2].trim();return i.startsWith("(")&&i.endsWith(")")&&(i=i.slice(1,-1).trim()),{kind:"from",module:n[1],clause:i}}function jC(e,t,n,i){let r=Mt(i,n.start,n.end),o=n.clause.replace(/\n/g," ").trim();if(n.kind==="import")return Ne(o).flatMap(c=>{let l=c.trim().replace(/,$/,"");if(!l)return[];let[u,d]=l.split(/\s+as\s+/),m=u.trim(),p=(d??m.split(".")[0]??m).trim(),h=Jn(e,t,m),g=Qn(r,p);return[{importedName:m,localName:p,sourcePath:h,kind:"namespace",used:Pe(r,p)||g.length>0,usedMembers:g}]});let s=n.module?Jn(e,t,n.module):null,a=[];for(let c of Ne(o)){let l=c.trim().replace(/,$/,"");if(!l)continue;if(l==="*"){a.push({importedName:"*",localName:null,sourcePath:s,kind:"side-effect",used:!0,usedMembers:[]});continue}let[u,d]=l.split(/\s+as\s+/),m=(d??u).trim();a.push({importedName:u.trim(),localName:m,sourcePath:s,kind:"named",used:Pe(r,m),usedMembers:[]})}return a}import{basename as BC}from"path";function Ju(e,t,n){return Ve(e,t,i=>VC(e,t,i),()=>HC(e,t,n))}function HC(e,t,n){return He(n,/^[ \t]*(require_relative|require)\s+["']([^"']+)["']\s*$/gm,(i,r)=>{let o=i[1],s=i[2];if(!o||!s)return[];let a=o==="require_relative"?Xr(e,t,s):null;if(a){let c=Qu(s);return[Xn(c,c,a,Pe(r,c))]}return[on(s,a)]})}function VC(e,t,n){let i=te(n,new Set([])),r=[],o=new Set(["require","require_relative","load"]);for(let s of n.rootNode.descendantsOfType("call")){let a=s.namedChild(0);if(!a||a.type!=="identifier"||!o.has(a.text))continue;let l=s.namedChildren.find(p=>p.type==="argument_list")?.namedChild(0);if(!l||l.type!=="string")continue;let d=l.namedChildren.find(p=>p.type==="string_content")?.text;if(!d)continue;let m=a.text==="require_relative"?Xr(e,t,d):null;if(m){let p=Qu(d);r.push(J(p,p,m,i))}else r.push(on(d,m))}return r}function Qu(e){return Or(BC(e).replace(/\.[^.]+$/,""),/_/)}function Xu(e,t,n){return Ve(e,t,i=>qC(e,t,i),()=>He(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(i,r)=>{let o=i[1]?.trim();return o?UC(e,t,o,r):[]}))}function qC(e,t,n){let i=te(n,new Set(["use_declaration"])),r=[];for(let o of n.rootNode.descendantsOfType("use_declaration")){let s=o.namedChild(0);if(s)for(let a of Ai(s,"")){if(!a.importedName||a.importedName==="*")continue;let c=Ct(e,t,a.qualifiedName)??Ct(e,t,a.qualifiedName.split("::").slice(0,-1).join("::"));r.push(J(a.importedName,a.localName,c,i))}}return r}function Ai(e,t){switch(e.type){case"identifier":case"super":case"self":case"crate":{let n=e.text;return[{qualifiedName:no(t,n),importedName:n,localName:n}]}case"scoped_identifier":{let n=e.text,i=n.split("::").pop()??n;return[{qualifiedName:no(t,n),importedName:i,localName:i}]}case"scoped_use_list":{let n=e.namedChild(0),i=e.namedChild(1);if(!n||!i)return[];let r=no(t,n.text),o=[];for(let s of i.namedChildren)o.push(...Ai(s,r));return o}case"use_list":{let n=[];for(let i of e.namedChildren)n.push(...Ai(i,t));return n}case"use_as_clause":{let n=e.namedChild(0),i=e.namedChild(1);if(!n||!i)return[];let r=Ai(n,t),o=i.text;return r.map(s=>({...s,localName:o}))}case"use_wildcard":{let n=e.namedChild(0),i=n?n.text:"";return[{qualifiedName:no(t,`${i}::*`),importedName:"*",localName:"*"}]}default:return[]}}function no(e,t){return e?t?`${e}::${t}`:e:t}function UC(e,t,n,i){let r=n.trim();if(r.includes("{")&&r.includes("}")){let u=r.slice(0,r.indexOf("{")).replace(/::$/,"").trim(),d=r.slice(r.indexOf("{")+1,r.lastIndexOf("}")).trim();return Ne(d).flatMap(m=>{let p=m.trim();if(!p||p==="self")return[];let[h,g]=p.split(/\s+as\s+/),b=h?.trim();if(!b)return[];let S=(g??b.split("::").pop()??b).trim(),x=`${u}::${b}`.replace(/::::/g,"::");return[ot(e,t,i,x,b.split("::").pop()??b,S,Ct(e,t,u))]})}let[o,s]=r.split(/\s+as\s+/),a=o?.trim()??r,c=(s??a.split("::").pop()??a).trim(),l=Ct(e,t,a)??Ct(e,t,a.split("::").slice(0,-1).join("::"));return[ot(e,t,i,a,a.split("::").pop()??a,c,l)]}function Yu(e,t,n){let i=me(e,t);if(i)return WC(e,t,i);let r=[];for(let o of n.matchAll(/^[ \t]*pub\s+use\s+(.+?)\s*;$/gm)){let s=o[1]?.trim();s&&r.push(...zC(e,t,s))}return r}function WC(e,t,n){let i=[];for(let r of n.rootNode.descendantsOfType("use_declaration")){if(!GC(r))continue;let o=r.namedChildren.find(s=>s.type!=="visibility_modifier");if(o)for(let s of Ai(o,""))s.importedName&&i.push(ea(e,t,s.qualifiedName))}return i}function GC(e){for(let t of e.children)if(t.type==="visibility_modifier"&&t.text.startsWith("pub"))return!0;return!1}function zC(e,t,n){let i=n.trim();if(i.includes("{")&&i.includes("}")){let r=i.slice(0,i.indexOf("{")).replace(/::$/,"").trim(),o=i.slice(i.indexOf("{")+1,i.lastIndexOf("}")).trim();return Ne(o).flatMap(s=>{let a=s.trim();if(!a||a==="self")return[];let[c]=a.split(/\s+as\s+/),l=`${r}::${c?.trim()??a}`.replace(/::::/g,"::");return[ea(e,t,l)]})}return[ea(e,t,i)]}function ea(e,t,n){return{specifier:n,sourcePath:Ct(e,t,n)??Ct(e,t,n.split("::").slice(0,-1).join("::"))}}function an({language:e,extensions:t,imports:n,parseImports:i}){return{language:e,extensions:t,capabilities:{imports:n},parseImports:i}}function Zu(e,t){let n=t.toLowerCase();for(let i of e)for(let r of i.extensions)if(n.endsWith(r))return i;return null}var KC={language:"javascript",extensions:tn,capabilities:{imports:"ast-with-regex-fallback",reExports:"ast-with-regex-fallback"},parseImports:Ys,parseReExports:Zs},JC=an({language:"python",extensions:Gr,imports:"ast-with-regex-fallback",parseImports:Ku}),QC=an({language:"jvm",extensions:$e,imports:"ast-dispatch-with-regex-fallback",parseImports:Uu}),XC={language:"rust",extensions:zr,capabilities:{imports:"ast-with-regex-fallback",exports:"ast-with-regex-fallback"},parseImports:Xu,parseExports:Yu},YC=an({language:"ruby",extensions:Kr,imports:"ast-with-regex-fallback",parseImports:Ju}),ZC=an({language:"c/cpp",extensions:Jr,imports:"ast-with-regex-fallback",parseImports:Ou}),ev=an({language:"dotnet",extensions:$t,imports:"ast-dispatch-with-regex-fallback",parseImports:Hu}),tv={language:"dart",extensions:Qr,capabilities:{imports:"regex-only",exports:"regex-only"},parseImports:ju,parseExports:Bu},nv=an({language:"php",extensions:nn,imports:"ast-with-regex-fallback",parseImports:Gu}),iv=[KC,JC,QC,XC,YC,ZC,ev,tv,nv];function io(e){return Zu(iv,e)}var ta={clearGroups:["whole-project","source-file"]},rv=U("source-imports",ta),ov=U("source-exports",ta),sv=U("source-reexports",ta);function Mi(e,t){let n=Je(t);return sv.get(e,n,()=>{let i=io(n);if(!i?.parseReExports)return[];let r=M(e,n);return r?i.parseReExports(e,n,r):[]})}function fe(e,t){let n=Je(t);return rv.get(e,n,()=>{let i=io(n);if(!i)return[];let r=M(e,n);return r?i.parseImports(e,n,r):[]})}function ro(e,t){let n=Je(t);return ov.get(e,n,()=>{let i=io(n);if(!i?.parseExports)return[];let r=M(e,n);return r?i.parseExports(e,n,r):[]})}var av=U("file-dep-graph",{clearGroups:["whole-project"]});function ne(e,t){return av.get(e,t??"",()=>{let n=new Map,i=new Set(j(e,{includeIgnored:!1})),r=(o,s)=>lv(e,n,i,o,s);for(let o of cv(e,t))r(o.from_file,o.to_file);for(let o of i)if(!(t&&!o.includes(t)))for(let s of fe(e,o))s.sourcePath&&r(o,s.sourcePath);return n})}function cv(e,t){let n=t?`AND d1.relative_path LIKE '%${t}%'`:"";return e.all(`SELECT DISTINCT
104
+ ORDER BY start_line, end_line`,t)}function cC(e){return{symbolId:e.id,symbol:e.symbol,documentId:e.document_id,startLine:e.start_line,endLine:e.end_line,relativePath:e.relative_path,leaf:$(e.symbol),parentTypeName:lt(e.symbol),isFunctionLike:ce(e.symbol),isTypeLike:ee(e.symbol)==="type",kind:e.kind??null,documentation:e.documentation??null,enclosingSymbol:e.enclosing_symbol??null}}function ut(e,t={}){return qr(e,t.scope)}function qr(e,t){return j(e,{scope:t,includeIgnored:!1}).flatMap(n=>z(e,n)).filter(n=>!e.isIgnored(n.relativePath))}function io(e,t,n={}){if(t.length===0)return[];let r=t.flatMap(i=>z(e,i)).filter(i=>!e.isIgnored(i.relativePath));return n.onlyDocumented&&(r=r.filter(i=>i.documentation!==null&&i.documentation!=="")),n.sort&&(r=r.sort((i,o)=>i.relativePath.localeCompare(o.relativePath)||i.startLine-o.startLine||i.endLine-o.endLine)),r.map(i=>({startLine:i.startLine,endLine:i.endLine,symbol:i.symbol,shortName:b(i.symbol),signature:an(cn(i.documentation)),relativePath:i.relativePath,enclosingSymbol:i.enclosingSymbol}))}function la(e){let t=new Map,n=e.map((r,i)=>({definition:r,index:i,span:r.endLine-r.startLine})).sort((r,i)=>r.span-i.span||r.index-i.index);for(let{definition:r}of n)for(let i=r.startLine;i<=r.endLine;i+=1)t.has(i)||t.set(i,r);return t}function Be(e,t){let n=rd.get(e);return n||(n=la(e),rd.set(e,n)),n.get(t)??null}function ln(e,t){let n=z(e,t.relative_path).find(r=>r.symbolId===t.id);return n?{symbolId:n.symbolId,symbol:n.symbol,documentId:n.documentId,startLine:n.startLine,endLine:n.endLine,relativePath:n.relativePath}:{symbolId:t.id,symbol:t.symbol,documentId:t.document_id,startLine:t.start_line,endLine:t.end_line,relativePath:t.relative_path}}function lC(e,t,n){let r=F(e,t),i=oa(e,t);return i?gC(n,i,r):r?uC(n,r):n}function uC(e,t){let n=t.split(/\r?\n/),r=dC(e,n),i=mC(e,r),o=pC(i,n);return fC(e,o)}function dC(e,t){let n=e.some(i=>oo(i.symbol))?bC(t):null,r=new Map;for(let i of e)r.set(i.symbolId,yC(t,n,i));return r}function mC(e,t){return e.filter(n=>oo(n.symbol)).map(n=>({definition:n,startLine:t.get(n.symbolId)??n.startLine})).sort((n,r)=>n.startLine-r.startLine||n.definition.startLine-r.definition.startLine||n.definition.symbol.localeCompare(r.definition.symbol))}function pC(e,t){let n=new Map;for(let r=0;r<e.length;r+=1){let i=e[r],o=e[r+1],s=o?Math.max(i.startLine,o.startLine-1):t.length-1;n.set(i.definition.symbolId,{startLine:i.startLine,endLine:SC(t,i.definition,i.startLine,s)})}return n}function fC(e,t){return e.map(n=>{let r=t.get(n.symbolId);return r?{...n,startLine:r.startLine,endLine:r.endLine}:n})}function gC(e,t,n=null){let r=new Map;for(let i of t){let o=r.get(i.name);o?o.push(i):r.set(i.name,[i])}return e.map(i=>{if(!hC(i)||!i.leaf)return id(i,n);let o=r.get(i.leaf);if(!o||o.length===0)return id(i,n);let s=o[0],a=Math.abs(s.startLine-i.startLine);for(let c=1;c<o.length;c+=1){let l=o[c],u=Math.abs(l.startLine-i.startLine);u<a&&(s=l,a=u)}return{...i,startLine:s.startLine,endLine:s.endLine}})}function hC(e){return oo(e.symbol)?!0:ee(e.symbol)==="term"&&lt(e.symbol)===null}function id(e,t){if(!t||!e.leaf||ee(e.symbol)!=="term"||lt(e.symbol)!==null)return e;let n=e.leaf.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),r=new RegExp(`\\b(?:export\\s+)?(?:const|let|var)\\s+${n}\\b`),o=t.split(/\r?\n/).findIndex(s=>r.test(s));return o>=0?{...e,startLine:o,endLine:o}:e}function yC(e,t,n){if(!oo(n.symbol))return n.startLine;let r=Math.max(0,Math.min(n.startLine,e.length-1));if(!t)return r;let i=t.get(n.leaf);if(!i||i.length===0)return r;let o=null;for(let s of i){let a=Math.abs(s-n.startLine);(!o||a<o.distance)&&(o={line:s,distance:a})}return o?.line??r}function bC(e){let t=/\b(?:function|def|fn)\s+([A-Za-z_$][\w$]*)/g,n=/\b([A-Za-z_$][\w$]*)\s*[:=]\s*(?:async\s*)?(?:function\b|\()/g,r=/^\s*(?:(?:export|public|private|protected|static|readonly|async|abstract|get|set)\s+)*([A-Za-z_$][\w$]*)\s*(?:<[^(]*>)?\s*\(/,i=/\b([A-Za-z_$][\w$]*)\s*\(/g,o=new Map,s=(a,c)=>{let l=o.get(a);if(!l){o.set(a,[c]);return}l[l.length-1]!==c&&l.push(c)};for(let a=0;a<e.length;a+=1){let c=e[a]??"";for(let u of c.matchAll(t))u[1]&&s(u[1],a);for(let u of c.matchAll(n))u[1]&&s(u[1],a);let l=c.match(r);l?.[1]&&s(l[1],a);for(let u of c.matchAll(i))u[1]&&s(u[1],a)}return o}function SC(e,t,n,r){let i=Math.max(n,Math.min(e.length-1,r)),o=Math.max(n,Math.min(i,t.endLine)),s=0,a=0,c=!1;for(let l=n;l<=i;l+=1){let u=xC(e[l]??"");for(let d of u)d==="{"?(s+=1,c=!0):d==="}"?s=Math.max(0,s-1):d==="("?a+=1:d===")"&&(a=Math.max(0,a-1));if(c&&s===0||!c&&a===0&&l>=o)return l}return o}function xC(e){let t="",n=null,r=!1;for(let i=0;i<e.length;i+=1){let o=e[i],s=e[i+1];if(!n&&o==="/"&&s==="/"){t+=" ".repeat(e.length-i);break}if(n){if(r){r=!1,t+=" ";continue}if(o==="\\"){r=!0,t+=" ";continue}o===n&&(n=null),t+=" ";continue}if(o==='"'||o==="'"||o==="`"){n=o,t+=" ";continue}t+=o}return t}function oo(e){return e.includes("().")}function so(e){let t=ge(e);if("kind"in t)return[];let n=[];for(let r=t.descriptors.length-2;r>=0;r-=1){let i=t.descriptors[r];i?.suffix==="type"&&i.name&&n.push(i.name)}return n}import{existsSync as FC}from"fs";import{basename as od,isAbsolute as $C,join as AC}from"path";function B(e,t){let n=sr(e,t.trim());if(n)return n;let r=LC(e,t);if(r)return r;let i=CC(e,t);return i||wC(e,t)}function CC(e,t){let n=da(t),r=ua(n);if(!r)return null;let i=`%${r.path}%`,o=r.leaf,a=vC(e,i,o,n)[0];return a?ln(e,a):null}function vC(e,t,n,r){let i=ir([],[...RC(e,t,n),...kC(e,t,n)]).filter(o=>!e.isIgnored(o.relative_path)).filter(o=>or(o,r)>1);return i.sort((o,s)=>or(s,r)-or(o,r)||o.end_line-o.start_line-(s.end_line-s.start_line)||o.start_line-s.start_line||o.symbol.localeCompare(s.symbol)),i}function RC(e,t,n){return nr(e,{where:"d.relative_path LIKE ? AND (gs.display_name = ? OR gs.symbol LIKE ?)",params:[t,n,`%/${n}.%`]})}function kC(e,t,n){return rr(e,{where:"d.relative_path LIKE ? AND (gs.display_name = ? OR gs.symbol LIKE ?)",params:[t,n,`%/${n}.%`]})}function wC(e,t){let n=da(t),r=TC(t),i=NC(e,r),o=_C(i,t,n);if(o&&!e.isIgnored(o.relative_path))return ln(e,o);let s=null;for(let a of i){if(e.isIgnored(a.relative_path))continue;let c=EC(a,t,n,r);c<=0||(!s||c>s.score)&&(s={row:a,score:c})}return s?ln(e,s.row):null}function LC(e,t){let n=t.match(/^(.+):(\d+)-(\d+)$/);if(!n)return null;let[,r,i,o]=n,s=Math.max(0,parseInt(i,10)-1),a=Math.max(s,parseInt(o,10)-1),c=IC(e,r,s,a)??DC(e,r,s,a);return c&&!e.isIgnored(c.relative_path)?ln(e,c):null}function IC(e,t,n,r){return nr(e,{where:"d.relative_path LIKE ? AND der.start_line <= ? AND der.end_line >= ?",params:[`%${t}%`,n,r],orderBy:"(der.end_line - der.start_line) ASC",limit:1})[0]}function DC(e,t,n,r){return rr(e,{where:"d.relative_path LIKE ? AND c.start_line <= ? AND c.end_line >= ?",params:[`%${t}%`,n,r],orderBy:"(MAX(c.end_line) - MIN(c.start_line)) ASC",limit:1})[0]}function sr(e,t){let r=nr(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, der.start_line",limit:1})[0]??rr(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, start_line",limit:1})[0];return!r||e.isIgnored(r.relative_path)?null:ln(e,r)}function ao(e,t){if("symbol"in t&&"relativePath"in t)return t;let n=PC(e,t.symbolId)[0];return n?ln(e,n):null}function PC(e,t){let n=nr(e,{where:"gs.id = ?",params:[t],orderBy:"der.start_line, der.end_line"}),r=rr(e,{where:"gs.id = ?",params:[t],orderBy:"start_line, end_line"});return ir(n,r)}function NC(e,t){let n=t.map(()=>"(gs.symbol LIKE ? OR d.relative_path LIKE ? OR COALESCE(gs.display_name, '') LIKE ?)"),r=t.flatMap(a=>{let c=`%${a}%`;return[c,c,c]}),i=n.join(`
105
+ AND `),o=nr(e,{where:i,params:r,limit:200}),s=rr(e,{where:i,params:r,limit:200});return ir(o,s)}function EC(e,t,n,r){let i=t.trim(),o=n,s=o.replace(/\(\)$/,""),a=t.toLowerCase(),c=n.toLowerCase(),l=c.replace(/\(\)$/,""),u=e.symbol,d=b(e.symbol),m=$(e.symbol),f=e.display_name??"",h=e.symbol.toLowerCase(),g=d.toLowerCase(),y=m.toLowerCase(),S=f.toLowerCase(),C=e.relative_path.toLowerCase(),k=/[/:.]/.test(n),D=ua(n),x=D?.leaf.toLowerCase(),I=0;return(u===i||u===o)&&(I+=1150),(d===i||d===o)&&(I+=1100),f===s&&(I+=1180),m===s&&(I+=1160),(`${m}()`===i||`${m}()`===o)&&(I+=955),(h===a||h===c)&&(I+=1e3),(g===a||g===c)&&(I+=950),(C===a||C===c)&&(I+=925),(C.endsWith(`/${c}`)||C.endsWith(`/${a}`))&&(I+=875),S===l&&(I+=850),y===l&&(I+=825),(`${y}()`===a||`${y}()`===c)&&(I+=820),(g.endsWith(`:${c}`)||g.endsWith(`:${l}`)||g.endsWith(`:${l}()`))&&(I+=800),h.includes(c)&&(I+=120),g.includes(c)&&(I+=140),C.includes(c)&&(I+=140),S.includes(c)&&(I+=110),r.every(M=>{let L=M.toLowerCase();return h.includes(L)||g.includes(L)||C.includes(L)||S.includes(L)})&&(I+=100+r.length*15),D&&C.includes(D.path.toLowerCase())&&(I+=360,x&&(y===x||`${y}()`===x||`${y}()`==`${x}()`)&&(I+=700),Ce(e.symbol)&&(I+=180)),ce(e.symbol)&&y===l&&(I+=60),!k&&Ot(e.symbol)&&(I-=160),I-=Math.min(50,Math.max(0,e.end_line-e.start_line)),I}function ua(e){let t=e.trim().replace(/\\/g,"/"),n=t.lastIndexOf("/");if(n<=0||n===t.length-1)return null;let r=t.slice(n+1).replace(/\(\)$/,"");return!r||r.includes(".")?null:{path:t.slice(0,n),leaf:r}}function da(e){return e.trim().replace(/\(\)$/,"").replace(/\(.*$/,"")}function TC(e){let t=da(e),n=t.split(/[^A-Za-z0-9_]+/).map(r=>r.trim()).filter(r=>r.length>0);return n.length>0?[...new Set(n)]:[t]}function _C(e,t,n){let r=t.trim(),i=e.filter(o=>{let s=b(o.symbol),a=(o.display_name??"").trim();return o.symbol===r||s===r||s===n||a===r||a===n||`${a}()`===r||or(o,n)>1||o.relative_path===r});return i.length===0?null:(i.sort((o,s)=>or(s,n)-or(o,n)||o.end_line-o.start_line-(s.end_line-s.start_line)||o.relative_path.localeCompare(s.relative_path)||o.symbol.localeCompare(s.symbol)),i[0]??null)}function or(e,t){let n=ua(t);if(!n)return 0;let r=e.relative_path.toLowerCase(),i=$(e.symbol).toLowerCase(),o=n.path.toLowerCase(),s=n.leaf.toLowerCase();return r.includes(o)?i!==s?1:Ce(e.symbol)?lt(e.symbol)===null?5:4:lt(e.symbol)===null?3:2:0}function Ee(e,t){let n=sd(e,t,{allowMultiple:!1})[0]?.relativePath;return n||MC(e,t)}function ar(e,t){return sd(e,t,{allowMultiple:!0}).map(n=>n.relativePath)}function MC(e,t){if(!t)return null;let n=t.replace(/\\/g,"/").replace(/^\.\//,""),r=$C(n)&&n.startsWith(e.config.projectRoot)?n.slice(e.config.projectRoot.length).replace(/^\/+/,""):n,i=AC(e.config.projectRoot,r);return FC(i)?r:null}function sd(e,t,n){let r=ad(t);if(!r)return[];let i=j(e,{includeIgnored:!1}).map(a=>({relativePath:a,score:jC(a,r)})).filter(a=>a.score>0).sort((a,c)=>c.score-a.score||a.relativePath.localeCompare(c.relativePath));if(i.length===0){let a=B(e,t);return!a||e.isIgnored(a.relativePath)?[]:[{relativePath:a.relativePath,score:700}]}let o=i.filter(a=>a.score>=1100);if(o.length>0)return n.allowMultiple?o:[o[0]];let s=i.filter(a=>a.score>=800);return s.length>0?n.allowMultiple?s:[s[0]]:n.allowMultiple?i:[i[0]]}function jC(e,t){let n=ad(e),r=od(n),i=od(t),o=0;return n===t&&(o+=1200),n.endsWith(`/${t}`)&&(o+=1100),r===i&&(o+=900),n.startsWith(`${t}/`)&&(o+=850),n.includes(t)&&(o+=250),o}function ad(e){return e.trim().replace(/\\/g,"/").replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"")}import{basename as ow}from"path";import{existsSync as co}from"fs";import{basename as OC,dirname as Bt,extname as wt,join as Ze,relative as Ur,resolve as He}from"path";var BC=Y("indexed-paths",{clearGroups:[]}),HC=Y("indexed-path-digest",{clearGroups:[]}),un=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs",".vue"],lo=[".py",".pyi"],Ae=[".java",".scala",".kt",".kts"],uo=[".rs"],mo=[".rb"],po=[".c",".h",".cc",".cpp",".cxx",".hpp",".hh",".hxx"],Ht=[".cs",".vb"],fo=[".dart"],dn=[".php"],VC=new Set(un),ma=new Set(lo),cd=new Set(Ae),pa=new Set(uo),fa=new Set(mo),ld=new Set(po),ud=new Set(Ht),ga=new Set(fo),dd=new Set(dn),qC=[{extensions:un,lookup:VC},{extensions:lo,lookup:ma},{extensions:Ae,lookup:cd},{extensions:uo,lookup:pa},{extensions:mo,lookup:fa},{extensions:po,lookup:ld},{extensions:Ht,lookup:ud},{extensions:fo,lookup:ga},{extensions:dn,lookup:dd}];function Vt(e,t){return t.has(wt(e).toLowerCase())}function UC(e){return Vt(e,ma)}function WC(e){return Vt(e,cd)}function GC(e){return Vt(e,pa)}function zC(e){return Vt(e,fa)}function JC(e){return Vt(e,ld)}function KC(e){return Vt(e,ud)}function md(e){return wt(e).toLowerCase()===".vb"}function XC(e){return Vt(e,ga)}function QC(e){return Vt(e,dd)}function ha(e){let t=wt(e).toLowerCase();for(let n of qC)if(n.lookup.has(t))return n.extensions;return un}function YC(e){return WC(e)||KC(e)||QC(e)}function tt(e,t,n){return UC(t)?cr(e,t,n):GC(t)?Lt(e,t,n):zC(t)?go(e,t,n):JC(t)?ho(e,t,n):YC(t)?te(e,n.replace(/\\/g,"."),ha(t)):XC(t)?yo(e,t,n):ZC(e,t,n)}function ZC(e,t,n){if(!n.startsWith(".")&&!n.startsWith("/"))return null;let r=Bt(Ze(e.config.projectRoot,t)),i=He(r,n),o=lr(e);for(let s of iv(i)){let a=et(Ur(e.config.projectRoot,s));if(o.has(a)||co(s))return a}return et(Ur(e.config.projectRoot,i))}function cr(e,t,n){let r=lr(e),i;if(n.startsWith(".")){let o=n.match(/^(\.+)(.*)$/);if(!o)return null;let s=o[1].length,a=o[2].replace(/^\./,""),c=Bt(Ze(e.config.projectRoot,t));for(let l=1;l<s;l++)c=Bt(c);i=a?He(c,a.replace(/\./g,"/")):c}else i=He(e.config.projectRoot,n.replace(/\./g,"/"));for(let o of ev(i)){let s=et(Ur(e.config.projectRoot,o));if(r.has(s)||co(o))return s}return null}function Lt(e,t,n){if(!n)return null;let r=n.replace(/\s+as\s+.+$/,"").trim();if(!r.startsWith("crate::")&&!r.startsWith("self::")&&!r.startsWith("super::"))return null;let i=Bt(Ze(e.config.projectRoot,t)),o;return r.startsWith("crate::")?o=He(e.config.projectRoot,"src",r.slice(7).replace(/::/g,"/")):r.startsWith("self::")?o=He(i,r.slice(6).replace(/::/g,"/")):o=He(Bt(i),r.slice(7).replace(/::/g,"/")),ya(e,tv(o))}function go(e,t,n){let r=Bt(Ze(e.config.projectRoot,t)),i=He(r,n);return ya(e,nv(i))}function ho(e,t,n){let r=Bt(Ze(e.config.projectRoot,t)),i=[He(r,n),He(e.config.projectRoot,n),He(e.config.projectRoot,"include",n),He(e.config.projectRoot,"src",n)];return ya(e,i)}function te(e,t,n){let r=lr(e),i=t.replace(/\\/g,".").replace(/::/g,".").replace(/^global::/,""),o=i.replace(/\./g,"/"),s=i.split(".").pop()??i;for(let c of n){let l=`${o}${c}`,u=[...r].find(d=>d.endsWith(l));if(u)return u}for(let c of n){let l=[...r].find(u=>OC(u)===`${s}${c}`);if(l)return l}let a=[...r].filter(c=>n.includes(wt(c).toLowerCase())).filter(c=>c.includes(`/${o}/`)||c.includes(`/${s}/`)).sort((c,l)=>c.localeCompare(l));return a.length===1?a[0]:null}function yo(e,t,n){let r=lr(e);if(n.startsWith("package:")){let s=n.slice(8),a=s.indexOf("/");if(a<0)return null;let c=s.slice(a+1),l=et(c.startsWith("lib/")?c:`lib/${c}`);return r.has(l)?l:null}let i=Bt(Ze(e.config.projectRoot,t)),o=He(i,n);for(let s of rv(o)){let a=et(Ur(e.config.projectRoot,s));if(r.has(a)||co(s))return a}return null}function ev(e){let t=wt(e);return ma.has(t)?[e]:[`${e}.py`,`${e}.pyi`,Ze(e,"__init__.py"),Ze(e,"__init__.pyi")]}function ya(e,t){let n=lr(e);for(let r of t){let i=et(Ur(e.config.projectRoot,r));if(n.has(i)||co(r))return i}return null}function tv(e){let t=wt(e);return pa.has(t)?[e]:[`${e}.rs`,Ze(e,"mod.rs")]}function nv(e){let t=wt(e);return fa.has(t)?[e]:[`${e}.rb`,Ze(e,"index.rb")]}function rv(e){let t=wt(e);return ga.has(t)?[e]:[`${e}.dart`,e]}function iv(e){let t=wt(e),n=new Set;if(t){n.add(e);for(let r of un)n.add(e.slice(0,-t.length)+r)}else for(let r of un)n.add(`${e}${r}`),n.add(Ze(e,`index${r}`));return[...n]}function lr(e){return BC.get(e,()=>new Set(j(e,{includeIgnored:!1}).map(et)))}function pd(e){return HC.get(e,()=>zn([...lr(e)].sort().join(`
106
+ `)))}function et(e){return e.replace(/\\/g,"/")}import{basename as gd}from"path";function mn(e){return e.replace(/'''[\s\S]*?'''/g,qt).replace(/"""[\s\S]*?"""/g,qt).replace(/#.*$/gm,qt).replace(/\/\/.*$/gm,qt).replace(/\/\*[\s\S]*?\*\//g,qt).replace(/`(?:\\[\s\S]|[^`])*`/g,qt).replace(/'(?:\\.|[^'\\\r\n])*'/g,qt).replace(/"(?:\\.|[^"\\\r\n])*"/g,qt)}function qt(e){return e.replace(/[^\r\n]/g," ")}var _V=rn("stripped-lines",{clearGroups:["whole-project","source-file"]});$t({name:"stripped-source-singleton",groups:["whole-project","source-file"],clearAll:()=>{bo=null,Wr=""},clearFile:()=>{bo=null,Wr=""}});var bo=null,Wr="";function ov(e){return bo===e||(bo=e,Wr=mn(e)),Wr}function Ut(e,t,n){let r=ov(e);return`${r.slice(0,t)}${" ".repeat(n-t)}${r.slice(n)}`}function Te(e,t){return new RegExp(`\\b${fd(t)}\\b`,"m").test(e)}function ur(e,t){let n=new Set,r=new RegExp(`\\b${fd(t)}\\s*\\.\\s*([A-Za-z_$][\\w$]*)`,"g");for(let i of e.matchAll(r)){let o=i[1];o&&n.add(o)}return[...n]}function fd(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Gr(e){let t=0;for(let n of e)n==="("&&(t+=1),n===")"&&(t-=1);return t}var sv=new Set(["identifier","type_identifier","property_identifier","shorthand_property_identifier","field_identifier"]);function _e(e){let t=[],n=0,r=0;for(let i=0;i<e.length;i++){let o=e[i];(o==="{"||o==="["||o==="(")&&n++,(o==="}"||o==="]"||o===")")&&n--,o===","&&n===0&&(t.push(e.slice(r,i)),r=i+1)}return t.push(e.slice(r)),t}function Me(e,t){for(let n of e.namedChildren)if(n.type===t)return n;return null}function ne(e,t){let n=new Set,r=(i,o)=>{let s=o||t.has(i.type);!s&&sv.has(i.type)&&n.add(i.text);for(let a of i.children)r(a,s)};return r(e.rootNode,!1),n}function dt(e,t,n,r,i,o,s){return{importedName:i,localName:o,sourcePath:s??te(e,r,ha(t)),kind:"named",used:Te(n,o),usedMembers:[]}}function Z(e,t,n,r,i="named",o={}){return{importedName:e,localName:t,sourcePath:n,kind:i,used:r.has(t),usedMembers:[],isTypeOnly:o.isTypeOnly}}function dr(e,t,n,r,i="named",o=[],s={}){return{importedName:e,localName:t,sourcePath:n,kind:i,used:r,usedMembers:o,isTypeOnly:s.isTypeOnly}}function pn(e,t){return{importedName:e,localName:null,sourcePath:t,kind:"side-effect",used:!0,usedMembers:[]}}function fn(e,t,n={}){return{importedName:e,localName:n.localName??null,sourcePath:t,kind:"namespace",used:n.used??!0,usedMembers:n.usedMembers??[],isTypeOnly:n.isTypeOnly}}function Ve(e,t,n){let r=[];for(let i of e.matchAll(t)){let o=i[0];if(!o||typeof i.index!="number")continue;let s=Ut(e,i.index,i.index+o.length);for(let a of n(i,s))r.push(a)}return r}function qe(e,t,n,r){let i=fe(e,t);if(i){let o=n(i);if(o)return o}return r()}function So(e,t,n,r){let i=fe(e,t),o=W(t),s=o?n[o]:void 0;return i&&s?s(i):r()}function hd(e,t,n){return qe(e,t,r=>cv(e,t,r),()=>av(e,t,n))}function av(e,t,n){return Ve(n,/^[ \t]*#include\s+[<"]([^">]+)[">]\s*$/gm,(r,i)=>{let o=r[1]?.trim();if(!o)return[];let s=gd(o).replace(/\.[^.]+$/,"");return[dr(o,s,ho(e,t,o),Te(i,s))]})}function cv(e,t,n){let r=ne(n,new Set(["preproc_include"])),i=[];for(let o of n.rootNode.descendantsOfType("preproc_include")){let s=null;for(let c of o.namedChildren){if(c.type==="system_lib_string"){s=c.text.replace(/^<|>$/g,"");break}if(c.type==="string_literal"){s=c.namedChildren.find(u=>u.type==="string_content")?.text??c.text.replace(/^"|"$/g,"");break}}if(!s)continue;let a=gd(s).replace(/\.[^.]+$/,"");i.push(Z(s,a,ho(e,t,s),r))}return i}function yd(e,t,n){let r=[];for(let i of n.matchAll(/^[ \t]*import\s+['"]([^'"]+)['"](?:\s+as\s+([A-Za-z_]\w*))?[\s\S]*?;$/gm)){let o=i[1]?.trim(),s=i[2]?.trim()??null,a=i[0];if(!o||!a||typeof i.index!="number")continue;let c=Ut(n,i.index,i.index+a.length);r.push({importedName:o,localName:s,sourcePath:yo(e,t,o),kind:s?"namespace":"side-effect",used:s?Te(c,s):!0,usedMembers:s?ur(c,s):[]})}return r}function bd(e,t,n){let r=[];for(let i of n.matchAll(/^[ \t]*export\s+['"]([^'"]+)['"][\s\S]*?;$/gm)){let o=i[1]?.trim();o&&r.push({specifier:o,sourcePath:yo(e,t,o)})}return r}function Sd(e,t,n){return So(e,t,{csharp:r=>uv(e,t,r),vb:r=>lv(e,t,r)},()=>{let r=md(t)?/^[ \t]*Imports\s+(.+?)\s*$/gm:/^[ \t]*using\s+(.+?)\s*;$/gm;return Ve(n,r,(i,o)=>{let s=i[1]?.trim();if(!s)return[];let[a,c]=s.split(/\s*=\s*/),l=!!c,u=(l?c:a)?.trim()??s,d=u.split(".").pop()??u,m=l?a?.trim()??d:d;return[dt(e,t,o,u,d,m,te(e,u,Ht))]})})}function lv(e,t,n){let r=ne(n,new Set(["imports_statement"])),i=[];for(let o of n.rootNode.descendantsOfType("imports_statement")){let s=o.namedChildren.filter(m=>m.type==="namespace_name");if(s.length===0)continue;let a=s[s.length-1],c=s.length>1?s[0]:null,l=a.text,u=l.split(".").pop()??l,d=c?.text??u;i.push(Z(u,d,te(e,l,Ht),r,c?"namespace":"named"))}return i}function uv(e,t,n){let r=ne(n,new Set(["using_directive"])),i=[];for(let o of n.rootNode.descendantsOfType("using_directive")){let s=o.namedChildren;if(s.length===0)continue;let a=null,c;s.length>=2&&s[0].type==="identifier"&&(s[1].type==="qualified_name"||s[1].type==="identifier")?(a=s[0],c=s[1]):c=s[s.length-1];let l=c.text,u=l.split(".").pop()??l,d=a?.text??u;i.push(Z(u,d,te(e,l,Ht),r,a?"namespace":"named"))}return i}var dv=U("vue-non-script-identifiers",{clearGroups:["whole-project","source-file"]});function xd(e,t){return dv.get(e,t,()=>{let n=new Set,r=F(e,t);if(!r)return n;let o=r.replace(/<script\b[^>]*>[\s\S]*?<\/script>/g,s=>s.replace(/[^\r\n]/g," ")).replace(/<!--[\s\S]*?-->/g,s=>s.replace(/[^\r\n]/g," ")).replace(/\/\*[\s\S]*?\*\//g,s=>s.replace(/[^\r\n]/g," "));for(let s of o.matchAll(/[A-Za-z_$][\w$]*/g))n.add(s[0]);return n})}function ba(e,t,n){return qe(e,t,r=>pv(e,t,r),()=>mv(e,t,n))}function mv(e,t,n){return kv(n).flatMap(r=>wv(e,t,r.clause,r.specifier,r.start,r.end,n))}function pv(e,t,n){let r=fv(e,t,n),i=[];for(let o of n.rootNode.descendantsOfType("import_statement"))i.push(...gv(e,t,n,o,r));return i}function fv(e,t,n){let r=ne(n,new Set(["import_statement"]));if(Rt(t))for(let i of xd(e,t))r.add(i);return r}function gv(e,t,n,r,i){let o=xv(r);if(!o)return[];let s=tt(e,t,o),a=Me(r,"import_clause");return a?hv(n,a,s,i,Cv(r.text)):[pn("*",s)]}function hv(e,t,n,r,i){let o=[];for(let s of t.namedChildren)if(s.type==="identifier")o.push(yv(s.text,n,r,i));else if(s.type==="namespace_import"){let a=bv(e,s,n,r,i);a&&o.push(a)}else s.type==="named_imports"&&o.push(...Sv(s,n,r,i));return o}function yv(e,t,n,r){return Z("default",e,t,n,"default",{isTypeOnly:r})}function bv(e,t,n,r,i){let s=Me(t,"identifier")?.text??"";if(!s)return null;let a=Rv(e,s);return fn("*",n,{localName:s,usedMembers:a,isTypeOnly:i,used:a.length>0||r.has(s)})}function Sv(e,t,n,r){let i=[];for(let o of e.namedChildren){if(o.type!=="import_specifier")continue;let s=o.namedChild(0),a=o.namedChild(1);if(!s)continue;let c=s.text,l=a?.text??c;i.push(Z(c,l,t,n,"named",{isTypeOnly:r||vv(o.text)}))}return i}function xv(e){let t=Me(e,"string");if(!t)return null;let n=Me(t,"string_fragment");return n?n.text:null}function Cv(e){return/^\s*import\s+type\b/.test(e)}function vv(e){return/^\s*type\b/.test(e.trim())}function Rv(e,t){let n=new Set;for(let r of e.rootNode.descendantsOfType("member_expression")){let i=r.namedChild(0),o=r.namedChild(1);!i||!o||i.type!=="identifier"||i.text!==t||(o.type==="property_identifier"||o.type==="identifier")&&n.add(o.text)}return[...n]}function kv(e){let t=[],n=/^[ \t]*import\s+([\s\S]*?)\s+from\s+['"]([^'"]+)['"]\s*;?/gm;for(let i of e.matchAll(n)){let o=i[0],s=i[1],a=i[2];!o||!a||typeof i.index!="number"||t.push({clause:s,specifier:a,start:i.index,end:i.index+o.length})}let r=/^[ \t]*import\s+['"]([^'"]+)['"]\s*;?/gm;for(let i of e.matchAll(r)){let o=i[0],s=i[1];!o||!s||typeof i.index!="number"||t.push({clause:null,specifier:s,start:i.index,end:i.index+o.length})}return t.sort((i,o)=>i.start-o.start)}function wv(e,t,n,r,i,o,s){let a=tt(e,t,r),c=Ut(s,i,o);return n?Lv(n).map(u=>({...u,sourcePath:a})).map(u=>{if(u.kind==="namespace"){let d=ur(c,u.localName);return fn(u.importedName,u.sourcePath,{localName:u.localName,usedMembers:d,used:d.length>0||Te(c,u.localName),isTypeOnly:u.isTypeOnly})}return u.kind==="side-effect"?pn(u.importedName,u.sourcePath):dr(u.importedName,u.localName??"",u.sourcePath,u.localName?Te(c,u.localName):!1,u.kind,[],{isTypeOnly:u.isTypeOnly})}):[pn("*",a)]}function Lv(e){let t=e.trim(),n=/^type\b/.test(t),r=t.replace(/^type\s+/,""),[i,o]=Iv(r),s=[];return i&&s.push(...Cd(i,n)),o&&s.push(...Cd(o,n)),s}function Cd(e,t){let n=e.trim();if(!n)return[];if(n.startsWith("{")){let r=n.slice(1,-1).trim();return r?_e(r).map(i=>{let o=i.trim(),s=t||/^type\b/.test(o),a=o.replace(/^type\s+/,""),[c,l]=a.split(/\s+as\s+/);return{importedName:c.trim(),localName:(l??c).trim(),kind:"named",isTypeOnly:s}}):[]}return n.startsWith("* as ")?[{importedName:"*",localName:n.slice(5).trim(),kind:"namespace",isTypeOnly:t}]:[{importedName:"default",localName:n,kind:"default",isTypeOnly:t}]}function Iv(e){let t=0;for(let n=0;n<e.length;n++){let r=e[n];if(r==="{"&&t++,r==="}"&&t--,r===","&&t===0)return[e.slice(0,n).trim(),e.slice(n+1).trim()]}return[e.trim(),null]}function Sa(e,t,n){let r=fe(e,t);return r?_v(e,t,r):Dv(e,t,n)}function Dv(e,t,n){return[...Pv(e,t,n),...Nv(e,t,n),...Ev(e,t,n)]}function Pv(e,t,n){let r=[],i=/^[ \t]*export\s+(?:type\s+)?\{([\s\S]*?)\}\s+from\s+['"]([^'"]+)['"]\s*;?/gm;for(let o of n.matchAll(i)){if(typeof o.index!="number")continue;let s=o[1]??"",a=o[2]??"",c=_e(s).map(d=>Tv(d.trim())).filter(d=>!!d),l=mr(n,o.index),u=mr(n,o.index+o[0].length-1);r.push({kind:"named",sourcePath:tt(e,t,a),names:c,startLine:l,endLine:u})}return r}function Nv(e,t,n){let r=[],i=/^[ \t]*export\s+\*\s+as\s+(\w+)\s+from\s+['"]([^'"]+)['"]\s*;?/gm;for(let o of n.matchAll(i)){if(typeof o.index!="number")continue;let s=o[2]??"",a=mr(n,o.index),c=mr(n,o.index+o[0].length-1);r.push({kind:"star-as",sourcePath:tt(e,t,s),names:[],startLine:a,endLine:c})}return r}function Ev(e,t,n){let r=[],i=/^[ \t]*export\s+\*\s+from\s+['"]([^'"]+)['"]\s*;?/gm;for(let o of n.matchAll(i)){if(typeof o.index!="number")continue;let s=o[1]??"",a=mr(n,o.index),c=mr(n,o.index+o[0].length-1);r.push({kind:"star",sourcePath:tt(e,t,s),names:[],startLine:a,endLine:c})}return r}function Tv(e){if(!e)return null;let t=e.replace(/^type\s+/,"").trim();if(!t)return null;let n=t.match(/^(\w+)\s+as\s+(\w+)$/);if(n)return n[2]??null;let r=t.match(/^(\w+)$/);return r?r[1]??null:null}function mr(e,t){let n=0;for(let r=0;r<t&&r<e.length;r++)e.charCodeAt(r)===10&&n++;return n}function _v(e,t,n){let r=[];for(let i of n.rootNode.descendantsOfType("export_statement")){let o=Fv(e,t,i);if(o===void 0)continue;let s=i.startPosition.row,a=i.endPosition.row,c=$v(i,o,s,a);r.push(c)}return r}function Fv(e,t,n){let r=Me(n,"string");if(!r)return;let i=Me(r,"string_fragment");if(i)return tt(e,t,i.text)}function $v(e,t,n,r){let i=Me(e,"export_clause");if(i){let s=[];for(let a of i.namedChildren){if(a.type!=="export_specifier")continue;let c=a.namedChild(0),l=a.namedChild(1);c&&s.push((l??c).text)}return{kind:"named",sourcePath:t,names:s,startLine:n,endLine:r}}return Me(e,"namespace_export")?{kind:"star-as",sourcePath:t,names:[],startLine:n,endLine:r}:{kind:"star",sourcePath:t,names:[],startLine:n,endLine:r}}function vd(e,t,n){return So(e,t,{java:r=>Av(e,t,r),kotlin:r=>Mv(e,t,r),scala:r=>jv(e,t,r)},()=>Ve(n,/^[ \t]*import\s+(?:static\s+)?(.+?)\s*;?$/gm,(r,i)=>{let o=r[1]?.trim();return o?Ov(e,t,o,i):[]}))}function Av(e,t,n){let r=ne(n,new Set(["import_declaration"])),i=[];for(let o of n.rootNode.descendantsOfType("import_declaration")){let s=o.children.some(d=>d.type==="asterisk"),c=o.namedChildren.find(d=>d.type==="scoped_identifier")??o.namedChildren.find(d=>d.type==="identifier");if(!c)continue;let l=c.text;if(s){i.push(fn("*",te(e,l,Ae)));continue}let u=l.split(".").pop()??l;i.push(Z(u,u,te(e,l,Ae),r))}return i}function Mv(e,t,n){let r=ne(n,new Set(["import_header","import_list"])),i=[];for(let o of n.rootNode.descendantsOfType("import_header")){let s=o.namedChildren.find(f=>f.type==="identifier");if(!s)continue;let a=o.namedChildren.some(f=>f.type==="wildcard_import"),c=o.namedChildren.find(f=>f.type==="import_alias");if(a){i.push(fn("*",te(e,s.text,Ae)));continue}let l=s.text,u=l.split(".").pop()??l,m=c?.namedChild(0)?.text??u;i.push(Z(u,m,te(e,l,Ae),r))}return i}function jv(e,t,n){let r=ne(n,new Set(["import_declaration"])),i=[];for(let o of n.rootNode.descendantsOfType("import_declaration")){let s=o.namedChildren.find(d=>d.type==="namespace_selectors"||d.type==="namespace_wildcard"),a=o.namedChildren.filter(d=>d!==s&&(d.type==="identifier"||d.type==="stable_identifier")),c=a.map(d=>d.text).join(".");if(!c)continue;if(s?.type==="namespace_wildcard"){i.push(fn("*",te(e,c,Ae)));continue}if(s?.type==="namespace_selectors"){for(let d of s.namedChildren)if(d.type==="arrow_renamed_identifier"){let[m,f]=d.namedChildren;if(!m)continue;let h=m.text,g=f?.text??h;if(h==="_")continue;i.push(Z(h,g,te(e,`${c}.${h}`,Ae),r))}else if(d.type==="identifier"){let m=d.text;i.push(Z(m,m,te(e,`${c}.${m}`,Ae),r))}continue}let l=a[a.length-1]?.text??c,u=a.slice(0,-1).map(d=>d.text).join(".")||c;i.push(Z(l,l,te(e,u&&a.length>1?`${u}.${l}`:c,Ae),r))}return i}function Ov(e,t,n,r){if(n.includes("{")&&n.includes("}")){let i=n.slice(0,n.indexOf("{")).replace(/\.$/,"").trim(),o=n.slice(n.indexOf("{")+1,n.lastIndexOf("}")).trim();return _e(o).flatMap(s=>{let a=s.trim();if(!a)return[];let[c,l]=a.includes("=>")?a.split(/\s*=>\s*/):a.split(/\s+as\s+/),u=c?.trim();if(!u||u==="_")return[];let d=(l??u.split(".").pop()??u).trim(),m=u==="_"?i:`${i}.${u}`.replace(/\.\./g,".");return[dt(e,t,r,m,u,d)]})}return[dt(e,t,r,n,n.split(".").pop()??n,n.split(".").pop()??n)]}function kd(e,t,n){return qe(e,t,r=>Bv(e,t,r),()=>Ve(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(r,i)=>{let o=r[1]?.trim();return o?_e(o).flatMap(s=>{let a=s.trim();if(!a)return[];let[c,l]=a.split(/\s+as\s+/i),u=c?.trim()??a,d=u.split("\\").pop()??u,m=(l??d).trim();return[dt(e,t,i,u,d,m,te(e,u.replace(/\\/g,"."),dn))]}):[]}))}function Bv(e,t,n){let r=ne(n,new Set(["namespace_use_declaration"])),i=[],o=(s,a,c)=>{i.push(Z(a,c,te(e,s.replace(/\\/g,"."),dn),r))};for(let s of n.rootNode.descendantsOfType("namespace_use_declaration")){let a=s.namedChildren.find(c=>c.type==="namespace_use_group");if(a){let c=s.namedChildren.find(l=>l.type==="namespace_name")?.text??"";for(let l of a.namedChildren){if(l.type!=="namespace_use_clause")continue;let{importedName:u,localName:d,qualified:m}=Rd(l,c);u&&o(m,u,d)}continue}for(let c of s.namedChildren){if(c.type!=="namespace_use_clause")continue;let{importedName:l,localName:u,qualified:d}=Rd(c,"");l&&o(d,l,u)}}return i}function Rd(e,t){let n=e.namedChildren.find(l=>l.type==="qualified_name"),r=e.namedChildren.filter(l=>l.type==="name"),i="";n?i=n.text:r.length>=1&&(i=r[0].text);let o=n&&r.length>0?r[r.length-1]:null,s=i.split("\\").pop()??i,a=o?.text??s,c=t?`${t}\\${i}`:i;return{importedName:s,localName:a,qualified:c}}function Ld(e,t,n){return qe(e,t,r=>Hv(e,t,r),()=>qv(n).flatMap(r=>Wv(e,t,r,n)))}function Hv(e,t,n){let r=ne(n,new Set(["import_statement","import_from_statement"])),i=[];for(let o of n.rootNode.descendantsOfType("import_statement"))for(let s of o.namedChildren){let a=wd(s);if(!a)continue;let c=cr(e,t,a.qualifiedName);i.push({importedName:a.qualifiedName,localName:a.localName,sourcePath:c,kind:"namespace",used:r.has(a.localName),usedMembers:[]})}for(let o of n.rootNode.descendantsOfType("import_from_statement")){let s=o.namedChild(0);if(!s)continue;let a=Vv(s);if(a===null)continue;let c=cr(e,t,a);for(let l=1;l<o.namedChildCount;l+=1){let u=o.namedChild(l);if(u.type==="wildcard_import"){i.push({importedName:"*",localName:null,sourcePath:c,kind:"side-effect",used:!0,usedMembers:[]});continue}let d=wd(u);d&&i.push({importedName:d.qualifiedName,localName:d.localName,sourcePath:c,kind:"named",used:r.has(d.localName),usedMembers:[]})}}return i}function wd(e){if(e.type==="aliased_import"){let t=e.namedChild(0),n=e.namedChild(1);return!t||!n?null:{qualifiedName:t.text,localName:n.text}}if(e.type==="dotted_name"){let t=e.text;return{qualifiedName:t,localName:t.split(".")[0]??t}}return e.type==="identifier"?{qualifiedName:e.text,localName:e.text}:null}function Vv(e){if(e.type==="dotted_name")return e.text;if(e.type==="relative_import"){let t=Me(e,"import_prefix")?.text??"",n=Me(e,"dotted_name")?.text??"";return`${t}${n}`}return null}function qv(e){let t=e.split(`
107
+ `),n=[],r=0;for(let i=0;i<t.length;i++){let o=t[i],s=o.trimStart(),a=r;if(r+=o.length+1,!s.startsWith("import ")&&!s.startsWith("from "))continue;let c=o,l=a+o.length,u=Gr(o);for(;i+1<t.length&&(u>0||c.trimEnd().endsWith("\\"));){i++;let m=t[i];c+=`
108
+ ${m}`,l+=1+m.length,u+=Gr(m),r+=m.length+1}let d=Uv(c);d&&n.push({...d,start:a,end:l})}return n}function Uv(e){let t=e.replace(/\\\s*\n/g," ").trim();if(t.startsWith("import "))return{kind:"import",module:null,clause:t.slice(7).trim()};let n=t.match(/^from\s+([.\w]+)\s+import\s+([\s\S]+)$/);if(!n)return null;let r=n[2].trim();return r.startsWith("(")&&r.endsWith(")")&&(r=r.slice(1,-1).trim()),{kind:"from",module:n[1],clause:r}}function Wv(e,t,n,r){let i=Ut(r,n.start,n.end),o=n.clause.replace(/\n/g," ").trim();if(n.kind==="import")return _e(o).flatMap(c=>{let l=c.trim().replace(/,$/,"");if(!l)return[];let[u,d]=l.split(/\s+as\s+/),m=u.trim(),f=(d??m.split(".")[0]??m).trim(),h=cr(e,t,m),g=ur(i,f);return[{importedName:m,localName:f,sourcePath:h,kind:"namespace",used:Te(i,f)||g.length>0,usedMembers:g}]});let s=n.module?cr(e,t,n.module):null,a=[];for(let c of _e(o)){let l=c.trim().replace(/,$/,"");if(!l)continue;if(l==="*"){a.push({importedName:"*",localName:null,sourcePath:s,kind:"side-effect",used:!0,usedMembers:[]});continue}let[u,d]=l.split(/\s+as\s+/),m=(d??u).trim();a.push({importedName:u.trim(),localName:m,sourcePath:s,kind:"named",used:Te(i,m),usedMembers:[]})}return a}import{basename as Gv}from"path";function Id(e,t,n){return qe(e,t,r=>Jv(e,t,r),()=>zv(e,t,n))}function zv(e,t,n){return Ve(n,/^[ \t]*(require_relative|require)\s+["']([^"']+)["']\s*$/gm,(r,i)=>{let o=r[1],s=r[2];if(!o||!s)return[];let a=o==="require_relative"?go(e,t,s):null;if(a){let c=Dd(s);return[dr(c,c,a,Te(i,c))]}return[pn(s,a)]})}function Jv(e,t,n){let r=ne(n,new Set([])),i=[],o=new Set(["require","require_relative","load"]);for(let s of n.rootNode.descendantsOfType("call")){let a=s.namedChild(0);if(!a||a.type!=="identifier"||!o.has(a.text))continue;let l=s.namedChildren.find(f=>f.type==="argument_list")?.namedChild(0);if(!l||l.type!=="string")continue;let d=l.namedChildren.find(f=>f.type==="string_content")?.text;if(!d)continue;let m=a.text==="require_relative"?go(e,t,d):null;if(m){let f=Dd(d);i.push(Z(f,f,m,r))}else i.push(pn(d,m))}return i}function Dd(e){return Zi(Gv(e).replace(/\.[^.]+$/,""),/_/)}function Pd(e,t,n){return qe(e,t,r=>Kv(e,t,r),()=>Ve(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(r,i)=>{let o=r[1]?.trim();return o?Xv(e,t,o,i):[]}))}function Kv(e,t,n){let r=ne(n,new Set(["use_declaration"])),i=[];for(let o of n.rootNode.descendantsOfType("use_declaration")){let s=o.namedChild(0);if(s)for(let a of zr(s,"")){if(!a.importedName||a.importedName==="*")continue;let c=Lt(e,t,a.qualifiedName)??Lt(e,t,a.qualifiedName.split("::").slice(0,-1).join("::"));i.push(Z(a.importedName,a.localName,c,r))}}return i}function zr(e,t){switch(e.type){case"identifier":case"super":case"self":case"crate":{let n=e.text;return[{qualifiedName:xo(t,n),importedName:n,localName:n}]}case"scoped_identifier":{let n=e.text,r=n.split("::").pop()??n;return[{qualifiedName:xo(t,n),importedName:r,localName:r}]}case"scoped_use_list":{let n=e.namedChild(0),r=e.namedChild(1);if(!n||!r)return[];let i=xo(t,n.text),o=[];for(let s of r.namedChildren)o.push(...zr(s,i));return o}case"use_list":{let n=[];for(let r of e.namedChildren)n.push(...zr(r,t));return n}case"use_as_clause":{let n=e.namedChild(0),r=e.namedChild(1);if(!n||!r)return[];let i=zr(n,t),o=r.text;return i.map(s=>({...s,localName:o}))}case"use_wildcard":{let n=e.namedChild(0),r=n?n.text:"";return[{qualifiedName:xo(t,`${r}::*`),importedName:"*",localName:"*"}]}default:return[]}}function xo(e,t){return e?t?`${e}::${t}`:e:t}function Xv(e,t,n,r){let i=n.trim();if(i.includes("{")&&i.includes("}")){let u=i.slice(0,i.indexOf("{")).replace(/::$/,"").trim(),d=i.slice(i.indexOf("{")+1,i.lastIndexOf("}")).trim();return _e(d).flatMap(m=>{let f=m.trim();if(!f||f==="self")return[];let[h,g]=f.split(/\s+as\s+/),y=h?.trim();if(!y)return[];let S=(g??y.split("::").pop()??y).trim(),C=`${u}::${y}`.replace(/::::/g,"::");return[dt(e,t,r,C,y.split("::").pop()??y,S,Lt(e,t,u))]})}let[o,s]=i.split(/\s+as\s+/),a=o?.trim()??i,c=(s??a.split("::").pop()??a).trim(),l=Lt(e,t,a)??Lt(e,t,a.split("::").slice(0,-1).join("::"));return[dt(e,t,r,a,a.split("::").pop()??a,c,l)]}function Nd(e,t,n){let r=fe(e,t);if(r)return Qv(e,t,r);let i=[];for(let o of n.matchAll(/^[ \t]*pub\s+use\s+(.+?)\s*;$/gm)){let s=o[1]?.trim();s&&i.push(...Zv(e,t,s))}return i}function Qv(e,t,n){let r=[];for(let i of n.rootNode.descendantsOfType("use_declaration")){if(!Yv(i))continue;let o=i.namedChildren.find(s=>s.type!=="visibility_modifier");if(o)for(let s of zr(o,""))s.importedName&&r.push(xa(e,t,s.qualifiedName))}return r}function Yv(e){for(let t of e.children)if(t.type==="visibility_modifier"&&t.text.startsWith("pub"))return!0;return!1}function Zv(e,t,n){let r=n.trim();if(r.includes("{")&&r.includes("}")){let i=r.slice(0,r.indexOf("{")).replace(/::$/,"").trim(),o=r.slice(r.indexOf("{")+1,r.lastIndexOf("}")).trim();return _e(o).flatMap(s=>{let a=s.trim();if(!a||a==="self")return[];let[c]=a.split(/\s+as\s+/),l=`${i}::${c?.trim()??a}`.replace(/::::/g,"::");return[xa(e,t,l)]})}return[xa(e,t,r)]}function xa(e,t,n){return{specifier:n,sourcePath:Lt(e,t,n)??Lt(e,t,n.split("::").slice(0,-1).join("::"))}}function gn({language:e,extensions:t,imports:n,parseImports:r}){return{language:e,extensions:t,capabilities:{imports:n},parseImports:r}}function Ed(e,t){let n=t.toLowerCase();for(let r of e)for(let i of r.extensions)if(n.endsWith(i))return r;return null}var eR={language:"javascript",extensions:un,capabilities:{imports:"ast-with-regex-fallback",reExports:"ast-with-regex-fallback"},parseImports:ba,parseReExports:Sa},tR=gn({language:"python",extensions:lo,imports:"ast-with-regex-fallback",parseImports:Ld}),nR=gn({language:"jvm",extensions:Ae,imports:"ast-dispatch-with-regex-fallback",parseImports:vd}),rR={language:"rust",extensions:uo,capabilities:{imports:"ast-with-regex-fallback",exports:"ast-with-regex-fallback"},parseImports:Pd,parseExports:Nd},iR=gn({language:"ruby",extensions:mo,imports:"ast-with-regex-fallback",parseImports:Id}),oR=gn({language:"c/cpp",extensions:po,imports:"ast-with-regex-fallback",parseImports:hd}),sR=gn({language:"dotnet",extensions:Ht,imports:"ast-dispatch-with-regex-fallback",parseImports:Sd}),aR={language:"dart",extensions:fo,capabilities:{imports:"regex-only",exports:"regex-only"},parseImports:yd,parseExports:bd},cR=gn({language:"php",extensions:dn,imports:"ast-with-regex-fallback",parseImports:kd}),lR=[eR,tR,nR,rR,iR,oR,sR,aR,cR];function Co(e){return Ed(lR,e)}var Ca={clearGroups:["whole-project","source-file"]},uR=U("source-imports",Ca),dR=U("source-exports",Ca),mR=U("source-reexports",Ca);function Jr(e,t){let n=et(t);return mR.get(e,n,()=>{let r=Co(n);if(!r?.parseReExports)return[];let i=F(e,n);return i?r.parseReExports(e,n,i):[]})}function he(e,t){let n=et(t);return uR.get(e,n,()=>{let r=Co(n);if(!r)return[];let i=F(e,n);if(!i)return[];let o=Ye(e,n,i),s=pd(e),a=Mt(e,"source-imports",n,o);if(a!==null)try{let l=JSON.parse(a);if(l.resolutionFingerprint===s&&Array.isArray(l.imports))return l.imports}catch{}let c=r.parseImports(e,n,i);return jt(e,"source-imports",n,o,JSON.stringify({resolutionFingerprint:s,imports:c})),c})}function vo(e,t){let n=et(t);return dR.get(e,n,()=>{let r=Co(n);if(!r?.parseExports)return[];let i=F(e,n);return i?r.parseExports(e,n,i):[]})}var pR=U("file-dep-graph",{clearGroups:["whole-project"]});function re(e,t){return pR.get(e,t??"",()=>{let n=new Map,r=new Set(j(e,{includeIgnored:!1})),i=(o,s)=>gR(e,n,r,o,s);for(let o of fR(e,t))i(o.from_file,o.to_file);for(let o of r)if(!(t&&!o.includes(t)))for(let s of he(e,o))s.sourcePath&&i(o,s.sourcePath);return n})}function fR(e,t){let n=t?`AND d1.relative_path LIKE '%${t}%'`:"";return e.all(`SELECT DISTINCT
97
109
  d1.relative_path AS from_file,
98
110
  d2.relative_path AS to_file
99
111
  FROM mentions m
@@ -111,11 +123,11 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
111
123
  WHERE d1.id != d2.id
112
124
  AND m.role != 1
113
125
  ${e.pathExclusionsFor("d1","d2")}
114
- ${n}`)}function lv(e,t,n,i,r){if(i===r||e.isIgnored(i)||e.isIgnored(r)||!n.has(r))return;let o=t.get(i);o||(o=new Set,t.set(i,o)),o.add(r)}import{existsSync as oo,readFileSync as uv,readdirSync as td}from"fs";import{join as Oi}from"path";var dv={files:new Set,pathPrefixes:[]},na=/^(?:dist|build|lib|out|output|esm|cjs|umd)\//,mv=/\.(?:d\.ts|d\.mts|d\.cts|ts|tsx|mts|cts|js|jsx|mjs|cjs)$/,nd=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"],pv=new Set([".git",".next",".turbo","build","coverage","dist","node_modules","out"]),fv=4,gv=Y("package-surface",{clearGroups:["whole-project"]});function hv(e){return gv.get(e,()=>bv(e.config.projectRoot))}function ei(e,t){let n=hv(e);return n.files.has(t)?!0:n.pathPrefixes.some(i=>t.startsWith(i))}function bv(e){let t=new Set,n=[];for(let{manifest:i,packageRoot:r}of yv(e))for(let o of Sv(i))xv(e,r,o,t,n);return t.size===0&&n.length===0?dv:{files:t,pathPrefixes:n}}function yv(e){let t=[],n=rd(e,"");return n&&t.push({manifest:n,packageRoot:""}),id(e,"",t,0),t}function id(e,t,n,i){if(i>=fv)return;let r=Oi(e,t);if(oo(r))for(let o of td(r,{withFileTypes:!0})){if(!o.isDirectory()||pv.has(o.name))continue;let s=t?`${t}/${o.name}`:o.name,a=rd(e,s);a&&n.push({manifest:a,packageRoot:s}),id(e,s,n,i+1)}}function rd(e,t){try{let n=uv(Oi(e,t,"package.json"),"utf-8"),i=JSON.parse(n);return i&&typeof i=="object"?i:null}catch{return null}}function Sv(e){let t=[];for(let i of["main","module","types","browser"])typeof e[i]=="string"&&t.push(e[i]);let n=e.bin;if(typeof n=="string")t.push(n);else if(n&&typeof n=="object")for(let i of Object.values(n))typeof i=="string"&&t.push(i);return od(e.exports,t),t}function od(e,t){if(typeof e=="string"){t.push(e);return}if(!(!e||typeof e!="object"))for(let n of Object.values(e))od(n,t)}function xv(e,t,n,i,r){let o=n.replace(/\\/g,"/").replace(/^\.\//,"");if(o===""||o.startsWith(".."))return;let s=o.indexOf("*");if(s>=0){let c=o.slice(0,s);for(let l of ed(c))l!==""&&r.push(Zn(t,l));return}let a=o.replace(mv,"");for(let c of ed(a)){c===a&&c===o&&i.add(Zn(t,o));for(let l of nd)Cv(e,i,t,c+l)}i.add(Zn(t,o))}function ed(e){let t=[e];return na.test(e)&&(t.push(e.replace(na,"src/")),t.push(e.replace(na,""))),t}function Cv(e,t,n,i){let r=Zn(n,i);if(t.add(r),!i.startsWith("src/")||oo(Oi(e,r)))return;let o=nd.find(u=>i.endsWith(u));if(!o)return;let s=i.slice(0,-o.length);vv(e,t,n,s,o);let a=s.lastIndexOf("/");if(a<=4)return;let c=s.slice(0,a),l=s.slice(a+1);for(let u of sd(e,n,c,`${l}${o}`))t.add(u)}function vv(e,t,n,i,r){let o=Zn(n,`${i}/index${r}`);oo(Oi(e,o))&&t.add(o)}function sd(e,t,n,i){let r=Oi(e,t,n);if(!oo(r))return[];let o=[];for(let s of td(r,{withFileTypes:!0})){let a=`${n}/${s.name}`;s.isDirectory()?o.push(...sd(e,t,a,i)):s.isFile()&&s.name===i&&o.push(Zn(t,a))}return o}function Zn(e,t){return e?`${e}/${t}`:t}function K(e){let t=ti(e);return Mv(t)?"test":Ov(t)?"worker":jv(t)?"entry":Bv(t)?"barrel":"source"}function so(e){return K(e)==="barrel"}function cd(e){return Rv.get(e,()=>{let t=ne(e),n=De(e).filter(o=>{let s=K(o);return s==="entry"||s==="worker"}),i=new Set,r=new Set;for(;n.length>0;){let o=n.shift();if(!i.has(o)){i.add(o),K(o)==="barrel"&&r.add(o);for(let s of t.get(o)??[])i.has(s)||n.push(s)}}return r})}var Rv=Y("live-barrels",{clearGroups:["whole-project"]});function ia(e,t){return cd(e).has(ti(t))}function ld(e){let t=cd(e);return De(e).filter(n=>so(n)&&!t.has(n)&&!kv(e,n))}function kv(e,t){let n=ti(t),i=oe(e,n)?.callables;return i&&i.length>0?!0:(e.get(`SELECT COUNT(*) AS n
126
+ ${n}`)}function gR(e,t,n,r,i){if(r===i||e.isIgnored(r)||e.isIgnored(i)||!n.has(i))return;let o=t.get(r);o||(o=new Set,t.set(r,o)),o.add(i)}import{existsSync as Ro,readFileSync as hR,readdirSync as _d}from"fs";import{join as Kr}from"path";var yR={files:new Set,pathPrefixes:[]},va=/^(?:dist|build|lib|out|output|esm|cjs|umd)\//,bR=/\.(?:d\.ts|d\.mts|d\.cts|ts|tsx|mts|cts|js|jsx|mjs|cjs)$/,Fd=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"],SR=new Set([".git",".next",".turbo","build","coverage","dist","node_modules","out"]),xR=4,CR=Y("package-surface",{clearGroups:["whole-project"]});function vR(e){return CR.get(e,()=>RR(e.config.projectRoot))}function fr(e,t){let n=vR(e);return n.files.has(t)?!0:n.pathPrefixes.some(r=>t.startsWith(r))}function RR(e){let t=new Set,n=[];for(let{manifest:r,packageRoot:i}of kR(e))for(let o of wR(r))LR(e,i,o,t,n);return t.size===0&&n.length===0?yR:{files:t,pathPrefixes:n}}function kR(e){let t=[],n=Ad(e,"");return n&&t.push({manifest:n,packageRoot:""}),$d(e,"",t,0),t}function $d(e,t,n,r){if(r>=xR)return;let i=Kr(e,t);if(Ro(i))for(let o of _d(i,{withFileTypes:!0})){if(!o.isDirectory()||SR.has(o.name))continue;let s=t?`${t}/${o.name}`:o.name,a=Ad(e,s);a&&n.push({manifest:a,packageRoot:s}),$d(e,s,n,r+1)}}function Ad(e,t){try{let n=hR(Kr(e,t,"package.json"),"utf-8"),r=JSON.parse(n);return r&&typeof r=="object"?r:null}catch{return null}}function wR(e){let t=[];for(let r of["main","module","types","browser"])typeof e[r]=="string"&&t.push(e[r]);let n=e.bin;if(typeof n=="string")t.push(n);else if(n&&typeof n=="object")for(let r of Object.values(n))typeof r=="string"&&t.push(r);return Md(e.exports,t),t}function Md(e,t){if(typeof e=="string"){t.push(e);return}if(!(!e||typeof e!="object"))for(let n of Object.values(e))Md(n,t)}function LR(e,t,n,r,i){let o=n.replace(/\\/g,"/").replace(/^\.\//,"");if(o===""||o.startsWith(".."))return;let s=o.indexOf("*");if(s>=0){let c=o.slice(0,s);for(let l of Td(c))l!==""&&i.push(pr(t,l));return}let a=o.replace(bR,"");for(let c of Td(a)){c===a&&c===o&&r.add(pr(t,o));for(let l of Fd)IR(e,r,t,c+l)}r.add(pr(t,o))}function Td(e){let t=[e];return va.test(e)&&(t.push(e.replace(va,"src/")),t.push(e.replace(va,""))),t}function IR(e,t,n,r){let i=pr(n,r);if(t.add(i),!r.startsWith("src/")||Ro(Kr(e,i)))return;let o=Fd.find(u=>r.endsWith(u));if(!o)return;let s=r.slice(0,-o.length);DR(e,t,n,s,o);let a=s.lastIndexOf("/");if(a<=4)return;let c=s.slice(0,a),l=s.slice(a+1);for(let u of jd(e,n,c,`${l}${o}`))t.add(u)}function DR(e,t,n,r,i){let o=pr(n,`${r}/index${i}`);Ro(Kr(e,o))&&t.add(o)}function jd(e,t,n,r){let i=Kr(e,t,n);if(!Ro(i))return[];let o=[];for(let s of _d(i,{withFileTypes:!0})){let a=`${n}/${s.name}`;s.isDirectory()?o.push(...jd(e,t,a,r)):s.isFile()&&s.name===r&&o.push(pr(t,a))}return o}function pr(e,t){return e?`${e}/${t}`:t}function J(e){let t=gr(e);return qR(t)?"test":UR(t)?"worker":WR(t)?"entry":GR(t)?"barrel":"source"}function ko(e){return J(e)==="barrel"}function Bd(e){return PR.get(e,()=>{let t=re(e),n=Ie(e).filter(o=>{let s=J(o);return s==="entry"||s==="worker"}),r=new Set,i=new Set;for(;n.length>0;){let o=n.shift();if(!r.has(o)){r.add(o),J(o)==="barrel"&&i.add(o);for(let s of t.get(o)??[])r.has(s)||n.push(s)}}return i})}var PR=Y("live-barrels",{clearGroups:["whole-project"]});function Ra(e,t){return Bd(e).has(gr(t))}function Hd(e){let t=Bd(e);return Ie(e).filter(n=>ko(n)&&!t.has(n)&&!NR(e,n))}function NR(e,t){let n=gr(t),r=ae(e,n)?.callables;return r&&r.length>0?!0:(e.get(`SELECT COUNT(*) AS n
115
127
  FROM defn_enclosing_ranges der
116
128
  JOIN documents d ON d.id = der.document_id
117
129
  WHERE d.relative_path = ?
118
- AND der.end_line - der.start_line >= 2`,n)?.n??0)>0}function we(e,t){let n=K(t);return n==="entry"||n==="worker"||ia(e,t)}function ie(e,t,n){let i=ti(n);if(ei(e,i)||Nv(t,i))return!0;let r=e.config.entryRoots;return r?!!(r.files?.some(o=>ti(o)===i)||r.pathPrefixes?.some(o=>i.startsWith(ti(o)))||r.qualifiedVars?.some(o=>Hv(t,o))||r.symbolPatterns?.some(o=>{try{return new RegExp(o).test(t)}catch{return!1}})):!1}var ud=new Set(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"]),wv=new Set(["default","generateMetadata","generateStaticParams"]),Lv=new Set(["default","getStaticProps","getServerSideProps","getStaticPaths","config"]),Dv=new Set(["default","loader","action","clientLoader","clientAction","headers","links","meta","shouldRevalidate","ErrorBoundary","HydrateFallback"]),Iv=new Set(["load","actions","entries",...ud]),Pv=new Set(["default"]);function Nv(e,t){let n=$(e);return n===""?!1:Ev(t)?ud.has(n):Tv(t)?wv.has(n):_v(t)?Lv.has(n):$v(t)?Dv.has(n):Fv(t)?Iv.has(n):Av(t)?Pv.has(n):!1}function Ev(e){return/(?:^|\/)app(?:\/[^/]+)*\/route\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function Tv(e){return/(?:^|\/)app(?:\/[^/]+)*\/(?:page|layout|template|loading|error|not-found|global-error|head|default)\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function _v(e){return/(?:^|\/)pages\/.+\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function $v(e){return/(?:^|\/)app\/routes\/.+\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function Fv(e){return/(?:^|\/)src\/routes\/(?:.*\/)?\+(?:page|page\.server|layout|layout\.server|server)\.(?:ts|js)$/.test(e)}function Av(e){return/(?:^|\/)src\/(?:pages|views|routes)\/.+\.(?:ts|tsx|js|jsx|vue)$/.test(e)}function Mv(e){return!!(/\.(?:test|spec)\.[a-z0-9]+$/i.test(e)||/(?:^|\/)(?:_)?test_[^/]+$/i.test(e)||/(?:^|\/)spec_[^/]+$/i.test(e)||/(?:^|\/)[^/]+_test\.[a-z0-9]+$/i.test(e)||/(?:^|\/)[^/]+_tests\.rs$/i.test(e)||/(?:^|\/)tests\.rs$/i.test(e)||/(?:^|\/)[^/]+_spec\.[a-z0-9]+$/i.test(e)||/(?:^|\/)__tests__\//i.test(e)||/(?:^|\/)test\//i.test(e)||/(?:^|\/)tests\//i.test(e)||/(?:^|\/)__fixtures__\//i.test(e)||/(?:^|\/)__mocks__\//i.test(e)||/(?:^|\/)test-support\//i.test(e)||/(?:^|\/)test-utils\//i.test(e)||/(?:^|\/)testing\//i.test(e))}function Ov(e){return/(?:^|\/)[^/]*worker\.(?:ts|tsx|js|mjs|cjs|rs|py|go)$/.test(e)}function jv(e){let t=e.split("/"),n=t[t.length-1]??e;return n==="cli.ts"||n==="cli.js"||n==="postinstall.ts"||n==="postinstall.js"||n==="main.ts"||n==="main.js"||n==="main.rs"||n==="main.go"||n==="main.py"||n==="build.rs"||n==="lib.rs"||/\bsrc\/bin\/[^/]+\.rs$/.test(e)||/(?:^|\/)examples\/[^/]+\.rs$/.test(e)||/(?:^|\/)tests\/[^/]+\.rs$/.test(e)||/(?:^|\/)benches\/[^/]+\.rs$/.test(e)?!0:n==="index.ts"||n==="index.js"?/(?:^|\/)(?:apps|services)\/[^/]+\/src\/index\.(?:ts|js)$/.test(e)?!0:t.length<=2:!1}function Bv(e){return e==="index.ts"||e==="index.js"||e.endsWith("/index.ts")||e.endsWith("/index.js")||e.endsWith("/mod.rs")||e.endsWith("/__init__.py")}function ti(e){return e.replace(/\\/g,"/")}function Hv(e,t){let n=t.lastIndexOf("/");if(n<0)return!1;let i=t.slice(0,n),r=t.slice(n+1);return e.includes(ad(i)+"/")&&e.includes(ad(r)+".")}function ad(e){return/^[A-Za-z0-9_$+-]+$/.test(e)?e:"`"+e.replace(/`/g,"``")+"`"}function ao(e,t,n,i={}){if(!n)return[];let r=M(e,t);return r?r.indexOf(n)===-1?[]:(vt(e,t).get(n)??[]).filter(s=>!Vv(s,i)):[]}function Vv(e,t){return typeof t.excludeStartLine=="number"&&typeof t.excludeEndLine=="number"&&e>=t.excludeStartLine&&e<=t.excludeEndLine}var qv=U("file-identifiers",{clearGroups:["whole-project","source-file"]});function dd(e,t){let n=oe(e,t);return n?n.fileIdentifiers:qv.get(e,t,()=>new Set(vt(e,t).keys()))}var Uv=U("file-ident-lines",{clearGroups:["whole-project","source-file"]});function vt(e,t){let n=oe(e,t);return n?n.identifierLineMap:Uv.get(e,t,()=>Gv(e,t))}var Wv=U("file-idents-by-line",{clearGroups:["whole-project","source-file"]});function md(e,t){let n=oe(e,t);return n?n.identifiersByLine:Wv.get(e,t,()=>{let i=vt(e,t),r=0;for(let s of i.values()){let a=s[s.length-1];a!==void 0&&a>r&&(r=a)}let o=new Array(r+1);for(let s=0;s<=r;s+=1)o[s]=new Set;for(let[s,a]of i)for(let c of a)o[c].add(s);return o})}function Gv(e,t){let n=new Map,i=(a,c)=>{let l=n.get(a);if(!l){n.set(a,[c]);return}l[l.length-1]!==c&&l.push(c)},r=M(e,t);if(!r)return n;let o=rn(r).split(/\r?\n/),s=/\b([A-Za-z_$][\w$]*)\b/g;for(let a=0;a<o.length;a+=1){let c=o[a]??"";for(let l of c.matchAll(s))l[1]&&i(l[1],a)}return n}function pd(e,t){return ra(e,t,n=>{let i=n?`AND m.symbol_id IN (${n.map(()=>"?").join(",")})`:"";return e.all(`SELECT
130
+ AND der.end_line - der.start_line >= 2`,n)?.n??0)>0}function De(e,t){let n=J(t);return n==="entry"||n==="worker"||Ra(e,t)}function ie(e,t,n){let r=gr(n);if(fr(e,r)||AR(t,r))return!0;let i=e.config.entryRoots;return i?!!(i.files?.some(o=>gr(o)===r)||i.pathPrefixes?.some(o=>r.startsWith(gr(o)))||i.qualifiedVars?.some(o=>zR(t,o))||i.symbolPatterns?.some(o=>{try{return new RegExp(o).test(t)}catch{return!1}})):!1}var Vd=new Set(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"]),ER=new Set(["default","generateMetadata","generateStaticParams"]),TR=new Set(["default","getStaticProps","getServerSideProps","getStaticPaths","config"]),_R=new Set(["default","loader","action","clientLoader","clientAction","headers","links","meta","shouldRevalidate","ErrorBoundary","HydrateFallback"]),FR=new Set(["load","actions","entries",...Vd]),$R=new Set(["default"]);function AR(e,t){let n=$(e);return n===""?!1:MR(t)?Vd.has(n):jR(t)?ER.has(n):OR(t)?TR.has(n):BR(t)?_R.has(n):HR(t)?FR.has(n):VR(t)?$R.has(n):!1}function MR(e){return/(?:^|\/)app(?:\/[^/]+)*\/route\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function jR(e){return/(?:^|\/)app(?:\/[^/]+)*\/(?:page|layout|template|loading|error|not-found|global-error|head|default)\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function OR(e){return/(?:^|\/)pages\/.+\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function BR(e){return/(?:^|\/)app\/routes\/.+\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function HR(e){return/(?:^|\/)src\/routes\/(?:.*\/)?\+(?:page|page\.server|layout|layout\.server|server)\.(?:ts|js)$/.test(e)}function VR(e){return/(?:^|\/)src\/(?:pages|views|routes)\/.+\.(?:ts|tsx|js|jsx|vue)$/.test(e)}function qR(e){return!!(/\.(?:test|spec)\.[a-z0-9]+$/i.test(e)||/(?:^|\/)(?:_)?test_[^/]+$/i.test(e)||/(?:^|\/)spec_[^/]+$/i.test(e)||/(?:^|\/)[^/]+_test\.[a-z0-9]+$/i.test(e)||/(?:^|\/)[^/]+_tests\.rs$/i.test(e)||/(?:^|\/)tests\.rs$/i.test(e)||/(?:^|\/)[^/]+_spec\.[a-z0-9]+$/i.test(e)||/(?:^|\/)__tests__\//i.test(e)||/(?:^|\/)test\//i.test(e)||/(?:^|\/)tests\//i.test(e)||/(?:^|\/)__fixtures__\//i.test(e)||/(?:^|\/)__mocks__\//i.test(e)||/(?:^|\/)test-support\//i.test(e)||/(?:^|\/)test-utils\//i.test(e)||/(?:^|\/)testing\//i.test(e))}function UR(e){return/(?:^|\/)[^/]*worker\.(?:ts|tsx|js|mjs|cjs|rs|py|go)$/.test(e)}function WR(e){let t=e.split("/"),n=t[t.length-1]??e;return n==="cli.ts"||n==="cli.js"||n==="postinstall.ts"||n==="postinstall.js"||n==="main.ts"||n==="main.js"||n==="main.rs"||n==="main.go"||n==="main.py"||n==="build.rs"||n==="lib.rs"||/\bsrc\/bin\/[^/]+\.rs$/.test(e)||/(?:^|\/)examples\/[^/]+\.rs$/.test(e)||/(?:^|\/)tests\/[^/]+\.rs$/.test(e)||/(?:^|\/)benches\/[^/]+\.rs$/.test(e)?!0:n==="index.ts"||n==="index.js"?/(?:^|\/)(?:apps|services)\/[^/]+\/src\/index\.(?:ts|js)$/.test(e)?!0:t.length<=2:!1}function GR(e){return e==="index.ts"||e==="index.js"||e.endsWith("/index.ts")||e.endsWith("/index.js")||e.endsWith("/mod.rs")||e.endsWith("/__init__.py")}function gr(e){return e.replace(/\\/g,"/")}function zR(e,t){let n=t.lastIndexOf("/");if(n<0)return!1;let r=t.slice(0,n),i=t.slice(n+1);return e.includes(Od(r)+"/")&&e.includes(Od(i)+".")}function Od(e){return/^[A-Za-z0-9_$+-]+$/.test(e)?e:"`"+e.replace(/`/g,"``")+"`"}function wo(e,t,n,r={}){if(!n)return[];let i=F(e,t);return i?i.indexOf(n)===-1?[]:(It(e,t).get(n)??[]).filter(s=>!JR(s,r)):[]}function JR(e,t){return typeof t.excludeStartLine=="number"&&typeof t.excludeEndLine=="number"&&e>=t.excludeStartLine&&e<=t.excludeEndLine}var KR=U("file-identifiers",{clearGroups:["whole-project","source-file"]});function qd(e,t){let n=ae(e,t);return n?n.fileIdentifiers:KR.get(e,t,()=>new Set(It(e,t).keys()))}var XR=U("file-ident-lines",{clearGroups:["whole-project","source-file"]});function It(e,t){let n=ae(e,t);return n?n.identifierLineMap:XR.get(e,t,()=>YR(e,t))}var QR=U("file-idents-by-line",{clearGroups:["whole-project","source-file"]});function Ud(e,t){let n=ae(e,t);return n?n.identifiersByLine:QR.get(e,t,()=>{let r=It(e,t),i=0;for(let s of r.values()){let a=s[s.length-1];a!==void 0&&a>i&&(i=a)}let o=new Array(i+1);for(let s=0;s<=i;s+=1)o[s]=new Set;for(let[s,a]of r)for(let c of a)o[c].add(s);return o})}function YR(e,t){let n=new Map,r=(a,c)=>{let l=n.get(a);if(!l){n.set(a,[c]);return}l[l.length-1]!==c&&l.push(c)},i=F(e,t);if(!i)return n;let o=mn(i).split(/\r?\n/),s=/\b([A-Za-z_$][\w$]*)\b/g;for(let a=0;a<o.length;a+=1){let c=o[a]??"";for(let l of c.matchAll(s))l[1]&&r(l[1],a)}return n}function Wd(e,t){return ka(e,t,n=>{let r=n?`AND m.symbol_id IN (${n.map(()=>"?").join(",")})`:"";return e.all(`SELECT
119
131
  m.symbol_id,
120
132
  d.relative_path,
121
133
  COUNT(*) AS ref_count
@@ -123,23 +135,23 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
123
135
  JOIN chunks c ON m.chunk_id = c.id
124
136
  JOIN documents d ON c.document_id = d.id
125
137
  WHERE m.role != 1
126
- ${i}
138
+ ${r}
127
139
  ${e.pathExclusionsFor("d")}
128
- GROUP BY m.symbol_id, d.relative_path`,...n??[])})}function fd(e,t){return ra(e,t,n=>{let i=n?`AND m.symbol_id IN (${n.map(()=>"?").join(",")})`:"";return e.all(`SELECT DISTINCT m.symbol_id, d.relative_path
140
+ GROUP BY m.symbol_id, d.relative_path`,...n??[])})}function Gd(e,t){return ka(e,t,n=>{let r=n?`AND m.symbol_id IN (${n.map(()=>"?").join(",")})`:"";return e.all(`SELECT DISTINCT m.symbol_id, d.relative_path
129
141
  FROM mentions m
130
142
  JOIN chunks c ON m.chunk_id = c.id
131
143
  JOIN documents d ON c.document_id = d.id
132
144
  WHERE m.role != 1
133
- ${i}
134
- ${e.pathExclusionsFor("d")}`,...n??[])}).filter(n=>n.symbol_id!==null)}function co(e,t){return ra(e,t,n=>{let i=n?`AND m.symbol_id IN (${n.map(()=>"?").join(",")})`:"";return e.all(`SELECT DISTINCT m.symbol_id, d.relative_path, c.document_id,
145
+ ${r}
146
+ ${e.pathExclusionsFor("d")}`,...n??[])}).filter(n=>n.symbol_id!==null)}function Lo(e,t){return ka(e,t,n=>{let r=n?`AND m.symbol_id IN (${n.map(()=>"?").join(",")})`:"";return e.all(`SELECT DISTINCT m.symbol_id, d.relative_path, c.document_id,
135
147
  c.start_line AS chunk_start, c.end_line AS chunk_end
136
148
  FROM mentions m
137
149
  JOIN chunks c ON m.chunk_id = c.id
138
150
  JOIN documents d ON c.document_id = d.id
139
151
  WHERE m.role != 1
140
- ${i}
152
+ ${r}
141
153
  ${e.pathExclusionsFor("d")}
142
- ORDER BY d.relative_path, c.start_line`,...n??[])})}function ra(e,t,n){if(!t)return n();if(t.length===0)return[];let i=[];for(let r=0;r<t.length;r+=750)i.push(...n(t.slice(r,r+750)));return i}function gd(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function Ot(e,t){return gd(e)===gd(t)}function lo(e,t){let n=hd(e);return n?t.filter(i=>hd(i.file)===n):t}function uo(e,t,n,i){let r=n.find(o=>o.file===t);if(r)return r;if(i){let o=new Set(fe(e,t).map(s=>s.sourcePath).filter(s=>!!s));for(let s of n)for(let a of o)if(Ot(a,s.file))return s;return null}return n.length===1?n[0]:null}function hd(e){let t=W(e);return t?t==="typescript"||t==="tsx"||t==="javascript"?"javascript-family":t:null}var zv=Y("global-leaf-index",{clearGroups:["whole-project"]});function cn(e){return zv.get(e,()=>{let t=e.all(`SELECT gs.id, gs.symbol,
154
+ ORDER BY d.relative_path, c.start_line`,...n??[])})}function ka(e,t,n){if(!t)return n();if(t.length===0)return[];let r=[];for(let i=0;i<t.length;i+=750)r.push(...n(t.slice(i,i+750)));return r}function zd(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function Wt(e,t){return zd(e)===zd(t)}function Io(e,t){let n=Jd(e);return n?t.filter(r=>Jd(r.file)===n):t}function Do(e,t,n,r){let i=n.find(o=>o.file===t);if(i)return i;if(r){let o=new Set(he(e,t).map(s=>s.sourcePath).filter(s=>!!s));for(let s of n)for(let a of o)if(Wt(a,s.file))return s;return null}return n.length===1?n[0]:null}function Jd(e){let t=W(e);return t?t==="typescript"||t==="tsx"||t==="javascript"?"javascript-family":t:null}var ZR=Y("global-leaf-index",{clearGroups:["whole-project"]});function hn(e){return ZR.get(e,()=>{let t=e.all(`SELECT gs.id, gs.symbol,
143
155
  COALESCE(der_doc.relative_path, mention_doc.relative_path) AS relative_path
144
156
  FROM global_symbols gs
145
157
  LEFT JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
@@ -153,8 +165,8 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
153
165
  GROUP BY m.symbol_id
154
166
  ) mention_doc ON mention_doc.symbol_id = gs.id
155
167
  WHERE 1 = 1
156
- ${e.symbolNoiseFor("gs")}`),n=new Map;for(let i of t){if(!i.relative_path||e.isIgnored(i.relative_path))continue;let r=$(i.symbol);if(!r)continue;let o=n.get(r);o||(o=[],n.set(r,o)),o.some(s=>s.symbolId===i.id)||o.push({symbol:i.symbol,symbolId:i.id,file:i.relative_path})}return n})}function Xe(e,t,n){if(e.has(t))return e.get(t);let i=n();return e.set(t,i),i}import bd from"path";function Kv(e,t){return e.getReferences().map(n=>{let i=n.getNode();return xd(i,t)})}function Jv(e){let t=e;return typeof t.findReferences=="function"?t.findReferences():[]}function yd(e,t,n,i){let r=[];for(let o of Jv(e))for(let s of Kv(o,i))s.file===t.relativePath&&s.line>=t.startLine&&s.line<=t.endLine||r.push(s);for(let o of n)r.push(o);return mo(r)}function Sd(e,t,n,i){let r=[],o=n?.getStart();for(let s of e.getReferences()){let a=s.getNode();ji(i,a.getSourceFile().getFilePath())===t&&(o!==void 0&&a.getStart()===o||r.push({location:xd(a,i),node:a}))}return r}function xd(e,t){let n=e.getSourceFile(),i=n.getLineAndColumnAtPos(e.getStart());return{file:ji(t,n.getFilePath())??n.getBaseName(),line:i.line-1,column:i.column-1}}function Cd(e,t,n){let i=e.getSourceFile(),r=ni(i,e),o=e.getText(),s=new RegExp(`\\b${Qv(o)}\\b`,"g"),a=i.getFullText().split(`
157
- `),c=[];for(let l=0;l<a.length;l++){if(l===r)continue;let u=a[l]??"";s.lastIndex=0;let d;for(;(d=s.exec(u))!==null;)c.push({file:t,line:l,column:d.index})}return mo(c.filter(l=>ji(n,bd.join(n,l.file))===t))}function oa(e){for(let t=e;t;t=t.getParent()){let n=t.getKindName();if(n.includes("Type")||n==="InterfaceDeclaration"||n==="TypeAliasDeclaration")return!0;if(n==="CallExpression"||n==="NewExpression"||n==="ExpressionStatement")return!1}return!1}function ni(e,t){return e.getLineAndColumnAtPos(t.getStart()).line-1}function mo(e){let t=new Set,n=[];for(let i of e){let r=`${i.file}:${i.line}:${i.column}`;t.has(r)||(t.add(r),n.push(i))}return n}function ji(e,t){let n=bd.relative(e||process.cwd(),t).replace(/\\/g,"/");return!n||n.startsWith("..")?null:n}function Qv(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function vd(e,t,n,i){let r=Xv(t,i);return r.size===0?new Map:Yv(e,n,r)}function Xv(e,t){let n=new Map;for(let i of G(e,t)){let r=$(i.symbol)??i.leaf;if(!r)continue;let o=n.get(r);o||(o=[],n.set(r,o)),o.push(i)}return n}function Yv(e,t,n){let i=new Map,r=new Map;return t.forEachDescendant(o=>{for(let s of Zv(e,o)){let a=n.get(s);if(!a)continue;let c=ni(t,o);for(let l of a){if(c<l.startLine-1||c>l.endLine+1)continue;let u=Math.abs(c-l.startLine),d=r.get(l.symbolId);d!==void 0&&d<=u||(r.set(l.symbolId,u),i.set(l.symbolId,o))}}}),i}function Zv(e,t){let n=[],i=r=>{r&&!n.includes(r)&&n.push(r)};if("getNameNode"in t&&typeof t.getNameNode=="function"){let r=t.getNameNode();i(r?.getText())}if("getName"in t&&typeof t.getName=="function"){let r=t.getName();i(r)}return e.Node.isIdentifier(t)&&i(t.getText()),n}var eR=U("ts-definition-leaf-candidates",{clearGroups:["definition-catalog"]});function kd(e,t,n,i){let r=Ld(e,t),o=Rd(r.get(i)??[],n);if(o)return o;let s=[];for(let a of r.values())for(let c of a)((c.leaf||$(c.symbol)||"").includes(i)||c.symbol.includes(i))&&s.push(c);return Rd(s,n)}function wd(e,t){let n=new Map;for(let[i,r]of Ld(e,t)){let o=r[0];o&&n.set(i,o)}return n}function Ld(e,t){return eR.get(e,t,()=>{let n=new Map;for(let i of G(e,t)){let r=i.leaf||$(i.symbol);if(!r)continue;let o=n.get(r);o||(o=[],n.set(r,o)),o.push({...i,leaf:r})}for(let i of n.values())i.sort((r,o)=>r.startLine-o.startLine||r.endLine-o.endLine||r.symbolId-o.symbolId);return n})}function Rd(e,t){let n=null,i=Number.POSITIVE_INFINITY;for(let r of e){let o=Math.abs(r.startLine-t);(o<i||o===i&&n&&r.startLine<n.startLine)&&(n=r,i=o)}return n}import tR from"path";var Bi=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"];function ii(e){let t=e.toLowerCase();return Bi.some(n=>t.endsWith(n))}function Dd(e,t){let n=new Map,i=r=>ii(r)?Xe(n,r,()=>{let o=tR.join(e.config.projectRoot,r);for(let{project:s}of t){let a=s.getSourceFile(o)??s.addSourceFileAtPathIfExists(o)??null;if(a)return{project:s,sourceFile:a}}return null}):null;return{sourceFile:r=>i(r)?.sourceFile??null,sourceFileMatch:i,indexedTypeScriptLikeDocuments:()=>j(e,{extensions:Bi})}}import jt from"path";import{existsSync as po,readdirSync as nR,readFileSync as Id}from"fs";function Pd(e){let t=jt.join(e,"package.json");if(!po(t))return[];let n;try{n=JSON.parse(Id(t,"utf8"))}catch{return[]}return(Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages??[]).flatMap(r=>iR(e,r)).flatMap(r=>rR(e,r))}function iR(e,t){if(!t||t.startsWith("!")||t.includes("node_modules"))return[];if(!t.includes("*")){let s=jt.join(e,t);return po(jt.join(s,"package.json"))?[s]:[]}let n=t.indexOf("*"),i=t.slice(0,n).replace(/\/$/,""),r=t.slice(n+1).replace(/^\//,""),o=jt.join(e,i||".");if(!po(o))return[];try{return nR(o).map(s=>jt.join(o,s,r)).filter(s=>po(jt.join(s,"package.json")))}catch{return[]}}function rR(e,t){try{let n=JSON.parse(Id(jt.join(t,"package.json"),"utf8"));if(!n.name)return[];let i=jt.relative(e,t).replace(/\\/g,"/");return[{name:n.name,rootRelative:i,sourceRootRelative:`${i}/src`}]}catch{return[]}}function Nd(e,t){for(let n of e)if(t===n.name||t.startsWith(`${n.name}/`))return n.name;return null}function Ed(e){return[`${e.sourceRootRelative}/index.ts`,`${e.sourceRootRelative}/index.tsx`,`${e.sourceRootRelative}/index.mts`,`${e.sourceRootRelative}/index.cts`]}import{existsSync as Hi,readFileSync as oR,readdirSync as sR,statSync as aR}from"fs";import re from"path";var aa=["tsconfig.json","tsconfig.app.json","tsconfig.node.json","tsconfig.base.json"];function ca(e,t){let i=t?re.dirname(re.join(e,t)):e,r=re.resolve(e);for(;i.startsWith(r);){for(let s of aa){let a=re.join(i,s);if(Hi(a))return a}let o=re.dirname(i);if(o===i)break;i=o}for(let o of aa){let s=re.join(e,o);if(Hi(s))return s}return null}function Td(e){let t=e.config.projectRoot,n=new Set(la(t,e.config.semantic?.typescript?.tsconfigs)),i=j(e,{includeIgnored:!1,extensions:Bi});for(let r of i){let o=ca(t,r);o&&n.add(re.resolve(o))}if(n.size===0){let r=ca(t);r&&n.add(re.resolve(r))}return[...n].filter(r=>!_d(t,r)).sort((r,o)=>r.localeCompare(o))}function la(e,t=[]){let n=new Set;for(let i of t){let r=re.isAbsolute(i)?i:re.join(e,i);Hi(r)&&n.add(re.resolve(r))}for(let i of cR(e))for(let r of aa){let o=re.join(i,r);Hi(o)&&n.add(re.resolve(o))}if(n.size===0){let i=ca(e);i&&n.add(re.resolve(i))}return[...n].filter(i=>!_d(e,i)).sort((i,r)=>i.localeCompare(r))}function cR(e){let t=re.join(e,"package.json");if(!Hi(t))return[];let n;try{n=JSON.parse(oR(t,"utf8"))}catch{return[]}return(Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages??[]).flatMap(r=>lR(e,r))}function lR(e,t){if(!t||t.startsWith("!")||t.includes("node_modules"))return[];if(!t.includes("*")){let s=re.join(e,t);return sa(s)?[s]:[]}let n=t.indexOf("*"),i=t.slice(0,n).replace(/\/$/,""),r=t.slice(n+1).replace(/^\//,""),o=re.join(e,i||".");return sa(o)?sR(o).map(s=>re.join(o,s,r)).filter(sa):[]}function sa(e){try{return aR(e).isDirectory()}catch{return!1}}function _d(e,t){let n=re.relative(e,t).replace(/\\/g,"/");return n.startsWith("..")||n.includes("/node_modules/")||n.startsWith("node_modules/")||n.includes("/dist/")||n.startsWith("dist/")}import{createRequire as uR}from"module";var dR=uR(import.meta.url),Vi;function $d(){if(Vi!==void 0)return Vi;try{Vi=dR("ts-morph")}catch{Vi=null}return Vi}function Fd(e,t){return t.map(n=>({tsconfigPath:n,project:new e.Project({tsConfigFilePath:n,skipFileDependencyResolution:!1})}))}function fo(e,t,n){return{language:"typescript",availability:()=>({available:!1,reason:e,tsconfigPath:t,tsconfigPaths:n}),importUsage:()=>[],referencesFor:()=>[],calleesFor:()=>[],signatureFor:()=>null}}function Od(e,t){let n=$d();if(!n)return fo("ts-morph is not installed");let i=Td(e);if(i.length===0)return fo("no tsconfig found");try{let r=Fd(n,i);return new ua(e,n,r)}catch(r){return fo(r instanceof Error?r.message:String(r),i[0],i)}}var ua=class{constructor(t,n,i){this.db=t;this.tsMorph=n;this.projects=i;this.workspacePackages=Pd(t.config.projectRoot),this.sourceFiles=Dd(t,i)}db;tsMorph;projects;language="typescript";importUsageCache=new Map;referencesCache=new Map;calleesCache=new Map;fileCalleesCache=new Map;signatureCache=new Map;definitionNodeCache=new Map;fileDefinitionNodeCache=new Map;indexedDefinitionLeafCache=new Map;packageImportReferenceIndex=null;packageExportIndex=null;workspacePackages;sourceFiles;availability(){return{available:!0,tsconfigPath:this.projects[0]?.tsconfigPath,tsconfigPaths:this.projects.map(t=>t.tsconfigPath)}}importUsage(t){return Xe(this.importUsageCache,t,()=>{let n=this.sourceFiles.sourceFile(t);if(!n)return[];let i=[];for(let r of n.getImportDeclarations())for(let o of this.importUsageForDeclaration(t,r))i.push(o);return i})}referencesFor(t){return Xe(this.referencesCache,t.symbolId,()=>{let n=this.nodeForDefinition(t),i=this.packageImportReferencesForDefinition(t);return n?yd(n,t,i,this.db.config.projectRoot):i})}calleesFor(t){return Xe(this.calleesCache,t.symbolId,()=>Xe(this.fileCalleesCache,t.relativePath,()=>this.calleeMapForFile(t.relativePath)).get(t.symbolId)??[])}signatureFor(t){return Xe(this.signatureCache,t.symbolId,()=>{let n=this.nodeForDefinition(t);if(!n||!this.tsMorph.Node.isFunctionDeclaration(n)&&!this.tsMorph.Node.isMethodDeclaration(n)&&!this.tsMorph.Node.isArrowFunction(n)&&!this.tsMorph.Node.isFunctionExpression(n)&&!this.tsMorph.Node.isConstructorDeclaration(n))return null;let i=n.getType().getCallSignatures()[0];if(!i)return null;let r=i.getParameters().map(s=>{let a=s.getDeclarations()[0],c=a?s.getTypeAtLocation(a).getText(a):s.getValueDeclaration()?.getType().getText()??"unknown";return Md(c)}),o=i.getReturnType().getText(n);return`(${r.join(",")})=>${Md(o)}`})}importUsageForDeclaration(t,n){let i=Qe(this.db,t,n.getModuleSpecifierValue()),r=Ad(n);return n.getImportClause()?.isTypeOnly()?r.map(o=>mR(t,i,o)):r.map(o=>this.valueImportUsageForEntry(t,i,o))}valueImportUsageForEntry(t,n,i){let r=i.identifier?i.identifier.findReferences():[],o=[];for(let l of r)for(let u of Sd(l,t,i.identifier,this.db.config.projectRoot))o.push(u);let s=o.some(l=>!oa(l.node)),a=o.some(l=>oa(l.node)),c=i.isTypeOnly;return{importer:t,sourcePath:n,importedName:i.importedName,localName:i.localName,kind:i.kind,isTypeOnly:c,isUsed:c||o.length>0,isTypeUsed:c||a,isValueUsed:s,references:o.map(l=>l.location)}}packageImportReferencesForDefinition(t){return this.packageImportReferences().get(t.symbolId)??[]}packageImportReferences(){if(this.packageImportReferenceIndex)return this.packageImportReferenceIndex;let t=new Map,n=this.packageExports();for(let i of this.sourceFiles.indexedTypeScriptLikeDocuments())this.addPackageImportReferencesForDocument(t,n,i);for(let[i,r]of t)t.set(i,mo(r));return this.packageImportReferenceIndex=t,t}addPackageImportReferencesForDocument(t,n,i){if(this.db.isIgnored(i))return;let r=this.sourceFiles.sourceFileMatch(i);if(r)for(let o of r.sourceFile.getImportDeclarations())this.addPackageImportReferencesForDeclaration(t,n,i,o)}addPackageImportReferencesForDeclaration(t,n,i,r){let o=Nd(this.workspacePackages,r.getModuleSpecifierValue());if(!o)return;let s=n.get(o);if(s)for(let a of Ad(r)){if(a.kind!=="named"||!a.identifier)continue;let c=s.get(a.importedName);if(!c||c.size===0)continue;let l=Cd(a.identifier,i,this.db.config.projectRoot);l.length>0&&gR(t,c,l)}}packageExports(){if(this.packageExportIndex)return this.packageExportIndex;let t=new Map;for(let n of this.workspacePackages){let i=new Map;for(let r of Ed(n))this.collectPackageExports(n,r,i,new Set);i.size>0&&t.set(n.name,i)}return this.packageExportIndex=t,t}collectPackageExports(t,n,i,r){if(r.has(n))return;r.add(n);let o=this.sourceFiles.sourceFile(n);if(o)for(let s of o.getExportDeclarations()){let a=s.getModuleSpecifierValue(),c=a?Qe(this.db,n,a):n;if(!c||!c.startsWith(`${t.sourceRootRelative}/`))continue;let l=s.getNamedExports();if(l.length===0){if(s.isNamespaceExport())continue;this.collectPackageExports(t,c,i,r);continue}for(let u of l){let d=u.getNameNode().getText(),m=u.getAliasNode()?.getText()??d,p=this.indexedDefinitionByLeaf(c,d);if(!p)continue;let h=i.get(m);h||(h=new Set,i.set(m,h)),h.add(p.symbolId)}}}indexedDefinitionByLeaf(t,n){return Xe(this.indexedDefinitionLeafCache,t,()=>wd(this.db,t)).get(n)??null}nodeForDefinition(t){return Xe(this.definitionNodeCache,t.symbolId,()=>this.definitionNodesForFile(t.relativePath).get(t.symbolId)??null)}definitionNodesForFile(t){return Xe(this.fileDefinitionNodeCache,t,()=>{let n=this.sourceFiles.sourceFile(t);return n?vd(this.tsMorph,this.db,n,t):new Map})}definitionFromSymbol(t){let n=t.getDeclarations();for(let i of n){let r=i.getSourceFile(),o=ji(this.db.config.projectRoot,r.getFilePath());if(!o||this.db.isIgnored(o))continue;let s=ni(r,i),a=kd(this.db,o,s,t.getName());if(a)return{symbol:a.symbol,file:a.relativePath,line:a.startLine}}return null}calleeMapForFile(t){let n=this.sourceFiles.sourceFile(t);if(!n)return new Map;let i=G(this.db,t).sort((o,s)=>o.startLine-s.startLine||s.endLine-o.endLine);if(i.length===0)return new Map;let r=new Map;n.forEachDescendant(o=>{if(!this.tsMorph.Node.isCallExpression(o)&&!this.tsMorph.Node.isNewExpression(o))return;let s=this.semanticCalleeForCallNode(n,i,o);s&&pR(r,s.callerId,s.target)});for(let[o,s]of r)r.set(o,hR(s));return r}semanticCalleeForCallNode(t,n,i){let r=fR(n,ni(t,i));if(!r)return null;let o=i.getExpression(),s=o.getSymbol()??o.getType().getSymbol(),a=s?this.definitionFromSymbol(s):null;return a?{callerId:r.symbolId,target:{symbol:a.symbol,file:a.file,line:a.line}}:null}};function Ad(e){let t=[],n=e.getDefaultImport();n&&t.push({identifier:n,importedName:"default",localName:n.getText(),kind:"default",isTypeOnly:e.getImportClause()?.isTypeOnly()??!1});let i=e.getNamespaceImport();i&&t.push({identifier:i,importedName:"*",localName:i.getText(),kind:"namespace",isTypeOnly:e.getImportClause()?.isTypeOnly()??!1});for(let r of e.getNamedImports()){let o=r.getNameNode(),a=r.getAliasNode()??(o.getKindName()==="Identifier"?o:null);t.push({identifier:a,importedName:o.getText(),localName:a?.getText()??o.getText(),kind:"named",isTypeOnly:r.isTypeOnly()||(e.getImportClause()?.isTypeOnly()??!1)})}return t.length===0&&t.push({identifier:null,importedName:"*",localName:null,kind:"side-effect",isTypeOnly:!1}),t}function mR(e,t,n){return{importer:e,sourcePath:t,importedName:n.importedName,localName:n.localName,kind:n.kind,isTypeOnly:!0,isUsed:!0,isTypeUsed:!0,isValueUsed:!1,references:[]}}function pR(e,t,n){let i=e.get(t);i||(i=[],e.set(t,i)),i.push(n)}function fR(e,t){let n=null;for(let i of e)t<i.startLine||t>i.endLine||(!n||i.startLine>=n.startLine)&&(n=i);return n}function gR(e,t,n){for(let i of t){let r=e.get(i)??[];r.push(...n),e.set(i,r)}}function hR(e){let t=new Set,n=[];for(let i of e){let r=`${i.symbol}|${i.file}|${i.line}`;t.has(r)||(t.add(r),n.push(i))}return n}function Md(e){return e.replace(/\s+/g," ").replace(/\bimport\("[^"]+"\)\./g,"").trim()}var da=new WeakMap;Et({name:"semantic-provider",groups:["semantic-provider"],clearAll:e=>da.delete(e)});function ln(e,t){let n=`${e.config.projectRoot}:typescript-workspace`,i=da.get(e);i||(i=new Map,da.set(e,i));let r=i.get(n);if(r)return r;let o=Od(e,t);return i.set(n,o),o}function qi(e,t){let n=ho(e,t);return n?n.importUsage(t):[]}function un(e,t){let n=ho(e,t.relativePath);return n?n.referencesFor(t):[]}function ri(e,t){let n=new Map;for(let i of t)for(let r of un(e,i)){if(r.file===i.relativePath||e.isIgnored(r.file))continue;let o=n.get(i.symbolId);o||(o=new Set,n.set(i.symbolId,o)),o.add(r.file)}return n}function go(e,t){let n=new Map;for(let i of t){let r=ho(e,i.relativePath);if(!r)continue;let o=r.calleesFor(i);o.length>0&&n.set(i.symbolId,o)}return n}function jd(e,t){let n=ho(e,t.relativePath);return n?n.signatureFor(t):null}function ho(e,t){if(!ii(t))return null;let n=ln(e,t);return n.availability().available?n:null}function bo(e,t){let n=new Map;for(let i of fe(e,t)){if(!i.sourcePath)continue;let r=i.localName??i.importedName;if(r&&Bd(n,r,i.sourcePath),i.kind==="namespace")for(let o of i.usedMembers)Bd(n,o,i.sourcePath)}return n}function Bd(e,t,n){let i=e.get(t);i||(i=new Set,e.set(t,i)),i.add(n)}function oi(e,t,n){let i=cn(e).get(n);if(!i||i.length===0)return[];if(i.length===1)return[Ui(i[0])];let r=i.filter(c=>c.file===t);if(r.length>0)return r.map(Ui);let o=bo(e,t),s=o.get(n);if(s)for(let c of s){let l=i.filter(u=>Ot(c,u.file));if(l.length>0)return l.map(Ui)}let a=new Set;for(let c of o.values())for(let l of c)a.add(l);for(let c of a){let l=i.filter(u=>Ot(c,u.file));if(l.length>0&&l.length===i.length)return l.map(Ui)}return[]}function Vd(e,t,n){let i=oi(e,t,n);if(i.length>0)return i;let r=cn(e).get(n);return!r||r.length===0?[]:r.map(Ui)}function qd(e,t,n={}){let i=Ur(e,t);if(!i)return[];let r=$(i.symbol);if(!r)return[];if(n.semantic!==!1){let s=un(e,{...i,leaf:r,parentTypeName:null,isFunctionLike:!1,isTypeLike:!1,kind:null,documentation:null,enclosingSymbol:null});if(s.length>0){let a=new Map;for(let c of s){let l=a.get(c.file)??[];l.push(c.line),a.set(c.file,l)}return Hd(e,a)}}let o=new Map;for(let s of De(e)){let a=M(e,s);if(!a||a.indexOf(r)===-1||s!==i.relativePath&&!oi(e,s,r).some(u=>u.symbolId===i.symbolId))continue;let c=ao(e,s,r,s===i.relativePath?{excludeStartLine:i.startLine,excludeEndLine:i.endLine}:{});c.length>0&&o.set(s,c)}return Hd(e,o)}function Ud(e,t){let n=new Map;for(let o of t){if(!o.leaf)continue;let s=n.get(o.leaf)??[];s.push(o),n.set(o.leaf,s)}if(n.size===0)return new Map;let i=new Set(t.map(o=>o.symbolId)),r=new Map;for(let o of De(e)){let s=dd(e,o);if(s.size!==0){for(let a of s)if(n.has(a))for(let c of oi(e,o,a)){if(!i.has(c.symbolId)||o===c.relativePath)continue;let l=r.get(c.symbolId);l||(l=new Set,r.set(c.symbolId,l)),l.add(o)}}}return r}function Ui(e){return{symbolId:e.symbolId,symbol:e.symbol,relativePath:e.file}}function Hd(e,t){let n=[],i=new Set;for(let[r,o]of t){let s=G(e,r);for(let a of o){let c=je(s,a),l=`${r}|${a}|${c?.symbol??""}`;i.has(l)||(i.add(l),n.push({file:r,line:a,enclosingSymbol:c?.symbol??null}))}}return n}function dn(e,t){let n=vR(e,t);return n?RR(e,yR(e,n.match,n.identifier)):[]}function Bt(e,t,n={}){return bR(e,t,n).map(i=>({file:i.file,line:i.line,enclosingSymbol:i.enclosingSymbol}))}function bR(e,t,n={}){let i=qd(e,t,{semantic:n.semantic}),r=i.length>0?Wd(i,"source-attribution"):Wd(dn(e,t),"scip-reference-chunk");return n.includeIgnored===!0?r:r.filter(o=>!e.isIgnored(o.file))}function Wd(e,t){return e.map(n=>({...n,provenance:t}))}function yR(e,t,n){let i=new Map;for(let[r,o]of SR(e,t.symbolId))i.set(r,xR(e,r,o,t,n));return i}function SR(e,t){let n=new Map;for(let i of co(e,[t])){if(e.isIgnored(i.relative_path))continue;let r=n.get(i.relative_path);r||(r=[],n.set(i.relative_path,r)),r.push({start_line:i.chunk_start,end_line:i.chunk_end})}return n}function xR(e,t,n,i,r){let o=t===i.relativePath?{excludeStartLine:i.startLine,excludeEndLine:i.endLine}:{},s=r?ao(e,t,r,o):[];return n.flatMap(a=>CR(s,a))}function CR(e,t){let n=e.filter(i=>i>=t.start_line&&i<=t.end_line);return n.length>0?n:[t.start_line]}function vR(e,t){let n=Ur(e,t);return n?{match:n,identifier:$(n.symbol)||null}:null}function RR(e,t){let n=[],i=new Set;for(let[r,o]of t){let s=G(e,r);for(let a of o){let c=je(s,a),l=`${r}|${a}|${c?.symbol??""}`;i.has(l)||(i.add(l),n.push({file:r,line:a,enclosingSymbol:c?.symbol??null}))}}return n}function Ae(e,t,n={}){let i=yo(e,[t],{additive:n.additive,semantic:n.semantic}),r=n.callableOnly?(i.get(t.symbolId)??[]).filter(o=>xe(o.symbol)):i.get(t.symbolId)??[];return typeof n.limit=="number"?r.slice(0,n.limit):r}function zd(e,t,n={}){let i=LR(e)?IR(e,t,{semantic:n.semantic!==!1}):DR(e).get(t.symbolId)??[];return typeof n.limit=="number"?i.slice(0,n.limit):i}var kR=Y("caller-rows",{clearGroups:["whole-project"]}),wR=2e4;function LR(e){return(e.get("SELECT COUNT(*) AS count FROM global_symbols")?.count??0)>wR}function DR(e){return kR.get(e,()=>{let t=rt(e),n=yo(e,t),i=new Map;for(let s of t)i.set(s.symbol,s.symbolId);let r=new Map,o=new Map;for(let s of t){let a=n.get(s.symbolId);if(!(!a||a.length===0))for(let c of a){let l=i.get(c.symbol);if(l===void 0||l===s.symbolId)continue;let u=r.get(l);u||(u=[],r.set(l,u),o.set(l,new Set));let d=`${s.symbol}|${s.relativePath}`;o.get(l).has(d)||(o.get(l).add(d),u.push({symbol:s.symbol,file:s.relativePath,source:"caller-map-inversion"}))}}return r})}function IR(e,t,n){let i=[],r=new Set,o=a=>{if(a.symbol===t.symbol)return;let c=`${a.symbol}|${a.file}`;r.has(c)||(r.add(c),i.push(a))};for(let a of dn(e,t))a.file!==t.relativePath&&o({symbol:a.enclosingSymbol??a.file,file:a.file,source:"resolved-reference"});let s=n.semantic?PR(e,t):null;if(s)for(let a of un(e,s)){if(a.file===t.relativePath||e.isIgnored(a.file))continue;let c=je(G(e,a.file),a.line);o({symbol:c?.symbol??a.file,file:a.file,source:"semantic-reference"})}return i}function PR(e,t){return e.get(`SELECT
168
+ ${e.symbolNoiseFor("gs")}`),n=new Map;for(let r of t){if(!r.relative_path||e.isIgnored(r.relative_path))continue;let i=$(r.symbol);if(!i)continue;let o=n.get(i);o||(o=[],n.set(i,o)),o.some(s=>s.symbolId===r.id)||o.push({symbol:r.symbol,symbolId:r.id,file:r.relative_path})}return n})}var Kd=/[A-Za-z_$][A-Za-z0-9_$]*/g,ek=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function Xr(e){let t=[],n=!1;for(let r of e)r&&(n=!0,ek.test(r)||t.push(r));return{candidateNames:e,hasUsableCandidate:n,nonIdentifierNames:t}}function Po(e,t){let n=tk(t)?t:Xr(t);if(n.candidateNames.size===0||!n.hasUsableCandidate)return!0;Kd.lastIndex=0;let r;for(;(r=Kd.exec(e))!==null;)if(n.candidateNames.has(r[0]))return!0;for(let i of n.nonIdentifierNames)if(e.includes(i))return!0;return!1}function tk(e){return"candidateNames"in e}function nt(e,t,n){if(e.has(t))return e.get(t);let r=n();return e.set(t,r),r}import Xd from"path";function nk(e,t){return e.getReferences().map(n=>{let r=n.getNode();return Zd(r,t)})}function rk(e){let t=e;return typeof t.findReferences=="function"?t.findReferences():[]}function Qd(e,t,n,r){let i=[];for(let o of rk(e))for(let s of nk(o,r))s.file===t.relativePath&&s.line>=t.startLine&&s.line<=t.endLine||i.push(s);for(let o of n)i.push(o);return No(i)}function Yd(e,t,n,r){let i=[],o=n?.getStart();for(let s of e.getReferences()){let a=s.getNode();Qr(r,a.getSourceFile().getFilePath())===t&&(o!==void 0&&a.getStart()===o||i.push({location:Zd(a,r),node:a}))}return i}function Zd(e,t){let n=e.getSourceFile(),r=n.getLineAndColumnAtPos(e.getStart());return{file:Qr(t,n.getFilePath())??n.getBaseName(),line:r.line-1,column:r.column-1}}function em(e,t,n){let r=e.getSourceFile(),i=hr(r,e),o=e.getText(),s=new RegExp(`\\b${ik(o)}\\b`,"g"),a=r.getFullText().split(`
169
+ `),c=[];for(let l=0;l<a.length;l++){if(l===i)continue;let u=a[l]??"";s.lastIndex=0;let d;for(;(d=s.exec(u))!==null;)c.push({file:t,line:l,column:d.index})}return No(c.filter(l=>Qr(n,Xd.join(n,l.file))===t))}function wa(e){for(let t=e;t;t=t.getParent()){let n=t.getKindName();if(n.includes("Type")||n==="InterfaceDeclaration"||n==="TypeAliasDeclaration")return!0;if(n==="CallExpression"||n==="NewExpression"||n==="ExpressionStatement")return!1}return!1}function hr(e,t){return e.getLineAndColumnAtPos(t.getStart()).line-1}function No(e){let t=new Set,n=[];for(let r of e){let i=`${r.file}:${r.line}:${r.column}`;t.has(i)||(t.add(i),n.push(r))}return n}function Qr(e,t){let n=Xd.relative(e||process.cwd(),t).replace(/\\/g,"/");return!n||n.startsWith("..")?null:n}function ik(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function tm(e,t,n,r){let i=ok(t,r);return i.size===0?new Map:sk(e,n,i)}function ok(e,t){let n=new Map;for(let r of z(e,t)){let i=$(r.symbol)??r.leaf;if(!i)continue;let o=n.get(i);o||(o=[],n.set(i,o)),o.push(r)}return n}function sk(e,t,n){let r=new Map,i=new Map;return t.forEachDescendant(o=>{for(let s of ak(e,o)){let a=n.get(s);if(!a)continue;let c=hr(t,o);for(let l of a){if(c<l.startLine-1||c>l.endLine+1)continue;let u=Math.abs(c-l.startLine),d=i.get(l.symbolId);d!==void 0&&d<=u||(i.set(l.symbolId,u),r.set(l.symbolId,o))}}}),r}function ak(e,t){let n=[],r=i=>{i&&!n.includes(i)&&n.push(i)};if("getNameNode"in t&&typeof t.getNameNode=="function"){let i=t.getNameNode();r(i?.getText())}if("getName"in t&&typeof t.getName=="function"){let i=t.getName();r(i)}return e.Node.isIdentifier(t)&&r(t.getText()),n}var ck=U("ts-definition-leaf-candidates",{clearGroups:["definition-catalog"]});function rm(e,t,n,r){let i=om(e,t),o=nm(i.get(r)??[],n);if(o)return o;let s=[];for(let a of i.values())for(let c of a)((c.leaf||$(c.symbol)||"").includes(r)||c.symbol.includes(r))&&s.push(c);return nm(s,n)}function im(e,t){let n=new Map;for(let[r,i]of om(e,t)){let o=i[0];o&&n.set(r,o)}return n}function om(e,t){return ck.get(e,t,()=>{let n=new Map;for(let r of z(e,t)){let i=r.leaf||$(r.symbol);if(!i)continue;let o=n.get(i);o||(o=[],n.set(i,o)),o.push({...r,leaf:i})}for(let r of n.values())r.sort((i,o)=>i.startLine-o.startLine||i.endLine-o.endLine||i.symbolId-o.symbolId);return n})}function nm(e,t){let n=null,r=Number.POSITIVE_INFINITY;for(let i of e){let o=Math.abs(i.startLine-t);(o<r||o===r&&n&&i.startLine<n.startLine)&&(n=i,r=o)}return n}import lk from"path";var Yr=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"];function yn(e){let t=e.toLowerCase();return Yr.some(n=>t.endsWith(n))}function sm(e,t){let n=new Map,r=i=>yn(i)?nt(n,i,()=>{let o=lk.join(e.config.projectRoot,i);for(let{project:s}of t){let a=s.getSourceFile(o)??s.addSourceFileAtPathIfExists(o)??null;if(a)return{project:s,sourceFile:a}}return null}):null;return{sourceFile:i=>r(i)?.sourceFile??null,sourceFileMatch:r,indexedTypeScriptLikeDocuments:()=>j(e,{extensions:Yr})}}import Gt from"path";import{existsSync as Eo,readdirSync as uk,readFileSync as am}from"fs";function cm(e){let t=Gt.join(e,"package.json");if(!Eo(t))return[];let n;try{n=JSON.parse(am(t,"utf8"))}catch{return[]}return(Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages??[]).flatMap(i=>dk(e,i)).flatMap(i=>mk(e,i))}function dk(e,t){if(!t||t.startsWith("!")||t.includes("node_modules"))return[];if(!t.includes("*")){let s=Gt.join(e,t);return Eo(Gt.join(s,"package.json"))?[s]:[]}let n=t.indexOf("*"),r=t.slice(0,n).replace(/\/$/,""),i=t.slice(n+1).replace(/^\//,""),o=Gt.join(e,r||".");if(!Eo(o))return[];try{return uk(o).map(s=>Gt.join(o,s,i)).filter(s=>Eo(Gt.join(s,"package.json")))}catch{return[]}}function mk(e,t){try{let n=JSON.parse(am(Gt.join(t,"package.json"),"utf8"));if(!n.name)return[];let r=Gt.relative(e,t).replace(/\\/g,"/");return[{name:n.name,rootRelative:r,sourceRootRelative:`${r}/src`}]}catch{return[]}}function lm(e,t){for(let n of e)if(t===n.name||t.startsWith(`${n.name}/`))return n.name;return null}function um(e){return[`${e.sourceRootRelative}/index.ts`,`${e.sourceRootRelative}/index.tsx`,`${e.sourceRootRelative}/index.mts`,`${e.sourceRootRelative}/index.cts`]}import{existsSync as Zr,readFileSync as pk,readdirSync as fk,statSync as gk}from"fs";import oe from"path";var Ia=["tsconfig.json","tsconfig.app.json","tsconfig.node.json","tsconfig.base.json"];function Da(e,t){let r=t?oe.dirname(oe.join(e,t)):e,i=oe.resolve(e);for(;r.startsWith(i);){for(let s of Ia){let a=oe.join(r,s);if(Zr(a))return a}let o=oe.dirname(r);if(o===r)break;r=o}for(let o of Ia){let s=oe.join(e,o);if(Zr(s))return s}return null}function dm(e){let t=e.config.projectRoot,n=new Set(Pa(t,e.config.semantic?.typescript?.tsconfigs)),r=j(e,{includeIgnored:!1,extensions:Yr});for(let i of r){let o=Da(t,i);o&&n.add(oe.resolve(o))}if(n.size===0){let i=Da(t);i&&n.add(oe.resolve(i))}return[...n].filter(i=>!mm(t,i)).sort((i,o)=>i.localeCompare(o))}function Pa(e,t=[]){let n=new Set;for(let r of t){let i=oe.isAbsolute(r)?r:oe.join(e,r);Zr(i)&&n.add(oe.resolve(i))}for(let r of hk(e))for(let i of Ia){let o=oe.join(r,i);Zr(o)&&n.add(oe.resolve(o))}if(n.size===0){let r=Da(e);r&&n.add(oe.resolve(r))}return[...n].filter(r=>!mm(e,r)).sort((r,i)=>r.localeCompare(i))}function hk(e){let t=oe.join(e,"package.json");if(!Zr(t))return[];let n;try{n=JSON.parse(pk(t,"utf8"))}catch{return[]}return(Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages??[]).flatMap(i=>yk(e,i))}function yk(e,t){if(!t||t.startsWith("!")||t.includes("node_modules"))return[];if(!t.includes("*")){let s=oe.join(e,t);return La(s)?[s]:[]}let n=t.indexOf("*"),r=t.slice(0,n).replace(/\/$/,""),i=t.slice(n+1).replace(/^\//,""),o=oe.join(e,r||".");return La(o)?fk(o).map(s=>oe.join(o,s,i)).filter(La):[]}function La(e){try{return gk(e).isDirectory()}catch{return!1}}function mm(e,t){let n=oe.relative(e,t).replace(/\\/g,"/");return n.startsWith("..")||n.includes("/node_modules/")||n.startsWith("node_modules/")||n.includes("/dist/")||n.startsWith("dist/")}import{createRequire as bk}from"module";var Sk=bk(import.meta.url),ei;function pm(){if(ei!==void 0)return ei;try{ei=Sk("ts-morph")}catch{ei=null}return ei}function fm(e,t){return t.map(n=>({tsconfigPath:n,project:new e.Project({tsConfigFilePath:n,skipFileDependencyResolution:!1})}))}function To(e,t,n){return{language:"typescript",availability:()=>({available:!1,reason:e,tsconfigPath:t,tsconfigPaths:n}),importUsage:()=>[],referencesFor:()=>[],calleesFor:()=>[],signatureFor:()=>null}}function ym(e,t){let n=pm();if(!n)return To("ts-morph is not installed");let r=dm(e);if(r.length===0)return To("no tsconfig found");try{let i=fm(n,r);return new Na(e,n,i)}catch(i){return To(i instanceof Error?i.message:String(i),r[0],r)}}var Na=class{constructor(t,n,r){this.db=t;this.tsMorph=n;this.projects=r;this.workspacePackages=cm(t.config.projectRoot),this.sourceFiles=sm(t,r)}db;tsMorph;projects;language="typescript";importUsageCache=new Map;referencesCache=new Map;calleesCache=new Map;fileCalleesCache=new Map;signatureCache=new Map;definitionNodeCache=new Map;fileDefinitionNodeCache=new Map;indexedDefinitionLeafCache=new Map;packageImportReferenceIndex=null;packageExportIndex=null;workspacePackages;sourceFiles;availability(){return{available:!0,tsconfigPath:this.projects[0]?.tsconfigPath,tsconfigPaths:this.projects.map(t=>t.tsconfigPath)}}importUsage(t){return nt(this.importUsageCache,t,()=>{let n=this.sourceFiles.sourceFile(t);if(!n)return[];let r=[];for(let i of n.getImportDeclarations())for(let o of this.importUsageForDeclaration(t,i))r.push(o);return r})}referencesFor(t){return nt(this.referencesCache,t.symbolId,()=>{let n=this.nodeForDefinition(t),r=this.packageImportReferencesForDefinition(t);return n?Qd(n,t,r,this.db.config.projectRoot):r})}calleesFor(t){return nt(this.calleesCache,t.symbolId,()=>nt(this.fileCalleesCache,t.relativePath,()=>this.calleeMapForFile(t.relativePath)).get(t.symbolId)??[])}signatureFor(t){return nt(this.signatureCache,t.symbolId,()=>{let n=this.nodeForDefinition(t);if(!n||!this.tsMorph.Node.isFunctionDeclaration(n)&&!this.tsMorph.Node.isMethodDeclaration(n)&&!this.tsMorph.Node.isArrowFunction(n)&&!this.tsMorph.Node.isFunctionExpression(n)&&!this.tsMorph.Node.isConstructorDeclaration(n))return null;let r=n.getType().getCallSignatures()[0];if(!r)return null;let i=r.getParameters().map(s=>{let a=s.getDeclarations()[0],c=a?s.getTypeAtLocation(a).getText(a):s.getValueDeclaration()?.getType().getText()??"unknown";return hm(c)}),o=r.getReturnType().getText(n);return`(${i.join(",")})=>${hm(o)}`})}importUsageForDeclaration(t,n){let r=tt(this.db,t,n.getModuleSpecifierValue()),i=gm(n);return n.getImportClause()?.isTypeOnly()?i.map(o=>xk(t,r,o)):i.map(o=>this.valueImportUsageForEntry(t,r,o))}valueImportUsageForEntry(t,n,r){let i=r.identifier?r.identifier.findReferences():[],o=[];for(let l of i)for(let u of Yd(l,t,r.identifier,this.db.config.projectRoot))o.push(u);let s=o.some(l=>!wa(l.node)),a=o.some(l=>wa(l.node)),c=r.isTypeOnly;return{importer:t,sourcePath:n,importedName:r.importedName,localName:r.localName,kind:r.kind,isTypeOnly:c,isUsed:c||o.length>0,isTypeUsed:c||a,isValueUsed:s,references:o.map(l=>l.location)}}packageImportReferencesForDefinition(t){return this.packageImportReferences().get(t.symbolId)??[]}packageImportReferences(){if(this.packageImportReferenceIndex)return this.packageImportReferenceIndex;let t=new Map,n=this.packageExports();for(let r of this.sourceFiles.indexedTypeScriptLikeDocuments())this.addPackageImportReferencesForDocument(t,n,r);for(let[r,i]of t)t.set(r,No(i));return this.packageImportReferenceIndex=t,t}addPackageImportReferencesForDocument(t,n,r){if(this.db.isIgnored(r))return;let i=this.sourceFiles.sourceFileMatch(r);if(i)for(let o of i.sourceFile.getImportDeclarations())this.addPackageImportReferencesForDeclaration(t,n,r,o)}addPackageImportReferencesForDeclaration(t,n,r,i){let o=lm(this.workspacePackages,i.getModuleSpecifierValue());if(!o)return;let s=n.get(o);if(s)for(let a of gm(i)){if(a.kind!=="named"||!a.identifier)continue;let c=s.get(a.importedName);if(!c||c.size===0)continue;let l=em(a.identifier,r,this.db.config.projectRoot);l.length>0&&Rk(t,c,l)}}packageExports(){if(this.packageExportIndex)return this.packageExportIndex;let t=new Map;for(let n of this.workspacePackages){let r=new Map;for(let i of um(n))this.collectPackageExports(n,i,r,new Set);r.size>0&&t.set(n.name,r)}return this.packageExportIndex=t,t}collectPackageExports(t,n,r,i){if(i.has(n))return;i.add(n);let o=this.sourceFiles.sourceFile(n);if(o)for(let s of o.getExportDeclarations()){let a=s.getModuleSpecifierValue(),c=a?tt(this.db,n,a):n;if(!c||!c.startsWith(`${t.sourceRootRelative}/`))continue;let l=s.getNamedExports();if(l.length===0){if(s.isNamespaceExport())continue;this.collectPackageExports(t,c,r,i);continue}for(let u of l){let d=u.getNameNode().getText(),m=u.getAliasNode()?.getText()??d,f=this.indexedDefinitionByLeaf(c,d);if(!f)continue;let h=r.get(m);h||(h=new Set,r.set(m,h)),h.add(f.symbolId)}}}indexedDefinitionByLeaf(t,n){return nt(this.indexedDefinitionLeafCache,t,()=>im(this.db,t)).get(n)??null}nodeForDefinition(t){return nt(this.definitionNodeCache,t.symbolId,()=>this.definitionNodesForFile(t.relativePath).get(t.symbolId)??null)}definitionNodesForFile(t){return nt(this.fileDefinitionNodeCache,t,()=>{let n=this.sourceFiles.sourceFile(t);return n?tm(this.tsMorph,this.db,n,t):new Map})}definitionFromSymbol(t){let n=t.getDeclarations();for(let r of n){let i=r.getSourceFile(),o=Qr(this.db.config.projectRoot,i.getFilePath());if(!o||this.db.isIgnored(o))continue;let s=hr(i,r),a=rm(this.db,o,s,t.getName());if(a)return{symbol:a.symbol,file:a.relativePath,line:a.startLine}}return null}calleeMapForFile(t){let n=this.sourceFiles.sourceFile(t);if(!n)return new Map;let r=z(this.db,t).sort((o,s)=>o.startLine-s.startLine||s.endLine-o.endLine);if(r.length===0)return new Map;let i=new Map;n.forEachDescendant(o=>{if(!this.tsMorph.Node.isCallExpression(o)&&!this.tsMorph.Node.isNewExpression(o))return;let s=this.semanticCalleeForCallNode(n,r,o);s&&Ck(i,s.callerId,s.target)});for(let[o,s]of i)i.set(o,kk(s));return i}semanticCalleeForCallNode(t,n,r){let i=vk(n,hr(t,r));if(!i)return null;let o=r.getExpression(),s=o.getSymbol()??o.getType().getSymbol(),a=s?this.definitionFromSymbol(s):null;return a?{callerId:i.symbolId,target:{symbol:a.symbol,file:a.file,line:a.line}}:null}};function gm(e){let t=[],n=e.getDefaultImport();n&&t.push({identifier:n,importedName:"default",localName:n.getText(),kind:"default",isTypeOnly:e.getImportClause()?.isTypeOnly()??!1});let r=e.getNamespaceImport();r&&t.push({identifier:r,importedName:"*",localName:r.getText(),kind:"namespace",isTypeOnly:e.getImportClause()?.isTypeOnly()??!1});for(let i of e.getNamedImports()){let o=i.getNameNode(),a=i.getAliasNode()??(o.getKindName()==="Identifier"?o:null);t.push({identifier:a,importedName:o.getText(),localName:a?.getText()??o.getText(),kind:"named",isTypeOnly:i.isTypeOnly()||(e.getImportClause()?.isTypeOnly()??!1)})}return t.length===0&&t.push({identifier:null,importedName:"*",localName:null,kind:"side-effect",isTypeOnly:!1}),t}function xk(e,t,n){return{importer:e,sourcePath:t,importedName:n.importedName,localName:n.localName,kind:n.kind,isTypeOnly:!0,isUsed:!0,isTypeUsed:!0,isValueUsed:!1,references:[]}}function Ck(e,t,n){let r=e.get(t);r||(r=[],e.set(t,r)),r.push(n)}function vk(e,t){let n=null;for(let r of e)t<r.startLine||t>r.endLine||(!n||r.startLine>=n.startLine)&&(n=r);return n}function Rk(e,t,n){for(let r of t){let i=e.get(r)??[];i.push(...n),e.set(r,i)}}function kk(e){let t=new Set,n=[];for(let r of e){let i=`${r.symbol}|${r.file}|${r.line}`;t.has(i)||(t.add(i),n.push(r))}return n}function hm(e){return e.replace(/\s+/g," ").replace(/\bimport\("[^"]+"\)\./g,"").trim()}var Ea=new WeakMap;$t({name:"semantic-provider",groups:["semantic-provider"],clearAll:e=>Ea.delete(e)});function zt(e,t){let n=`${e.config.projectRoot}:typescript-workspace`,r=Ea.get(e);r||(r=new Map,Ea.set(e,r));let i=r.get(n);if(i)return i;let o=ym(e,t);return r.set(n,o),o}function ti(e,t){let n=Fo(e,t);return n?n.importUsage(t):[]}function Jt(e,t){let n=Fo(e,t.relativePath);return n?n.referencesFor(t):[]}function mt(e,t){let n=new Map,r=fu(e),i=[];for(let o of t){let s=wk(e,o,r,i);for(let a of s){if(a.file===o.relativePath||e.isIgnored(a.file))continue;let c=n.get(o.symbolId);c||(c=new Set,n.set(o.symbolId,c)),c.add(a.file)}}return i.length>0&&zt(e).availability().available&&bu(e,i),n}function wk(e,t,n,r){if(!n||!yn(t.relativePath))return Jt(e,t);let i=hu(e,t.relativePath,t.symbol,n);if(i!==null){let s=Lk(i);if(s)return s}let o=Jt(e,t);return r.push({relativePath:t.relativePath,symbol:t.symbol,projectFingerprint:n,payload:JSON.stringify(o)}),o}function Lk(e){try{return JSON.parse(e)}catch{return null}}function _o(e,t){let n=new Map;for(let r of t){let i=Fo(e,r.relativePath);if(!i)continue;let o=i.calleesFor(r);o.length>0&&n.set(r.symbolId,o)}return n}function bm(e,t){let n=Fo(e,t.relativePath);return n?n.signatureFor(t):null}function Fo(e,t){if(!yn(t))return null;let n=zt(e,t);return n.availability().available?n:null}function $o(e,t){let n=new Map;for(let r of he(e,t)){if(!r.sourcePath)continue;let i=r.localName??r.importedName;if(i&&Sm(n,i,r.sourcePath),r.kind==="namespace")for(let o of r.usedMembers)Sm(n,o,r.sourcePath)}return n}function Sm(e,t,n){let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)}function yr(e,t,n){let r=hn(e).get(n);if(!r||r.length===0)return[];if(r.length===1)return[ni(r[0])];let i=r.filter(c=>c.file===t);if(i.length>0)return i.map(ni);let o=$o(e,t),s=o.get(n);if(s)for(let c of s){let l=r.filter(u=>Wt(c,u.file));if(l.length>0)return l.map(ni)}let a=new Set;for(let c of o.values())for(let l of c)a.add(l);for(let c of a){let l=r.filter(u=>Wt(c,u.file));if(l.length>0&&l.length===r.length)return l.map(ni)}return[]}function Cm(e,t,n){let r=yr(e,t,n);if(r.length>0)return r;let i=hn(e).get(n);return!i||i.length===0?[]:i.map(ni)}function vm(e,t,n={}){let r=ao(e,t);if(!r)return[];let i=$(r.symbol);if(!i)return[];if(n.semantic!==!1){let s=Jt(e,{...r,leaf:i,parentTypeName:null,isFunctionLike:!1,isTypeLike:!1,kind:null,documentation:null,enclosingSymbol:null});if(s.length>0){let a=new Map;for(let c of s){let l=a.get(c.file)??[];l.push(c.line),a.set(c.file,l)}return xm(e,a)}}let o=new Map;for(let s of Ie(e)){let a=F(e,s);if(!a||a.indexOf(i)===-1||s!==r.relativePath&&!yr(e,s,i).some(u=>u.symbolId===r.symbolId))continue;let c=wo(e,s,i,s===r.relativePath?{excludeStartLine:r.startLine,excludeEndLine:r.endLine}:{});c.length>0&&o.set(s,c)}return xm(e,o)}function Rm(e,t){let n=new Map;for(let a of t){if(!a.leaf)continue;let c=n.get(a.leaf)??[];c.push(a),n.set(a.leaf,c)}if(n.size===0)return new Map;let r=new Set(t.map(a=>a.symbolId)),i=new Set(n.keys()),o=Xr(i),s=new Map;for(let a of Ie(e)){if(!Po(F(e,a),o))continue;let c=qd(e,a);if(c.size!==0){for(let l of c)if(n.has(l))for(let u of yr(e,a,l)){if(!r.has(u.symbolId)||a===u.relativePath)continue;let d=s.get(u.symbolId);d||(d=new Set,s.set(u.symbolId,d)),d.add(a)}}}return s}function ni(e){return{symbolId:e.symbolId,symbol:e.symbol,relativePath:e.file}}function xm(e,t){let n=[],r=new Set;for(let[i,o]of t){let s=z(e,i);for(let a of o){let c=Be(s,a),l=`${i}|${a}|${c?.symbol??""}`;r.has(l)||(r.add(l),n.push({file:i,line:a,enclosingSymbol:c?.symbol??null}))}}return n}function bn(e,t){let n=Tk(e,t);return n?_k(e,Dk(e,n.match,n.identifier)):[]}function Kt(e,t,n={}){return Ik(e,t,n).map(r=>({file:r.file,line:r.line,enclosingSymbol:r.enclosingSymbol}))}function Ik(e,t,n={}){let r=vm(e,t,{semantic:n.semantic}),i=r.length>0?km(r,"source-attribution"):km(bn(e,t),"scip-reference-chunk");return n.includeIgnored===!0?i:i.filter(o=>!e.isIgnored(o.file))}function km(e,t){return e.map(n=>({...n,provenance:t}))}function Dk(e,t,n){let r=new Map;for(let[i,o]of Pk(e,t.symbolId))r.set(i,Nk(e,i,o,t,n));return r}function Pk(e,t){let n=new Map;for(let r of Lo(e,[t])){if(e.isIgnored(r.relative_path))continue;let i=n.get(r.relative_path);i||(i=[],n.set(r.relative_path,i)),i.push({start_line:r.chunk_start,end_line:r.chunk_end})}return n}function Nk(e,t,n,r,i){let o=t===r.relativePath?{excludeStartLine:r.startLine,excludeEndLine:r.endLine}:{},s=i?wo(e,t,i,o):[];return n.flatMap(a=>Ek(s,a))}function Ek(e,t){let n=e.filter(r=>r>=t.start_line&&r<=t.end_line);return n.length>0?n:[t.start_line]}function Tk(e,t){let n=ao(e,t);return n?{match:n,identifier:$(n.symbol)||null}:null}function _k(e,t){let n=[],r=new Set;for(let[i,o]of t){let s=z(e,i);for(let a of o){let c=Be(s,a),l=`${i}|${a}|${c?.symbol??""}`;r.has(l)||(r.add(l),n.push({file:i,line:a,enclosingSymbol:c?.symbol??null}))}}return n}function je(e,t,n={}){let r=Ao(e,[t],{additive:n.additive,semantic:n.semantic}),i=n.callableOnly?(r.get(t.symbolId)??[]).filter(o=>Ce(o.symbol)):r.get(t.symbolId)??[];return typeof n.limit=="number"?i.slice(0,n.limit):i}function Lm(e,t,n={}){let r=Ak(e)?jk(e,t,{semantic:n.semantic!==!1}):Mk(e).get(t.symbolId)??[];return typeof n.limit=="number"?r.slice(0,n.limit):r}var Fk=Y("caller-rows",{clearGroups:["whole-project"]}),$k=2e4;function Ak(e){return(e.get("SELECT COUNT(*) AS count FROM global_symbols")?.count??0)>$k}function Mk(e){return Fk.get(e,()=>{let t=ut(e),n=Ao(e,t),r=new Map;for(let s of t)r.set(s.symbol,s.symbolId);let i=new Map,o=new Map;for(let s of t){let a=n.get(s.symbolId);if(!(!a||a.length===0))for(let c of a){let l=r.get(c.symbol);if(l===void 0||l===s.symbolId)continue;let u=i.get(l);u||(u=[],i.set(l,u),o.set(l,new Set));let d=`${s.symbol}|${s.relativePath}`;o.get(l).has(d)||(o.get(l).add(d),u.push({symbol:s.symbol,file:s.relativePath,source:"caller-map-inversion"}))}}return i})}function jk(e,t,n){let r=[],i=new Set,o=a=>{if(a.symbol===t.symbol)return;let c=`${a.symbol}|${a.file}`;i.has(c)||(i.add(c),r.push(a))};for(let a of bn(e,t))a.file!==t.relativePath&&o({symbol:a.enclosingSymbol??a.file,file:a.file,source:"resolved-reference"});let s=n.semantic?Ok(e,t):null;if(s)for(let a of Jt(e,s)){if(a.file===t.relativePath||e.isIgnored(a.file))continue;let c=Be(z(e,a.file),a.line);o({symbol:c?.symbol??a.file,file:a.file,source:"semantic-reference"})}return r}function Ok(e,t){return e.get(`SELECT
158
170
  d.id AS documentId,
159
171
  gs.id AS symbolId,
160
172
  gs.symbol,
@@ -173,11 +185,11 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
173
185
  LEFT JOIN chunks c ON c.document_id = der.document_id
174
186
  JOIN documents d ON d.id = COALESCE(der.document_id, c.document_id)
175
187
  WHERE gs.id = ?
176
- LIMIT 1`,t.symbolId)??null}function yo(e,t,n={}){if(t.length===0)return new Map;let i=n.additive??!1,r=[],o=[];for(let u of t)W(u.relativePath)&&Mn(e,u.relativePath)!==null?r.push(u):o.push(u);let s=new Map,a=new Map,c=u=>{for(let[d,m]of u){let p=s.get(d);p||(p=[],s.set(d,p));let h=a.get(d);h||(h=new Set,a.set(d,h));for(let g of m){let b=`${g.symbol}|${g.chunkId}`;h.has(b)||(h.add(b),p.push(g))}}};r.length>0&&c($R(e,r)),n.semantic!==!1&&c(OR(NR(e,t)));let l=i?t:o;return l.length>0&&c(MR(e,l)),s}function NR(e,t){let n=new Map,i=[],r=[];for(let s of t){if(!ii(s.relativePath))continue;let a=M(e,s.relativePath);if(!a){r.push(s);continue}let c=Qt(e,s.relativePath,a),l=_R(e,s.relativePath),u=Vl(e,s.relativePath,s.symbol,c,l);if(u!==null){let d=ER(u);if(d){d.length>0&&n.set(s.symbolId,d);continue}}i.push({def:s,contentHash:c,depsDigest:l})}if(i.length===0&&r.length===0)return n;let o=go(e,[...r,...i.map(s=>s.def)]);for(let[s,a]of o)n.set(s,a);return ln(e).availability().available&&ql(e,i.map(s=>({relativePath:s.def.relativePath,symbol:s.def.symbol,contentHash:s.contentHash,depsDigest:s.depsDigest,payload:JSON.stringify(o.get(s.def.symbolId)??[])}))),n}function ER(e){try{return JSON.parse(e)}catch{return null}}var TR=U("semantic-deps-digest",{clearGroups:["whole-project","source-file"]});function _R(e,t){return TR.get(e,t,()=>{let i=[...ne(e).get(t)??[]].sort().map(r=>`${r}:${Qt(e,r,M(e,r))}`);return As(i.join("|"))})}function $R(e,t){let n=new Map,i=FR(t,n),r=cn(e);for(let[o,s]of i){let a=Mn(e,o);if(!a)continue;let c=qs(s);for(let l of a){let u=c.get(l.line);if(!u)continue;let d=AR(e,o,r,l.calleeLeaf,l.memberAccess);d&&d.symbol!==u.symbol&&n.get(u.symbolId).push({symbol:d.symbol,file:d.file,chunkId:l.line,source:"ast-callsite"})}}return n}function FR(e,t){let n=new Map;for(let i of e){let r=n.get(i.relativePath);r?r.push(i):n.set(i.relativePath,[i]),t.set(i.symbolId,[])}for(let i of n.values())i.sort((r,o)=>r.endLine-r.startLine-(o.endLine-o.startLine));return n}function AR(e,t,n,i,r){let o=lo(t,n.get(i)??[]);return o.length===0?null:uo(e,t,o,r)}function MR(e,t){if(t.length===0)return new Map;let i=ma(t.map(m=>m.documentId)).flatMap(m=>e.all(`SELECT c.document_id, c.id AS chunk_id, c.start_line, c.end_line, m.symbol_id
188
+ LIMIT 1`,t.symbolId)??null}function Ao(e,t,n={}){if(t.length===0)return new Map;let r=n.additive??!1,i=[],o=[];for(let u of t)W(u.relativePath)&&Xn(e,u.relativePath)!==null?i.push(u):o.push(u);let s=new Map,a=new Map,c=u=>{for(let[d,m]of u){let f=s.get(d);f||(f=[],s.set(d,f));let h=a.get(d);h||(h=new Set,a.set(d,h));for(let g of m){let y=`${g.symbol}|${g.chunkId}`;h.has(y)||(h.add(y),f.push(g))}}};i.length>0&&c(Uk(e,i)),n.semantic!==!1&&c(Jk(Bk(e,t)));let l=r?t:o;return l.length>0&&c(zk(e,l)),s}function Bk(e,t){let n=new Map,r=[],i=[];for(let s of t){if(!yn(s.relativePath))continue;let a=F(e,s.relativePath);if(!a){i.push(s);continue}let c=Ye(e,s.relativePath,a),l=qk(e,s.relativePath),u=gu(e,s.relativePath,s.symbol,c,l);if(u!==null){let d=Hk(u);if(d){d.length>0&&n.set(s.symbolId,d);continue}}r.push({def:s,contentHash:c,depsDigest:l})}if(r.length===0&&i.length===0)return n;let o=_o(e,[...i,...r.map(s=>s.def)]);for(let[s,a]of o)n.set(s,a);return zt(e).availability().available&&yu(e,r.map(s=>({relativePath:s.def.relativePath,symbol:s.def.symbol,contentHash:s.contentHash,depsDigest:s.depsDigest,payload:JSON.stringify(o.get(s.def.symbolId)??[])}))),n}function Hk(e){try{return JSON.parse(e)}catch{return null}}var Vk=U("semantic-deps-digest",{clearGroups:["whole-project","source-file"]});function qk(e,t){return Vk.get(e,t,()=>{let r=[...re(e).get(t)??[]].sort().map(i=>`${i}:${Ye(e,i,F(e,i))}`);return zn(r.join("|"))})}function Uk(e,t){let n=new Map,r=Wk(t,n),i=hn(e);for(let[o,s]of r){let a=Xn(e,o);if(!a)continue;let c=la(s);for(let l of a){let u=c.get(l.line);if(!u)continue;let d=Gk(e,o,i,l.calleeLeaf,l.memberAccess);d&&d.symbol!==u.symbol&&n.get(u.symbolId).push({symbol:d.symbol,file:d.file,chunkId:l.line,source:"ast-callsite"})}}return n}function Wk(e,t){let n=new Map;for(let r of e){let i=n.get(r.relativePath);i?i.push(r):n.set(r.relativePath,[r]),t.set(r.symbolId,[])}for(let r of n.values())r.sort((i,o)=>i.endLine-i.startLine-(o.endLine-o.startLine));return n}function Gk(e,t,n,r,i){let o=Io(t,n.get(r)??[]);return o.length===0?null:Do(e,t,o,i)}function zk(e,t){if(t.length===0)return new Map;let r=Ta(t.map(m=>m.documentId)).flatMap(m=>e.all(`SELECT c.document_id, c.id AS chunk_id, c.start_line, c.end_line, m.symbol_id
177
189
  FROM mentions m
178
190
  JOIN chunks c ON m.chunk_id = c.id
179
191
  WHERE m.role != 1
180
- AND c.document_id IN (${m.map(()=>"?").join(",")})`,...m)),r=new Map;for(let m of i)r.has(m.document_id)||r.set(m.document_id,[]),r.get(m.document_id).push(m);let s=ma(i.map(m=>m.symbol_id)).flatMap(m=>e.all(`SELECT gs.id AS symbol_id, gs.symbol,
192
+ AND c.document_id IN (${m.map(()=>"?").join(",")})`,...m)),i=new Map;for(let m of r)i.has(m.document_id)||i.set(m.document_id,[]),i.get(m.document_id).push(m);let s=Ta(r.map(m=>m.symbol_id)).flatMap(m=>e.all(`SELECT gs.id AS symbol_id, gs.symbol,
181
193
  COALESCE(der.document_id, def_chunk.document_id) AS document_id
182
194
  FROM global_symbols gs
183
195
  LEFT JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
@@ -189,11 +201,11 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
189
201
  AND m.symbol_id IN (${m.map(()=>"?").join(",")})
190
202
  GROUP BY m.symbol_id
191
203
  ) def_chunk ON def_chunk.symbol_id = gs.id
192
- WHERE gs.id IN (${m.map(()=>"?").join(",")})`,...m,...m)),a=ma([...t.map(m=>m.documentId),...s.flatMap(m=>m.document_id===null?[]:[m.document_id])]),c=new Map(a.flatMap(m=>e.all(`SELECT id, relative_path FROM documents
193
- WHERE id IN (${m.map(()=>"?").join(",")})`,...m).map(p=>[p.id,p.relative_path]))),l=new Map;for(let m of s)l.has(m.symbol_id)||l.set(m.symbol_id,{symbol:m.symbol,file:m.document_id!==null?c.get(m.document_id)??"":""});let u=new Map,d=c;for(let m of t){let p=r.get(m.documentId)??[],h=new Set,g=[],b=null,S=()=>{if(b)return b;let x=d.get(m.documentId)??"",I=new Set;if(x){let L=md(e,x),C=Math.max(0,m.startLine),D=Math.min(L.length-1,m.endLine);for(let k=C;k<=D;k+=1)for(let A of L[k])I.add(A)}return b=I,I};for(let x of p){if(x.symbol_id===m.symbolId)continue;let I=l.get(x.symbol_id);if(!I)continue;if(!(x.start_line>=m.startLine&&x.end_line<=m.endLine)){if(!(x.start_line<=m.endLine&&x.end_line>=m.startLine))continue;let k=$(I.symbol);if(!k||!S().has(k))continue}let C=`${I.symbol}|${x.chunk_id}`;h.has(C)||(h.add(C),g.push({...I,chunkId:x.chunk_id,source:"scip-chunk"}))}u.set(m.symbolId,g)}return u}var Gd=500;function ma(e){let t=[...new Set(e)],n=[];for(let i=0;i<t.length;i+=Gd)n.push(t.slice(i,i+Gd));return n}function OR(e){let t=new Map;for(let[n,i]of e){let r=[];for(let o of i)r.push({symbol:o.symbol,file:o.file,chunkId:-1,source:"semantic-callee"});t.set(n,r)}return t}function Kd(e,t,n={}){let i=new Map;if(t&&t.length===0)return i;let r=j(e,{includeIgnored:!1}),o=cn(e),s=t??rt(e),a=new Set(s.map(c=>c.symbolId));return jR(e,i,r,o,a),BR(e,i,s,a),UR(e,i,r,o,a),n.semantic!==!1&&GR(i,ri(e,WR(s))),i}function jR(e,t,n,i,r){for(let o of n){if(!W(o))continue;let s=Mn(e,o);if(s)for(let a of s){let c=lo(o,i.get(a.calleeLeaf)??[]);if(!c||c.length===0)continue;let l=uo(e,o,c,a.memberAccess);l&&r.has(l.symbolId)&&l.file!==o&&pa(t,l.symbolId,o)}}}function BR(e,t,n,i){let r=VR(n);for(let o of HR(e,i))e.isIgnored(o.relative_path)||qR(o,r.get(o.symbol_id))||pa(t,o.symbol_id,o.relative_path)}function HR(e,t){return co(e,t?[...t]:void 0)}function VR(e){let t=new Map;for(let n of e)t.set(n.symbolId,{docId:n.documentId,startLine:n.startLine,endLine:n.endLine});return t}function qR(e,t){return!!t&&t.docId===e.document_id&&e.chunk_start>=t.startLine&&e.chunk_end<=t.endLine}function UR(e,t,n,i,r){for(let o of n){if(W(o)!=="rust")continue;let s=Xt(e,o,{includeRustAttributeNames:!0});if(s.length!==0)for(let{name:a}of s){let c=i.get(a);if(c)for(let l of c)r.has(l.symbolId)&&l.file!==o&&pa(t,l.symbolId,o)}}}function pa(e,t,n){let i=e.get(t);i||(i=new Set,e.set(t,i)),i.add(n)}function WR(e){return e.filter(t=>"relativePath"in t&&"symbol"in t&&"leaf"in t)}function GR(e,t){for(let[n,i]of t){let r=e.get(n);r||(r=new Set,e.set(n,r));for(let o of i)r.add(o)}}function qe(e,t,n={}){return zd(e,t,n)}function fa(e,t,n={}){return Kd(e,t,n)}function ga(e,t){return Ud(e,t)}function Jd(e,t,n={}){let i=fa(e,t,{semantic:n.semantic});return n.sourceFallback===!1?i:zR(i,ga(e,t))}function zR(e,t){let n=new Map;for(let[i,r]of e)n.set(i,new Set(r));for(let[i,r]of t){let o=n.get(i)??new Set;for(let s of r)o.add(s);n.set(i,o)}return n}function Qd(e,t,n){let i=t.identifierResolution==="strict"?oi:Vd;for(let r of t.paths)if(!(!W(r)&&!(t.includeVueSfc&&yt(r)))&&!e.isIgnored(r)&&!t.skipPath?.(r))try{let s=(c,l,u,d)=>{if(t.candidateNames&&!t.candidateNames.has(c))return;let m=t.resolveTargets?t.resolveTargets({sourceFile:r,name:c,kind:l,defaultTargets:d}):d();for(let p of m)n({sourceFile:r,name:c,target:p,occurrences:u,kind:l})},a=vt(e,r);for(let[c,l]of a)s(c,"identifier",l.length,()=>i(e,r,c));for(let c of Xt(e,r,{includeCrossLanguageDispatchNames:t.includeCrossLanguageDispatchNames,includeRustAttributeNames:t.includeRustAttributeNames})){let l=c.kind==="cross-language-dispatch"?()=>oi(e,r,c.name):()=>i(e,r,c.name);s(c.name,c.kind,c.occurrences,l)}}finally{t.afterPath?.(r)}}function q(e){return e.endLine-e.startLine+1}function Xd(e,t={}){let{scope:n,minLoc:i=1,maxLoc:r=Number.POSITIVE_INFINITY,excludeSymbol:o,excludeEntrySurfaces:s=!1,excludeTypesFiles:a=!1,excludeRootedSymbols:c=!1,requireFunctionLikeSymbol:l=!1,requireCallableSymbol:u=!1,excludeRustTraitImplMembers:d=!1,includeSuppressed:m=!1,sortByLocDesc:p=!1}=t,h=[];for(let g of Ei(e,n)){let b=g.relativePath;if(e.isIgnored(b)||s&&we(e,b)||!KR(g,{requireFunctionLikeSymbol:l,requireCallableSymbol:u})||o!==void 0&&g.symbol===o)continue;let S=q(g);S<i||S>r||a&&JR(b)||c&&ie(e,g.symbol,b)||d&&Br(g.symbol)||K(b)!=="test"&&(Vn(g.symbol)||!m&&Pr(e,b,g.startLine)||h.push(g))}return p?h.sort((g,b)=>q(b)-q(g)):h}function KR(e,t){return t.requireCallableSymbol?xe(e.symbol):t.requireFunctionLikeSymbol?se(e.symbol):e.isFunctionLike}function JR(e){return(e.split("/").pop()??"").includes("types")}var T=class{constructor(t){this.db=t}db;scopedDefinitions(t){return Ei(this.db,t)}definitionsForFile(t){return G(this.db,t)}productionCallableDefinitions(t={}){return Xd(this.db,t)}calleeMap(t,n={}){return yo(this.db,t,n)}crossFileCallerMap(t,n={}){return fa(this.db,t,n)}sourceFallbackCallerFiles(t){return ga(this.db,t)}callerFileMap(t,n={}){return Jd(this.db,t,n)}frameworkReferencedSymbolIds(t){let n=new Map;for(let r of t){if(!r.leaf)continue;let o=n.get(r.leaf)??[];o.push(r.symbolId),n.set(r.leaf,o)}let i=new Set;for(let r of j(this.db,{includeIgnored:!1}))if(W(r)==="rust")for(let{name:o}of Xt(this.db,r,{includeRustAttributeNames:!0}))for(let s of n.get(o)??[])i.add(s);return i}symbolsWithNonSelfCallees(t,n={}){if(t.length===0)return new Set;let i=new Map(t.map(o=>[o.symbolId,o.symbol])),r=this.calleeMap(t,n);return new Set([...r.entries()].filter(([o,s])=>{let a=i.get(o);return s.some(c=>c.symbol!==a)}).map(([o])=>o))}fileDependencyGraph(t){return ne(this.db,t)}fileKind(t){return K(t)}hasSuppressionComment(t){return Pr(this.db,t.relativePath,t.startLine)}sourceFiles(){return De(this.db)}scanSourceReferences(t,n){Qd(this.db,t,n)}callableSignature(t){let n=oe(this.db,t.relativePath)?.callables.find(i=>i.startLine===t.startLine&&i.endLine===t.endLine);return n?{paramCount:n.paramCount}:null}};function ha(e,t){let n=B(e,t);if(!n)return[];let i=$(n.symbol),o=new T(e).definitionsForFile(n.relativePath).filter(c=>xe(c.symbol)),s=o.filter(c=>c.parentTypeName===i||c.symbol.includes(i));return(s.length>0?s:XR(QR(n.relativePath))===i?o.filter(c=>c.symbol.includes("<invalid-global-code>")):[]).map(c=>({startLine:c.startLine,endLine:c.endLine,name:$(c.symbol)}))}function XR(e){return e.replace(/\.[^.]+$/,"")}function ba(e,t,n={}){let i=B(e,t);if(!i)return[];let o=!se(i.symbol)&&!e.isIgnored(i.relativePath)?[{relativePath:i.relativePath,line:i.startLine}]:[],s=Bt(e,i,{semantic:n.semantic}).map(u=>({relativePath:u.file,line:u.line})),a=YR(e,i),c=new Set,l=[];for(let u of[...o,...s,...a]){let d=`${u.relativePath}:${u.line}`;c.has(d)||(c.add(d),l.push(u))}return l}function YR(e,t){if(!t.relativePath.endsWith(".rb"))return[];let n=ZR(t.symbol);if(n.length===0)return[];let i=[];for(let r of j(e,{extensions:[".rb"],includeIgnored:!1})){let o=M(e,r);if(!o)continue;let s=o.split(`
194
- `);for(let a=0;a<s.length;a++){let c=s[a]??"";n.some(l=>new RegExp(`@${l}\\b|\\b${l}:`).test(c))&&i.push({relativePath:r,line:a})}}return i}function ZR(e){let n=(e.split(":").pop()??e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/[^A-Za-z0-9_]+/g,"_").toLowerCase().replace(/^_+|_+$/g,""),i=n.split("_").filter(Boolean),r=new Set;return n&&r.add(n),i.length>=1&&r.add(i[i.length-1]),i.length>=2&&r.add(i.slice(-2).join("_")),[...r]}function Wi(e,t,n={}){let i=B(e,t);if(!i)return{definitions:[],referencedBy:[]};let r=e.get("SELECT display_name, documentation FROM global_symbols WHERE id = ?",i.symbolId),o=Zt(r?.documentation??null),s=e.isIgnored(i.relativePath)?[]:[{relativePath:i.relativePath,startLine:i.startLine,endLine:i.endLine,signature:tk(o,r?.display_name??null,i.symbol),source:ek(e,i.relativePath,i.startLine,i.endLine)}],a=Bt(e,i,{semantic:n.semantic}).map(c=>({relativePath:c.file,line:c.line,enclosingSymbol:c.enclosingSymbol,enclosingShort:c.enclosingSymbol?y(c.enclosingSymbol):"(top-level)"}));return{definitions:s,referencedBy:a}}function ek(e,t,n,i){let r=M(e,t);if(!r)return null;let s=r.split(`
195
- `).slice(n,i+1).join(`
196
- `).trimEnd();return s.length>0?s:null}function tk(e,t,n){let i=Yt(e);if(i&&!nk(i))return i;let r=(t??"").trim();return r?se(n)&&!r.endsWith("()")?`${r}()`:r:y(n)}function nk(e){return e.startsWith("undefined")||e.includes("|")||e.includes("```")}function Gi(e,t){let n=Ie(e,t);return n?e.all(`SELECT DISTINCT d2.relative_path
204
+ WHERE gs.id IN (${m.map(()=>"?").join(",")})`,...m,...m)),a=Ta([...t.map(m=>m.documentId),...s.flatMap(m=>m.document_id===null?[]:[m.document_id])]),c=new Map(a.flatMap(m=>e.all(`SELECT id, relative_path FROM documents
205
+ WHERE id IN (${m.map(()=>"?").join(",")})`,...m).map(f=>[f.id,f.relative_path]))),l=new Map;for(let m of s)l.has(m.symbol_id)||l.set(m.symbol_id,{symbol:m.symbol,file:m.document_id!==null?c.get(m.document_id)??"":""});let u=new Map,d=c;for(let m of t){let f=i.get(m.documentId)??[],h=new Set,g=[],y=null,S=()=>{if(y)return y;let C=d.get(m.documentId)??"",k=new Set;if(C){let D=Ud(e,C),x=Math.max(0,m.startLine),I=Math.min(D.length-1,m.endLine);for(let M=x;M<=I;M+=1)for(let L of D[M])k.add(L)}return y=k,k};for(let C of f){if(C.symbol_id===m.symbolId)continue;let k=l.get(C.symbol_id);if(!k)continue;if(!(C.start_line>=m.startLine&&C.end_line<=m.endLine)){if(!(C.start_line<=m.endLine&&C.end_line>=m.startLine))continue;let M=$(k.symbol);if(!M||!S().has(M))continue}let x=`${k.symbol}|${C.chunk_id}`;h.has(x)||(h.add(x),g.push({...k,chunkId:C.chunk_id,source:"scip-chunk"}))}u.set(m.symbolId,g)}return u}var wm=500;function Ta(e){let t=[...new Set(e)],n=[];for(let r=0;r<t.length;r+=wm)n.push(t.slice(r,r+wm));return n}function Jk(e){let t=new Map;for(let[n,r]of e){let i=[];for(let o of r)i.push({symbol:o.symbol,file:o.file,chunkId:-1,source:"semantic-callee"});t.set(n,i)}return t}function Im(e,t,n={}){let r=new Map;if(t&&t.length===0)return r;let i=j(e,{includeIgnored:!1}),o=hn(e),s=t??ut(e),a=new Set(s.map(c=>c.symbolId));return Kk(e,r,i,o,a),Xk(e,r,s,a),ew(e,r,i,o,a),n.semantic!==!1&&nw(r,mt(e,tw(s))),r}function Kk(e,t,n,r,i){for(let o of n){if(!W(o))continue;let s=Xn(e,o);if(s)for(let a of s){let c=Io(o,r.get(a.calleeLeaf)??[]);if(!c||c.length===0)continue;let l=Do(e,o,c,a.memberAccess);l&&i.has(l.symbolId)&&l.file!==o&&_a(t,l.symbolId,o)}}}function Xk(e,t,n,r){let i=Yk(n);for(let o of Qk(e,r))e.isIgnored(o.relative_path)||Zk(o,i.get(o.symbol_id))||_a(t,o.symbol_id,o.relative_path)}function Qk(e,t){return Lo(e,t?[...t]:void 0)}function Yk(e){let t=new Map;for(let n of e)t.set(n.symbolId,{docId:n.documentId,startLine:n.startLine,endLine:n.endLine});return t}function Zk(e,t){return!!t&&t.docId===e.document_id&&e.chunk_start>=t.startLine&&e.chunk_end<=t.endLine}function ew(e,t,n,r,i){for(let o of n){if(W(o)!=="rust")continue;let s=sn(e,o,{includeRustAttributeNames:!0});if(s.length!==0)for(let{name:a}of s){let c=r.get(a);if(c)for(let l of c)i.has(l.symbolId)&&l.file!==o&&_a(t,l.symbolId,o)}}}function _a(e,t,n){let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)}function tw(e){return e.filter(t=>"relativePath"in t&&"symbol"in t&&"leaf"in t)}function nw(e,t){for(let[n,r]of t){let i=e.get(n);i||(i=new Set,e.set(n,i));for(let o of r)i.add(o)}}function Ue(e,t,n={}){return Lm(e,t,n)}function Fa(e,t,n={}){return Im(e,t,n)}function $a(e,t){return Rm(e,t)}function Dm(e,t,n={}){let r=Fa(e,t,{semantic:n.semantic});return n.sourceFallback===!1?r:Mo(r,$a(e,t))}function Mo(e,t){let n=new Map;for(let[r,i]of e)n.set(r,new Set(i));for(let[r,i]of t){let o=n.get(r)??new Set;for(let s of i)o.add(s);n.set(r,o)}return n}function Pm(e,t,n){let r=t.identifierResolution==="strict"?yr:Cm,i=t.candidateNames?Xr(t.candidateNames):null;for(let o of t.paths)if(!(!W(o)&&!(t.includeVueSfc&&Rt(o)))&&!e.isIgnored(o)&&!t.skipPath?.(o))try{if(i&&!Po(F(e,o),i))continue;let a=(l,u,d,m)=>{if(t.candidateNames&&!t.candidateNames.has(l))return;let f=t.resolveTargets?t.resolveTargets({sourceFile:o,name:l,kind:u,defaultTargets:m}):m();for(let h of f)n({sourceFile:o,name:l,target:h,occurrences:d,kind:u})},c=It(e,o);for(let[l,u]of c)a(l,"identifier",u.length,()=>r(e,o,l));for(let l of sn(e,o,{includeCrossLanguageDispatchNames:t.includeCrossLanguageDispatchNames,includeRustAttributeNames:t.includeRustAttributeNames})){let u=l.kind==="cross-language-dispatch"?()=>yr(e,o,l.name):()=>r(e,o,l.name);a(l.name,l.kind,l.occurrences,u)}}finally{t.afterPath?.(o)}}function q(e){return e.endLine-e.startLine+1}function Nm(e,t={}){let{scope:n,minLoc:r=1,maxLoc:i=Number.POSITIVE_INFINITY,excludeSymbol:o,excludeEntrySurfaces:s=!1,excludeTypesFiles:a=!1,excludeRootedSymbols:c=!1,requireFunctionLikeSymbol:l=!1,requireCallableSymbol:u=!1,excludeRustTraitImplMembers:d=!1,includeSuppressed:m=!1,sortByLocDesc:f=!1}=t,h=[];for(let g of qr(e,n)){let y=g.relativePath;if(e.isIgnored(y)||s&&De(e,y)||!rw(g,{requireFunctionLikeSymbol:l,requireCallableSymbol:u})||o!==void 0&&g.symbol===o)continue;let S=q(g);S<r||S>i||a&&iw(y)||c&&ie(e,g.symbol,y)||d&&ro(g.symbol)||J(y)!=="test"&&(tr(g.symbol)||!m&&zi(e,y,g.startLine)||h.push(g))}return f?h.sort((g,y)=>q(y)-q(g)):h}function rw(e,t){return t.requireCallableSymbol?Ce(e.symbol):t.requireFunctionLikeSymbol?ce(e.symbol):e.isFunctionLike}function iw(e){return(e.split("/").pop()??"").includes("types")}var T=class{constructor(t){this.db=t}db;scopedDefinitions(t){return qr(this.db,t)}definitionsForFile(t){return z(this.db,t)}productionCallableDefinitions(t={}){return Nm(this.db,t)}calleeMap(t,n={}){return Ao(this.db,t,n)}crossFileCallerMap(t,n={}){return Fa(this.db,t,n)}sourceFallbackCallerFiles(t){return $a(this.db,t)}callerFileMap(t,n={}){return Dm(this.db,t,n)}frameworkReferencedSymbolIds(t){let n=new Map;for(let i of t){if(!i.leaf)continue;let o=n.get(i.leaf)??[];o.push(i.symbolId),n.set(i.leaf,o)}let r=new Set;for(let i of j(this.db,{includeIgnored:!1}))if(W(i)==="rust")for(let{name:o}of sn(this.db,i,{includeRustAttributeNames:!0}))for(let s of n.get(o)??[])r.add(s);return r}symbolsWithNonSelfCallees(t,n={}){if(t.length===0)return new Set;let r=new Map(t.map(o=>[o.symbolId,o.symbol])),i=this.calleeMap(t,n);return new Set([...i.entries()].filter(([o,s])=>{let a=r.get(o);return s.some(c=>c.symbol!==a)}).map(([o])=>o))}fileDependencyGraph(t){return re(this.db,t)}fileKind(t){return J(t)}hasSuppressionComment(t){return zi(this.db,t.relativePath,t.startLine)}sourceFiles(){return Ie(this.db)}scanSourceReferences(t,n){Pm(this.db,t,n)}callableSignature(t){let n=ae(this.db,t.relativePath)?.callables.find(r=>r.startLine===t.startLine&&r.endLine===t.endLine);return n?{paramCount:n.paramCount}:null}};function Aa(e,t){let n=B(e,t);if(!n)return[];let r=$(n.symbol),o=new T(e).definitionsForFile(n.relativePath).filter(c=>Ce(c.symbol)),s=o.filter(c=>c.parentTypeName===r||c.symbol.includes(r));return(s.length>0?s:sw(ow(n.relativePath))===r?o.filter(c=>c.symbol.includes("<invalid-global-code>")):[]).map(c=>({startLine:c.startLine,endLine:c.endLine,name:$(c.symbol)}))}function sw(e){return e.replace(/\.[^.]+$/,"")}function Ma(e,t,n={}){let r=B(e,t);if(!r)return[];let o=!ce(r.symbol)&&!e.isIgnored(r.relativePath)?[{relativePath:r.relativePath,line:r.startLine}]:[],s=Kt(e,r,{semantic:n.semantic}).map(u=>({relativePath:u.file,line:u.line})),a=aw(e,r),c=new Set,l=[];for(let u of[...o,...s,...a]){let d=`${u.relativePath}:${u.line}`;c.has(d)||(c.add(d),l.push(u))}return l}function aw(e,t){if(!t.relativePath.endsWith(".rb"))return[];let n=cw(t.symbol);if(n.length===0)return[];let r=[];for(let i of j(e,{extensions:[".rb"],includeIgnored:!1})){let o=F(e,i);if(!o)continue;let s=o.split(`
206
+ `);for(let a=0;a<s.length;a++){let c=s[a]??"";n.some(l=>new RegExp(`@${l}\\b|\\b${l}:`).test(c))&&r.push({relativePath:i,line:a})}}return r}function cw(e){let n=(e.split(":").pop()??e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/[^A-Za-z0-9_]+/g,"_").toLowerCase().replace(/^_+|_+$/g,""),r=n.split("_").filter(Boolean),i=new Set;return n&&i.add(n),r.length>=1&&i.add(r[r.length-1]),r.length>=2&&i.add(r.slice(-2).join("_")),[...i]}function ri(e,t,n={}){let r=B(e,t);if(!r)return{definitions:[],referencedBy:[]};let i=e.get("SELECT display_name, documentation FROM global_symbols WHERE id = ?",r.symbolId),o=cn(i?.documentation??null),s=e.isIgnored(r.relativePath)?[]:[{relativePath:r.relativePath,startLine:r.startLine,endLine:r.endLine,signature:uw(o,i?.display_name??null,r.symbol),source:lw(e,r.relativePath,r.startLine,r.endLine)}],a=Kt(e,r,{semantic:n.semantic}).map(c=>({relativePath:c.file,line:c.line,enclosingSymbol:c.enclosingSymbol,enclosingShort:c.enclosingSymbol?b(c.enclosingSymbol):"(top-level)"}));return{definitions:s,referencedBy:a}}function lw(e,t,n,r){let i=F(e,t);if(!i)return null;let s=i.split(`
207
+ `).slice(n,r+1).join(`
208
+ `).trimEnd();return s.length>0?s:null}function uw(e,t,n){let r=an(e);if(r&&!dw(r))return r;let i=(t??"").trim();return i?ce(n)&&!i.endsWith("()")?`${i}()`:i:b(n)}function dw(e){return e.startsWith("undefined")||e.includes("|")||e.includes("```")}function ii(e,t){let n=Ee(e,t);return n?e.all(`SELECT DISTINCT d2.relative_path
197
209
  FROM mentions m
198
210
  JOIN chunks c ON m.chunk_id = c.id
199
211
  JOIN documents d1 ON c.document_id = d1.id
@@ -209,7 +221,7 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
209
221
  WHERE d1.relative_path = ?
210
222
  AND d2.relative_path <> d1.relative_path
211
223
  AND ${e.localSymbolPredicate}
212
- ORDER BY d2.relative_path`,n).filter(r=>!e.isIgnored(r.relative_path)).map(r=>({relativePath:r.relative_path})):[]}function zi(e,t){let n=Ie(e,t);return n?e.all(`SELECT DISTINCT d1.relative_path
224
+ ORDER BY d2.relative_path`,n).filter(i=>!e.isIgnored(i.relative_path)).map(i=>({relativePath:i.relative_path})):[]}function oi(e,t){let n=Ee(e,t);return n?e.all(`SELECT DISTINCT d1.relative_path
213
225
  FROM mentions m
214
226
  JOIN chunks c ON m.chunk_id = c.id
215
227
  JOIN documents d1 ON c.document_id = d1.id
@@ -224,9 +236,9 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
224
236
  JOIN documents d2 ON sym_def.document_id = d2.id
225
237
  WHERE d2.relative_path = ?
226
238
  AND d1.relative_path != ?
227
- ORDER BY d1.relative_path`,n,n).filter(r=>!e.isIgnored(r.relative_path)).map(r=>({relativePath:r.relative_path})):[]}function Ki(e,t){let n=Kn(e,t);if(n.length===0)return{files:[],symbols:[],dependsOn:[],dependedOnBy:[]};let i=n.map(()=>"?").join(", "),o=e.all(`SELECT relative_path FROM documents
228
- WHERE relative_path IN (${i})
229
- ORDER BY relative_path`,...n).map(d=>d.relative_path).filter(d=>!e.isIgnored(d)),s=Hr(e,o,{onlyDocumented:!0,sort:!0}).map(({relativePath:d,...m})=>m),c=e.all(`SELECT DISTINCT d2.relative_path
239
+ ORDER BY d1.relative_path`,n,n).filter(i=>!e.isIgnored(i.relative_path)).map(i=>({relativePath:i.relative_path})):[]}function si(e,t){let n=ar(e,t);if(n.length===0)return{files:[],symbols:[],dependsOn:[],dependedOnBy:[]};let r=n.map(()=>"?").join(", "),o=e.all(`SELECT relative_path FROM documents
240
+ WHERE relative_path IN (${r})
241
+ ORDER BY relative_path`,...n).map(d=>d.relative_path).filter(d=>!e.isIgnored(d)),s=io(e,o,{onlyDocumented:!0,sort:!0}).map(({relativePath:d,...m})=>m),c=e.all(`SELECT DISTINCT d2.relative_path
230
242
  FROM mentions m
231
243
  JOIN chunks c ON m.chunk_id = c.id
232
244
  JOIN documents d1 ON c.document_id = d1.id
@@ -239,8 +251,8 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
239
251
  GROUP BY m2.symbol_id
240
252
  ) sym_def ON sym_def.symbol_id = gs.id
241
253
  JOIN documents d2 ON sym_def.document_id = d2.id
242
- WHERE d1.relative_path IN (${i})
243
- AND d2.relative_path NOT IN (${i})
254
+ WHERE d1.relative_path IN (${r})
255
+ AND d2.relative_path NOT IN (${r})
244
256
  AND ${e.localSymbolPredicate}
245
257
  ORDER BY d2.relative_path`,...n,...n).map(d=>d.relative_path).filter(d=>!e.isIgnored(d)),u=e.all(`SELECT DISTINCT d1.relative_path
246
258
  FROM mentions m
@@ -255,9 +267,9 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
255
267
  GROUP BY m2.symbol_id
256
268
  ) sym_def ON sym_def.symbol_id = gs.id
257
269
  JOIN documents d2 ON sym_def.document_id = d2.id
258
- WHERE d2.relative_path IN (${i})
259
- AND d1.relative_path NOT IN (${i})
260
- ORDER BY d1.relative_path`,...n,...n).map(d=>d.relative_path).filter(d=>!e.isIgnored(d));return{files:o,symbols:s,dependsOn:c,dependedOnBy:u}}function Ji(e,t){let n=Kn(e,t);return n.length===0?[]:ok([...ik(e,n),...rk(e,n)]).filter(i=>!e.isIgnored(i.relative_path)).map(sk)}function ik(e,t){let n=t.map(()=>"?").join(", ");return e.all(`SELECT DISTINCT d1.relative_path, gs.symbol
270
+ WHERE d2.relative_path IN (${r})
271
+ AND d1.relative_path NOT IN (${r})
272
+ ORDER BY d1.relative_path`,...n,...n).map(d=>d.relative_path).filter(d=>!e.isIgnored(d));return{files:o,symbols:s,dependsOn:c,dependedOnBy:u}}function ai(e,t){let n=ar(e,t);return n.length===0?[]:fw([...mw(e,n),...pw(e,n)]).filter(r=>!e.isIgnored(r.relative_path)).map(gw)}function mw(e,t){let n=t.map(()=>"?").join(", ");return e.all(`SELECT DISTINCT d1.relative_path, gs.symbol
261
273
  FROM mentions m
262
274
  JOIN chunks c ON m.chunk_id = c.id
263
275
  JOIN documents d1 ON c.document_id = d1.id
@@ -284,7 +296,7 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
284
296
  AND m.role != 1
285
297
  AND ${e.localSymbolPredicate}
286
298
  ${e.pathExclusionsFor("d1")}
287
- ORDER BY d1.relative_path`,...t,...t,...t)}function rk(e,t){let n=new T(e);return t.flatMap(i=>n.definitionsForFile(i).filter(r=>xe(r.symbol)).map(r=>({relative_path:i,symbol:r.symbol})))}function ok(e){let t=new Set;return e.filter(n=>{let i=`${n.relative_path}|${n.symbol}`;return t.has(i)?!1:(t.add(i),!0)})}function sk(e){return{consumer:e.relative_path,symbol:e.symbol,shortName:y(e.symbol)}}var Qi=new WeakMap;function Zd(e,t){let n=W(t);return n==="rust"?dk(e,t):n==="typescript"||n==="tsx"||n==="javascript"?ck(e,t):[]}var ak=new Set(["describe","it","test","fdescribe","fit","xdescribe","xit","beforeEach","afterEach","beforeAll","afterAll","before","after","suite","bench","benchmark"]);function ck(e,t){let n=me(e,t);if(!n)return[];let i=Qi.get(n);if(i)return i;let r=!1,o=n.rootNode;for(let a of o.namedChildren){if(a.type!=="expression_statement")continue;let c=a.namedChild(0);if(!c||c.type!=="call_expression")continue;let l=c.namedChild(0);if(!l)continue;let u=l.type==="member_expression"?l.namedChild(l.namedChildCount-1)?.text:l.text;if(u&&ak.has(u)){r=!0;break}}let s=[];r&&s.push({startLine:0,endLine:o.endPosition.row,reason:"TS/JS test file (describe/it/test at top level)"});for(let a of o.namedChildren){let c=null,l=null;if(a.type==="function_declaration")c=a.namedChild(0)?.text??null,l=a;else if(a.type==="export_statement"){let u=a.namedChild(0);u?.type==="function_declaration"&&(c=u.namedChild(0)?.text??null,l=u)}else if(a.type==="lexical_declaration"){let u=a.namedChild(0);if(u?.type==="variable_declarator"){let d=u.namedChild(0)?.text,m=u.namedChild(1);d&&(m?.type==="arrow_function"||m?.type==="function_expression")&&(c=d,l=u)}}c&&/^use[A-Z]/.test(c)&&l&&s.push({startLine:l.startPosition.row,endLine:l.endPosition.row,reason:"React custom hook (use*)"})}return s.push(...em(n,new Set(["function_declaration","method_definition","class_declaration","interface_declaration","type_alias_declaration","enum_declaration","variable_declarator","export_statement"]),new Set(["comment"]))),Qi.set(n,s),s}var lk=/scip-query[\s:-]*ignore[\s:-]*(?:dead(?:-code)?|stale)?/i;function uk(e){return lk.test(e)}function em(e,t,n){let i=[],r=o=>{if(t.has(o.type)&&o.parent){let a=o.parent.children,c=-1;for(let l=0;l<a.length;l+=1)if(a[l].startIndex===o.startIndex&&a[l].type===o.type){c=l;break}if(c>0)for(let l=c-1;l>=0;l-=1){let u=a[l];if(n.has(u.type)){if(uk(u.text)){i.push({startLine:o.startPosition.row,endLine:o.endPosition.row,reason:"scip-query suppression comment"});break}continue}if(!(u.type==="attribute_item"||u.type==="inner_attribute_item"))break}}for(let s of o.namedChildren)r(s)};return r(e.rootNode),i}function dk(e,t){let n=me(e,t);if(!n)return[];let i=Qi.get(n);if(i)return i;let r=[],o=mk(n);return o?(Qi.set(n,o),o):(tm(n.rootNode,r,!1,!1),r.push(...em(n,new Set(["function_item","function_signature_item","struct_item","enum_item","union_item","impl_item","mod_item","static_item","const_item"]),new Set(["line_comment","block_comment"]))),r.push(...xk(n.rootNode)),Qi.set(n,r),r)}function mk(e){return Ck(e.rootNode)?[{startLine:0,endLine:e.rootNode.endPosition.row,reason:"generated file (@generated header)"}]:null}function tm(e,t,n,i){let r=n,o=i;e.type==="trait_item"&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"trait declaration body (dynamic dispatch)"}),e.type==="impl_item"&&e.childForFieldName("trait")&&(o=!0,t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"trait impl block (dynamic dispatch)"})),e.type==="function_item"||e.type==="function_signature_item"?pk(e,t,n,i):i&&Sk(e)?t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"trait impl associated item (dynamic dispatch)"}):e.type==="struct_item"||e.type==="enum_item"||e.type==="union_item"?fk(e,t,n):e.type==="mod_item"&&ya(e).some(s=>/#\[\s*cfg\s*\(\s*test\s*\)/.test(s))&&(r=!0);for(let s of e.namedChildren)tm(s,t,r,o)}function pk(e,t,n,i){let r=ya(e),o=null;i?o="trait impl method (dynamic dispatch)":n&&(o="inside #[cfg(test)] mod");for(let s of r){let a=hk(s);if(a){o=a;break}if(nm(s)){o="#[allow(dead_code)]";break}}o&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:o})}function fk(e,t,n){let i=ya(e),r=e.namedChildren.find(o=>o.type==="type_identifier")?.text;i.some(yk)&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"#[derive(<reflective>)] \u2014 fields accessed via macro/reflection",containerName:r}),i.some(nm)&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"#[allow(dead_code)]",containerName:r}),n&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"inside #[cfg(test)] mod",containerName:r})}function ya(e){let t=e.parent;if(!t)return[];let n=t.children,i=-1;for(let o=0;o<n.length;o+=1)if(n[o].startIndex===e.startIndex&&n[o].type===e.type){i=o;break}if(i<=0)return[];let r=[];for(let o=i-1;o>=0;o-=1){let s=n[o];if(s.type==="attribute_item"||s.type==="inner_attribute_item")r.push(s.text);else{if(s.type==="line_comment"||s.type==="block_comment")continue;break}}return r}var gk=[{re:/#\[\s*tauri::command\b/,reason:"#[tauri::command]"},{re:/#\[\s*command\b/,reason:"#[command]"},{re:/#\[\s*test\b/,reason:"#[test]"},{re:/#\[\s*bench\b/,reason:"#[bench]"},{re:/#\[\s*tokio::test\b/,reason:"#[tokio::test]"},{re:/#\[\s*async_std::test\b/,reason:"#[async_std::test]"},{re:/#\[\s*wasm_bindgen\b/,reason:"#[wasm_bindgen]"},{re:/#\[\s*no_mangle\b/,reason:"#[no_mangle]"},{re:/#\[\s*napi\b/,reason:"#[napi]"},{re:/#\[\s*pyfunction\b/,reason:"#[pyfunction]"},{re:/#\[\s*pymethod\b/,reason:"#[pymethod]"},{re:/#\[\s*pyo3\b/,reason:"#[pyo3]"},{re:/#\[\s*cfg\s*\(\s*test\s*\)/,reason:"#[cfg(test)]"},{re:/#\[\s*doc\s*\(\s*hidden\s*\)/,reason:"#[doc(hidden)]"}];function hk(e){return gk.find(({re:t})=>t.test(e))?.reason??null}var bk=[/\bSerialize\b/,/\bDeserialize\b/,/\bFromRow\b/,/\bsqlx::FromRow\b/,/\bDeriveEntityModel\b/,/\bIntoSchema\b/,/\bToSchema\b/,/\bDeriveValueType\b/,/\bError\b/,/\bthiserror::Error\b/];function yk(e){return/#\[\s*derive\s*\(/.test(e)?bk.some(t=>t.test(e)):!1}function nm(e){return/#\[\s*allow\s*\(\s*dead_code\s*\)/.test(e)}function Sk(e){return e.type==="const_item"||e.type==="type_item"||e.type==="static_item"||e.type==="associated_type"}function xk(e){let t=Rk(e);if(t.size===0)return[];let n=[];for(let i of e.descendantsOfType("mod_item")){let r=i.childForFieldName("name")?.text;r&&t.has(r)&&n.push({startLine:i.startPosition.row,endLine:i.endPosition.row,reason:'serde `with = "..."` module \u2014 body invoked via reflection',containerName:r})}return n}function Ck(e){for(let t=0;t<Math.min(e.namedChildCount,12);t+=1){let n=e.namedChild(t);if(!n||n.type!=="line_comment"&&n.type!=="block_comment")break;if(/@generated\b/.test(n.text)||/This file is .*generated\b/i.test(n.text)||/Code generated by/i.test(n.text)||/Generated by:\s*https?:\/\/openapi-generator/i.test(n.text)||/openapi-generator/i.test(n.text)&&/Generated by/i.test(n.text))return!0}return!1}var vk=/^#!?\[\s*serde\s*\(/,Yd=/\bwith\s*=\s*"([^"]+)"/g;function Rk(e){let t=new Set;for(let n of e.descendantsOfType("attribute_item")){if(!vk.test(n.text))continue;Yd.lastIndex=0;let i;for(;(i=Yd.exec(n.text))!==null;){let r=i[1],o=r.split("::").pop()??r;o&&t.add(o)}}return t}function im(e){let t=new Map,n=i=>{let r=t.get(i);if(r)return r;let o=Zd(e,i);return r={ranges:o.map(s=>({startLine:s.startLine,endLine:s.endLine})),containers:new Set(o.map(s=>s.containerName).filter(s=>!!s))},t.set(i,r),r};return(i,r,o,s)=>{let a=n(i);for(let c of a.ranges)if(r>=c.startLine&&r<=c.endLine)return!0;if(s&&a.containers.has(s))return!0;for(let c of qr(o))if(a.containers.has(c))return!0;return!1}}function Sa(e,t={}){Ts(e,{groups:t.semanticProvider===!0?["whole-project","semantic-provider"]:["whole-project"]})}function xa(e,t,n={}){Ts(e,{groups:n.definitions===!0?["source-file","definition-catalog"]:["source-file"],file:t.replace(/\\/g,"/")})}function om(e,t){return t.isIgnoredPath(e.relativePath)?st("ignored-file"):Tt(e.symbol)?st("module-like-symbol"):rm(e.symbol)?!e.isFunctionLike&&e.enclosingSymbol&&rm(e.enclosingSymbol)?st("nested-non-callable-value"):!t.includeTests&&!Ca(e.relativePath)?st("test-file"):!t.includeTests&&t.isExcludedRegion(e.relativePath,e.startLine,e.symbol,e.parentTypeName)?st("excluded-file-region"):Br(e.symbol)?st("rust-trait-impl-member"):Vn(e.symbol)?st("rust-test-module"):!t.includeMembers&&!kk(e)?st("member"):e.endLine-e.startLine+1<t.minLoc?st("below-min-loc"):{accepted:!0}:st("non-value-symbol")}function Ca(e){return K(e)!=="test"}function st(e){return{accepted:!1,rejectionReason:e}}function rm(e){return se(e)||e.endsWith("().")||e.endsWith(".")}function kk(e){return xe(e.symbol)||qr(e.symbol).length===0}function So(e,t){return q(e)-q(t)||e.relativePath.localeCompare(t.relativePath)}function Ue(e,t){return typeof t!="number"||t<=0||e.length<=t?e:e.slice(0,t)}function si(e){let t=new Set,n=[];for(let i of e){let r=`${i.symbol}|${i.file}`;t.has(r)||(t.add(r),n.push(i))}return n}function sm(){return new Map}function am(e,t,n){let i=new Map;for(let r of pd(e,n))e.isIgnored(r.relative_path)||t.has(r.relative_path)||xo(i,r.symbol_id,r.relative_path,r.ref_count,"scip-mention");return i}function cm(e,t,n){let i=new Set;for(let r of fd(e,t))e.isIgnored(r.relative_path)||n.has(r.relative_path)||i.add(r.symbol_id);return i}function va(e,t){let n=e.get(t);if(!n)return!1;for(let i of n.values())if(i.occurrences>0)return!0;return!1}function lm(e){return e?.occurrences??0}function xo(e,t,n,i,r="source-fallback"){if(i<=0)return;let o=dm(e,t,n);o.occurrences+=i,o.sources.add(r)}function um(e,t,n,i,r){if(i<=0)return;let o=dm(e,t,n);o.occurrences=Math.max(i,o.occurrences),o.sources.add(r)}function dm(e,t,n){let i=e.get(t);i||(i=new Map,e.set(t,i));let r=i.get(n);return r||(r={occurrences:0,sources:new Set},i.set(n,r)),r}function Rt(e,t={}){let{scope:n,minLoc:i=1,includeTests:r=!1,skipBarrels:o=!1,includeMembers:s=!1,deadCodeOnly:a=!1,scanLimit:c,semantic:l=!0}=t,u=Ue(wk(e,{scope:n,minLoc:i,includeTests:r,includeMembers:s}),c),d=o?new Set(ld(e)):new Set,m=a?sm():am(e,d,u.map(S=>S.symbolId)),p=a?cm(e,u.map(S=>S.symbolId),d):new Set,h=a?u.filter(S=>!p.has(S.symbolId)):u;a?Nk(e,h,m,d):Pk(e,h,m,d);let g=a?h.filter(S=>!va(m,S.symbolId)):u;Fk(e,g,m,{includeTests:r,inactiveBarrelPaths:d,includeSemantic:!a&&l});let b=a?h.filter(S=>!va(m,S.symbolId)):u;return Ik(e,Lk(b,m))}function wk(e,t){let n=im(e),i=[];for(let r of j(e,{scope:t.scope}))try{for(let o of G(e,r))om(o,{minLoc:t.minLoc,includeTests:t.includeTests,includeMembers:t.includeMembers,isIgnoredPath:a=>e.isIgnored(a),isExcludedRegion:n}).accepted&&i.push(o)}finally{xa(e,r,{definitions:!0})}return i}function Lk(e,t){return e.map(n=>Dk(n,t)).filter(n=>n.cross_file_refs===0).sort((n,i)=>i.loc-n.loc||n.relative_path.localeCompare(i.relative_path)||n.start_line-i.start_line)}function Dk(e,t){let n=t.get(e.symbolId)??new Map,i=lm(n.get(e.relativePath)),r=0;for(let[o,s]of n)o!==e.relativePath&&(r+=s.occurrences);return{relative_path:e.relativePath,start_line:e.startLine,end_line:e.endLine,loc:e.endLine-e.startLine+1,symbol:e.symbol,same_file_refs:i,cross_file_refs:r}}function Ik(e,t){let n=[],i=0,r=0,o=0;for(let s of t){if(e.isIgnored(s.relative_path)||we(e,s.relative_path)||ie(e,s.symbol,s.relative_path))continue;let a=s.same_file_refs===0?"dead-code":"file-internal";a==="dead-code"?i++:r++,o+=s.loc,n.push({relativePath:s.relative_path,startLine:s.start_line,endLine:s.end_line,loc:s.loc,symbol:s.symbol,shortName:y(s.symbol),sameFileRefs:s.same_file_refs,kind:a})}return{symbols:n,counts:{total:n.length,deadCode:i,fileInternal:r,loc:o},totalCount:n.length,deadCodeCount:i,fileInternalCount:r,totalLoc:o}}function Pk(e,t,n,i){if(t.length===0)return;let r=new T(e),o=new Set(t.map(c=>c.symbolId)),s=new Set(t.map(c=>c.leaf).filter(Boolean)),a=new Set(r.sourceFiles());for(let c of j(e))a.add(c);r.scanSourceReferences({paths:a,includeVueSfc:!0,includeCrossLanguageDispatchNames:!0,includeRustAttributeNames:!0,identifierResolution:"permissive",candidateNames:s,skipPath:c=>i.has(c)},c=>{o.has(c.target.symbolId)&&(_k(e,c)||xo(n,c.target.symbolId,c.sourceFile,$k(c),"source-fallback"))})}function Nk(e,t,n,i){if(t.length===0)return;let r=new T(e),o=Ek(t),s=new Set(r.sourceFiles());for(let u of j(e))s.add(u);let a=new Set(o.keys()),c=new Map,l=u=>{let d=c.get(u);return d||(d=bo(e,u),c.set(u,d)),d};r.scanSourceReferences({paths:s,includeVueSfc:!0,includeCrossLanguageDispatchNames:!0,includeRustAttributeNames:!0,identifierResolution:"permissive",candidateNames:a,skipPath:u=>i.has(u),resolveTargets:({sourceFile:u,name:d,kind:m})=>{let p=o.get(d);return p?Tk(u,d,p,l(u),{permissive:m!=="cross-language-dispatch"}):[]},afterPath:u=>{c.delete(u),xa(e,u)}},u=>{let d=u.kind==="identifier"&&u.sourceFile===u.target.relativePath?Math.max(0,u.occurrences-1):u.occurrences;u.kind==="identifier"&&mm(e,{sourceFile:u.sourceFile,name:u.name,target:u.target,occurrences:d})||xo(n,u.target.symbolId,u.sourceFile,d,"source-fallback")})}function Ek(e){let t=new Map;for(let n of e){if(!n.leaf)continue;let i=t.get(n.leaf)??[];i.push(n),t.set(n.leaf,i)}return t}function Tk(e,t,n,i,r){let o=n.filter(c=>c.relativePath===e);if(o.length>0)return o;if(!r.permissive&&n.length===1)return[...n];let s=i.get(t);if(s)for(let c of s){let l=n.filter(u=>Ot(c,u.relativePath));if(l.length>0)return l}let a=new Set;for(let c of i.values())for(let l of c)a.add(l);for(let c of a){let l=n.filter(u=>Ot(c,u.relativePath));if(l.length>0&&l.length===n.length)return l}return r.permissive?[...n]:[]}function _k(e,t){return t.kind==="cross-language-dispatch"&&t.target.relativePath===t.sourceFile?!0:t.kind==="identifier"&&mm(e,t)}function $k(e){return e.kind==="identifier"&&e.target.relativePath===e.sourceFile?Math.max(0,e.occurrences-1):e.occurrences}function mm(e,t){return t.occurrences>1?!1:fe(e,t.sourceFile).some(n=>n.used||n.sourcePath!==t.target.relativePath?!1:n.importedName===t.name||n.localName===t.name)}function Fk(e,t,n,i){for(let r of t){let o=qe(e,r,{semantic:i.includeSemantic!==!1});if(o.length!==0)for(let s of o){let a=s.file;a===r.relativePath||e.isIgnored(a)||i.inactiveBarrelPaths.has(a)||!i.includeTests&&!Ca(a)||um(n,r.symbolId,a,1,"caller-map")}}}function Ra(e,t={}){let{limit:n=30,scope:i}=t,r=i?`AND def_d.relative_path LIKE '%${i}%'`:"",s=e.all(`SELECT
299
+ ORDER BY d1.relative_path`,...t,...t,...t)}function pw(e,t){let n=new T(e);return t.flatMap(r=>n.definitionsForFile(r).filter(i=>Ce(i.symbol)).map(i=>({relative_path:r,symbol:i.symbol})))}function fw(e){let t=new Set;return e.filter(n=>{let r=`${n.relative_path}|${n.symbol}`;return t.has(r)?!1:(t.add(r),!0)})}function gw(e){return{consumer:e.relative_path,symbol:e.symbol,shortName:b(e.symbol)}}var ci=new WeakMap;function Tm(e,t){let n=W(t);return n==="rust"?Rw(e,t):n==="typescript"||n==="tsx"||n==="javascript"?Sw(e,t):[]}var hw=new Set(["describe","it","test","fdescribe","fit","xdescribe","xit","beforeEach","afterEach","beforeAll","afterAll","before","after","suite","bench","benchmark"]),yw=/\b(?:describe|it|test|fdescribe|fit|xdescribe|xit|beforeEach|afterEach|beforeAll|afterAll|before|after|suite|bench|benchmark)\s*\(/,bw=/\b(?:export\s+)?(?:async\s+)?function\s+use[A-Z][A-Za-z0-9_$]*\b|\b(?:const|let|var)\s+use[A-Z][A-Za-z0-9_$]*\s*(?::[^=;]+)?=\s*(?:async\s*)?(?:function\b|(?:<[^=;{]+>\s*)?(?:\([^)]*\)|[A-Za-z_$][\w$]*)\s*=>)/;function Sw(e,t){let n=F(e,t);if(!n||!xw(n))return[];let r=fe(e,t);if(!r)return[];let i=ci.get(r);if(i)return i;let o=!1,s=r.rootNode;for(let c of s.namedChildren){if(c.type!=="expression_statement")continue;let l=c.namedChild(0);if(!l||l.type!=="call_expression")continue;let u=l.namedChild(0);if(!u)continue;let d=u.type==="member_expression"?u.namedChild(u.namedChildCount-1)?.text:u.text;if(d&&hw.has(d)){o=!0;break}}let a=[];o&&a.push({startLine:0,endLine:s.endPosition.row,reason:"TS/JS test file (describe/it/test at top level)"});for(let c of s.namedChildren){let l=null,u=null;if(c.type==="function_declaration")l=c.namedChild(0)?.text??null,u=c;else if(c.type==="export_statement"){let d=c.namedChild(0);d?.type==="function_declaration"&&(l=d.namedChild(0)?.text??null,u=d)}else if(c.type==="lexical_declaration"){let d=c.namedChild(0);if(d?.type==="variable_declarator"){let m=d.namedChild(0)?.text,f=d.namedChild(1);m&&(f?.type==="arrow_function"||f?.type==="function_expression")&&(l=m,u=d)}}l&&/^use[A-Z]/.test(l)&&u&&a.push({startLine:u.startPosition.row,endLine:u.endPosition.row,reason:"React custom hook (use*)"})}return a.push(..._m(r,new Set(["function_declaration","method_definition","class_declaration","interface_declaration","type_alias_declaration","enum_declaration","variable_declarator","export_statement"]),new Set(["comment"]))),ci.set(r,a),a}function xw(e){return e.includes("scip-query")||yw.test(e)||bw.test(e)}var Cw=/scip-query[\s:-]*ignore[\s:-]*(?:dead(?:-code)?|stale)?/i;function vw(e){return Cw.test(e)}function _m(e,t,n){let r=[],i=o=>{if(t.has(o.type)&&o.parent){let a=o.parent.children,c=-1;for(let l=0;l<a.length;l+=1)if(a[l].startIndex===o.startIndex&&a[l].type===o.type){c=l;break}if(c>0)for(let l=c-1;l>=0;l-=1){let u=a[l];if(n.has(u.type)){if(vw(u.text)){r.push({startLine:o.startPosition.row,endLine:o.endPosition.row,reason:"scip-query suppression comment"});break}continue}if(!(u.type==="attribute_item"||u.type==="inner_attribute_item"))break}}for(let s of o.namedChildren)i(s)};return i(e.rootNode),r}function Rw(e,t){let n=fe(e,t);if(!n)return[];let r=ci.get(n);if(r)return r;let i=[],o=kw(n);return o?(ci.set(n,o),o):(Fm(n.rootNode,i,!1,!1),i.push(..._m(n,new Set(["function_item","function_signature_item","struct_item","enum_item","union_item","impl_item","mod_item","static_item","const_item"]),new Set(["line_comment","block_comment"]))),i.push(...Tw(n.rootNode)),ci.set(n,i),i)}function kw(e){return _w(e.rootNode)?[{startLine:0,endLine:e.rootNode.endPosition.row,reason:"generated file (@generated header)"}]:null}function Fm(e,t,n,r){let i=n,o=r;e.type==="trait_item"&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"trait declaration body (dynamic dispatch)"}),e.type==="impl_item"&&e.childForFieldName("trait")&&(o=!0,t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"trait impl block (dynamic dispatch)"})),e.type==="function_item"||e.type==="function_signature_item"?ww(e,t,n,r):r&&Ew(e)?t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"trait impl associated item (dynamic dispatch)"}):e.type==="struct_item"||e.type==="enum_item"||e.type==="union_item"?Lw(e,t,n):e.type==="mod_item"&&ja(e).some(s=>/#\[\s*cfg\s*\(\s*test\s*\)/.test(s))&&(i=!0);for(let s of e.namedChildren)Fm(s,t,i,o)}function ww(e,t,n,r){let i=ja(e),o=null;r?o="trait impl method (dynamic dispatch)":n&&(o="inside #[cfg(test)] mod");for(let s of i){let a=Dw(s);if(a){o=a;break}if($m(s)){o="#[allow(dead_code)]";break}}o&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:o})}function Lw(e,t,n){let r=ja(e),i=e.namedChildren.find(o=>o.type==="type_identifier")?.text;r.some(Nw)&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"#[derive(<reflective>)] \u2014 fields accessed via macro/reflection",containerName:i}),r.some($m)&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"#[allow(dead_code)]",containerName:i}),n&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"inside #[cfg(test)] mod",containerName:i})}function ja(e){let t=e.parent;if(!t)return[];let n=t.children,r=-1;for(let o=0;o<n.length;o+=1)if(n[o].startIndex===e.startIndex&&n[o].type===e.type){r=o;break}if(r<=0)return[];let i=[];for(let o=r-1;o>=0;o-=1){let s=n[o];if(s.type==="attribute_item"||s.type==="inner_attribute_item")i.push(s.text);else{if(s.type==="line_comment"||s.type==="block_comment")continue;break}}return i}var Iw=[{re:/#\[\s*tauri::command\b/,reason:"#[tauri::command]"},{re:/#\[\s*command\b/,reason:"#[command]"},{re:/#\[\s*test\b/,reason:"#[test]"},{re:/#\[\s*bench\b/,reason:"#[bench]"},{re:/#\[\s*tokio::test\b/,reason:"#[tokio::test]"},{re:/#\[\s*async_std::test\b/,reason:"#[async_std::test]"},{re:/#\[\s*wasm_bindgen\b/,reason:"#[wasm_bindgen]"},{re:/#\[\s*no_mangle\b/,reason:"#[no_mangle]"},{re:/#\[\s*napi\b/,reason:"#[napi]"},{re:/#\[\s*pyfunction\b/,reason:"#[pyfunction]"},{re:/#\[\s*pymethod\b/,reason:"#[pymethod]"},{re:/#\[\s*pyo3\b/,reason:"#[pyo3]"},{re:/#\[\s*cfg\s*\(\s*test\s*\)/,reason:"#[cfg(test)]"},{re:/#\[\s*doc\s*\(\s*hidden\s*\)/,reason:"#[doc(hidden)]"}];function Dw(e){return Iw.find(({re:t})=>t.test(e))?.reason??null}var Pw=[/\bSerialize\b/,/\bDeserialize\b/,/\bFromRow\b/,/\bsqlx::FromRow\b/,/\bDeriveEntityModel\b/,/\bIntoSchema\b/,/\bToSchema\b/,/\bDeriveValueType\b/,/\bError\b/,/\bthiserror::Error\b/];function Nw(e){return/#\[\s*derive\s*\(/.test(e)?Pw.some(t=>t.test(e)):!1}function $m(e){return/#\[\s*allow\s*\(\s*dead_code\s*\)/.test(e)}function Ew(e){return e.type==="const_item"||e.type==="type_item"||e.type==="static_item"||e.type==="associated_type"}function Tw(e){let t=$w(e);if(t.size===0)return[];let n=[];for(let r of e.descendantsOfType("mod_item")){let i=r.childForFieldName("name")?.text;i&&t.has(i)&&n.push({startLine:r.startPosition.row,endLine:r.endPosition.row,reason:'serde `with = "..."` module \u2014 body invoked via reflection',containerName:i})}return n}function _w(e){for(let t=0;t<Math.min(e.namedChildCount,12);t+=1){let n=e.namedChild(t);if(!n||n.type!=="line_comment"&&n.type!=="block_comment")break;if(/@generated\b/.test(n.text)||/This file is .*generated\b/i.test(n.text)||/Code generated by/i.test(n.text)||/Generated by:\s*https?:\/\/openapi-generator/i.test(n.text)||/openapi-generator/i.test(n.text)&&/Generated by/i.test(n.text))return!0}return!1}var Fw=/^#!?\[\s*serde\s*\(/,Em=/\bwith\s*=\s*"([^"]+)"/g;function $w(e){let t=new Set;for(let n of e.descendantsOfType("attribute_item")){if(!Fw.test(n.text))continue;Em.lastIndex=0;let r;for(;(r=Em.exec(n.text))!==null;){let i=r[1],o=i.split("::").pop()??i;o&&t.add(o)}}return t}function Am(e){let t=new Map,n=r=>{let i=t.get(r);if(i)return i;let o=Tm(e,r);return i={ranges:o.map(s=>({startLine:s.startLine,endLine:s.endLine})),containers:new Set(o.map(s=>s.containerName).filter(s=>!!s))},t.set(r,i),i};return(r,i,o,s)=>{let a=n(r);for(let c of a.ranges)if(i>=c.startLine&&i<=c.endLine)return!0;if(s&&a.containers.has(s))return!0;for(let c of so(o))if(a.containers.has(c))return!0;return!1}}function Oa(e,t={}){Ys(e,{groups:t.semanticProvider===!0?["whole-project","semantic-provider"]:["whole-project"]})}function Ba(e,t,n={}){Ys(e,{groups:n.definitions===!0?["source-file","definition-catalog"]:["source-file"],file:t.replace(/\\/g,"/")})}function jm(e,t){return t.isIgnoredPath(e.relativePath)?pt("ignored-file"):Ot(e.symbol)?pt("module-like-symbol"):Mm(e.symbol)?!e.isFunctionLike&&e.enclosingSymbol&&Mm(e.enclosingSymbol)?pt("nested-non-callable-value"):!t.includeTests&&!Ha(e.relativePath)?pt("test-file"):!t.includeTests&&t.isExcludedRegion(e.relativePath,e.startLine,e.symbol,e.parentTypeName)?pt("excluded-file-region"):ro(e.symbol)?pt("rust-trait-impl-member"):tr(e.symbol)?pt("rust-test-module"):!t.includeMembers&&!Aw(e)?pt("member"):e.endLine-e.startLine+1<t.minLoc?pt("below-min-loc"):{accepted:!0}:pt("non-value-symbol")}function Ha(e){return J(e)!=="test"}function pt(e){return{accepted:!1,rejectionReason:e}}function Mm(e){return ce(e)||e.endsWith("().")||e.endsWith(".")}function Aw(e){return Ce(e.symbol)||so(e.symbol).length===0}function jo(e,t){return q(e)-q(t)||e.relativePath.localeCompare(t.relativePath)}function We(e,t){return typeof t!="number"||t<=0||e.length<=t?e:e.slice(0,t)}function br(e){let t=new Set,n=[];for(let r of e){let i=`${r.symbol}|${r.file}`;t.has(i)||(t.add(i),n.push(r))}return n}function Om(){return new Map}function Bm(e,t,n){let r=new Map;for(let i of Wd(e,n))e.isIgnored(i.relative_path)||t.has(i.relative_path)||Oo(r,i.symbol_id,i.relative_path,i.ref_count,"scip-mention");return r}function Hm(e,t,n){let r=new Set;for(let i of Gd(e,t))e.isIgnored(i.relative_path)||n.has(i.relative_path)||r.add(i.symbol_id);return r}function Va(e,t){let n=e.get(t);if(!n)return!1;for(let r of n.values())if(r.occurrences>0)return!0;return!1}function qa(e,t,n){let r=e.get(t);if(!r)return!1;for(let[i,o]of r)if(i!==n&&o.occurrences>0)return!0;return!1}function Vm(e){return e?.occurrences??0}function Oo(e,t,n,r,i="source-fallback"){if(r<=0)return;let o=Um(e,t,n);o.occurrences+=r,o.sources.add(i)}function qm(e,t,n,r,i){if(r<=0)return;let o=Um(e,t,n);o.occurrences=Math.max(r,o.occurrences),o.sources.add(i)}function Um(e,t,n){let r=e.get(t);r||(r=new Map,e.set(t,r));let i=r.get(n);return i||(i={occurrences:0,sources:new Set},r.set(n,i)),i}var Mw=3e3,jw=1e3;function Dt(e,t={}){let{scope:n,minLoc:r=1,includeTests:i=!1,skipBarrels:o=!1,includeMembers:s=!1,deadCodeOnly:a=!1,scanLimit:c,semantic:l=!0}=t,u=We(Ow(e,{scope:n,minLoc:r,includeTests:i,includeMembers:s}),c),d=o?new Set(Hd(e)):new Set,m=a?Om():Bm(e,d,u.map(S=>S.symbolId)),f=a?Hm(e,u.map(S=>S.symbolId),d):new Set,h=a?u.filter(S=>!f.has(S.symbolId)):u.filter(S=>!qa(m,S.symbolId,S.relativePath));a?Uw(e,h,m,d):qw(e,h,m,d);let g=a?h.filter(S=>!Va(m,S.symbolId)):h.filter(S=>!qa(m,S.symbolId,S.relativePath));Kw(e,g,m,{includeTests:i,inactiveBarrelPaths:d,includeSemantic:!a&&l});let y=a?h.filter(S=>!Va(m,S.symbolId)):u;return Vw(e,Bw(y,m))}function Ow(e,t){let n=Am(e),r=[];for(let i of j(e,{scope:t.scope}))try{for(let o of z(e,i))jm(o,{minLoc:t.minLoc,includeTests:t.includeTests,includeMembers:t.includeMembers,isIgnoredPath:a=>e.isIgnored(a),isExcludedRegion:n}).accepted&&r.push(o)}finally{Ba(e,i,{definitions:!0})}return r}function Bw(e,t){return e.map(n=>Hw(n,t)).filter(n=>n.cross_file_refs===0).sort((n,r)=>r.loc-n.loc||n.relative_path.localeCompare(r.relative_path)||n.start_line-r.start_line)}function Hw(e,t){let n=t.get(e.symbolId)??new Map,r=Vm(n.get(e.relativePath)),i=0;for(let[o,s]of n)o!==e.relativePath&&(i+=s.occurrences);return{relative_path:e.relativePath,start_line:e.startLine,end_line:e.endLine,loc:e.endLine-e.startLine+1,symbol:e.symbol,same_file_refs:r,cross_file_refs:i}}function Vw(e,t){let n=[],r=0,i=0,o=0;for(let s of t){if(e.isIgnored(s.relative_path)||De(e,s.relative_path)||ie(e,s.symbol,s.relative_path))continue;let a=s.same_file_refs===0?"dead-code":"file-internal";a==="dead-code"?r++:i++,o+=s.loc,n.push({relativePath:s.relative_path,startLine:s.start_line,endLine:s.end_line,loc:s.loc,symbol:s.symbol,shortName:b(s.symbol),sameFileRefs:s.same_file_refs,kind:a})}return{symbols:n,counts:{total:n.length,deadCode:r,fileInternal:i,loc:o},totalCount:n.length,deadCodeCount:r,fileInternalCount:i,totalLoc:o}}function qw(e,t,n,r){if(t.length===0)return;let i=new T(e),o=new Set(t.map(c=>c.symbolId)),s=new Set(t.map(c=>c.leaf).filter(Boolean)),a=new Set(i.sourceFiles());for(let c of j(e))a.add(c);i.scanSourceReferences({paths:a,includeVueSfc:!0,includeCrossLanguageDispatchNames:!0,includeRustAttributeNames:!0,identifierResolution:"permissive",candidateNames:s,skipPath:c=>r.has(c)},c=>{o.has(c.target.symbolId)&&(zw(e,c)||Oo(n,c.target.symbolId,c.sourceFile,Jw(c),"source-fallback"))})}function Uw(e,t,n,r){if(t.length===0)return;let i=new T(e),o=Ww(t),s=new Set(i.sourceFiles());for(let u of j(e))s.add(u);let a=new Set(o.keys()),c=new Map,l=u=>{let d=c.get(u);return d||(d=$o(e,u),c.set(u,d)),d};i.scanSourceReferences({paths:s,includeVueSfc:!0,includeCrossLanguageDispatchNames:!0,includeRustAttributeNames:!0,identifierResolution:"permissive",candidateNames:a,skipPath:u=>r.has(u),resolveTargets:({sourceFile:u,name:d,kind:m})=>{let f=o.get(d);return f?Gw(u,d,f,l(u),{permissive:m!=="cross-language-dispatch"}):[]},afterPath:u=>{c.delete(u),Ba(e,u)}},u=>{let d=u.kind==="identifier"&&u.sourceFile===u.target.relativePath?Math.max(0,u.occurrences-1):u.occurrences;u.kind==="identifier"&&Wm(e,{sourceFile:u.sourceFile,name:u.name,target:u.target,occurrences:d})||Oo(n,u.target.symbolId,u.sourceFile,d,"source-fallback")})}function Ww(e){let t=new Map;for(let n of e){if(!n.leaf)continue;let r=t.get(n.leaf)??[];r.push(n),t.set(n.leaf,r)}return t}function Gw(e,t,n,r,i){let o=n.filter(c=>c.relativePath===e);if(o.length>0)return o;if(!i.permissive&&n.length===1)return[...n];let s=r.get(t);if(s)for(let c of s){let l=n.filter(u=>Wt(c,u.relativePath));if(l.length>0)return l}let a=new Set;for(let c of r.values())for(let l of c)a.add(l);for(let c of a){let l=n.filter(u=>Wt(c,u.relativePath));if(l.length>0&&l.length===n.length)return l}return i.permissive?[...n]:[]}function zw(e,t){return t.kind==="cross-language-dispatch"&&t.target.relativePath===t.sourceFile?!0:t.kind==="identifier"&&Wm(e,t)}function Jw(e){return e.kind==="identifier"&&e.target.relativePath===e.sourceFile?Math.max(0,e.occurrences-1):e.occurrences}function Wm(e,t){return t.occurrences>1?!1:he(e,t.sourceFile).some(n=>n.used||n.sourcePath!==t.target.relativePath?!1:n.importedName===t.name||n.localName===t.name)}function Kw(e,t,n,r){let i=r.includeSemantic!==!1,o=i&&t.length>=Mw&&j(e).length>=jw,s=(c,l)=>{l===c.relativePath||e.isIgnored(l)||r.inactiveBarrelPaths.has(l)||!r.includeTests&&!Ha(l)||qm(n,c.symbolId,l,1,"caller-map")};for(let c of t){let l=Ue(e,c,{semantic:i&&!o});if(l.length!==0)for(let u of l)s(c,u.file)}if(!o)return;let a=mt(e,t);for(let c of t){let l=a.get(c.symbolId);if(l)for(let u of l)s(c,u)}}function Ua(e,t={}){let{limit:n=30,scope:r}=t,i=r?`AND def_d.relative_path LIKE '%${r}%'`:"",s=e.all(`SELECT
288
300
  gs.symbol,
289
301
  COUNT(*) AS ref_count,
290
302
  COUNT(DISTINCT ref_d.id) AS file_count,
@@ -304,17 +316,17 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
304
316
  WHERE m.role != 1
305
317
  ${e.pathExclusionsFor("def_d")}
306
318
  ${e.symbolNoiseFor("gs")}
307
- ${r}
319
+ ${i}
308
320
  GROUP BY gs.id
309
321
  ORDER BY ref_count DESC
310
- LIMIT ?`,n).filter(a=>!e.isIgnored(a.defined_in)).map(a=>({symbol:a.symbol,shortName:y(a.symbol),refCount:a.ref_count,fileCount:a.file_count,definedIn:a.defined_in}));return s.length>0?s:Ak(e,i,n)}function Ak(e,t,n){return rt(e,{scope:t}).filter(i=>!e.isIgnored(i.relativePath)).map(i=>Mk(e,i)).filter(i=>i.refCount>0).sort((i,r)=>r.refCount-i.refCount||r.fileCount-i.fileCount).slice(0,n)}function Mk(e,t){let n=qe(e,t,{limit:500});return{symbol:t.symbol,shortName:y(t.symbol),refCount:n.length,fileCount:new Set(n.map(i=>i.file)).size,definedIn:t.relativePath}}function ka(e,t,n={}){return fm(e,t,n)?.map(i=>({symbol:i.symbol,shortName:i.shortName,fromFile:i.fromFile}))??[]}function wa(e,t){let n=Ok(e,t);return n.length>0?n:jk(e,t)}function La(e,t,n={}){return fm(e,t,n)?.filter(i=>!i.used).map(i=>({symbol:i.symbol,shortName:i.shortName,importedIn:i.importer}))??[]}function Ok(e,t){return e.all(`SELECT DISTINCT gs.symbol, d.relative_path AS importer
322
+ LIMIT ?`,n).filter(a=>!e.isIgnored(a.defined_in)).map(a=>({symbol:a.symbol,shortName:b(a.symbol),refCount:a.ref_count,fileCount:a.file_count,definedIn:a.defined_in}));return s.length>0?s:Xw(e,r,n)}function Xw(e,t,n){return ut(e,{scope:t}).filter(r=>!e.isIgnored(r.relativePath)).map(r=>Qw(e,r)).filter(r=>r.refCount>0).sort((r,i)=>i.refCount-r.refCount||i.fileCount-r.fileCount).slice(0,n)}function Qw(e,t){let n=Ue(e,t,{limit:500});return{symbol:t.symbol,shortName:b(t.symbol),refCount:n.length,fileCount:new Set(n.map(r=>r.file)).size,definedIn:t.relativePath}}function Wa(e,t,n={}){return zm(e,t,n)?.map(r=>({symbol:r.symbol,shortName:r.shortName,fromFile:r.fromFile}))??[]}function Ga(e,t){let n=Yw(e,t);return n.length>0?n:Zw(e,t)}function za(e,t,n={}){return zm(e,t,n)?.filter(r=>!r.used).map(r=>({symbol:r.symbol,shortName:r.shortName,importedIn:r.importer}))??[]}function Yw(e,t){return e.all(`SELECT DISTINCT gs.symbol, d.relative_path AS importer
311
323
  FROM mentions m
312
324
  JOIN chunks c ON m.chunk_id = c.id
313
325
  JOIN documents d ON c.document_id = d.id
314
326
  JOIN global_symbols gs ON m.symbol_id = gs.id
315
327
  WHERE gs.symbol LIKE ?
316
328
  AND m.role = 2
317
- ORDER BY d.relative_path`,`%${t}%`).filter(i=>!e.isIgnored(i.importer)).map(i=>({symbol:i.symbol,shortName:y(i.symbol),fromFile:i.importer}))}function jk(e,t){let n=B(e,t),i=n?.relativePath??null,r=n?$(n.symbol):t.replace(/\(\)$/,""),o=n?Tt(n.symbol):!1,s=new Set;for(let a of j(e,{includeIgnored:!1}))for(let c of fe(e,a))Bk(c,a,{targetFile:i,targetLeaf:r,targetIsModule:o})&&s.add(a);return[...s].sort().map(a=>({symbol:n?.symbol??r,shortName:n?y(n.symbol):r,fromFile:a}))}function Bk(e,t,n){return!e.sourcePath||n.targetFile&&pm(e.sourcePath)!==pm(n.targetFile)?!1:e.kind==="side-effect"||n.targetFile&&Uk(t)||n.targetIsModule||e.kind==="named"&&e.importedName===n.targetLeaf?!0:e.kind==="namespace"&&e.usedMembers.includes(n.targetLeaf)}function fm(e,t,n={}){let i=Ie(e,t);return i?Hk(e,i,n)??(n.semantic===!1?null:Vk(e,i))??qk(e,i):null}function Hk(e,t,n){let r=e.all(`SELECT DISTINCT
329
+ ORDER BY d.relative_path`,`%${t}%`).filter(r=>!e.isIgnored(r.importer)).map(r=>({symbol:r.symbol,shortName:b(r.symbol),fromFile:r.importer}))}function Zw(e,t){let n=B(e,t),r=n?.relativePath??null,i=n?$(n.symbol):t.replace(/\(\)$/,""),o=n?Ot(n.symbol):!1,s=new Set;for(let a of j(e,{includeIgnored:!1}))for(let c of he(e,a))eL(c,a,{targetFile:r,targetLeaf:i,targetIsModule:o})&&s.add(a);return[...s].sort().map(a=>({symbol:n?.symbol??i,shortName:n?b(n.symbol):i,fromFile:a}))}function eL(e,t,n){return!e.sourcePath||n.targetFile&&Gm(e.sourcePath)!==Gm(n.targetFile)?!1:e.kind==="side-effect"||n.targetFile&&iL(t)||n.targetIsModule||e.kind==="named"&&e.importedName===n.targetLeaf?!0:e.kind==="namespace"&&e.usedMembers.includes(n.targetLeaf)}function zm(e,t,n={}){let r=Ee(e,t);return r?tL(e,r,n)??(n.semantic===!1?null:nL(e,r))??rL(e,r):null}function tL(e,t,n){let i=e.all(`SELECT DISTINCT
318
330
  gs.symbol,
319
331
  def_d.relative_path AS from_file,
320
332
  imp_d.relative_path AS importer,
@@ -340,11 +352,11 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
340
352
  LEFT JOIN documents def_d ON sym_def.document_id = def_d.id
341
353
  WHERE imp_d.relative_path = ?
342
354
  AND m.role = 2
343
- ORDER BY def_d.relative_path, gs.symbol`,t).filter(o=>!e.isIgnored(o.importer));if(r.length>0){let o=n.semantic===!1?[]:qi(e,t);return r.map(s=>({symbol:s.symbol,shortName:y(s.symbol),fromFile:s.from_file??"(external)",importer:s.importer,used:s.used!==0||o.some(a=>a.isUsed&&a.sourcePath===s.from_file)}))}return null}function Vk(e,t){let n=qi(e,t);return n.length>0?n.map(i=>{let r=gm(i.importedName,i.localName,i.kind);return{symbol:r,shortName:r,fromFile:i.sourcePath??"(external)",importer:t,used:i.kind==="side-effect"?!0:i.isUsed}}):null}function qk(e,t){return fe(e,t).map(n=>{let i=gm(n.importedName,n.localName,n.kind),r=n.kind==="side-effect"?!0:n.used;return{symbol:i,shortName:i,fromFile:n.sourcePath??"(external)",importer:t,used:r}})}function gm(e,t,n){return n==="namespace"&&e==="*"&&t?`* as ${t}`:n==="default"&&t?`default as ${t}`:n==="side-effect"?"(side effect import)":t&&t!==e?`${e} as ${t}`:e}function pm(e){return e.replace(/\\/g,"/")}function Uk(e){return/\.(?:c|h|cc|cpp|cxx|hpp|hh|hxx)$/i.test(e)}function Da(e,t){let n=Kn(e,t),i=Hr(e,n,{sort:!0});if(i.length===0)return[];let r=i.map(a=>({symbol:a.symbol,shortName:a.shortName,startLine:a.startLine,endLine:a.endLine,signature:a.signature,children:[]})),o=new Map;for(let a of r)o.set(a.symbol,a);let s=[];for(let a=0;a<i.length;a++){let c=i[a],l=r[a];if(c.enclosingSymbol&&o.has(c.enclosingSymbol)){o.get(c.enclosingSymbol).children.push(l);continue}let u=null,d=1/0;for(let m of r)if(m!==l&&m.startLine<=l.startLine&&m.endLine>=l.endLine){if(m.startLine===l.startLine&&m.endLine===l.endLine&&!vu(m.symbol,l.symbol))continue;let h=m.endLine-m.startLine;h<d&&(d=h,u=m)}u?u.children.push(l):s.push(l)}return s}function Ia(e,t){let n=B(e,t);return n?new T(e).definitionsForFile(n.relativePath).filter(r=>r.symbol!==n.symbol).filter(r=>Cu(n.symbol,r.symbol)).sort((r,o)=>r.startLine-o.startLine||r.endLine-o.endLine).map(r=>({symbol:r.symbol,shortName:y(r.symbol),startLine:r.startLine,endLine:r.endLine,kind:Z(r.symbol)??"unknown"})):[]}function Pa(e,t){let n=B(e,t);if(!n)return[];let i=e.get(`SELECT COUNT(DISTINCT c.document_id) AS file_count
355
+ ORDER BY def_d.relative_path, gs.symbol`,t).filter(o=>!e.isIgnored(o.importer));if(i.length>0){let o=n.semantic===!1?[]:ti(e,t);return i.map(s=>({symbol:s.symbol,shortName:b(s.symbol),fromFile:s.from_file??"(external)",importer:s.importer,used:s.used!==0||o.some(a=>a.isUsed&&a.sourcePath===s.from_file)}))}return null}function nL(e,t){let n=ti(e,t);return n.length>0?n.map(r=>{let i=Jm(r.importedName,r.localName,r.kind);return{symbol:i,shortName:i,fromFile:r.sourcePath??"(external)",importer:t,used:r.kind==="side-effect"?!0:r.isUsed}}):null}function rL(e,t){return he(e,t).map(n=>{let r=Jm(n.importedName,n.localName,n.kind),i=n.kind==="side-effect"?!0:n.used;return{symbol:r,shortName:r,fromFile:n.sourcePath??"(external)",importer:t,used:i}})}function Jm(e,t,n){return n==="namespace"&&e==="*"&&t?`* as ${t}`:n==="default"&&t?`default as ${t}`:n==="side-effect"?"(side effect import)":t&&t!==e?`${e} as ${t}`:e}function Gm(e){return e.replace(/\\/g,"/")}function iL(e){return/\.(?:c|h|cc|cpp|cxx|hpp|hh|hxx)$/i.test(e)}function Ja(e,t){let n=ar(e,t),r=io(e,n,{sort:!0});if(r.length===0)return[];let i=r.map(a=>({symbol:a.symbol,shortName:a.shortName,startLine:a.startLine,endLine:a.endLine,signature:a.signature,children:[]})),o=new Map;for(let a of i)o.set(a.symbol,a);let s=[];for(let a=0;a<r.length;a++){let c=r[a],l=i[a];if(c.enclosingSymbol&&o.has(c.enclosingSymbol)){o.get(c.enclosingSymbol).children.push(l);continue}let u=null,d=1/0;for(let m of i)if(m!==l&&m.startLine<=l.startLine&&m.endLine>=l.endLine){if(m.startLine===l.startLine&&m.endLine===l.endLine&&!Zu(m.symbol,l.symbol))continue;let h=m.endLine-m.startLine;h<d&&(d=h,u=m)}u?u.children.push(l):s.push(l)}return s}function Ka(e,t){let n=B(e,t);return n?new T(e).definitionsForFile(n.relativePath).filter(i=>i.symbol!==n.symbol).filter(i=>Yu(n.symbol,i.symbol)).sort((i,o)=>i.startLine-o.startLine||i.endLine-o.endLine).map(i=>({symbol:i.symbol,shortName:b(i.symbol),startLine:i.startLine,endLine:i.endLine,kind:ee(i.symbol)??"unknown"})):[]}function Xa(e,t){let n=B(e,t);if(!n)return[];let r=e.get(`SELECT COUNT(DISTINCT c.document_id) AS file_count
344
356
  FROM mentions m
345
357
  JOIN chunks c ON m.chunk_id = c.id
346
358
  WHERE m.symbol_id = ?
347
- AND m.role != 1`,n.symbolId);return[{name:y(n.symbol),count:i?.file_count??0}]}function Na(e,t){let n=Ie(e,t);if(!n)return[];let r=e.all(`SELECT d.relative_path, COUNT(DISTINCT gs.id) AS symbol_count
359
+ AND m.role != 1`,n.symbolId);return[{name:b(n.symbol),count:r?.file_count??0}]}function Qa(e,t){let n=Ee(e,t);if(!n)return[];let i=e.all(`SELECT d.relative_path, COUNT(DISTINCT gs.id) AS symbol_count
348
360
  FROM mentions m
349
361
  JOIN chunks c ON m.chunk_id = c.id
350
362
  JOIN documents d ON c.document_id = d.id
@@ -361,7 +373,7 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
361
373
  AND m.role != 1
362
374
  AND def_d.id != d.id
363
375
  GROUP BY d.id
364
- ORDER BY symbol_count DESC`,n).filter(a=>!e.isIgnored(a.relative_path)).map(a=>({name:a.relative_path,count:a.symbol_count}));if(r.length>0)return r;let s=ne(e).get(n);return!s||s.size===0?[]:[{name:n,count:s.size}]}function Ea(e,t={}){return Wk(e,t).map(n=>({name:y(n.symbol),count:n.file_count}))}function Wk(e,t){let{limit:n=30,scope:i}=t,r=i?`AND def_d.relative_path LIKE '%${i}%'`:"";return e.all(`SELECT gs.symbol, COUNT(DISTINCT c.document_id) AS file_count
376
+ ORDER BY symbol_count DESC`,n).filter(a=>!e.isIgnored(a.relative_path)).map(a=>({name:a.relative_path,count:a.symbol_count}));if(i.length>0)return i;let s=re(e).get(n);return!s||s.size===0?[]:[{name:n,count:s.size}]}function Ya(e,t={}){return oL(e,t).map(n=>({name:b(n.symbol),count:n.file_count}))}function oL(e,t){let{limit:n=30,scope:r}=t,i=r?`AND def_d.relative_path LIKE '%${r}%'`:"";return e.all(`SELECT gs.symbol, COUNT(DISTINCT c.document_id) AS file_count
365
377
  FROM mentions m
366
378
  JOIN chunks c ON m.chunk_id = c.id
367
379
  JOIN global_symbols gs ON m.symbol_id = gs.id
@@ -376,11 +388,11 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
376
388
  WHERE m.role != 1
377
389
  ${e.pathExclusionsFor("def_d")}
378
390
  ${e.symbolNoiseFor("gs")}
379
- ${r}
391
+ ${i}
380
392
  GROUP BY gs.id
381
393
  HAVING file_count > 1
382
394
  ORDER BY file_count DESC
383
- LIMIT ?`,n)}function Ta(e,t={}){let{limit:n=30,scope:i}=t,r=i?`AND d.relative_path LIKE '%${i}%'`:"";return e.all(`SELECT d.relative_path, COUNT(DISTINCT gs.id) AS symbol_count
395
+ LIMIT ?`,n)}function Za(e,t={}){let{limit:n=30,scope:r}=t,i=r?`AND d.relative_path LIKE '%${r}%'`:"";return e.all(`SELECT d.relative_path, COUNT(DISTINCT gs.id) AS symbol_count
384
396
  FROM mentions m
385
397
  JOIN chunks c ON m.chunk_id = c.id
386
398
  JOIN documents d ON c.document_id = d.id
@@ -397,10 +409,10 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
397
409
  AND def_d.id != d.id
398
410
  ${e.pathExclusionsFor("d")}
399
411
  ${e.symbolNoiseFor("gs")}
400
- ${r}
412
+ ${i}
401
413
  GROUP BY d.id
402
414
  ORDER BY symbol_count DESC
403
- LIMIT ?`,n).filter(s=>!e.isIgnored(s.relative_path)).map(s=>({name:s.relative_path,count:s.symbol_count}))}function _a(e,t,n){let i=Ie(e,t)??t,r=Ie(e,n)??n,o=e.get(`SELECT COUNT(DISTINCT gs.id) AS shared
415
+ LIMIT ?`,n).filter(s=>!e.isIgnored(s.relative_path)).map(s=>({name:s.relative_path,count:s.symbol_count}))}function ec(e,t,n){let r=Ee(e,t)??t,i=Ee(e,n)??n,o=e.get(`SELECT COUNT(DISTINCT gs.id) AS shared
404
416
  FROM global_symbols gs
405
417
  WHERE (
406
418
  -- Defined in file1, referenced in file2
@@ -432,7 +444,7 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
432
444
  JOIN documents d ON c.document_id = d.id
433
445
  WHERE m.symbol_id = gs.id AND m.role != 1 AND d.relative_path = ?
434
446
  )
435
- )`,i,r,r,i);return{...hm(i,r,o?.shared??0)}}function $a(e,t={}){let{limit:n=20,scope:i}=t,r=i?`AND d1.relative_path LIKE '%${i}%' AND d2.relative_path LIKE '%${i}%'`:"";return e.all(`SELECT
447
+ )`,r,i,i,r);return{...Km(r,i,o?.shared??0)}}function tc(e,t={}){let{limit:n=20,scope:r}=t,i=r?`AND d1.relative_path LIKE '%${r}%' AND d2.relative_path LIKE '%${r}%'`:"";return e.all(`SELECT
436
448
  def_d.relative_path AS file1,
437
449
  ref_d.relative_path AS file2,
438
450
  COUNT(DISTINCT gs.id) AS shared
@@ -451,14 +463,35 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
451
463
  WHERE m.role != 1
452
464
  AND def_d.id != ref_d.id
453
465
  ${e.pathExclusionsFor("def_d","ref_d")}
454
- ${r}
466
+ ${i}
455
467
  GROUP BY def_d.id, ref_d.id
456
468
  ORDER BY shared DESC
457
- LIMIT ?`,n).filter(s=>!e.isIgnored(s.file1)&&!e.isIgnored(s.file2)).map(s=>hm(s.file1,s.file2,s.shared))}function hm(e,t,n){return{file1:e,file2:t,sharedSymbols:n,actionTier:"signal",couplingKind:"shared-symbol-coupling",evidenceReasons:[`${n} symbol(s) are defined in one file and referenced by the other`],recommendation:"Review whether the shared symbol surface is an intentional boundary or hidden coordination pressure before moving code."}}function mn(e,t={}){let{scope:n,maxDepth:i=10}=t,r=ne(e,n),o=[],s=new Set,a=new Set,c=[];function l(d,m){if(m>i)return;if(a.has(d)){let h=c.indexOf(d);if(h!==-1){let g=c.slice(h).concat(d),b=g.indexOf(g.reduce((I,L)=>I<L?I:L)),S=[...g.slice(b,-1),...g.slice(0,b),g[b]],x=S.join(" -> ");u.has(x)||(u.add(x),o.push({path:S,kind:Gk(S)}))}return}if(s.has(d))return;s.add(d),a.add(d),c.push(d);let p=r.get(d);if(p)for(let h of p)l(h,m+1);c.pop(),a.delete(d)}let u=new Set;for(let d of r.keys())s.has(d)||l(d,0);return o.sort((d,m)=>d.kind!==m.kind?d.kind==="real"?-1:1:d.path.length-m.path.length),o}function Gk(e){for(let i of e){let r=K(i);if(r==="test"||r==="barrel"||r==="entry")return"module-hierarchy"}if(e.length!==3)return"real";let[t,n]=e;return!t||!n?"real":so(t)||so(n)||bm(t,n)||bm(n,t)||ym(t,n)||ym(n,t)||K(t)==="entry"||K(n)==="entry"?"module-hierarchy":"real"}function bm(e,t){if(!/\.rs$/.test(e)||!/\.rs$/.test(t))return!1;let n=t.replace(/\.rs$/,"/");return e.startsWith(n)?!e.slice(n.length).includes("/"):!1}function ym(e,t){if(!/\.rs$/.test(e)||!/\.rs$/.test(t))return!1;let n=e.replace(/\.rs$/,""),i=t.replace(/\.rs$/,"");if(n===i+"_tests"||n===i+"/tests")return!0;let r=e.split("/"),o=t.split("/");if(r.length===o.length&&r.includes("tests")&&o.includes("src")){let s=r[r.length-1],a=o[o.length-1];if(s&&s===a)return!0}return!1}function Fa(e,t={}){let{limit:n=20,scope:i,minFanIn:r=2,minFanOut:o=2,scanLimit:s}=t,a=new T(e);return Ue(a.productionCallableDefinitions({scope:i,requireCallableSymbol:!0,includeSuppressed:!0,sortByLocDesc:typeof s=="number"&&s>0}),s).map(u=>zk(e,u,t.semantic!==!1)).filter(u=>u.fanIn>=r&&u.fanOut>=o).sort((u,d)=>d.score-u.score||d.fanIn-u.fanIn).slice(0,n)}function zk(e,t,n){let i=new Set(qe(e,t,{limit:500,semantic:n}).map(s=>s.file)).size,r=new Set(Ae(e,t,{limit:500,semantic:n}).filter(s=>s.file!==t.relativePath).map(s=>`${s.symbol}|${s.file}`)).size,o=i*r;return{symbol:t.symbol,shortName:y(t.symbol),fanIn:i,fanOut:r,score:o,definedIn:t.relativePath,actionTier:"signal",riskKind:"coordination-hotspot",evidenceReasons:[`${i} incoming file(s) reference this symbol`,`${r} distinct cross-file callee symbol(s) are reached from it`,`centrality score is ${o} (fan-in * fan-out)`],recommendation:"Review ownership, API stability, and caller groups before changing this central symbol; do not refactor solely from graph centrality."}}function pn(e,t={}){let{scope:n,minLoc:i=3,scanLimit:r}=t,o=new T(e),s=t.semantic!==!1,a=Ue(o.productionCallableDefinitions({scope:n,minLoc:i,excludeEntrySurfaces:!0,excludeRustTraitImplMembers:!0,includeSuppressed:!0,sortByLocDesc:typeof r=="number"&&r>0}),r),c=o.crossFileCallerMap(a,{semantic:s}),l=new Set(c.keys());for(let g of o.frameworkReferencedSymbolIds(a))l.add(g);let u=o.symbolsWithNonSelfCallees(a,{additive:!1,semantic:s}),d=a.filter(g=>!l.has(g.symbolId)).filter(g=>!u.has(g.symbolId)),m=o.sourceFallbackCallerFiles(d);for(let g of m.keys())l.add(g);let p=d.filter(g=>!l.has(g.symbolId)),h=o.symbolsWithNonSelfCallees(p,{additive:!0,semantic:s});for(let g of h)u.add(g);return p.filter(g=>!u.has(g.symbolId)).sort((g,b)=>q(b)-q(g)||g.relativePath.localeCompare(b.relativePath)||g.startLine-b.startLine).map(g=>({symbol:g.symbol,shortName:y(g.symbol),relativePath:g.relativePath,startLine:g.startLine,endLine:g.endLine,loc:q(g)}))}var Ma={0:"UnspecifiedKind",1:"AbstractMethod",2:"Accessor",3:"Array",4:"Assertion",5:"AssociatedType",6:"Attribute",7:"Axiom",8:"Boolean",9:"Class",10:"Constant",11:"Constructor",12:"Contract",13:"DataFamily",14:"DefinitionMacro",15:"Delegate",16:"Enum",17:"EnumMember",18:"Error",19:"Event",20:"Fact",21:"Field",22:"File",23:"Function",24:"Getter",25:"Grammar",26:"Instance",27:"Interface",28:"Key",29:"Lang",30:"Lemma",31:"Library",32:"Macro",33:"Method",34:"MethodAlias",35:"MethodReceiver",36:"MethodSpecification",37:"Message",38:"Modifier",39:"Module",40:"Namespace",41:"Null",42:"Number",43:"Object",44:"Operator",45:"Package",46:"PackageObject",47:"Parameter",48:"ParameterLabel",49:"Pattern",50:"Predicate",51:"Property",52:"Protocol",53:"ProtocolMethod",54:"PureVirtualMethod",55:"Quasiquoter",56:"SelfParameter",57:"Setter",58:"Signature",59:"SingletonClass",60:"SingletonMethod",61:"StaticDataMember",62:"StaticEvent",63:"StaticField",64:"StaticMethod",65:"StaticProperty",66:"StaticVariable",67:"String",68:"Struct",69:"Subscript",70:"Tactic",71:"Theorem",72:"ThisParameter",73:"Trait",74:"TraitMethod",75:"Type",76:"TypeAlias",77:"TypeClass",78:"TypeClassMethod",79:"TypeFamily",80:"TypeParameter",81:"Union",82:"Value",83:"Variable"},Aa=new Map;for(let[e,t]of Object.entries(Ma))Aa.set(t.toLowerCase(),Number(e));function Kk(e){let t=parseInt(e,10);if(!isNaN(t))return t;let n=e.toLowerCase(),i=Aa.get(n);if(i!==void 0)return i;for(let[r,o]of Aa)if(r.includes(n))return o;return null}function Oa(e,t,n={}){let{scope:i,limit:r=100}=n,o=Kk(t);return o===null?[]:Sm(e,i).map(a=>({row:a,resolvedKind:xm(a)})).filter(a=>a.resolvedKind===o).slice(0,r).map(({row:a,resolvedKind:c})=>({symbol:a.symbol,shortName:y(a.symbol),kind:c,kindName:Ma[c]??"Unknown",relativePath:a.relative_path,startLine:a.start_line,endLine:a.end_line}))}function ja(e,t={}){let n=new Map;for(let i of Sm(e,t.scope)){let r=xm(i);r===null||r===0||n.set(r,(n.get(r)??0)+1)}return[...n.entries()].sort((i,r)=>r[1]-i[1]||i[0]-r[0]).map(([i,r])=>({kind:i,kindName:Ma[i]??"Unknown",count:r}))}function Sm(e,t){return rt(e,{scope:t}).map(Jk)}function Jk(e){return{symbol:e.symbol,kind:e.kind,documentation:e.documentation,enclosing_symbol:e.enclosingSymbol,relative_path:e.relativePath,start_line:e.startLine,end_line:e.endLine}}function xm(e){return e.kind!==null&&e.kind!==0?Qk(e.kind,e.symbol,e.documentation):Xk(e.symbol,e.documentation,e.enclosing_symbol)}function Qk(e,t,n){let i=(n??"").toLowerCase();if(Z(t)==="type"){if(i.includes("type "))return 76;if(i.includes("interface "))return 27;if(i.includes("struct "))return 68;if(i.includes("trait "))return 73;if(i.includes("class "))return 9}return e}function Xk(e,t,n){let i=pe(e);if("kind"in i)return null;let r=i.descriptors,o=r[r.length-2]??null,s=Z(e),a=(t??"").toLowerCase();return s==="type"?a.includes("type ")?76:a.includes("interface ")?27:a.includes("struct ")?68:a.includes("trait ")?73:(a.includes("class "),9):s==="method"?o?.suffix==="type"?33:23:s==="namespace"?39:s!=="term"?null:a.includes("async def ")||a.includes("def ")?23:(n?Z(n):o?.suffix??null)==="type"?21:83}function Ba(e,t={}){let{limit:n=10,scope:i,minDepth:r=3}=t,o=ne(e,i),s=new Map,a=[],c=new Map,l=new Map,u=new Set,d=[],m=0;for(let C of o.keys()){if(c.has(C))continue;let D=[],k=(o.get(C)??new Set).values();for(c.set(C,m),l.set(C,m),m+=1,d.push(C),u.add(C),D.push({node:C,iter:k,pendingChild:null});D.length>0;){let A=D[D.length-1];if(A.pendingChild!==null){let Te=A.pendingChild;A.pendingChild=null,l.set(A.node,Math.min(l.get(A.node),l.get(Te)))}let Se=A.iter.next();if(Se.done){if(l.get(A.node)===c.get(A.node)){let Te=[];for(;;){let bt=d.pop();if(u.delete(bt),Te.push(bt),s.set(bt,a.length),bt===A.node)break}a.push(Te)}D.pop();continue}let de=Se.value;if(c.has(de))u.has(de)&&l.set(A.node,Math.min(l.get(A.node),c.get(de)));else{c.set(de,m),l.set(de,m),m+=1,d.push(de),u.add(de);let Te=(o.get(de)??new Set).values();A.pendingChild=de,D.push({node:de,iter:Te,pendingChild:null})}}}let p=new Map,h=new Array(a.length);for(let C=0;C<a.length;C++)h[C]=a[C].length,p.set(C,new Set);for(let[C,D]of o){let k=s.get(C);for(let A of D){let Se=s.get(A);Se!==k&&p.get(k).add(Se)}}let g=new Array(a.length),b=new Array(a.length);for(let C=0;C<a.length;C++){let D=[],k=0;for(let A of p.get(C)){let Se=b[A];Se>k&&(k=Se,D=g[A])}g[C]=[C,...D],b[C]=h[C]+k}function S(C){return g[C]}let x=a.map(C=>[...C].sort()),I=new Set,L=[];for(let C=0;C<a.length;C++){let D=S(C),k=[];for(let Se of D)k.push(...x[Se]);if(k.length<r)continue;let A=k.join(" ");I.has(A)||(I.add(A),L.push(Yk(k)))}return L.sort((C,D)=>D.depth-C.depth),Zk(L).slice(0,n)}function Yk(e){return{chain:e,depth:e.length,actionTier:"signal",chainKind:"transitive-dependency-depth",evidenceReasons:[`${e.length} file(s) form the representative transitive dependency path`,"cycles are condensed before longest-path calculation"],recommendation:"Review whether the chain crosses ownership or layer boundaries; shorten it only when the dependency direction is accidental."}}function Zk(e){let t=[];for(let n of e)t.some(i=>ew(n.chain,i.chain))||t.push(n);return t}function ew(e,t){if(e.length>=t.length)return!1;let n=t.length-e.length;for(let i=0;i<e.length;i++)if(e[i]!==t[n+i])return!1;return!0}function Ha(e,t){let n=B(e,t);if(!n)return[];let i=e.get(`SELECT symbol, enclosing_symbol FROM global_symbols
458
- WHERE id = ? LIMIT 1`,n.symbolId);if(!i)return[];let r=[{symbol:i.symbol,shortName:y(i.symbol),depth:0}],o=i.enclosing_symbol,s=1,a=new Set([i.symbol]);for(;o&&!a.has(o)&&s<20;){a.add(o);let d=e.get("SELECT symbol, enclosing_symbol FROM global_symbols WHERE symbol = ?",o);if(!d)break;r.push({symbol:d.symbol,shortName:y(d.symbol),depth:s}),o=d.enclosing_symbol,s++}if(r.length>1)return r;let c=pe(i.symbol);if("kind"in c)return r;let l=c.descriptors;if(l.length<=1)return r;let u=[r[0]];for(let d=l.length-2,m=1;d>=0;d--,m++){let h=l.slice(0,d+1).map(g=>g.suffix==="method"?`${g.name}()`:g.name.replace(/\.(ts|tsx|js|jsx|mjs|cjs|py|pyi|rs|java|scala|kt|kts|rb|go|cs|vb|dart|php|c|cc|cpp|cxx|h|hpp)$/,"")).join(":");u.push({symbol:h,shortName:h,depth:m})}return u}function Xi(e,t,n={}){let i=B(e,t);if(!i)return null;let r=n.semantic!==!1,o=qe(e,i,{limit:50,semantic:r}),s=si(Ae(e,i,{limit:50,additive:!0,callableOnly:!0,semantic:r}));return{symbol:i.symbol,shortName:y(i.symbol),callers:o.map(a=>({symbol:a.symbol,shortName:y(a.symbol),file:a.file})),callees:s.map(a=>({symbol:a.symbol,shortName:y(a.symbol),file:a.file}))}}function Le(e,t){let n=new Set;for(let i of e)t.has(i)&&n.add(i);return n}function ge(e,t){let n=new Set;for(let i of e)t.has(i)||n.add(i);return n}function Ht(e,t){if(e.size===0&&t.size===0)return 0;let n=0;for(let r of e)t.has(r)&&(n+=1);let i=e.size+t.size-n;return i===0?0:n/i}function Cm(e,t){if(e.size===0)return 0;let n=0;for(let i of e)t.has(i)&&(n+=1);return n/e.size}function Va(e){let t=e.length;if(t===0)return new Map;let n=new Map;for(let r of e)for(let o of r)n.set(o,(n.get(o)??0)+1);let i=new Map;for(let[r,o]of n)i.set(r,Math.log(t/o));return i}function tw(e){let t=[...e.values()].sort((i,r)=>i-r);if(t.length===0)return 0;let n=Math.floor(t.length/2);return t.length%2===0?(t[n-1]+t[n])/2:t[n]}function vm(e,t,n){let i=Le(e,t);if(i.size===0)return{similarity:0,significantShared:[],trivialShared:[]};let r=0,o=0,s=0,a=new Set([...e,...t]);for(let p of a){let h=n.get(p)??0,g=e.has(p)?h:0,b=t.has(p)?h:0;r+=g*b,o+=g*g,s+=b*b}let c=Math.sqrt(o)*Math.sqrt(s),l=c>0?r/c:0,u=tw(n),d=[],m=[];for(let p of i)(n.get(p)??0)>=u?d.push(p):m.push(p);return d.sort((p,h)=>(n.get(h)??0)-(n.get(p)??0)),{similarity:l,significantShared:d,trivialShared:m}}function Zi(e,t,n={}){let{minSimilarity:i=.4,limit:r=20}=n,o=ow(e,t,{semantic:n.semantic!==!1});if(!o)return[];if(!se(o.symbol))return[];let s=nw(e,o,i,{scanLimit:n.scanLimit,semantic:n.semantic!==!1});return s.length>0?s.slice(0,r):pw(e,t,{minSimilarity:i,limit:r})}function nw(e,t,n,i){let r=cw(e,{minCallees:3,scanLimit:i.scanLimit,semantic:i.semantic}),o=uw(t,r),s=Va([t,...r.corpus].map(c=>c.callees)),a=[];for(let c of o){if(c.callees.size<3)continue;let l=wm(t,c,s,{minSimilarity:n,requireSignificantShared:1,requireSharedCount:0});l&&a.push(l)}return a.sort((c,l)=>l.similarity-c.similarity),a}function wm(e,t,n,i){let{similarity:r,significantShared:o}=vm(e.callees,t.callees,n);if(r<i.minSimilarity)return null;let s=Le(e.callees,t.callees).size;if(o.length<i.requireSignificantShared&&s<i.requireSharedCount)return null;let a=o.length>0?o:[...Le(e.callees,t.callees)],c=Lm(a,"callees");return{symbolA:e.symbol,shortNameA:y(e.symbol),fileA:e.file,symbolB:t.symbol,shortNameB:y(t.symbol),fileB:t.file,similarity:r,similarityBasis:"callees",sharedCallees:a.map(y),uniqueToA:[...ge(e.callees,t.callees)].map(y),uniqueToB:[...ge(t.callees,e.callees)].map(y),...c}}function kt(e,t={}){let{minSimilarity:n=.5,limit:i=20,scope:r,minCallees:o=4,crossFileOnly:s=!1,scanLimit:a}=t,c=Co(e,{minCallees:o,scope:r,scanLimit:a,semantic:t.semantic!==!1}),l=Va(c.map(b=>b.callees)),u=new Map;for(let b of c)for(let S of b.callees)u.set(S,(u.get(S)??0)+1);let d=Math.max(8,Math.ceil(Math.sqrt(c.length))),m=new Map;for(let b=0;b<c.length;b+=1)for(let S of c[b].callees){if((u.get(S)??0)>d)continue;let x=m.get(S);x||(x=[],m.set(S,x)),x.push(b)}let p=[],h=0,g=new Set;for(let b=0;b<c.length;b+=1){let S=c[b],x=new Set;for(let I of S.callees){let L=m.get(I);if(L)for(let C of L)C>b&&x.add(C)}for(let I of x){let L=`${b}|${I}`;if(g.has(L))continue;g.add(L);let C=c[I];if(s&&S.file===C.file)continue;if(S.paramCount>=0&&C.paramCount>=0){let k=Math.abs(S.paramCount-C.paramCount),A=Math.max(2,Math.ceil(Math.max(S.paramCount,C.paramCount)*.5));if(k>A)continue}let D=wm(S,C,l,{minSimilarity:n,requireSignificantShared:2,requireSharedCount:4});D&&(iw(p,D,i,h),h+=1)}}return p.sort((b,S)=>S.result.similarity-b.result.similarity||b.order-S.order),p.map(b=>b.result)}function iw(e,t,n,i){if(n<=0)return;if(e.length<n){e.push({result:t,order:i});return}let r=0;for(let s=1;s<e.length;s+=1){let a=e[s],c=e[r];(a.result.similarity<c.result.similarity||a.result.similarity===c.result.similarity&&a.order>c.order)&&(r=s)}let o=e[r];t.similarity<=o.result.similarity||(e[r]={result:t,order:i})}var rw=["ScipDatabase#all","ScipDatabase#get","ScipDatabase#prepare","ScipDatabase#pathExclusionsFor","ScipDatabase#isIgnored","ScipDatabase#symbolNoiseFor","PerDbValue#get","PerDbValue#has",":storage:db:ScipDatabase:all",":storage:db:ScipDatabase:get",":storage:db:ScipDatabase:prepare",":storage:db:ScipDatabase:pathExclusionsFor",":storage:db:ScipDatabase:isIgnored",":storage:db:ScipDatabase:symbolNoiseFor",":storage:per-db-cache:PerDbValue:get",":storage:per-db-cache:PerDbValue:has"];function ow(e,t,n){let i=B(e,t),r=new T(e);if(!i)return null;let o=Ae(e,i,{semantic:n.semantic});return{symbol:i.symbol,file:i.relativePath,callees:vo(o.map(s=>s.symbol)),paramCount:r.callableSignature(i)?.paramCount??-1}}var sw=Y("callee-fingerprint-corpus",{clearGroups:["whole-project","definition-catalog"]}),aw=Y("callee-fingerprint-index",{clearGroups:["whole-project","definition-catalog"]});function Co(e,t){let{minCallees:n,scope:i,excludeSymbol:r,scanLimit:o}=t,s=t.semantic!==!1,a=sw.get(e,()=>new Map),c=`${n}|${i??""}|${o??""}|${s}`,l=a.get(c);return l||(l=dw(e,{minCallees:n,scope:i,scanLimit:o,semantic:s}),a.set(c,l)),r===void 0?l:l.filter(u=>u.symbol!==r)}function cw(e,t){let{minCallees:n,scope:i,scanLimit:r}=t,o=t.semantic!==!1,s=aw.get(e,()=>new Map),a=`${n}|${i??""}|${r??""}|${o}`,c=s.get(a);return c||(c=lw(Co(e,{minCallees:n,scope:i,scanLimit:r,semantic:o})),s.set(a,c)),c}function lw(e){let t=new Map;for(let r of e)for(let o of r.callees)t.set(o,(t.get(o)??0)+1);let n=Math.max(8,Math.ceil(Math.sqrt(e.length))),i=new Map;for(let r of e)for(let o of r.callees){if((t.get(o)??0)>n)continue;let s=i.get(o);s||(s=[],i.set(o,s)),s.push(r)}return{corpus:e,candidateByCallee:i,docFreq:t,ubiquityThreshold:n}}function uw(e,t){let n=new Map;for(let i of e.callees)for(let r of t.candidateByCallee.get(i)??[])r.symbol!==e.symbol&&n.set(r.symbol,r);return n.size>0?[...n.values()]:t.corpus.filter(i=>i.symbol!==e.symbol)}function dw(e,t){let{minCallees:n,scope:i,scanLimit:r,semantic:o}=t,s=new T(e),a=Ue(s.productionCallableDefinitions({scope:i,minLoc:5,sortByLocDesc:typeof r=="number"&&r>0}),r),c=s.calleeMap(a,{semantic:o});return a.map(l=>({symbol:l.symbol,file:l.relativePath,callees:vo((c.get(l.symbolId)??[]).map(u=>u.symbol)),paramCount:s.callableSignature(l)?.paramCount??-1})).filter(l=>l.callees.size>=n)}function vo(e){return new Set([...e].filter(t=>!mw(t)))}function mw(e){return rw.some(t=>e.includes(t))}function pw(e,t,n){let i=bw(e,t);if(!i||i.tokens.size<3)return[];let r=n.minSimilarity>=.5?n.minSimilarity:.3,o=[],s=kw(i,vw(e));for(let a of s){if(a.symbol===i.symbol||a.tokens.size<3)continue;let c=Le(i.tokens,a.tokens);if(c.size<2)continue;let l=new Set([...i.tokens,...a.tokens]),u=l.size>0?c.size/l.size:0;u<r||o.push({symbolA:i.symbol,shortNameA:y(i.symbol),fileA:i.file,symbolB:a.symbol,shortNameB:y(a.symbol),fileB:a.file,similarity:u,similarityBasis:"source-tokens",sharedCallees:[...c].sort(),uniqueToA:[...ge(i.tokens,a.tokens)].sort(),uniqueToB:[...ge(a.tokens,i.tokens)].sort(),...Lm([...c],"source-tokens")})}return o.sort((a,c)=>c.similarity-a.similarity||a.shortNameB.localeCompare(c.shortNameB)),o.slice(0,n.limit)}function Lm(e,t){let n=e.flatMap(Ua),i=e.flatMap(b=>Rm(b,t)),r=qa(n,Dm),o=qa(n,Im),s=qa(i,Wa),a=[...new Set(i.filter(km))],c=e.filter(b=>{let S=Rm(b,t);return S.some(x=>Wa.has(x))&&S.some(km)}).length,l=[];r.length>0&&l.push(`access/query scaffolding: ${r.slice(0,5).join(", ")}`),o.length>0&&l.push(`framework/generic scaffolding: ${o.slice(0,5).join(", ")}`),s.length>0&&l.push(`domain behavior verbs: ${s.slice(0,5).join(", ")}`),s.length>0&&a.length>0&&l.push(`domain-specific terms: ${a.slice(0,5).join(", ")}`);let u=t==="source-tokens"&&n.length>0&&n.every(b=>Pm.has(b));u&&l.push("shared source tokens are generic scaffolding");let d=s.length>0&&a.length>0,m=r.length+o.length>0,p=t==="callees"&&d&&e.length>=4&&a.length>=4&&c>=2,h=p?"domain-behavior":d?m?"mixed":"domain-behavior":r.length>0?"access-query-scaffolding":o.length>0||u?"framework-scaffolding":"structural-overlap";h==="structural-overlap"&&e.length>0&&l.push(`shared ${t} overlap has no recognized domain or scaffolding category`);let g=h==="domain-behavior"&&(e.length>=3||p)?"direct":"signal";return{evidenceClass:h,actionTier:g,evidenceClassReasons:l,recommendation:fw(h,g)}}function fw(e,t){return t==="direct"?"Shared domain behavior looks concrete; review for an extract/reuse opportunity.":e==="mixed"?"Shared evidence mixes domain behavior with scaffolding; review semantics before extracting anything.":e==="access-query-scaffolding"?"Shared evidence is mostly access/query scaffolding; compare product semantics before reusing code.":e==="structural-overlap"?"Shared structure has no domain or scaffolding classification; inspect names and behavior before reusing code.":"Shared evidence is mostly framework or generic scaffolding; treat as a contextual signal."}function qa(e,t){return[...new Set(e.filter(n=>t.has(n)))]}function Ua(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(t=>t.length>1)}function Rm(e,t){if(t==="source-tokens")return Ua(e);let n=$(e);return Ua(n.length>0?n:gw(e))}function gw(e){return e.replace(/[()`]/g," ").replace(/\.[a-z][a-z0-9]+(?=\s|$)/gi," ").split(/[:/\\\s]+/).map(i=>i.trim()).filter(i=>/[A-Za-z]/.test(i)).at(-1)?.replace(/\.$/,"")??e}function km(e){return e.length>3&&!Wa.has(e)&&!Dm.has(e)&&!Im.has(e)&&!Pm.has(e)&&!hw.has(e)}var Wa=new Set(["archive","assign","book","cancel","create","delete","ensure","export","import","notify","persist","publish","restore","schedule","send","set","submit","sync","update","upload","validate","write"]),Dm=new Set(["access","auth","authorize","cache","context","db","find","get","guard","list","permission","permissions","prisma","query","request","response","role","route","session","sql","where"]),Im=new Set(["bytes","computed","crypto","describe","effect","expect","fetch","filter","hex","hook","json","map","mounted","on","promise","random","react","reduce","ref","render","state","test","token","trim","uuid","vue","watch"]),Pm=new Set(["bytes","crypto","data","false","get","hex","id","key","map","name","num","random","result","secret","set","string","to","token","true","type","value"]),hw=new Set(["best","backend","conflict","database","effect","effects","error","errors","frontend","found","helpers","javascript","module","modules","scip","shared","source","typescript","utils","with","workflow","workflows"]);function bw(e,t){let n=B(e,t);if(!n||!se(n.symbol))return null;let i=yw(e,n);return i?{symbol:n.symbol,file:n.relativePath,tokens:i}:null}function yw(e,t){let n=$(t.symbol),i=Nm(e,t.relativePath,t.startLine,t.endLine,n),r=Em(i,n);return r.size>0?r:null}var Sw=Y("source-fingerprint-corpus",{clearGroups:["whole-project","definition-catalog"]}),xw=Y("source-fingerprint-index",{clearGroups:["whole-project","definition-catalog"]});function Cw(e){return Sw.get(e,()=>ww(e))}function vw(e){return xw.get(e,()=>Rw(Cw(e)))}function Rw(e){let t=new Map;for(let r of e)for(let o of r.tokens)t.set(o,(t.get(o)??0)+1);let n=Math.max(8,Math.ceil(Math.sqrt(e.length))),i=new Map;for(let r of e)for(let o of r.tokens){if((t.get(o)??0)>n)continue;let s=i.get(o);s||(s=[],i.set(o,s)),s.push(r)}return{corpus:e,candidateByToken:i,docFreq:t,ubiquityThreshold:n}}function kw(e,t){let n=new Map;for(let i of e.tokens)for(let r of t.candidateByToken.get(i)??[])r.symbol!==e.symbol&&n.set(r.symbol,r);return n.size>0?[...n.values()]:t.corpus.filter(i=>i.symbol!==e.symbol)}function ww(e){return new T(e).productionCallableDefinitions().map(n=>({symbol:n.symbol,file:n.relativePath,tokens:Em(Nm(e,n.relativePath,n.startLine,n.endLine,n.leaf),n.leaf)})).filter(n=>n.tokens.size>0)}function Nm(e,t,n,i,r){let o=_e(e,t);if(o.length===0)return"";if(i>=n&&i-n<=12)return o.slice(n,i+1).join(`
459
- `);let s=[new RegExp(`\\bdef\\s+${Yi(r)}\\b`),new RegExp(`\\bfun\\s+${Yi(r)}\\b`),new RegExp(`\\bfn\\s+${Yi(r)}\\b`),new RegExp(`\\bfunction\\s+${Yi(r)}\\b`),new RegExp(`\\b${Yi(r)}\\s*\\(`)],a=o.findIndex(c=>s.some(l=>l.test(c)));if(a>=0){let c=a;for(let l=a+1;l<o.length&&l<=a+8;l++){let u=o[l]??"";if(l>a&&Dw(u)||(c=l,u.trim()===""&&l>a+1))break}return o.slice(a,c+1).join(`
469
+ LIMIT ?`,n).filter(s=>!e.isIgnored(s.file1)&&!e.isIgnored(s.file2)).map(s=>Km(s.file1,s.file2,s.shared))}function Km(e,t,n){return{file1:e,file2:t,sharedSymbols:n,actionTier:"signal",couplingKind:"shared-symbol-coupling",evidenceReasons:[`${n} symbol(s) are defined in one file and referenced by the other`],recommendation:"Review whether the shared symbol surface is an intentional boundary or hidden coordination pressure before moving code."}}function Sn(e,t={}){let{scope:n,maxDepth:r=10}=t,i=re(e,n),o=[],s=new Set,a=new Set,c=[];function l(d,m){if(m>r)return;if(a.has(d)){let h=c.indexOf(d);if(h!==-1){let g=c.slice(h).concat(d),y=g.indexOf(g.reduce((k,D)=>k<D?k:D)),S=[...g.slice(y,-1),...g.slice(0,y),g[y]],C=S.join(" -> ");u.has(C)||(u.add(C),o.push({path:S,kind:sL(S)}))}return}if(s.has(d))return;s.add(d),a.add(d),c.push(d);let f=i.get(d);if(f)for(let h of f)l(h,m+1);c.pop(),a.delete(d)}let u=new Set;for(let d of i.keys())s.has(d)||l(d,0);return o.sort((d,m)=>d.kind!==m.kind?d.kind==="real"?-1:1:d.path.length-m.path.length),o}function sL(e){for(let r of e){let i=J(r);if(i==="test"||i==="barrel"||i==="entry")return"module-hierarchy"}if(e.length!==3)return"real";let[t,n]=e;return!t||!n?"real":ko(t)||ko(n)||Xm(t,n)||Xm(n,t)||Qm(t,n)||Qm(n,t)||J(t)==="entry"||J(n)==="entry"?"module-hierarchy":"real"}function Xm(e,t){if(!/\.rs$/.test(e)||!/\.rs$/.test(t))return!1;let n=t.replace(/\.rs$/,"/");return e.startsWith(n)?!e.slice(n.length).includes("/"):!1}function Qm(e,t){if(!/\.rs$/.test(e)||!/\.rs$/.test(t))return!1;let n=e.replace(/\.rs$/,""),r=t.replace(/\.rs$/,"");if(n===r+"_tests"||n===r+"/tests")return!0;let i=e.split("/"),o=t.split("/");if(i.length===o.length&&i.includes("tests")&&o.includes("src")){let s=i[i.length-1],a=o[o.length-1];if(s&&s===a)return!0}return!1}function nc(e,t={}){let{limit:n=20,scope:r,minFanIn:i=2,minFanOut:o=2,scanLimit:s}=t,a=new T(e);return We(a.productionCallableDefinitions({scope:r,requireCallableSymbol:!0,includeSuppressed:!0,sortByLocDesc:typeof s=="number"&&s>0}),s).map(u=>aL(e,u,t.semantic!==!1)).filter(u=>u.fanIn>=i&&u.fanOut>=o).sort((u,d)=>d.score-u.score||d.fanIn-u.fanIn).slice(0,n)}function aL(e,t,n){let r=new Set(Ue(e,t,{limit:500,semantic:n}).map(s=>s.file)).size,i=new Set(je(e,t,{limit:500,semantic:n}).filter(s=>s.file!==t.relativePath).map(s=>`${s.symbol}|${s.file}`)).size,o=r*i;return{symbol:t.symbol,shortName:b(t.symbol),fanIn:r,fanOut:i,score:o,definedIn:t.relativePath,actionTier:"signal",riskKind:"coordination-hotspot",evidenceReasons:[`${r} incoming file(s) reference this symbol`,`${i} distinct cross-file callee symbol(s) are reached from it`,`centrality score is ${o} (fan-in * fan-out)`],recommendation:"Review ownership, API stability, and caller groups before changing this central symbol; do not refactor solely from graph centrality."}}function xn(e,t={}){let{scope:n,minLoc:r=3,scanLimit:i}=t,o=new T(e),s=t.semantic!==!1,a=We(o.productionCallableDefinitions({scope:n,minLoc:r,excludeEntrySurfaces:!0,excludeRustTraitImplMembers:!0,includeSuppressed:!0,sortByLocDesc:typeof i=="number"&&i>0}),i),c=o.crossFileCallerMap(a,{semantic:!1}),l=new Set(c.keys());for(let g of o.frameworkReferencedSymbolIds(a))l.add(g);let u=o.symbolsWithNonSelfCallees(a,{additive:!1,semantic:!1}),d=a.filter(g=>!l.has(g.symbolId)).filter(g=>!u.has(g.symbolId));if(s&&d.length>0){for(let g of o.crossFileCallerMap(d,{semantic:!0}).keys())l.add(g);for(let g of o.symbolsWithNonSelfCallees(d,{additive:!1,semantic:!0}))u.add(g);d=d.filter(g=>!l.has(g.symbolId)).filter(g=>!u.has(g.symbolId))}let m=o.sourceFallbackCallerFiles(d);for(let g of m.keys())l.add(g);let f=d.filter(g=>!l.has(g.symbolId)),h=o.symbolsWithNonSelfCallees(f,{additive:!0,semantic:s});for(let g of h)u.add(g);return f.filter(g=>!u.has(g.symbolId)).sort((g,y)=>q(y)-q(g)||g.relativePath.localeCompare(y.relativePath)||g.startLine-y.startLine).map(g=>({symbol:g.symbol,shortName:b(g.symbol),relativePath:g.relativePath,startLine:g.startLine,endLine:g.endLine,loc:q(g)}))}var ic={0:"UnspecifiedKind",1:"AbstractMethod",2:"Accessor",3:"Array",4:"Assertion",5:"AssociatedType",6:"Attribute",7:"Axiom",8:"Boolean",9:"Class",10:"Constant",11:"Constructor",12:"Contract",13:"DataFamily",14:"DefinitionMacro",15:"Delegate",16:"Enum",17:"EnumMember",18:"Error",19:"Event",20:"Fact",21:"Field",22:"File",23:"Function",24:"Getter",25:"Grammar",26:"Instance",27:"Interface",28:"Key",29:"Lang",30:"Lemma",31:"Library",32:"Macro",33:"Method",34:"MethodAlias",35:"MethodReceiver",36:"MethodSpecification",37:"Message",38:"Modifier",39:"Module",40:"Namespace",41:"Null",42:"Number",43:"Object",44:"Operator",45:"Package",46:"PackageObject",47:"Parameter",48:"ParameterLabel",49:"Pattern",50:"Predicate",51:"Property",52:"Protocol",53:"ProtocolMethod",54:"PureVirtualMethod",55:"Quasiquoter",56:"SelfParameter",57:"Setter",58:"Signature",59:"SingletonClass",60:"SingletonMethod",61:"StaticDataMember",62:"StaticEvent",63:"StaticField",64:"StaticMethod",65:"StaticProperty",66:"StaticVariable",67:"String",68:"Struct",69:"Subscript",70:"Tactic",71:"Theorem",72:"ThisParameter",73:"Trait",74:"TraitMethod",75:"Type",76:"TypeAlias",77:"TypeClass",78:"TypeClassMethod",79:"TypeFamily",80:"TypeParameter",81:"Union",82:"Value",83:"Variable"},rc=new Map;for(let[e,t]of Object.entries(ic))rc.set(t.toLowerCase(),Number(e));var Ym=500;function cL(e){let t=parseInt(e,10);if(!isNaN(t))return t;let n=e.toLowerCase(),r=rc.get(n);if(r!==void 0)return r;for(let[i,o]of rc)if(i.includes(n))return o;return null}function oc(e,t,n={}){let{scope:r,limit:i=100}=n,o=cL(t);return o===null?[]:lL(e,r).map(a=>({row:a,resolvedKind:ep(a)})).filter(a=>a.resolvedKind===o).slice(0,i).map(({row:a,resolvedKind:c})=>({symbol:a.symbol,shortName:b(a.symbol),kind:c,kindName:ic[c]??"Unknown",relativePath:a.relative_path,startLine:a.start_line,endLine:a.end_line}))}function sc(e,t={}){let n=uL(e,t.scope);for(let r of dL(e,t.scope)){let i=ep(r);i===null||i===0||n.set(i,(n.get(i)??0)+1)}return[...n.entries()].sort((r,i)=>i[1]-r[1]||r[0]-i[0]).map(([r,i])=>({kind:r,kindName:ic[r]??"Unknown",count:i}))}function lL(e,t){return ut(e,{scope:t}).map(mL)}function uL(e,t){let n=new Map;for(let r of Zm(j(e,{scope:t,includeIgnored:!1}))){let i=r.map(()=>"?").join(", "),o=e.all(`SELECT gs.kind AS kind, COUNT(*) AS count
470
+ FROM defn_enclosing_ranges der
471
+ JOIN global_symbols gs ON der.symbol_id = gs.id
472
+ JOIN documents d ON der.document_id = d.id
473
+ WHERE gs.kind IS NOT NULL
474
+ AND gs.kind != 0
475
+ AND gs.symbol NOT LIKE '%#'
476
+ AND d.relative_path IN (${i})
477
+ GROUP BY gs.kind`,...r);for(let s of o)n.set(s.kind,(n.get(s.kind)??0)+s.count)}return n}function dL(e,t){let n=[];for(let r of Zm(j(e,{scope:t,includeIgnored:!1}))){let i=r.map(()=>"?").join(", ");n.push(...e.all(`SELECT gs.symbol,
478
+ gs.kind,
479
+ gs.documentation,
480
+ gs.enclosing_symbol,
481
+ d.relative_path,
482
+ der.start_line,
483
+ der.end_line
484
+ FROM defn_enclosing_ranges der
485
+ JOIN global_symbols gs ON der.symbol_id = gs.id
486
+ JOIN documents d ON der.document_id = d.id
487
+ WHERE (gs.kind IS NULL OR gs.kind = 0 OR gs.symbol LIKE '%#')
488
+ ${e.symbolNoiseFor("gs")}
489
+ AND d.relative_path IN (${i})
490
+ ORDER BY d.relative_path, der.start_line, der.end_line, gs.symbol`,...r))}return n}function Zm(e){let t=[];for(let n=0;n<e.length;n+=Ym)t.push(e.slice(n,n+Ym));return t}function mL(e){return{symbol:e.symbol,kind:e.kind,documentation:e.documentation,enclosing_symbol:e.enclosingSymbol,relative_path:e.relativePath,start_line:e.startLine,end_line:e.endLine}}function ep(e){return e.kind!==null&&e.kind!==0?pL(e.kind,e.symbol,e.documentation):fL(e.symbol,e.documentation,e.enclosing_symbol)}function pL(e,t,n){let r=(n??"").toLowerCase();if(ee(t)==="type"){if(r.includes("type "))return 76;if(r.includes("interface "))return 27;if(r.includes("struct "))return 68;if(r.includes("trait "))return 73;if(r.includes("class "))return 9}return e}function fL(e,t,n){let r=ge(e);if("kind"in r)return null;let i=r.descriptors,o=i[i.length-2]??null,s=ee(e),a=(t??"").toLowerCase();return s==="type"?a.includes("type ")?76:a.includes("interface ")?27:a.includes("struct ")?68:a.includes("trait ")?73:(a.includes("class "),9):s==="method"?o?.suffix==="type"?33:23:s==="namespace"?39:s!=="term"?null:a.includes("async def ")||a.includes("def ")?23:(n?ee(n):o?.suffix??null)==="type"?21:83}function ac(e,t={}){let{limit:n=10,scope:r,minDepth:i=3}=t,o=re(e,r),s=new Map,a=[],c=new Map,l=new Map,u=new Set,d=[],m=0;for(let x of o.keys()){if(c.has(x))continue;let I=[],M=(o.get(x)??new Set).values();for(c.set(x,m),l.set(x,m),m+=1,d.push(x),u.add(x),I.push({node:x,iter:M,pendingChild:null});I.length>0;){let L=I[I.length-1];if(L.pendingChild!==null){let Fe=L.pendingChild;L.pendingChild=null,l.set(L.node,Math.min(l.get(L.node),l.get(Fe)))}let G=L.iter.next();if(G.done){if(l.get(L.node)===c.get(L.node)){let Fe=[];for(;;){let Ne=d.pop();if(u.delete(Ne),Fe.push(Ne),s.set(Ne,a.length),Ne===L.node)break}a.push(Fe)}I.pop();continue}let xe=G.value;if(c.has(xe))u.has(xe)&&l.set(L.node,Math.min(l.get(L.node),c.get(xe)));else{c.set(xe,m),l.set(xe,m),m+=1,d.push(xe),u.add(xe);let Fe=(o.get(xe)??new Set).values();L.pendingChild=xe,I.push({node:xe,iter:Fe,pendingChild:null})}}}let f=new Map,h=new Array(a.length);for(let x=0;x<a.length;x++)h[x]=a[x].length,f.set(x,new Set);for(let[x,I]of o){let M=s.get(x);for(let L of I){let G=s.get(L);G!==M&&f.get(M).add(G)}}let g=new Array(a.length),y=new Array(a.length);for(let x=0;x<a.length;x++){let I=[],M=0;for(let L of f.get(x)){let G=y[L];G>M&&(M=G,I=g[L])}g[x]=[x,...I],y[x]=h[x]+M}function S(x){return g[x]}let C=a.map(x=>[...x].sort()),k=new Set,D=[];for(let x=0;x<a.length;x++){let I=S(x),M=[];for(let G of I)M.push(...C[G]);if(M.length<i)continue;let L=M.join(" ");k.has(L)||(k.add(L),D.push(gL(M)))}return D.sort((x,I)=>I.depth-x.depth),hL(D).slice(0,n)}function gL(e){return{chain:e,depth:e.length,actionTier:"signal",chainKind:"transitive-dependency-depth",evidenceReasons:[`${e.length} file(s) form the representative transitive dependency path`,"cycles are condensed before longest-path calculation"],recommendation:"Review whether the chain crosses ownership or layer boundaries; shorten it only when the dependency direction is accidental."}}function hL(e){let t=[];for(let n of e)t.some(r=>yL(n.chain,r.chain))||t.push(n);return t}function yL(e,t){if(e.length>=t.length)return!1;let n=t.length-e.length;for(let r=0;r<e.length;r++)if(e[r]!==t[n+r])return!1;return!0}function cc(e,t){let n=B(e,t);if(!n)return[];let r=e.get(`SELECT symbol, enclosing_symbol FROM global_symbols
491
+ WHERE id = ? LIMIT 1`,n.symbolId);if(!r)return[];let i=[{symbol:r.symbol,shortName:b(r.symbol),depth:0}],o=r.enclosing_symbol,s=1,a=new Set([r.symbol]);for(;o&&!a.has(o)&&s<20;){a.add(o);let d=e.get("SELECT symbol, enclosing_symbol FROM global_symbols WHERE symbol = ?",o);if(!d)break;i.push({symbol:d.symbol,shortName:b(d.symbol),depth:s}),o=d.enclosing_symbol,s++}if(i.length>1)return i;let c=ge(r.symbol);if("kind"in c)return i;let l=c.descriptors;if(l.length<=1)return i;let u=[i[0]];for(let d=l.length-2,m=1;d>=0;d--,m++){let h=l.slice(0,d+1).map(g=>g.suffix==="method"?`${g.name}()`:g.name.replace(/\.(ts|tsx|js|jsx|mjs|cjs|py|pyi|rs|java|scala|kt|kts|rb|go|cs|vb|dart|php|c|cc|cpp|cxx|h|hpp)$/,"")).join(":");u.push({symbol:h,shortName:h,depth:m})}return u}function li(e,t,n={}){let r=B(e,t);if(!r)return null;let i=n.semantic!==!1,o=Ue(e,r,{limit:50,semantic:i}),s=br(je(e,r,{limit:50,additive:!0,callableOnly:!0,semantic:i}));return{symbol:r.symbol,shortName:b(r.symbol),callers:o.map(a=>({symbol:a.symbol,shortName:b(a.symbol),file:a.file})),callees:s.map(a=>({symbol:a.symbol,shortName:b(a.symbol),file:a.file}))}}function Ge(e,t){let n=new Set;for(let r of e)t.has(r)&&n.add(r);return n}function ye(e,t){let n=new Set;for(let r of e)t.has(r)||n.add(r);return n}function Xt(e,t){if(e.size===0&&t.size===0)return 0;let n=0;for(let i of e)t.has(i)&&(n+=1);let r=e.size+t.size-n;return r===0?0:n/r}function tp(e,t){if(e.size===0)return 0;let n=0;for(let r of e)t.has(r)&&(n+=1);return n/e.size}function lc(e,t){if(t<=0)return new Map;let n=new Map;for(let[r,i]of e)i>0&&n.set(r,Math.log(t/i));return n}function ui(e){let t=[...e.values()].sort((r,i)=>r-i);if(t.length===0)return 0;let n=Math.floor(t.length/2);return t.length%2===0?(t[n-1]+t[n])/2:t[n]}function Bo(e,t){let n=0;for(let r of e){let i=t.get(r)??0;n+=i*i}return Math.sqrt(n)}function np(e,t,n,r={}){let i=0,o=0,s=0,a=r.medianIdf??ui(n),c=[],l=[];for(let m of e){let f=n.get(m)??0;o+=f*f,t.has(m)&&(i+=f*f,f>=a?c.push(m):l.push(m))}if(c.length===0&&l.length===0)return{similarity:0,significantShared:[],trivialShared:[]};for(let m of t){let f=n.get(m)??0;s+=f*f}let u=Math.sqrt(o)*Math.sqrt(s),d=u>0?i/u:0;return c.sort((m,f)=>(n.get(f)??0)-(n.get(m)??0)),{similarity:d,significantShared:c,trivialShared:l}}function rp(e,t,n,r){let i=0,o=r.medianIdf??ui(n),s=[],a=[];for(let u of e){if(!t.has(u))continue;let d=n.get(u)??0;i+=d*d,d>=o?s.push(u):a.push(u)}if(s.length===0&&a.length===0)return{similarity:0,significantShared:[],trivialShared:[]};let c=r.magnitudeA*r.magnitudeB,l=c>0?i/c:0;return s.sort((u,d)=>(n.get(d)??0)-(n.get(u)??0)),{similarity:l,significantShared:s,trivialShared:a}}function mi(e,t,n={}){let{minSimilarity:r=.4,limit:i=20}=n,o=vL(e,t,{semantic:n.semantic!==!1});if(!o)return[];if(!ce(o.symbol))return[];let s=bL(e,o,r,{scanLimit:n.scanLimit,semantic:n.semantic!==!1});return s.length>0?s.slice(0,i):NL(e,t,{minSimilarity:r,limit:i})}function bL(e,t,n,r){let i=Ho(e,{minCallees:3,scanLimit:r.scanLimit,semantic:r.semantic}),o=IL(t,i),s=SL(t,i),a=ui(s),c=Bo(t.callees,s),l=[];for(let u of o){if(u.callees.size<3)continue;let d=Bo(u.callees,s),m=sp(t,u,s,{minSimilarity:n,requireSignificantShared:1,requireSharedCount:0,medianIdf:a,magnitudeA:c,magnitudeB:d});m&&l.push(m)}return l.sort((u,d)=>d.similarity-u.similarity),l}function SL(e,t){let n=new Map(t.docFreq);for(let r of e.callees)n.set(r,(n.get(r)??0)+1);return lc(n,t.corpus.length+1)}function sp(e,t,n,r){let i=r.magnitudeA===void 0||r.magnitudeB===void 0?np(e.callees,t.callees,n,{medianIdf:r.medianIdf}):rp(e.callees,t.callees,n,{medianIdf:r.medianIdf,magnitudeA:r.magnitudeA,magnitudeB:r.magnitudeB}),{similarity:o,significantShared:s,trivialShared:a}=i;if(o<r.minSimilarity)return null;let c=s.length+a.length;if(s.length<r.requireSignificantShared&&c<r.requireSharedCount)return null;let l=s.length>0?s:a,u=ap(l,"callees");return{symbolA:e.symbol,shortNameA:b(e.symbol),fileA:e.file,symbolB:t.symbol,shortNameB:b(t.symbol),fileB:t.file,similarity:o,similarityBasis:"callees",sharedCallees:l.map(b),uniqueToA:[...ye(e.callees,t.callees)].map(b),uniqueToB:[...ye(t.callees,e.callees)].map(b),...u}}function Pt(e,t={}){let{minSimilarity:n=.5,limit:r=20,scope:i,minCallees:o=4,crossFileOnly:s=!1,scanLimit:a}=t,c=Ho(e,{minCallees:o,scope:i,scanLimit:a,semantic:t.semantic!==!1}),l=c.corpus,u=[],d=0;for(let m=0;m<l.length;m+=1){let f=l[m],h=c.weightedMagnitudes[m],g=new Set;for(let y of f.callees){let S=c.candidateIndexesByCallee.get(y);if(S)for(let C of S)C>m&&g.add(C)}for(let y of g){let S=l[y];if(s&&f.file===S.file)continue;if(f.paramCount>=0&&S.paramCount>=0){let k=Math.abs(f.paramCount-S.paramCount),D=Math.max(2,Math.ceil(Math.max(f.paramCount,S.paramCount)*.5));if(k>D)continue}let C=sp(f,S,c.idfWeights,{minSimilarity:n,requireSignificantShared:2,requireSharedCount:4,medianIdf:c.medianIdf,magnitudeA:h,magnitudeB:c.weightedMagnitudes[y]});C&&(xL(u,C,r,d),d+=1)}}return u.sort((m,f)=>f.result.similarity-m.result.similarity||m.order-f.order),u.map(m=>m.result)}function xL(e,t,n,r){if(n<=0)return;if(e.length<n){e.push({result:t,order:r});return}let i=0;for(let s=1;s<e.length;s+=1){let a=e[s],c=e[i];(a.result.similarity<c.result.similarity||a.result.similarity===c.result.similarity&&a.order>c.order)&&(i=s)}let o=e[i];t.similarity<=o.result.similarity||(e[i]={result:t,order:r})}var CL=["ScipDatabase#all","ScipDatabase#get","ScipDatabase#prepare","ScipDatabase#pathExclusionsFor","ScipDatabase#isIgnored","ScipDatabase#symbolNoiseFor","PerDbValue#get","PerDbValue#has",":storage:db:ScipDatabase:all",":storage:db:ScipDatabase:get",":storage:db:ScipDatabase:prepare",":storage:db:ScipDatabase:pathExclusionsFor",":storage:db:ScipDatabase:isIgnored",":storage:db:ScipDatabase:symbolNoiseFor",":storage:per-db-cache:PerDbValue:get",":storage:per-db-cache:PerDbValue:has"];function vL(e,t,n){let r=B(e,t),i=new T(e);if(!r)return null;let o=je(e,r,{semantic:n.semantic});return{symbol:r.symbol,file:r.relativePath,callees:Vo(o.map(s=>s.symbol)),paramCount:i.callableSignature(r)?.paramCount??-1}}var RL=Y("callee-fingerprint-corpus",{clearGroups:["whole-project","definition-catalog"]}),kL=Y("callee-fingerprint-index",{clearGroups:["whole-project","definition-catalog"]});function wL(e,t){let{minCallees:n,scope:r,excludeSymbol:i,scanLimit:o}=t,s=t.semantic!==!1,a=RL.get(e,()=>new Map),c=`${n}|${r??""}|${o??""}|${s}`,l=a.get(c);return l||(l=DL(e,{minCallees:n,scope:r,scanLimit:o,semantic:s}),a.set(c,l)),i===void 0?l:l.filter(u=>u.symbol!==i)}function Ho(e,t){let{minCallees:n,scope:r,scanLimit:i}=t,o=t.semantic!==!1,s=kL.get(e,()=>new Map),a=`${n}|${r??""}|${i??""}|${o}`,c=s.get(a);return c||(c=LL(wL(e,{minCallees:n,scope:r,scanLimit:i,semantic:o})),s.set(a,c)),c}function LL(e){let t=new Map;for(let s of e)for(let a of s.callees)t.set(a,(t.get(a)??0)+1);let n=Math.max(8,Math.ceil(Math.sqrt(e.length))),r=lc(t,e.length),i=e.map(s=>Bo(s.callees,r)),o=new Map;for(let s=0;s<e.length;s+=1){let a=e[s];for(let c of a.callees){if((t.get(c)??0)>n)continue;let l=o.get(c);l||(l=[],o.set(c,l)),l.push(s)}}return{corpus:e,candidateIndexesByCallee:o,docFreq:t,idfWeights:r,weightedMagnitudes:i,medianIdf:ui(r),ubiquityThreshold:n}}function IL(e,t){let n=new Map;for(let r of e.callees)for(let i of t.candidateIndexesByCallee.get(r)??[]){let o=t.corpus[i];o.symbol!==e.symbol&&n.set(o.symbol,o)}return n.size>0?[...n.values()]:t.corpus.filter(r=>r.symbol!==e.symbol)}function DL(e,t){let{minCallees:n,scope:r,scanLimit:i,semantic:o}=t,s=new T(e),a=We(s.productionCallableDefinitions({scope:r,minLoc:5,sortByLocDesc:typeof i=="number"&&i>0}),i),c=s.calleeMap(a,{semantic:o});return a.map(l=>({symbol:l.symbol,file:l.relativePath,callees:Vo((c.get(l.symbolId)??[]).map(u=>u.symbol)),paramCount:s.callableSignature(l)?.paramCount??-1})).filter(l=>l.callees.size>=n)}function Vo(e){return new Set([...e].filter(t=>!PL(t)))}function PL(e){return CL.some(t=>e.includes(t))}function NL(e,t,n){let r=FL(e,t);if(!r||r.tokens.size<3)return[];let i=n.minSimilarity>=.5?n.minSimilarity:.3,o=[],s=HL(r,OL(e));for(let a of s){if(a.symbol===r.symbol||a.tokens.size<3)continue;let c=Ge(r.tokens,a.tokens);if(c.size<2)continue;let l=new Set([...r.tokens,...a.tokens]),u=l.size>0?c.size/l.size:0;u<i||o.push({symbolA:r.symbol,shortNameA:b(r.symbol),fileA:r.file,symbolB:a.symbol,shortNameB:b(a.symbol),fileB:a.file,similarity:u,similarityBasis:"source-tokens",sharedCallees:[...c].sort(),uniqueToA:[...ye(r.tokens,a.tokens)].sort(),uniqueToB:[...ye(a.tokens,r.tokens)].sort(),...ap([...c],"source-tokens")})}return o.sort((a,c)=>c.similarity-a.similarity||a.shortNameB.localeCompare(c.shortNameB)),o.slice(0,n.limit)}function ap(e,t){let n=e.flatMap(dc),r=e.flatMap(y=>ip(y,t)),i=uc(n,cp),o=uc(n,lp),s=uc(r,mc),a=[...new Set(r.filter(op))],c=e.filter(y=>{let S=ip(y,t);return S.some(C=>mc.has(C))&&S.some(op)}).length,l=[];i.length>0&&l.push(`access/query scaffolding: ${i.slice(0,5).join(", ")}`),o.length>0&&l.push(`framework/generic scaffolding: ${o.slice(0,5).join(", ")}`),s.length>0&&l.push(`domain behavior verbs: ${s.slice(0,5).join(", ")}`),s.length>0&&a.length>0&&l.push(`domain-specific terms: ${a.slice(0,5).join(", ")}`);let u=t==="source-tokens"&&n.length>0&&n.every(y=>up.has(y));u&&l.push("shared source tokens are generic scaffolding");let d=s.length>0&&a.length>0,m=i.length+o.length>0,f=t==="callees"&&d&&e.length>=4&&a.length>=4&&c>=2,h=f?"domain-behavior":d?m?"mixed":"domain-behavior":i.length>0?"access-query-scaffolding":o.length>0||u?"framework-scaffolding":"structural-overlap";h==="structural-overlap"&&e.length>0&&l.push(`shared ${t} overlap has no recognized domain or scaffolding category`);let g=h==="domain-behavior"&&(e.length>=3||f)?"direct":"signal";return{evidenceClass:h,actionTier:g,evidenceClassReasons:l,recommendation:EL(h,g)}}function EL(e,t){return t==="direct"?"Shared domain behavior looks concrete; review for an extract/reuse opportunity.":e==="mixed"?"Shared evidence mixes domain behavior with scaffolding; review semantics before extracting anything.":e==="access-query-scaffolding"?"Shared evidence is mostly access/query scaffolding; compare product semantics before reusing code.":e==="structural-overlap"?"Shared structure has no domain or scaffolding classification; inspect names and behavior before reusing code.":"Shared evidence is mostly framework or generic scaffolding; treat as a contextual signal."}function uc(e,t){return[...new Set(e.filter(n=>t.has(n)))]}function dc(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(t=>t.length>1)}function ip(e,t){if(t==="source-tokens")return dc(e);let n=$(e);return dc(n.length>0?n:TL(e))}function TL(e){return e.replace(/[()`]/g," ").replace(/\.[a-z][a-z0-9]+(?=\s|$)/gi," ").split(/[:/\\\s]+/).map(r=>r.trim()).filter(r=>/[A-Za-z]/.test(r)).at(-1)?.replace(/\.$/,"")??e}function op(e){return e.length>3&&!mc.has(e)&&!cp.has(e)&&!lp.has(e)&&!up.has(e)&&!_L.has(e)}var mc=new Set(["archive","assign","book","cancel","create","delete","ensure","export","import","notify","persist","publish","restore","schedule","send","set","submit","sync","update","upload","validate","write"]),cp=new Set(["access","auth","authorize","cache","context","db","find","get","guard","list","permission","permissions","prisma","query","request","response","role","route","session","sql","where"]),lp=new Set(["bytes","computed","crypto","describe","effect","expect","fetch","filter","hex","hook","json","map","mounted","on","promise","random","react","reduce","ref","render","state","test","token","trim","uuid","vue","watch"]),up=new Set(["bytes","crypto","data","false","get","hex","id","key","map","name","num","random","result","secret","set","string","to","token","true","type","value"]),_L=new Set(["best","backend","conflict","database","effect","effects","error","errors","frontend","found","helpers","javascript","module","modules","scip","shared","source","typescript","utils","with","workflow","workflows"]);function FL(e,t){let n=B(e,t);if(!n||!ce(n.symbol))return null;let r=$L(e,n);return r?{symbol:n.symbol,file:n.relativePath,tokens:r}:null}function $L(e,t){let n=$(t.symbol),r=dp(e,t.relativePath,t.startLine,t.endLine,n),i=mp(r,n);return i.size>0?i:null}var AL=Y("source-fingerprint-corpus",{clearGroups:["whole-project","definition-catalog"]}),ML=Y("source-fingerprint-index",{clearGroups:["whole-project","definition-catalog"]});function jL(e){return AL.get(e,()=>VL(e))}function OL(e){return ML.get(e,()=>BL(jL(e)))}function BL(e){let t=new Map;for(let i of e)for(let o of i.tokens)t.set(o,(t.get(o)??0)+1);let n=Math.max(8,Math.ceil(Math.sqrt(e.length))),r=new Map;for(let i of e)for(let o of i.tokens){if((t.get(o)??0)>n)continue;let s=r.get(o);s||(s=[],r.set(o,s)),s.push(i)}return{corpus:e,candidateByToken:r,docFreq:t,ubiquityThreshold:n}}function HL(e,t){let n=new Map;for(let r of e.tokens)for(let i of t.candidateByToken.get(r)??[])i.symbol!==e.symbol&&n.set(i.symbol,i);return n.size>0?[...n.values()]:t.corpus.filter(r=>r.symbol!==e.symbol)}function VL(e){return new T(e).productionCallableDefinitions().map(n=>({symbol:n.symbol,file:n.relativePath,tokens:mp(dp(e,n.relativePath,n.startLine,n.endLine,n.leaf),n.leaf)})).filter(n=>n.tokens.size>0)}function dp(e,t,n,r,i){let o=Qe(e,t);if(o.length===0)return"";if(r>=n&&r-n<=12)return o.slice(n,r+1).join(`
492
+ `);let s=[new RegExp(`\\bdef\\s+${di(i)}\\b`),new RegExp(`\\bfun\\s+${di(i)}\\b`),new RegExp(`\\bfn\\s+${di(i)}\\b`),new RegExp(`\\bfunction\\s+${di(i)}\\b`),new RegExp(`\\b${di(i)}\\s*\\(`)],a=o.findIndex(c=>s.some(l=>l.test(c)));if(a>=0){let c=a;for(let l=a+1;l<o.length&&l<=a+8;l++){let u=o[l]??"";if(l>a&&UL(u)||(c=l,u.trim()===""&&l>a+1))break}return o.slice(a,c+1).join(`
460
493
  `)}return o.slice(n,Math.min(o.length,n+8)).join(`
461
- `)}function Em(e,t){if(!e)return new Set;let n=new Set(["public","private","protected","final","static","class","def","fun","fn","function","return","string","bool","boolean","void","unit","self","this","new","const","let","var","end","pub"]),i=Lw(t),o=e.replace(/["'`]/g," ").replace(/\b\d+\b/g," NUM ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[^A-Za-z0-9_]+/g," ").replace(/_/g," ").toLowerCase().split(/\s+/).map(s=>s.trim()).filter(s=>s.length>1).filter(s=>!n.has(s)).filter(s=>!i.has(s));return new Set(o)}function Lw(e){return new Set(e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9_]+|_/).map(t=>t.toLowerCase()).filter(t=>t.length>1))}function Dw(e){return/^\s*(?:def|fun|fn|function|class|trait|module|object|enum|interface|public|private|protected)\b/.test(e)}function Yi(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function at(e){let t=[];if(e.filePattern){let n=e.profiles.find(i=>i.file.includes(e.filePattern));if(!n)return[];for(let i of e.profiles){if(i.file===n.file)continue;let r=e.compare(n,i);r&&t.push(r)}}else{let n=typeof e.overrunFactor=="number"&&Number.isFinite(e.limit)?e.limit*e.overrunFactor:Number.POSITIVE_INFINITY;for(let i=0;i<e.profiles.length;i+=1){for(let r=i+1;r<e.profiles.length;r+=1){let o=e.compare(e.profiles[i],e.profiles[r]);o&&t.push(o)}if(t.length>n)break}}return t.sort(e.sort??((n,i)=>i.similarity-n.similarity)),t.slice(0,e.limit)}function Ga(e,t={}){let{minSimilarity:n=.5,limit:i=20,scope:r,filePattern:o}=t,s=t.minDeps??(o?1:3),{profiles:a,distinctiveDeps:c}=Iw(e,{scope:r,minDeps:s});return at({profiles:a,limit:i,filePattern:o,overrunFactor:5,compare:(l,u)=>Nw(l,u,n,c)})}function Iw(e,t){let{scope:n,minDeps:i}=t,r=ne(e,n),{universalDeps:o,distinctiveDeps:s}=Pw(r),a=[];for(let[c,l]of r)l.size>=i&&a.push({file:c,deps:new Set([...l].filter(u=>!o.has(u)))});return{profiles:a,distinctiveDeps:s}}function Pw(e){let t=new Set,n=new Set,i=e.size;if(i===0)return{universalDeps:t,distinctiveDeps:n};let r=new Map;for(let s of e.values())for(let a of s)r.set(a,(r.get(a)??0)+1);let o=Math.max(3,Math.ceil(i*.03));for(let[s,a]of r)a>=5&&a/i>.3?t.add(s):a<=o&&n.add(s);return{universalDeps:t,distinctiveDeps:n}}function Nw(e,t,n,i){let r=new Set;for(let l of e.deps)t.deps.has(l)&&r.add(l);if(r.size<3||e.deps.size<4||t.deps.size<4)return null;let o=0;for(let l of r)i.has(l)&&o++;if(o<2)return null;let s=Ht(e.deps,t.deps);if(s<n)return null;let a=[];for(let l of e.deps)t.deps.has(l)||a.push(l);let c=[];for(let l of t.deps)e.deps.has(l)||c.push(l);return{fileA:e.file,fileB:t.file,similarity:s,sharedDeps:[...r],uniqueToA:a,uniqueToB:c}}function Ro(e){let t=[],n=[],i=[];for(let l of e.primitiveGroups)l.values.length!==0&&Tm(l.bucket,n,i).push(`${l.reasonPrefix}: ${l.values.join(", ")}`);for(let l of e.nameGroups)Ew(l.names,l.label,e.genericWords,e.stripPrefixes??[],t,Tm(l.fallbackBucket,n,i));let r=t.length>0,o=n.length>0,s=i.length>0,a=r?o||s?"mixed":"domain-behavior":s?"shared-abstraction":"generic-workflow-scaffolding";return{actionTier:a==="domain-behavior"||a==="mixed"?"signal":"support",evidenceClass:a,reasons:[...t,...i,...n].slice(0,6),recommendation:e.recommendation(a)}}function ko(e,t){if(e.size===0||t.size===0)return 0;let i=Le(e,t).size/Math.min(e.size,t.size);return Math.max(Ht(e,t),i)}function V(e,t){return[...e].filter(n=>n.startsWith(t)).map(n=>n.slice(t.length)).sort()}function Ce(e){return[...e].sort()}function Ew(e,t,n,i,r,o){let s=[],a=[];for(let c of e)Tw(c,i).filter(u=>!n.has(u)).length>0?s.push(c):a.push(c);s.length&&r.push(`${t} has domain term(s): ${s.slice(0,6).join(", ")}`),a.length&&o.push(`${t} is generic workflow: ${a.slice(0,6).join(", ")}`)}function Tw(e,t){let n=e.replace(/([A-Z])([A-Z][a-z])/g,"$1 $2").replace(/([a-z0-9])([A-Z])/g,"$1 $2");for(let i of t)n=n.replace(i,"");return n.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean)}function Tm(e,t,n){return e==="generic"?t:n}function fn(e,t={}){let{minSimilarity:n=.62,minTokens:i=8,limit:r=20,scope:o,scanLimit:s,filePattern:a}=t,c=Hn(e,{scope:o,minJsxTokens:i,scanLimit:s}).filter(l=>l.kind==="component").map(l=>({file:l.file,component:l.name,tokens:l.jsxTokens,profile:l}));return at({profiles:c,limit:r,filePattern:a,compare:(l,u)=>_w(l,u,n),sort:(l,u)=>u.similarity-l.similarity||l.fileA.localeCompare(u.fileA)||l.componentA.localeCompare(u.componentA)||l.fileB.localeCompare(u.fileB)||l.componentB.localeCompare(u.componentB)})}function _w(e,t,n){let i=Le(e.tokens,t.tokens);if(i.size<6||!$w(i))return null;let r=Ht(e.tokens,t.tokens);return r<n?null:{fileA:e.file,componentA:e.component,fileB:t.file,componentB:t.component,similarity:r,sharedTokens:Ce(i),sharedComponents:V(i,"component:"),sharedNativeTags:V(i,"native:"),sharedProps:V(i,"prop:"),sharedEvents:V(i,"event:"),sharedBindings:V(i,"binding:"),uniqueToA:Ce(ge(e.tokens,t.tokens)).slice(0,25),uniqueToB:Ce(ge(t.tokens,e.tokens)).slice(0,25),locA:e.profile.loc,locB:t.profile.loc}}function $w(e){let t=0,n=0;for(let i of e)i.startsWith("component:")&&(t+=1),(i.startsWith("prop:")||i.startsWith("event:")||i.startsWith("native:")||i.startsWith("jsx:"))&&(n+=1);return t>=1||n>=4}function gn(e,t={}){let{minSimilarity:n=.45,minSharedBehaviors:i=6,limit:r=20,scope:o,scanLimit:s,filePattern:a}=t,c=Hn(e,{scope:o,minBehaviorTokens:Math.max(3,i),scanLimit:s}).map(l=>({file:l.file,component:l.name,tokens:l.behaviorTokens,profile:l}));return at({profiles:c,limit:r,filePattern:a,compare:(l,u)=>Fw(l,u,n,i),sort:(l,u)=>u.similarity-l.similarity||l.fileA.localeCompare(u.fileA)||l.componentA.localeCompare(u.componentA)||l.fileB.localeCompare(u.fileB)||l.componentB.localeCompare(u.componentB)})}function Fw(e,t,n,i){let r=Le(e.tokens,t.tokens);if(r.size<i||!Ow(r))return null;let o=ko(e.tokens,t.tokens);if(o<n)return null;let s=V(r,"hook:"),a=V(r,"react-hook:"),c=V(r,"effect:"),l=V(r,"state:"),u=V(r,"request:"),d=V(r,"handler:"),m=V(r,"handler-verb:"),p=Aw({sharedHooks:s,sharedReactHooks:a,sharedEffects:c,sharedState:l,sharedRequests:u,sharedHandlers:d,sharedHandlerVerbs:m});return{fileA:e.file,componentA:e.component,fileB:t.file,componentB:t.component,similarity:o,sharedTokens:Ce(r),sharedHooks:s,sharedReactHooks:a,sharedEffects:c,sharedState:l,sharedRequests:u,sharedHandlers:d,sharedHandlerVerbs:m,evidenceClass:p.evidenceClass,actionTier:p.actionTier,evidenceClassReasons:p.reasons,recommendation:p.recommendation,uniqueToA:Ce(ge(e.tokens,t.tokens)).slice(0,25),uniqueToB:Ce(ge(t.tokens,e.tokens)).slice(0,25),reason:jw({sharedHooks:s,sharedReactHooks:a,sharedEffects:c,sharedState:l,sharedRequests:u,sharedHandlers:d,sharedHandlerVerbs:m}),locA:e.profile.loc,locB:t.profile.loc}}function Aw(e){return Ro({genericWords:Bw,stripPrefixes:Hw,primitiveGroups:[{values:e.sharedReactHooks,reasonPrefix:"shared React primitives",bucket:"generic"},{values:e.sharedEffects,reasonPrefix:"shared lifecycle primitive",bucket:"generic"}],nameGroups:[{names:e.sharedHooks,label:"shared hook",fallbackBucket:"shared-abstraction"},{names:e.sharedRequests,label:"shared request",fallbackBucket:"generic"},{names:e.sharedState,label:"shared state",fallbackBucket:"generic"},{names:e.sharedHandlers,label:"shared handler",fallbackBucket:"generic"},{names:e.sharedHandlerVerbs,label:"shared action verb",fallbackBucket:"generic"}],recommendation:Mw})}function Mw(e){switch(e){case"domain-behavior":return"Review for a shared hook, controller, or feature module around the named domain behavior.";case"mixed":return"Separate generic React mechanics from domain-specific behavior before extracting a shared hook.";case"shared-abstraction":return"Review the existing shared hook usage first; extract only if duplicated behavior remains outside it.";case"generic-workflow-scaffolding":return"Treat as support evidence for a repeated workflow shape, not direct hook-extraction evidence."}}function Ow(e){let t=0,n=0,i=0,r=0,o=0,s=0,a=0;for(let u of e)u.startsWith("hook:")?t+=1:u.startsWith("react-hook:")?n+=1:u.startsWith("effect:")?i+=1:u.startsWith("request:")?r+=1:u.startsWith("handler:")||u.startsWith("handler-verb:")?o+=1:u.startsWith("state:")?s+=1:u.startsWith("state-hook:")&&(a+=1);let c=s+a,l=t+n+i+r+o+c;return r>=1&&l>=4||t>=1&&(r>=1||s>=1||o>=2)&&l>=5||s>=1&&o>=2&&(i>=1||n>=2)&&l>=5}function jw(e){let t=[];return e.sharedHooks.length&&t.push(`shared hooks: ${e.sharedHooks.join(", ")}`),e.sharedReactHooks.length&&t.push(`shared React hooks: ${e.sharedReactHooks.join(", ")}`),e.sharedEffects.length&&t.push(`shared effects: ${e.sharedEffects.join(", ")}`),e.sharedState.length&&t.push(`shared state: ${e.sharedState.join(", ")}`),e.sharedRequests.length&&t.push(`shared requests: ${e.sharedRequests.join(", ")}`),e.sharedHandlers.length&&t.push(`shared handlers: ${e.sharedHandlers.slice(0,6).join(", ")}`),e.sharedHandlerVerbs.length&&t.push(`shared action verbs: ${e.sharedHandlerVerbs.slice(0,6).join(", ")}`),t.join("; ")||"shared React behavior profile"}var Bw=new Set(["add","apply","async","callback","cancel","change","clear","close","create","data","delete","draft","edit","effect","error","fetch","filter","form","handle","has","is","item","items","load","loader","loading","memo","name","open","reducer","refresh","ref","remove","request","reset","resource","row","rows","save","saving","search","select","selected","state","store","submit","toggle","update","use","value"]),Hw=[/^use(?=[A-Z])/,/^handle(?=[A-Z])/,/^is(?=[A-Z])/,/^has(?=[A-Z])/];function er(e,t={}){let{minComponentLines:n=300,minFileLines:i=800,minJsxTokens:r=80,minBehaviorTokens:o=40,limit:s=20,scope:a,scanLimit:c,filePattern:l}=t;return Hn(e,{scope:a,scanLimit:c}).filter(d=>d.kind==="component").filter(d=>!l||d.file.includes(l)||d.name.includes(l)).map(d=>Vw(d,{minComponentLines:n,minFileLines:i,minJsxTokens:r,minBehaviorTokens:o})).filter(d=>d!==null).sort((d,m)=>m.componentLines-d.componentLines||m.fileLines-d.fileLines||d.file.localeCompare(m.file)).slice(0,s)}function Vw(e,t){let n=[];e.loc>=t.minComponentLines&&n.push(`${e.loc} component line(s)`);let i=Math.max(80,Math.floor(t.minComponentLines/2));if(e.fileLines>=t.minFileLines&&e.loc>=i&&n.push(`${e.fileLines} file line(s)`),e.jsxTokens.size>=t.minJsxTokens&&n.push(`${e.jsxTokens.size} JSX structure token(s)`),e.behaviorTokens.size>=t.minBehaviorTokens&&n.push(`${e.behaviorTokens.size} behavior token(s)`),n.length===0)return null;let r=qw(e),o=Uw(e,t,r),s=Ww(e),a=Gw(r,o,s);return{file:e.file,component:e.name,componentLines:e.loc,fileLines:e.fileLines,jsxTokens:e.jsxTokens.size,behaviorTokens:e.behaviorTokens.size,dominantPressure:r,pressureKinds:o,contextKind:s,recommendationKind:a,recommendation:zw(a,s),reasons:n,loc:e.loc}}function qw(e){let t=[{axis:"component",value:e.loc},{axis:"file",value:e.fileLines},{axis:"jsx-structure",value:e.jsxTokens.size*3},{axis:"hook-behavior",value:e.behaviorTokens.size*4}];return t.sort((n,i)=>i.value-n.value),t[0]?.axis??"component"}function Uw(e,t,n){let i=[];e.loc>=t.minComponentLines&&i.push("component");let r=Math.max(80,Math.floor(t.minComponentLines/2));return e.fileLines>=t.minFileLines&&e.loc>=r&&i.push("file"),e.jsxTokens.size>=t.minJsxTokens&&i.push("jsx-structure"),e.behaviorTokens.size>=t.minBehaviorTokens&&i.push("hook-behavior"),[...new Set(i.length>0?i:[n])]}function Ww(e){let t=e.file.split(/[\\/]+/).filter(Boolean),n=t.slice(0,-1).map(l=>l.toLowerCase()),i=(t.at(-1)??e.name).replace(/\.[^.]+$/,""),r=`${i} ${e.name}`.split(/[^A-Za-z0-9]+/).filter(Boolean).map(l=>l.toLowerCase()),o=n.findIndex(l=>Jw.has(l)),s=o>=0&&n.slice(o+1).some(l=>Kw.has(l)),a=_m(i)||_m(e.name);return/(?:Page|Route|Screen|View)$/.test(i)||/(?:Page|Route|Screen|View)$/.test(e.name)||r.some(l=>Qw.has(l))||o>=0&&!s&&!a?"route-page":"component"}function _m(e){let t=e.split(/[^A-Za-z0-9]+/).filter(Boolean).map(n=>n.toLowerCase());return t.at(-1)&&$m.has(t.at(-1))?!0:[...$m].some(n=>e.endsWith(Xw(n)))}function Gw(e,t,n){return e==="hook-behavior"?"behavior-extraction":n==="route-page"?"route-page-decomposition":t.includes("hook-behavior")?"behavior-extraction":t.includes("jsx-structure")?"jsx-decomposition":t.includes("file")?"file-decomposition":e==="jsx-structure"?"jsx-decomposition":e==="file"&&!t.includes("component")?"file-decomposition":"component-decomposition"}function zw(e,t){switch(e){case"behavior-extraction":return"Extract independent state, effects, requests, or handlers into hooks, controllers, or feature modules.";case"route-page-decomposition":return"Split route/page orchestration from reusable panels and feature controllers.";case"jsx-decomposition":return t==="route-page"?"Split page JSX into named layout sections before extracting behavior.":"Split repeated JSX sections into named presentational components.";case"file-decomposition":return"Review file-level decomposition; split colocated panels or helpers before changing behavior.";case"component-decomposition":return"Review component boundaries around props, state ownership, and independently changing UI sections."}}var Kw=new Set(["component","components","panel","panels","partial","partials"]),$m=new Set(["banner","button","card","dialog","drawer","filter","form","grid","header","item","list","menu","modal","nav","panel","picker","rail","row","section","selector","shell","sidebar","table","toolbar"]),Jw=new Set(["landing","page","pages","route","routes","screen","screens","view","views"]),Qw=new Set(["landing","page","route","screen","view"]);function Xw(e){return e.charAt(0).toUpperCase()+e.slice(1)}function hn(e,t={}){let{minSimilarity:n=.62,minTokens:i=8,limit:r=20,scope:o,scanLimit:s,filePattern:a}=t,c=Yw(e,{scope:o,minTokens:i,scanLimit:s});return at({profiles:c,limit:r,filePattern:a,compare:(l,u)=>eL(l,u,n),sort:(l,u)=>u.similarity-l.similarity||l.fileA.localeCompare(u.fileA)||l.fileB.localeCompare(u.fileB)})}function Yw(e,t){return Bn(e,{scope:t.scope,minTemplateTokens:t.minTokens,scanLimit:t.scanLimit}).map(n=>({file:n.file,tokens:n.templateTokens,loc:Zw(n)}))}function Zw(e){return e.totalLines}function eL(e,t,n){let i=Le(e.tokens,t.tokens);if(i.size<6||!tL(i))return null;let r=Ht(e.tokens,t.tokens);return r<n?null:{fileA:e.file,fileB:t.file,similarity:r,sharedTokens:Ce(i),sharedComponents:V(i,"component:"),sharedProps:V(i,"prop:"),sharedEvents:V(i,"event:"),sharedDirectives:V(i,"directive:"),sharedSlots:V(i,"slot:"),sharedIdentifiers:V(i,"id:"),uniqueToA:Ce(ge(e.tokens,t.tokens)).slice(0,25),uniqueToB:Ce(ge(t.tokens,e.tokens)).slice(0,25),locA:e.loc,locB:t.loc}}function tL(e){let t=0,n=0;for(let i of e)i.startsWith("component:")&&(t+=1),(i.startsWith("prop:")||i.startsWith("event:")||i.startsWith("directive:")||i.startsWith("slot:"))&&(n+=1);return t>=1||n>=3}function bn(e,t={}){let{minSimilarity:n=.45,minSharedBehaviors:i=6,limit:r=20,scope:o,scanLimit:s,filePattern:a}=t,c=Bn(e,{scope:o,minBehaviorTokens:Math.max(3,i),scanLimit:s}).map(l=>({file:l.file,tokens:l.behaviorTokens,profile:l}));return at({profiles:c,limit:r,filePattern:a,compare:(l,u)=>nL(l,u,n,i),sort:(l,u)=>u.similarity-l.similarity||l.fileA.localeCompare(u.fileA)||l.fileB.localeCompare(u.fileB)})}function nL(e,t,n,i){let r=Le(e.tokens,t.tokens);if(r.size<i||!oL(r))return null;let o=ko(e.tokens,t.tokens);if(o<n)return null;let s=V(r,"composable:"),a=V(r,"store:"),c=V(r,"reactivity:"),l=V(r,"lifecycle:"),u=V(r,"request:"),d=V(r,"function:"),m=V(r,"function-verb:"),p=V(r,"template-binding:"),h=V(r,"template-event:"),g=iL({sharedComposables:s,sharedStores:a,sharedReactivity:c,sharedLifecycle:l,sharedRequests:u,sharedFunctions:d,sharedFunctionVerbs:m,sharedBindings:p,sharedTemplateEvents:h});return{fileA:e.file,fileB:t.file,similarity:o,sharedTokens:Ce(r),sharedComposables:s,sharedStores:a,sharedReactivity:c,sharedLifecycle:l,sharedRequests:u,sharedFunctions:d,sharedFunctionVerbs:m,sharedBindings:p,sharedTemplateEvents:h,evidenceClass:g.evidenceClass,actionTier:g.actionTier,evidenceClassReasons:g.reasons,recommendation:g.recommendation,uniqueToA:Ce(ge(e.tokens,t.tokens)).slice(0,25),uniqueToB:Ce(ge(t.tokens,e.tokens)).slice(0,25),reason:sL({sharedComposables:s,sharedStores:a,sharedRequests:u,sharedLifecycle:l,sharedFunctions:d,sharedFunctionVerbs:m,sharedBindings:p}),locA:e.profile.totalLines,locB:t.profile.totalLines}}function iL(e){return Ro({genericWords:aL,primitiveGroups:[{values:e.sharedReactivity,reasonPrefix:"shared reactivity primitive",bucket:"generic"},{values:e.sharedLifecycle,reasonPrefix:"shared lifecycle primitive",bucket:"generic"}],nameGroups:[{names:e.sharedComposables,label:"shared composable",fallbackBucket:"shared-abstraction"},{names:e.sharedStores,label:"shared store",fallbackBucket:"shared-abstraction"},{names:e.sharedRequests,label:"shared request",fallbackBucket:"generic"},{names:e.sharedFunctions,label:"shared function",fallbackBucket:"generic"},{names:e.sharedFunctionVerbs,label:"shared action verb",fallbackBucket:"generic"},{names:e.sharedBindings,label:"shared binding",fallbackBucket:"generic"},{names:e.sharedTemplateEvents,label:"shared template event",fallbackBucket:"generic"}],recommendation:rL})}function rL(e){switch(e){case"domain-behavior":return"Review for a shared composable, store, or feature module around the named domain behavior.";case"mixed":return"Separate generic Vue mechanics from domain-specific behavior before extracting a composable.";case"shared-abstraction":return"Review the existing composable/store usage first; extract only if duplicated behavior remains outside it.";case"generic-workflow-scaffolding":return"Treat as support evidence for a repeated workflow shape, not direct composable-extraction evidence."}}function oL(e){let t=0,n=0,i=0,r=0,o=0,s=0,a=0;for(let u of e)u.startsWith("composable:")?t+=1:u.startsWith("store:")?n+=1:u.startsWith("request:")?i+=1:u.startsWith("lifecycle:")?r+=1:u.startsWith("function:")?o+=1:u.startsWith("reactivity:")?s+=1:(u.startsWith("function-verb:")||u.startsWith("template-binding:")||u.startsWith("template-event:"))&&(a+=1);let c=t+n,l=c+i+r+o+a;return i>=1&&l>=4||r>=1&&o>=2&&l>=4||c>=2&&(i>=1||o>=2)&&l>=5||o>=2&&s>=1&&l>=4}function sL(e){let t=[];return e.sharedComposables.length&&t.push(`shared composables: ${e.sharedComposables.join(", ")}`),e.sharedStores.length&&t.push(`shared stores: ${e.sharedStores.join(", ")}`),e.sharedRequests.length&&t.push(`shared request helpers: ${e.sharedRequests.join(", ")}`),e.sharedLifecycle.length&&t.push(`shared lifecycle: ${e.sharedLifecycle.join(", ")}`),e.sharedFunctions.length&&t.push(`shared functions: ${e.sharedFunctions.slice(0,6).join(", ")}`),e.sharedFunctionVerbs.length&&t.push(`shared action verbs: ${e.sharedFunctionVerbs.slice(0,6).join(", ")}`),e.sharedBindings.length&&t.push(`shared template bindings: ${e.sharedBindings.slice(0,6).join(", ")}`),t.join("; ")||"shared Vue behavior profile"}var aL=new Set(["add","apply","cancel","change","clear","close","composable","create","data","delete","draft","edit","error","fetch","filter","form","item","items","load","loading","name","open","reactive","ref","refresh","remove","request","reset","resource","row","rows","save","saving","search","select","selected","store","submit","toggle","update","use","value","watch"]);function tr(e,t={}){let{minTotalLines:n=800,minTemplateLines:i=300,minScriptLines:r=300,minStyleLines:o=500,limit:s=20,scope:a,scanLimit:c,filePattern:l}=t;return Bn(e,{scope:a,scanLimit:c}).filter(d=>!l||d.file.includes(l)).map(d=>cL(d,{minTotalLines:n,minTemplateLines:i,minScriptLines:r,minStyleLines:o})).filter(d=>d!==null).sort((d,m)=>m.totalLines-d.totalLines||d.file.localeCompare(m.file)).slice(0,s)}function cL(e,t){let n=[];if(e.totalLines>=t.minTotalLines&&n.push(`${e.totalLines} total component line(s)`),e.templateLines>=t.minTemplateLines&&n.push(`${e.templateLines} template line(s)`),e.scriptLines>=t.minScriptLines&&n.push(`${e.scriptLines} script line(s)`),e.styleLines>=t.minStyleLines&&n.push(`${e.styleLines} style line(s)`),n.length===0)return null;let i=lL(e),r=uL(e,t,i),o=dL(e.file),s=mL(i,o);return{file:e.file,totalLines:e.totalLines,sfcLines:e.sfcLines,templateLines:e.templateLines,scriptLines:e.scriptLines,styleLines:e.styleLines,externalScriptLines:e.externalScriptLines,externalScriptPaths:e.externalScriptPaths,customBlockLines:e.customBlockLines,dominantPressure:i,pressureKinds:r,contextKind:o,recommendationKind:s,recommendation:pL(s,o),reasons:n,loc:e.totalLines}}function lL(e){let t=[{axis:"template",lines:e.templateLines},{axis:"script",lines:e.scriptLines-e.externalScriptLines},{axis:"style",lines:e.styleLines},{axis:"external-script",lines:e.externalScriptLines},{axis:"custom-block",lines:e.customBlockLines}];return t.sort((n,i)=>i.lines-n.lines),t[0]?.lines?t[0].axis:"total"}function uL(e,t,n){let i=[];return e.totalLines>=t.minTotalLines&&(i.push("total"),n!=="total"&&i.push(n)),e.templateLines>=t.minTemplateLines&&i.push("template"),e.scriptLines>=t.minScriptLines&&i.push("script"),e.styleLines>=t.minStyleLines&&i.push("style"),(e.externalScriptLines>=t.minScriptLines||n==="external-script")&&i.push("external-script"),e.customBlockLines>0&&n==="custom-block"&&i.push("custom-block"),[...new Set(i.length>0?i:[n])]}function dL(e){return e.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean).some(i=>fL.has(i))||/(?:view|page|route)\.vue$/i.test(e)||/(?:^|\/)(views|pages|routes)\//i.test(e)?"route-page":"component"}function mL(e,t){return e==="style"?"style-decomposition":e==="template"?"template-decomposition":e==="external-script"?"external-script-boundary":e==="custom-block"?"custom-block-review":t==="route-page"?"route-page-decomposition":e==="script"?"script-behavior-extraction":"total-size-review"}function pL(e,t){switch(e){case"template-decomposition":return t==="route-page"?"Split route template sections into named panels before extracting script behavior.":"Split repeated template sections into named presentational components.";case"script-behavior-extraction":return"Extract independent script behavior into composables, controllers, or feature modules.";case"style-decomposition":return"Review UI/style decomposition; move repeated styling to component or style primitives, not composables.";case"external-script-boundary":return"Review the external script boundary and split controller/composable modules by workflow.";case"custom-block-review":return"Review custom block ownership before splitting template or script code.";case"route-page-decomposition":return"Split route/page orchestration from reusable panels and feature controllers.";case"total-size-review":return"Review the largest block first, then split by the dominant reason to change."}}var fL=new Set(["landing","page","pages","route","routes","view","views"]);function za(e,t={}){let{minSimilarity:n=.5,limit:i=15,scope:r,minChainLength:o=3,maxChainLength:s=8}=t,a=ne(e,r),c=vL(a,o,s);if(c.length===0)return[];let l=gL(c);return l.length<2?[]:CL(yL(l,n,i),i)}function gL(e){let t=hL(e),n=[];for(let i of e){let r=i.filter(o=>!t.has(o));r.length>=2&&n.push({original:i,filtered:r})}return n}function hL(e){let{nodeFreq:t,tailFreq:n}=bL(e),i=e.length*.9,r=e.length*.8,o=new Set;for(let[a,c]of t)c>i&&o.add(a);for(let[a,c]of n)c>r&&o.add(a);let s=["index.ts","index.js","cli.ts","main.ts","health.ts","health.js"];for(let a of t.keys()){let c=a.split("/").pop()??"";s.includes(c)&&o.add(a)}return o}function bL(e){let t=new Map,n=new Map;for(let i of e){let r=new Set;for(let o of i)r.has(o)||(t.set(o,(t.get(o)??0)+1),r.add(o));for(let o=Math.max(0,i.length-2);o<i.length;o++)n.set(i[o],(n.get(i[o])??0)+1)}return{nodeFreq:t,tailFreq:n}}function yL(e,t,n){let i=[];for(let r=0;r<e.length;r++){for(let o=r+1;o<e.length;o++){let s=SL(e[r],e[o],t);s&&i.push(s)}if(i.length>n*10)break}return i.sort((r,o)=>Math.abs(o.similarity-r.similarity)>.01?o.similarity-r.similarity:r.divergencePoints.length-o.divergencePoints.length),i}function SL(e,t,n){if(!xL(e.filtered,t.filtered))return null;let{distance:i,ops:r}=RL(e.filtered,t.filtered),o=Math.max(e.filtered.length,t.filtered.length);if(o===0)return null;let s=1-i/o;if(s<n||i===0)return null;let a=r.filter(l=>l.type==="substitute").map(l=>({index:l.indexA,nodeA:e.filtered[l.indexA],nodeB:t.filtered[l.indexB]}));return a.length===0||r.filter(l=>l.type==="match").length<2?null:{chainA:e.original,chainB:t.original,similarity:s,editDistance:i,divergencePoints:a,commonPrefix:kL(e.original,t.original),commonSuffix:wL(e.original,t.original)}}function xL(e,t){let n=new Set(e);return t.some(i=>n.has(i))}function CL(e,t){let n=[];for(let i of e)if(n.some(o=>Fm(i.chainA,o.chainA)&&Fm(i.chainB,o.chainB))||n.push(i),n.length>=t)break;return n}function vL(e,t,n){let i=[];for(let o of e.keys()){if(i.length>=500)break;Am(e,o,[o],new Set([o]),t,n,i,500)}return i}function Am(e,t,n,i,r,o,s,a){if(s.length>=a)return;if(n.length>=o){n.length>=r&&s.push([...n]);return}let c=e.get(t);if(!c||c.size===0){n.length>=r&&s.push([...n]);return}let l=!1;for(let u of c)if(!i.has(u)&&(i.add(u),n.push(u),Am(e,u,n,i,r,o,s,a),n.pop(),i.delete(u),l=!0,s.length>=a))return;!l&&n.length>=r&&s.push([...n])}function RL(e,t){let n=e.length,i=t.length,r=Array.from({length:n+1},()=>Array(i+1).fill(0));for(let c=0;c<=n;c++)r[c][0]=c;for(let c=0;c<=i;c++)r[0][c]=c;for(let c=1;c<=n;c++)for(let l=1;l<=i;l++)e[c-1]===t[l-1]?r[c][l]=r[c-1][l-1]:r[c][l]=1+Math.min(r[c-1][l],r[c][l-1],r[c-1][l-1]);let o=[],s=n,a=i;for(;s>0||a>0;)s>0&&a>0&&e[s-1]===t[a-1]?(o.unshift({type:"match",indexA:s-1,indexB:a-1}),s--,a--):s>0&&a>0&&r[s][a]===r[s-1][a-1]+1?(o.unshift({type:"substitute",indexA:s-1,indexB:a-1}),s--,a--):a>0&&r[s][a]===r[s][a-1]+1?(o.unshift({type:"insert",indexA:s,indexB:a-1}),a--):(o.unshift({type:"delete",indexA:s-1,indexB:a}),s--);return{distance:r[n][i],ops:o}}function kL(e,t){let n=[];for(let i=0;i<Math.min(e.length,t.length)&&e[i]===t[i];i++)n.push(e[i]);return n}function wL(e,t){let n=[],i=e.length-1,r=t.length-1;for(;i>=0&&r>=0&&e[i]===t[r];)n.unshift(e[i]),i--,r--;return n}function Fm(e,t){if(e.length>t.length)return!1;let n=t.join("\u2192"),i=e.join("\u2192");return n.includes(i)}function We(e){let t=e.orderCandidates?[...e.candidates()].sort(e.orderCandidates):e.candidates(),n=Ue(t,e.scanLimit),i=e.prepare?.(n)??void 0,r=[];for(let o of n){let s=e.evaluate(o,i);s&&r.push(s)}return e.orderResults&&r.sort(e.orderResults),typeof e.limit=="number"?r.slice(0,e.limit):r}function yn(e,t={}){let{scope:n,minLoc:i=10,minCallees:r=6,limit:o=20,scanLimit:s}=t,a=new T(e);return We({candidates:()=>a.productionCallableDefinitions({scope:n,minLoc:i,excludeTypesFiles:!0,requireFunctionLikeSymbol:!0,sortByLocDesc:!0}),scanLimit:s,prepare:c=>a.calleeMap(c,{semantic:t.semantic!==!1}),evaluate:(c,l)=>LL(c,l.get(c.symbolId)??[],r),orderResults:(c,l)=>l.clusters.length-c.clusters.length||l.loc-c.loc,limit:o})}function LL(e,t,n){let i=new Set(t.map(l=>l.symbol));if(i.size<n)return null;let r=EL(i,t),o=TL(i,r);if(o.length<2)return null;let s=_L(o,r);if(s.length===0)return null;let a=y(e.symbol),c=DL(a,i.size,o.length,s);return{symbol:e.symbol,shortName:a,relativePath:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:q(e),totalCallees:i.size,extractionKind:c.extractionKind,actionTier:"signal",evidenceReasons:c.evidenceReasons,recommendation:c.recommendation,clusters:s}}function DL(e,t,n,i){let r=Math.max(...i.map(c=>c.callees.length)),o=Math.max(...i.map(c=>c.isolation)),s=[`${t} distinct callees across ${n} co-occurrence cluster(s)`,`${i.length} extractable cluster(s) passed size and isolation thresholds`,`largest extractable cluster has ${r} callees at ${Math.round(o*100)}% isolation`],a=IL(e,t,n);return a!==null?{extractionKind:"workflow-orchestration",evidenceReasons:[...s,a],recommendation:"Review the isolated helper group as a possible private or feature-local helper, but keep the orchestration sequence together when it preserves the workflow."}:r>=6?{extractionKind:"broad-helper-cluster",evidenceReasons:[...s,"one isolated helper group is broad enough to deserve a named review"],recommendation:"Review whether the broad helper cluster has a stable concept name before extracting it; avoid creating a bag-of-helpers abstraction."}:{extractionKind:"cohesive-helper-cluster",evidenceReasons:s,recommendation:"Review the isolated callee group as a possible same-file or feature-local helper; extract only if the new name preserves the current behavior."}}function IL(e,t,n){if(t>=10)return`callee breadth suggests orchestration: ${t} callees`;if(n>=4)return`multiple disconnected callee groups suggest orchestration: ${n} groups`;let i=PL(e);return NL.has(i)?`caller verb suggests orchestration: ${i}`:null}function PL(e){return e.split(":").pop()?.replace(/\(\)$/,"").replace(/[^A-Za-z0-9_]/g,"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[_\s-]+/).filter(Boolean)[0]?.toLowerCase()??""}var NL=new Set(["apply","build","check","collect","create","diff","execute","find","handle","load","prepare","process","render","resolve","run","select","sync","update","validate","verify","write"]);function EL(e,t){let n=new Map;for(let r of e)n.set(r,new Set);let i=new Map;for(let r of t){let o=i.get(r.chunkId);o||(o=new Set,i.set(r.chunkId,o)),o.add(r.symbol)}for(let r of i.values()){let o=[...r];for(let s=0;s<o.length;s++)for(let a=s+1;a<o.length;a++)n.get(o[s]).add(o[a]),n.get(o[a]).add(o[s])}return n}function TL(e,t){let n=new Set,i=[];for(let r of e){if(n.has(r))continue;let o=new Set,s=[r];for(;s.length>0;){let a=s.pop();if(!n.has(a)){n.add(a),o.add(a);for(let c of t.get(a)??[])n.has(c)||s.push(c)}}i.push(o)}return i}function _L(e,t){return e.filter(n=>n.size>=3).map(n=>$L(n,e,t)).filter(n=>n.isolation>.5).sort((n,i)=>i.isolation-n.isolation)}function $L(e,t,n){let i=new Set;for(let a of t)if(a!==e)for(let c of a)i.add(c);let r=0;for(let a of e)for(let c of n.get(a)??[])i.has(c)&&r++;let o=e.size*i.size,s=o>0?1-r/o:1;return{callees:[...e].map(y),isolation:s}}import{posix as ai}from"path";var FL=U("definition-consumer-file-usage",{clearGroups:["whole-project","source-file"]});function Sn(e,t,n){return e.callerFileMap(t,{semantic:n.semantic,sourceFallback:n.sourceFallback})}function wo(e,t,n){let i=[],r=0,o=0,s=$(t.symbol);for(let a of n)ML(e,a,t.relativePath,s)?r++:Ka(e,a,s)?o++:i.push(a);return{realConsumers:i,barrelConsumers:r,importOnlyConsumers:o}}function Ka(e,t,n){if(!n)return!1;let i=W(t);if(!i)return!1;let r=FL.get(e,t,()=>AL(e,t,i));return r.importedLeaves.has(n)&&!r.usedLeaves.has(n)}function AL(e,t,n){let i=new Set,r=new Set,o=me(e,t);if(!o)return{importedLeaves:i,usedLeaves:r};let s=n==="rust"?new Set(["use_declaration"]):n==="python"?new Set(["import_statement","import_from_statement"]):new Set(["import_statement"]),a=(c,l)=>{let u=l||s.has(c.type);(c.type==="identifier"||c.type==="type_identifier"||c.type==="property_identifier"||c.type==="field_identifier")&&(u?i.add(c.text):r.add(c.text));for(let d of c.children)a(d,u)};return a(o.rootNode,!1),{importedLeaves:i,usedLeaves:r}}function ML(e,t,n,i){if(!i)return!1;let r=_e(e,t);if(r.length===0)return!1;let o=Mi(e,t);if(o.length===0)return!1;let s=i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=new RegExp(`\\b${s}\\b`),c=0;for(let l=0;l<r.length;l++){if(!a.test(r[l]??""))continue;if(c++,!o.find(d=>d.startLine<=l&&l<=d.endLine))return!1}return c>0}var OL=20,jL=1,BL=new Map([["app","app"],["apps","app"],["component","component"],["components","component"],["composable","composable"],["composables","composable"],["contract","contract"],["contracts","contract"],["domain","domain"],["domains","domain"],["feature","feature"],["features","feature"],["hook","hook"],["hooks","hook"],["lib","library"],["module","module"],["modules","module"],["package","package"],["packages","package"],["page","page"],["pages","page"],["route","route"],["routes","route"],["screen","screen"],["screens","screen"],["service","service"],["services","service"],["shared","shared"],["src","source-root"],["store","state"],["stores","state"],["test","test"],["tests","test"],["util","utility"],["utils","utility"],["view","view"],["views","view"]]),HL=new Set(["components","contracts","hooks","lib","services","shared","stores","utils"]),VL=new Set(["access","api","auth","config","db","effect","errors","hooks","lib","middleware","permissions","routes","schemas","servicetasks","services","startup","store","stores","test-utils","repository","repositories","tests","types","ui","utils","workflow","workflows"]);function Ya(e,t={}){let n=Xa(t.limit,OL),i=Xa(t.minConsumers,jL),r=new T(e),o=r.fileDependencyGraph(t.scope),s=cD(j(e,{includeIgnored:!1})),a=dD(e.config.locality?.architecturalBoundarySegments,t.architecturalBoundarySegments);return(t.target?qL(e,r,t.target):UL(e,t.scope,t.scanLimit)).map(u=>WL(r,o,u,t,s,a)).filter(u=>u.consumerFiles.length>=i||t.target).sort(aD).slice(0,n)}function qL(e,t,n){let i=KL(e,n);if(i)return[Hm(i)];let r=B(e,n);if(!r)return[];let o=t.definitionsForFile(r.relativePath).find(s=>s.symbolId===r.symbolId);return o?[JL(o)]:[{unit:{kind:"symbol",file:r.relativePath,shortName:y(r.symbol),symbol:r.symbol,startLine:r.startLine,endLine:r.endLine}}]}function UL(e,t,n){let i=j(e,{scope:t,includeIgnored:!1}),r=Xa(n,i.length);return i.slice(0,r).map(o=>Hm(o))}function WL(e,t,n,i,r,o){let s=n.definition?GL(e,n.definition,i.semantic):zL(t,n.unit.file),a=n.definition?s.length>0?"exact":"none":s.length>0?"file-level":"none",c=n.unit.file,l=Ye(ai.dirname(c)),u=XL(s),d=QL(l),m=tc([...Mm(l),...u?Mm(u):[]]),p=YL(n.unit,l,u,s),h=ZL(p,n.unit,l,u,s,r,o),g=rD(n.unit,a,u,s,l,h.whyNoSuggestedHome),b=oD(n.unit,l,u,s,h.suggestedHome,h.whyNoSuggestedHome);return{actionTier:"signal",sourceUnit:n.unit,candidatePath:c,currentDirectory:l,directoryAncestry:d,consumerFiles:s,consumerCoverage:a,nearestCommonOwner:u,boundaryMarkers:m,recommendedTier:p,suggestedHome:h.suggestedHome,destinationConfidence:h.confidence,whyNoSuggestedHome:h.whyNoSuggestedHome,counterevidence:g,reasons:b,recommendation:sD(p,h.suggestedHome,a)}}function GL(e,t,n){let i=Sn(e,[t],{semantic:n!==!1,sourceFallback:!0});return Gm(i.get(t.symbolId)??[])}function zL(e,t){let n=[];for(let[i,r]of e.entries())i!==t&&r.has(t)&&n.push(i);return Gm(n)}function KL(e,t){let n=ec(t),i=j(e,{includeIgnored:!1}),r=i.find(s=>s===n);if(r)return r;let o=i.find(s=>s.endsWith(`/${n}`));return o||(i.find(s=>s.includes(n))??null)}function JL(e){return{definition:e,unit:{kind:"symbol",file:e.relativePath,shortName:y(e.symbol),symbol:e.symbol,startLine:e.startLine,endLine:e.endLine}}}function Hm(e){return{unit:{kind:"file",file:e,shortName:ai.basename(e)}}}function QL(e){if(e===".")return[{path:".",depth:0,markers:[]}];let t=[],n=e.split("/").filter(Boolean);for(let i=0;i<n.length;i+=1){let r=n.slice(0,i+1).join("/");t.push({path:r,depth:i,markers:Za(r)})}return t}function Mm(e){return e==="."?[]:Vm(e).map(({marker:t,prefix:n})=>`${t}: ${n}`)}function Za(e){return tc(Vm(e).map(({marker:t})=>t))}function Vm(e){let t=e.split("/").filter(Boolean),n=[];for(let i=0;i<t.length;i+=1){let r=BL.get(t[i]);r&&n.push({marker:r,prefix:t.slice(0,i+1).join("/")})}return n}function XL(e){if(e.length===0)return null;let t=e.map(i=>Ye(ai.dirname(i))),n=t[0].split("/").filter(Boolean);for(let i of t.slice(1)){let r=i.split("/").filter(Boolean),o=[],s=Math.min(n.length,r.length);for(let a=0;a<s&&n[a]===r[a];a+=1)o.push(n[a]);n=o}return n.length===0?".":n.join("/")}function YL(e,t,n,i){return n?e.kind==="symbol"&&i.length===1?i[0]===e.file?"same-file":"sibling-folder":n==="."||n==="src"?"repository-level-review":jm(n,"package")?"package-level-shared":jm(n,"app")?"app-level-shared":Bm(n,["feature","domain","module"])||Bm(t,["feature","domain","module"])?"feature-local-shared":"sibling-folder":"no-exact-consumers"}function ZL(e,t,n,i,r,o,s){let a=eD(e,i);if(a)return Vt(a);let c=lD(t.file),l=tD(e,n,c,r,s);if(l)return l;let u=i;if(Ye(n)===Ye(u))return Vt(`${n} is already the nearest common owner for its consumers.`);let d=nD(u,n,c,s);return d||iD(u,n,c,o,s)}function eD(e,t){return t?e==="no-exact-consumers"||e==="repository-level-review"?"The inferred owner is too broad or unsupported for an exact destination.":null:"No consumer owner could be inferred from the current index."}function tD(e,t,n,i,r){if(e==="same-file"){let o=i[0]??null;return o?Ja(o):Vt("No same-file consumer path was available.")}if(e==="sibling-folder"&&i.length===1){let o=Ye(ai.dirname(i[0])),s=Wm(t,n,o,r);return s?Vt(s):Ja(o)}return null}function nD(e,t,n,i){return pD(e)?qm(e,t,n,i,`Nearest shared owner ${e} is outside source root ${n}.`):null}function iD(e,t,n,i,r){if(e===".")return Vt("The nearest common owner is the repository root.");let o=`${e}/shared`,s=qm(o,t,n,r,`Proposed home ${o} is outside source root ${n}.`);return s.confidence==="withheld"||i.has(o)?s:Vt(`${o} does not exist in the indexed project.`)}function qm(e,t,n,i,r){if(!Um(e,n))return Vt(r);let o=Wm(t,n,e,i);return o?Vt(o):Ja(e)}function Ja(e){return{suggestedHome:e,confidence:"exact",whyNoSuggestedHome:null}}function Vt(e){return{suggestedHome:null,confidence:"withheld",whyNoSuggestedHome:e}}function rD(e,t,n,i,r,o){let s=["Report-only signal; review ownership before moving files."];return t==="none"&&s.push("No consumers were found in the current index."),t==="file-level"&&s.push("File-level import evidence can hide which exported unit is actually used."),(n==="."||n==="src")&&s.push("Nearest common owner is broad, so this is not enough evidence for automatic placement."),i.length===1&&s.push("Only one consumer was found; inlining or same-folder placement may be better than shared extraction."),e.kind==="file"&&s.push("File targets describe module locality, not symbol-level usage."),n&&r.startsWith(`${n}/`)&&s.push("Candidate already lives under the nearest common owner."),o&&s.push(`No exact suggested home: ${o}`),s}function oD(e,t,n,i,r,o){let s=[];return s.push(`${e.shortName} currently lives in ${t}.`),n?s.push(`${i.length} consumer file(s) share ${n} as their nearest common owner.`):s.push("No consumer owner could be inferred from the current index."),r?s.push(`Suggested home is ${r}.`):o&&s.push(`No exact suggested home: ${o}`),s}function sD(e,t,n){return e==="no-exact-consumers"?"Review references before moving; no consumers were found.":e==="repository-level-review"?"Keep this as a broad locality signal; the inferred owner is too general for automatic relocation.":t?`Review whether ${n==="exact"?"symbol usage":"module import"} supports moving or extracting toward ${t}.`:"Review ownership manually before changing structure."}function aD(e,t){return Om(t)-Om(e)||e.candidatePath.localeCompare(t.candidatePath)}function Om(e){let t=e.consumerFiles.length*10;return e.consumerCoverage==="exact"&&(t+=5),e.suggestedHome&&(t+=3),e.recommendedTier==="repository-level-review"&&(t-=8),e.recommendedTier==="no-exact-consumers"&&(t-=12),t}function cD(e){let t=new Set(["."]);for(let n of e){let i=Ye(ai.dirname(n));for(;!t.has(i)&&(t.add(i),i!==".");)i=Ye(ai.dirname(i))}return t}function lD(e){let t=Qa(e),n=t.indexOf("src");return n>=0?t.slice(0,n+1).join("/"):t.length<=1?".":t[0]}function Um(e,t){let n=Ye(e),i=Ye(t);return i==="."||n===i||n.startsWith(`${i}/`)}function uD(e,t,n){let i=Qa(e),r=Qa(t);return(Um(e,t)?i.slice(r.length):i).some(s=>n.has(s.toLowerCase()))}function Wm(e,t,n,i){return Ye(e)===Ye(n)||!uD(e,t,i)?null:`${e} is a named architectural boundary; an exact move to ${n} needs human design.`}function dD(...e){let t=new Set(VL);for(let n of e)for(let i of n??[]){let r=mD(i);r&&t.add(r)}return t}function mD(e){let t=e.trim().toLowerCase();return t===""?null:t}function jm(e,t){return Za(e).includes(t)}function Bm(e,t){let n=Za(e);return t.some(i=>n.includes(i))}function pD(e){let t=e.split("/").filter(Boolean),n=t[t.length-1];return n?HL.has(n):!1}function ec(e){return e.replaceAll("\\","/").replace(/^\.\//,"")}function Ye(e){let t=ec(e);return t===""?".":t}function Qa(e){let t=ec(e);return t==="."?[]:t.split("/").filter(Boolean)}function Xa(e,t){return!Number.isFinite(e)||e===void 0||e<1?t:Math.floor(e)}function Gm(e){return tc([...e]).sort((t,n)=>t.localeCompare(n))}function tc(e){return[...new Set(e)]}function nr(e,t,n={}){let{maxDepth:i=5,scope:r}=n,o=B(e,t);if(!o)return[];let s=[],a=new Set([o.symbolId]),c=new Set,l=[o];for(let u=1;u<=i&&l.length!==0;u++){let d=[];for(let m of l)for(let p of fD(e,m,r)){let h=`${p.file}|${p.shortName}`;if(p.symbolId!==null){if(a.has(p.symbolId))continue;a.add(p.symbolId)}else if(c.has(h))continue;c.add(h),s.push({symbol:p.symbol,shortName:p.shortName,file:p.file,depth:u}),p.symbolId!==null&&p.symbolMatch&&d.push(p.symbolMatch)}l=d}return s.sort((u,d)=>u.depth-d.depth||u.file.localeCompare(d.file)),s}function fD(e,t,n){let i=qe(e,t,{limit:500}).filter(l=>!e.isIgnored(l.file)).filter(l=>!n||l.file.includes(n)),r=new Set(i.map(l=>l.file)),o=[];for(let l of gD(e,t,n)){if(r.has(l))continue;let u=G(e,l),d=u.length>0?je(u,u[0].startLine):null;o.push({symbol:d?.symbol??l,file:l})}let s=[...i,...o],a=[],c=new Set;for(let l of s){let u=zn(e,l.symbol);if(!u){let m=`${l.file}|${l.symbol}`;if(c.has(m))continue;c.add(m),a.push({symbolId:null,symbol:l.symbol,shortName:y(l.symbol),file:l.file,symbolMatch:null});continue}if(u.symbolId===t.symbolId||e.isIgnored(u.relativePath)||!hD(u.symbol))continue;let d=`${u.symbolId}|${u.relativePath}`;c.has(d)||(c.add(d),a.push({symbolId:u.symbolId,symbol:u.symbol,shortName:y(u.symbol),file:u.relativePath,symbolMatch:u}))}return a}function gD(e,t,n){let i=n?"AND consumer_d.relative_path LIKE ?":"",r=[t.symbolId,t.documentId];return n&&r.push(`%${n}%`),new Set(e.all(`SELECT DISTINCT consumer_d.relative_path
494
+ `)}function mp(e,t){if(!e)return new Set;let n=new Set(["public","private","protected","final","static","class","def","fun","fn","function","return","string","bool","boolean","void","unit","self","this","new","const","let","var","end","pub"]),r=qL(t),o=e.replace(/["'`]/g," ").replace(/\b\d+\b/g," NUM ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[^A-Za-z0-9_]+/g," ").replace(/_/g," ").toLowerCase().split(/\s+/).map(s=>s.trim()).filter(s=>s.length>1).filter(s=>!n.has(s)).filter(s=>!r.has(s));return new Set(o)}function qL(e){return new Set(e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9_]+|_/).map(t=>t.toLowerCase()).filter(t=>t.length>1))}function UL(e){return/^\s*(?:def|fun|fn|function|class|trait|module|object|enum|interface|public|private|protected)\b/.test(e)}function di(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ft(e){let t=[];if(e.filePattern){let n=e.profiles.find(r=>r.file.includes(e.filePattern));if(!n)return[];for(let r of e.profiles){if(r.file===n.file)continue;let i=e.compare(n,r);i&&t.push(i)}}else{let n=typeof e.overrunFactor=="number"&&Number.isFinite(e.limit)?e.limit*e.overrunFactor:Number.POSITIVE_INFINITY;for(let r=0;r<e.profiles.length;r+=1){for(let i=r+1;i<e.profiles.length;i+=1){let o=e.compare(e.profiles[r],e.profiles[i]);o&&t.push(o)}if(t.length>n)break}}return t.sort(e.sort??((n,r)=>r.similarity-n.similarity)),t.slice(0,e.limit)}function pc(e,t={}){let{minSimilarity:n=.5,limit:r=20,scope:i,filePattern:o}=t,s=t.minDeps??(o?1:3),{profiles:a,distinctiveDeps:c}=WL(e,{scope:i,minDeps:s});return ft({profiles:a,limit:r,filePattern:o,overrunFactor:5,compare:(l,u)=>zL(l,u,n,c)})}function WL(e,t){let{scope:n,minDeps:r}=t,i=re(e,n),{universalDeps:o,distinctiveDeps:s}=GL(i),a=[];for(let[c,l]of i)l.size>=r&&a.push({file:c,deps:new Set([...l].filter(u=>!o.has(u)))});return{profiles:a,distinctiveDeps:s}}function GL(e){let t=new Set,n=new Set,r=e.size;if(r===0)return{universalDeps:t,distinctiveDeps:n};let i=new Map;for(let s of e.values())for(let a of s)i.set(a,(i.get(a)??0)+1);let o=Math.max(3,Math.ceil(r*.03));for(let[s,a]of i)a>=5&&a/r>.3?t.add(s):a<=o&&n.add(s);return{universalDeps:t,distinctiveDeps:n}}function zL(e,t,n,r){let i=new Set;for(let l of e.deps)t.deps.has(l)&&i.add(l);if(i.size<3||e.deps.size<4||t.deps.size<4)return null;let o=0;for(let l of i)r.has(l)&&o++;if(o<2)return null;let s=Xt(e.deps,t.deps);if(s<n)return null;let a=[];for(let l of e.deps)t.deps.has(l)||a.push(l);let c=[];for(let l of t.deps)e.deps.has(l)||c.push(l);return{fileA:e.file,fileB:t.file,similarity:s,sharedDeps:[...i],uniqueToA:a,uniqueToB:c}}function qo(e){let t=[],n=[],r=[];for(let l of e.primitiveGroups)l.values.length!==0&&pp(l.bucket,n,r).push(`${l.reasonPrefix}: ${l.values.join(", ")}`);for(let l of e.nameGroups)JL(l.names,l.label,e.genericWords,e.stripPrefixes??[],t,pp(l.fallbackBucket,n,r));let i=t.length>0,o=n.length>0,s=r.length>0,a=i?o||s?"mixed":"domain-behavior":s?"shared-abstraction":"generic-workflow-scaffolding";return{actionTier:a==="domain-behavior"||a==="mixed"?"signal":"support",evidenceClass:a,reasons:[...t,...r,...n].slice(0,6),recommendation:e.recommendation(a)}}function Uo(e,t){if(e.size===0||t.size===0)return 0;let r=Ge(e,t).size/Math.min(e.size,t.size);return Math.max(Xt(e,t),r)}function V(e,t){return[...e].filter(n=>n.startsWith(t)).map(n=>n.slice(t.length)).sort()}function ve(e){return[...e].sort()}function JL(e,t,n,r,i,o){let s=[],a=[];for(let c of e)KL(c,r).filter(u=>!n.has(u)).length>0?s.push(c):a.push(c);s.length&&i.push(`${t} has domain term(s): ${s.slice(0,6).join(", ")}`),a.length&&o.push(`${t} is generic workflow: ${a.slice(0,6).join(", ")}`)}function KL(e,t){let n=e.replace(/([A-Z])([A-Z][a-z])/g,"$1 $2").replace(/([a-z0-9])([A-Z])/g,"$1 $2");for(let r of t)n=n.replace(r,"");return n.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean)}function pp(e,t,n){return e==="generic"?t:n}function Cn(e,t={}){let{minSimilarity:n=.62,minTokens:r=8,limit:i=20,scope:o,scanLimit:s,filePattern:a}=t,c=er(e,{scope:o,minJsxTokens:r,scanLimit:s}).filter(l=>l.kind==="component").map(l=>({file:l.file,component:l.name,tokens:l.jsxTokens,profile:l}));return ft({profiles:c,limit:i,filePattern:a,compare:(l,u)=>XL(l,u,n),sort:(l,u)=>u.similarity-l.similarity||l.fileA.localeCompare(u.fileA)||l.componentA.localeCompare(u.componentA)||l.fileB.localeCompare(u.fileB)||l.componentB.localeCompare(u.componentB)})}function XL(e,t,n){let r=Ge(e.tokens,t.tokens);if(r.size<6||!QL(r))return null;let i=Xt(e.tokens,t.tokens);return i<n?null:{fileA:e.file,componentA:e.component,fileB:t.file,componentB:t.component,similarity:i,sharedTokens:ve(r),sharedComponents:V(r,"component:"),sharedNativeTags:V(r,"native:"),sharedProps:V(r,"prop:"),sharedEvents:V(r,"event:"),sharedBindings:V(r,"binding:"),uniqueToA:ve(ye(e.tokens,t.tokens)).slice(0,25),uniqueToB:ve(ye(t.tokens,e.tokens)).slice(0,25),locA:e.profile.loc,locB:t.profile.loc}}function QL(e){let t=0,n=0;for(let r of e)r.startsWith("component:")&&(t+=1),(r.startsWith("prop:")||r.startsWith("event:")||r.startsWith("native:")||r.startsWith("jsx:"))&&(n+=1);return t>=1||n>=4}function vn(e,t={}){let{minSimilarity:n=.45,minSharedBehaviors:r=6,limit:i=20,scope:o,scanLimit:s,filePattern:a}=t,c=er(e,{scope:o,minBehaviorTokens:Math.max(3,r),scanLimit:s}).map(l=>({file:l.file,component:l.name,tokens:l.behaviorTokens,profile:l}));return ft({profiles:c,limit:i,filePattern:a,compare:(l,u)=>YL(l,u,n,r),sort:(l,u)=>u.similarity-l.similarity||l.fileA.localeCompare(u.fileA)||l.componentA.localeCompare(u.componentA)||l.fileB.localeCompare(u.fileB)||l.componentB.localeCompare(u.componentB)})}function YL(e,t,n,r){let i=Ge(e.tokens,t.tokens);if(i.size<r||!tI(i))return null;let o=Uo(e.tokens,t.tokens);if(o<n)return null;let s=V(i,"hook:"),a=V(i,"react-hook:"),c=V(i,"effect:"),l=V(i,"state:"),u=V(i,"request:"),d=V(i,"handler:"),m=V(i,"handler-verb:"),f=ZL({sharedHooks:s,sharedReactHooks:a,sharedEffects:c,sharedState:l,sharedRequests:u,sharedHandlers:d,sharedHandlerVerbs:m});return{fileA:e.file,componentA:e.component,fileB:t.file,componentB:t.component,similarity:o,sharedTokens:ve(i),sharedHooks:s,sharedReactHooks:a,sharedEffects:c,sharedState:l,sharedRequests:u,sharedHandlers:d,sharedHandlerVerbs:m,evidenceClass:f.evidenceClass,actionTier:f.actionTier,evidenceClassReasons:f.reasons,recommendation:f.recommendation,uniqueToA:ve(ye(e.tokens,t.tokens)).slice(0,25),uniqueToB:ve(ye(t.tokens,e.tokens)).slice(0,25),reason:nI({sharedHooks:s,sharedReactHooks:a,sharedEffects:c,sharedState:l,sharedRequests:u,sharedHandlers:d,sharedHandlerVerbs:m}),locA:e.profile.loc,locB:t.profile.loc}}function ZL(e){return qo({genericWords:rI,stripPrefixes:iI,primitiveGroups:[{values:e.sharedReactHooks,reasonPrefix:"shared React primitives",bucket:"generic"},{values:e.sharedEffects,reasonPrefix:"shared lifecycle primitive",bucket:"generic"}],nameGroups:[{names:e.sharedHooks,label:"shared hook",fallbackBucket:"shared-abstraction"},{names:e.sharedRequests,label:"shared request",fallbackBucket:"generic"},{names:e.sharedState,label:"shared state",fallbackBucket:"generic"},{names:e.sharedHandlers,label:"shared handler",fallbackBucket:"generic"},{names:e.sharedHandlerVerbs,label:"shared action verb",fallbackBucket:"generic"}],recommendation:eI})}function eI(e){switch(e){case"domain-behavior":return"Review for a shared hook, controller, or feature module around the named domain behavior.";case"mixed":return"Separate generic React mechanics from domain-specific behavior before extracting a shared hook.";case"shared-abstraction":return"Review the existing shared hook usage first; extract only if duplicated behavior remains outside it.";case"generic-workflow-scaffolding":return"Treat as support evidence for a repeated workflow shape, not direct hook-extraction evidence."}}function tI(e){let t=0,n=0,r=0,i=0,o=0,s=0,a=0;for(let u of e)u.startsWith("hook:")?t+=1:u.startsWith("react-hook:")?n+=1:u.startsWith("effect:")?r+=1:u.startsWith("request:")?i+=1:u.startsWith("handler:")||u.startsWith("handler-verb:")?o+=1:u.startsWith("state:")?s+=1:u.startsWith("state-hook:")&&(a+=1);let c=s+a,l=t+n+r+i+o+c;return i>=1&&l>=4||t>=1&&(i>=1||s>=1||o>=2)&&l>=5||s>=1&&o>=2&&(r>=1||n>=2)&&l>=5}function nI(e){let t=[];return e.sharedHooks.length&&t.push(`shared hooks: ${e.sharedHooks.join(", ")}`),e.sharedReactHooks.length&&t.push(`shared React hooks: ${e.sharedReactHooks.join(", ")}`),e.sharedEffects.length&&t.push(`shared effects: ${e.sharedEffects.join(", ")}`),e.sharedState.length&&t.push(`shared state: ${e.sharedState.join(", ")}`),e.sharedRequests.length&&t.push(`shared requests: ${e.sharedRequests.join(", ")}`),e.sharedHandlers.length&&t.push(`shared handlers: ${e.sharedHandlers.slice(0,6).join(", ")}`),e.sharedHandlerVerbs.length&&t.push(`shared action verbs: ${e.sharedHandlerVerbs.slice(0,6).join(", ")}`),t.join("; ")||"shared React behavior profile"}var rI=new Set(["add","apply","async","callback","cancel","change","clear","close","create","data","delete","draft","edit","effect","error","fetch","filter","form","handle","has","is","item","items","load","loader","loading","memo","name","open","reducer","refresh","ref","remove","request","reset","resource","row","rows","save","saving","search","select","selected","state","store","submit","toggle","update","use","value"]),iI=[/^use(?=[A-Z])/,/^handle(?=[A-Z])/,/^is(?=[A-Z])/,/^has(?=[A-Z])/];function pi(e,t={}){let{minComponentLines:n=300,minFileLines:r=800,minJsxTokens:i=80,minBehaviorTokens:o=40,limit:s=20,scope:a,scanLimit:c,filePattern:l}=t;return er(e,{scope:a,scanLimit:c}).filter(d=>d.kind==="component").filter(d=>!l||d.file.includes(l)||d.name.includes(l)).map(d=>oI(d,{minComponentLines:n,minFileLines:r,minJsxTokens:i,minBehaviorTokens:o})).filter(d=>d!==null).sort((d,m)=>m.componentLines-d.componentLines||m.fileLines-d.fileLines||d.file.localeCompare(m.file)).slice(0,s)}function oI(e,t){let n=[];e.loc>=t.minComponentLines&&n.push(`${e.loc} component line(s)`);let r=Math.max(80,Math.floor(t.minComponentLines/2));if(e.fileLines>=t.minFileLines&&e.loc>=r&&n.push(`${e.fileLines} file line(s)`),e.jsxTokens.size>=t.minJsxTokens&&n.push(`${e.jsxTokens.size} JSX structure token(s)`),e.behaviorTokens.size>=t.minBehaviorTokens&&n.push(`${e.behaviorTokens.size} behavior token(s)`),n.length===0)return null;let i=sI(e),o=aI(e,t,i),s=cI(e),a=lI(i,o,s);return{file:e.file,component:e.name,componentLines:e.loc,fileLines:e.fileLines,jsxTokens:e.jsxTokens.size,behaviorTokens:e.behaviorTokens.size,dominantPressure:i,pressureKinds:o,contextKind:s,recommendationKind:a,recommendation:uI(a,s),reasons:n,loc:e.loc}}function sI(e){let t=[{axis:"component",value:e.loc},{axis:"file",value:e.fileLines},{axis:"jsx-structure",value:e.jsxTokens.size*3},{axis:"hook-behavior",value:e.behaviorTokens.size*4}];return t.sort((n,r)=>r.value-n.value),t[0]?.axis??"component"}function aI(e,t,n){let r=[];e.loc>=t.minComponentLines&&r.push("component");let i=Math.max(80,Math.floor(t.minComponentLines/2));return e.fileLines>=t.minFileLines&&e.loc>=i&&r.push("file"),e.jsxTokens.size>=t.minJsxTokens&&r.push("jsx-structure"),e.behaviorTokens.size>=t.minBehaviorTokens&&r.push("hook-behavior"),[...new Set(r.length>0?r:[n])]}function cI(e){let t=e.file.split(/[\\/]+/).filter(Boolean),n=t.slice(0,-1).map(l=>l.toLowerCase()),r=(t.at(-1)??e.name).replace(/\.[^.]+$/,""),i=`${r} ${e.name}`.split(/[^A-Za-z0-9]+/).filter(Boolean).map(l=>l.toLowerCase()),o=n.findIndex(l=>mI.has(l)),s=o>=0&&n.slice(o+1).some(l=>dI.has(l)),a=fp(r)||fp(e.name);return/(?:Page|Route|Screen|View)$/.test(r)||/(?:Page|Route|Screen|View)$/.test(e.name)||i.some(l=>pI.has(l))||o>=0&&!s&&!a?"route-page":"component"}function fp(e){let t=e.split(/[^A-Za-z0-9]+/).filter(Boolean).map(n=>n.toLowerCase());return t.at(-1)&&gp.has(t.at(-1))?!0:[...gp].some(n=>e.endsWith(fI(n)))}function lI(e,t,n){return e==="hook-behavior"?"behavior-extraction":n==="route-page"?"route-page-decomposition":t.includes("hook-behavior")?"behavior-extraction":t.includes("jsx-structure")?"jsx-decomposition":t.includes("file")?"file-decomposition":e==="jsx-structure"?"jsx-decomposition":e==="file"&&!t.includes("component")?"file-decomposition":"component-decomposition"}function uI(e,t){switch(e){case"behavior-extraction":return"Extract independent state, effects, requests, or handlers into hooks, controllers, or feature modules.";case"route-page-decomposition":return"Split route/page orchestration from reusable panels and feature controllers.";case"jsx-decomposition":return t==="route-page"?"Split page JSX into named layout sections before extracting behavior.":"Split repeated JSX sections into named presentational components.";case"file-decomposition":return"Review file-level decomposition; split colocated panels or helpers before changing behavior.";case"component-decomposition":return"Review component boundaries around props, state ownership, and independently changing UI sections."}}var dI=new Set(["component","components","panel","panels","partial","partials"]),gp=new Set(["banner","button","card","dialog","drawer","filter","form","grid","header","item","list","menu","modal","nav","panel","picker","rail","row","section","selector","shell","sidebar","table","toolbar"]),mI=new Set(["landing","page","pages","route","routes","screen","screens","view","views"]),pI=new Set(["landing","page","route","screen","view"]);function fI(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Rn(e,t={}){let{minSimilarity:n=.62,minTokens:r=8,limit:i=20,scope:o,scanLimit:s,filePattern:a}=t,c=gI(e,{scope:o,minTokens:r,scanLimit:s});return ft({profiles:c,limit:i,filePattern:a,compare:(l,u)=>yI(l,u,n),sort:(l,u)=>u.similarity-l.similarity||l.fileA.localeCompare(u.fileA)||l.fileB.localeCompare(u.fileB)})}function gI(e,t){return Zn(e,{scope:t.scope,minTemplateTokens:t.minTokens,scanLimit:t.scanLimit}).map(n=>({file:n.file,tokens:n.templateTokens,loc:hI(n)}))}function hI(e){return e.totalLines}function yI(e,t,n){let r=Ge(e.tokens,t.tokens);if(r.size<6||!bI(r))return null;let i=Xt(e.tokens,t.tokens);return i<n?null:{fileA:e.file,fileB:t.file,similarity:i,sharedTokens:ve(r),sharedComponents:V(r,"component:"),sharedProps:V(r,"prop:"),sharedEvents:V(r,"event:"),sharedDirectives:V(r,"directive:"),sharedSlots:V(r,"slot:"),sharedIdentifiers:V(r,"id:"),uniqueToA:ve(ye(e.tokens,t.tokens)).slice(0,25),uniqueToB:ve(ye(t.tokens,e.tokens)).slice(0,25),locA:e.loc,locB:t.loc}}function bI(e){let t=0,n=0;for(let r of e)r.startsWith("component:")&&(t+=1),(r.startsWith("prop:")||r.startsWith("event:")||r.startsWith("directive:")||r.startsWith("slot:"))&&(n+=1);return t>=1||n>=3}function kn(e,t={}){let{minSimilarity:n=.45,minSharedBehaviors:r=6,limit:i=20,scope:o,scanLimit:s,filePattern:a}=t,c=Zn(e,{scope:o,minBehaviorTokens:Math.max(3,r),scanLimit:s}).map(l=>({file:l.file,tokens:l.behaviorTokens,profile:l}));return ft({profiles:c,limit:i,filePattern:a,compare:(l,u)=>SI(l,u,n,r),sort:(l,u)=>u.similarity-l.similarity||l.fileA.localeCompare(u.fileA)||l.fileB.localeCompare(u.fileB)})}function SI(e,t,n,r){let i=Ge(e.tokens,t.tokens);if(i.size<r||!vI(i))return null;let o=Uo(e.tokens,t.tokens);if(o<n)return null;let s=V(i,"composable:"),a=V(i,"store:"),c=V(i,"reactivity:"),l=V(i,"lifecycle:"),u=V(i,"request:"),d=V(i,"function:"),m=V(i,"function-verb:"),f=V(i,"template-binding:"),h=V(i,"template-event:"),g=xI({sharedComposables:s,sharedStores:a,sharedReactivity:c,sharedLifecycle:l,sharedRequests:u,sharedFunctions:d,sharedFunctionVerbs:m,sharedBindings:f,sharedTemplateEvents:h});return{fileA:e.file,fileB:t.file,similarity:o,sharedTokens:ve(i),sharedComposables:s,sharedStores:a,sharedReactivity:c,sharedLifecycle:l,sharedRequests:u,sharedFunctions:d,sharedFunctionVerbs:m,sharedBindings:f,sharedTemplateEvents:h,evidenceClass:g.evidenceClass,actionTier:g.actionTier,evidenceClassReasons:g.reasons,recommendation:g.recommendation,uniqueToA:ve(ye(e.tokens,t.tokens)).slice(0,25),uniqueToB:ve(ye(t.tokens,e.tokens)).slice(0,25),reason:RI({sharedComposables:s,sharedStores:a,sharedRequests:u,sharedLifecycle:l,sharedFunctions:d,sharedFunctionVerbs:m,sharedBindings:f}),locA:e.profile.totalLines,locB:t.profile.totalLines}}function xI(e){return qo({genericWords:kI,primitiveGroups:[{values:e.sharedReactivity,reasonPrefix:"shared reactivity primitive",bucket:"generic"},{values:e.sharedLifecycle,reasonPrefix:"shared lifecycle primitive",bucket:"generic"}],nameGroups:[{names:e.sharedComposables,label:"shared composable",fallbackBucket:"shared-abstraction"},{names:e.sharedStores,label:"shared store",fallbackBucket:"shared-abstraction"},{names:e.sharedRequests,label:"shared request",fallbackBucket:"generic"},{names:e.sharedFunctions,label:"shared function",fallbackBucket:"generic"},{names:e.sharedFunctionVerbs,label:"shared action verb",fallbackBucket:"generic"},{names:e.sharedBindings,label:"shared binding",fallbackBucket:"generic"},{names:e.sharedTemplateEvents,label:"shared template event",fallbackBucket:"generic"}],recommendation:CI})}function CI(e){switch(e){case"domain-behavior":return"Review for a shared composable, store, or feature module around the named domain behavior.";case"mixed":return"Separate generic Vue mechanics from domain-specific behavior before extracting a composable.";case"shared-abstraction":return"Review the existing composable/store usage first; extract only if duplicated behavior remains outside it.";case"generic-workflow-scaffolding":return"Treat as support evidence for a repeated workflow shape, not direct composable-extraction evidence."}}function vI(e){let t=0,n=0,r=0,i=0,o=0,s=0,a=0;for(let u of e)u.startsWith("composable:")?t+=1:u.startsWith("store:")?n+=1:u.startsWith("request:")?r+=1:u.startsWith("lifecycle:")?i+=1:u.startsWith("function:")?o+=1:u.startsWith("reactivity:")?s+=1:(u.startsWith("function-verb:")||u.startsWith("template-binding:")||u.startsWith("template-event:"))&&(a+=1);let c=t+n,l=c+r+i+o+a;return r>=1&&l>=4||i>=1&&o>=2&&l>=4||c>=2&&(r>=1||o>=2)&&l>=5||o>=2&&s>=1&&l>=4}function RI(e){let t=[];return e.sharedComposables.length&&t.push(`shared composables: ${e.sharedComposables.join(", ")}`),e.sharedStores.length&&t.push(`shared stores: ${e.sharedStores.join(", ")}`),e.sharedRequests.length&&t.push(`shared request helpers: ${e.sharedRequests.join(", ")}`),e.sharedLifecycle.length&&t.push(`shared lifecycle: ${e.sharedLifecycle.join(", ")}`),e.sharedFunctions.length&&t.push(`shared functions: ${e.sharedFunctions.slice(0,6).join(", ")}`),e.sharedFunctionVerbs.length&&t.push(`shared action verbs: ${e.sharedFunctionVerbs.slice(0,6).join(", ")}`),e.sharedBindings.length&&t.push(`shared template bindings: ${e.sharedBindings.slice(0,6).join(", ")}`),t.join("; ")||"shared Vue behavior profile"}var kI=new Set(["add","apply","cancel","change","clear","close","composable","create","data","delete","draft","edit","error","fetch","filter","form","item","items","load","loading","name","open","reactive","ref","refresh","remove","request","reset","resource","row","rows","save","saving","search","select","selected","store","submit","toggle","update","use","value","watch"]);function fi(e,t={}){let{minTotalLines:n=800,minTemplateLines:r=300,minScriptLines:i=300,minStyleLines:o=500,limit:s=20,scope:a,scanLimit:c,filePattern:l}=t;return Zn(e,{scope:a,scanLimit:c}).filter(d=>!l||d.file.includes(l)).map(d=>wI(d,{minTotalLines:n,minTemplateLines:r,minScriptLines:i,minStyleLines:o})).filter(d=>d!==null).sort((d,m)=>m.totalLines-d.totalLines||d.file.localeCompare(m.file)).slice(0,s)}function wI(e,t){let n=[];if(e.totalLines>=t.minTotalLines&&n.push(`${e.totalLines} total component line(s)`),e.templateLines>=t.minTemplateLines&&n.push(`${e.templateLines} template line(s)`),e.scriptLines>=t.minScriptLines&&n.push(`${e.scriptLines} script line(s)`),e.styleLines>=t.minStyleLines&&n.push(`${e.styleLines} style line(s)`),n.length===0)return null;let r=LI(e),i=II(e,t,r),o=DI(e.file),s=PI(r,o);return{file:e.file,totalLines:e.totalLines,sfcLines:e.sfcLines,templateLines:e.templateLines,scriptLines:e.scriptLines,styleLines:e.styleLines,externalScriptLines:e.externalScriptLines,externalScriptPaths:e.externalScriptPaths,customBlockLines:e.customBlockLines,dominantPressure:r,pressureKinds:i,contextKind:o,recommendationKind:s,recommendation:NI(s,o),reasons:n,loc:e.totalLines}}function LI(e){let t=[{axis:"template",lines:e.templateLines},{axis:"script",lines:e.scriptLines-e.externalScriptLines},{axis:"style",lines:e.styleLines},{axis:"external-script",lines:e.externalScriptLines},{axis:"custom-block",lines:e.customBlockLines}];return t.sort((n,r)=>r.lines-n.lines),t[0]?.lines?t[0].axis:"total"}function II(e,t,n){let r=[];return e.totalLines>=t.minTotalLines&&(r.push("total"),n!=="total"&&r.push(n)),e.templateLines>=t.minTemplateLines&&r.push("template"),e.scriptLines>=t.minScriptLines&&r.push("script"),e.styleLines>=t.minStyleLines&&r.push("style"),(e.externalScriptLines>=t.minScriptLines||n==="external-script")&&r.push("external-script"),e.customBlockLines>0&&n==="custom-block"&&r.push("custom-block"),[...new Set(r.length>0?r:[n])]}function DI(e){return e.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean).some(r=>EI.has(r))||/(?:view|page|route)\.vue$/i.test(e)||/(?:^|\/)(views|pages|routes)\//i.test(e)?"route-page":"component"}function PI(e,t){return e==="style"?"style-decomposition":e==="template"?"template-decomposition":e==="external-script"?"external-script-boundary":e==="custom-block"?"custom-block-review":t==="route-page"?"route-page-decomposition":e==="script"?"script-behavior-extraction":"total-size-review"}function NI(e,t){switch(e){case"template-decomposition":return t==="route-page"?"Split route template sections into named panels before extracting script behavior.":"Split repeated template sections into named presentational components.";case"script-behavior-extraction":return"Extract independent script behavior into composables, controllers, or feature modules.";case"style-decomposition":return"Review UI/style decomposition; move repeated styling to component or style primitives, not composables.";case"external-script-boundary":return"Review the external script boundary and split controller/composable modules by workflow.";case"custom-block-review":return"Review custom block ownership before splitting template or script code.";case"route-page-decomposition":return"Split route/page orchestration from reusable panels and feature controllers.";case"total-size-review":return"Review the largest block first, then split by the dominant reason to change."}}var EI=new Set(["landing","page","pages","route","routes","view","views"]);function fc(e,t={}){let{minSimilarity:n=.5,limit:r=15,scope:i,minChainLength:o=3,maxChainLength:s=8}=t,a=re(e,i),c=OI(a,o,s);if(c.length===0)return[];let l=TI(c);return l.length<2?[]:jI($I(l,n,r),r)}function TI(e){let t=_I(e),n=[];for(let r of e){let i=r.filter(o=>!t.has(o));i.length>=2&&n.push({original:r,filtered:i})}return n}function _I(e){let{nodeFreq:t,tailFreq:n}=FI(e),r=e.length*.9,i=e.length*.8,o=new Set;for(let[a,c]of t)c>r&&o.add(a);for(let[a,c]of n)c>i&&o.add(a);let s=["index.ts","index.js","cli.ts","main.ts","health.ts","health.js"];for(let a of t.keys()){let c=a.split("/").pop()??"";s.includes(c)&&o.add(a)}return o}function FI(e){let t=new Map,n=new Map;for(let r of e){let i=new Set;for(let o of r)i.has(o)||(t.set(o,(t.get(o)??0)+1),i.add(o));for(let o=Math.max(0,r.length-2);o<r.length;o++)n.set(r[o],(n.get(r[o])??0)+1)}return{nodeFreq:t,tailFreq:n}}function $I(e,t,n){let r=[];for(let i=0;i<e.length;i++){for(let o=i+1;o<e.length;o++){let s=AI(e[i],e[o],t);s&&r.push(s)}if(r.length>n*10)break}return r.sort((i,o)=>Math.abs(o.similarity-i.similarity)>.01?o.similarity-i.similarity:i.divergencePoints.length-o.divergencePoints.length),r}function AI(e,t,n){if(!MI(e.filtered,t.filtered))return null;let{distance:r,ops:i}=BI(e.filtered,t.filtered),o=Math.max(e.filtered.length,t.filtered.length);if(o===0)return null;let s=1-r/o;if(s<n||r===0)return null;let a=i.filter(l=>l.type==="substitute").map(l=>({index:l.indexA,nodeA:e.filtered[l.indexA],nodeB:t.filtered[l.indexB]}));return a.length===0||i.filter(l=>l.type==="match").length<2?null:{chainA:e.original,chainB:t.original,similarity:s,editDistance:r,divergencePoints:a,commonPrefix:HI(e.original,t.original),commonSuffix:VI(e.original,t.original)}}function MI(e,t){let n=new Set(e);return t.some(r=>n.has(r))}function jI(e,t){let n=[];for(let r of e)if(n.some(o=>hp(r.chainA,o.chainA)&&hp(r.chainB,o.chainB))||n.push(r),n.length>=t)break;return n}function OI(e,t,n){let r=[];for(let o of e.keys()){if(r.length>=500)break;yp(e,o,[o],new Set([o]),t,n,r,500)}return r}function yp(e,t,n,r,i,o,s,a){if(s.length>=a)return;if(n.length>=o){n.length>=i&&s.push([...n]);return}let c=e.get(t);if(!c||c.size===0){n.length>=i&&s.push([...n]);return}let l=!1;for(let u of c)if(!r.has(u)&&(r.add(u),n.push(u),yp(e,u,n,r,i,o,s,a),n.pop(),r.delete(u),l=!0,s.length>=a))return;!l&&n.length>=i&&s.push([...n])}function BI(e,t){let n=e.length,r=t.length,i=Array.from({length:n+1},()=>Array(r+1).fill(0));for(let c=0;c<=n;c++)i[c][0]=c;for(let c=0;c<=r;c++)i[0][c]=c;for(let c=1;c<=n;c++)for(let l=1;l<=r;l++)e[c-1]===t[l-1]?i[c][l]=i[c-1][l-1]:i[c][l]=1+Math.min(i[c-1][l],i[c][l-1],i[c-1][l-1]);let o=[],s=n,a=r;for(;s>0||a>0;)s>0&&a>0&&e[s-1]===t[a-1]?(o.unshift({type:"match",indexA:s-1,indexB:a-1}),s--,a--):s>0&&a>0&&i[s][a]===i[s-1][a-1]+1?(o.unshift({type:"substitute",indexA:s-1,indexB:a-1}),s--,a--):a>0&&i[s][a]===i[s][a-1]+1?(o.unshift({type:"insert",indexA:s,indexB:a-1}),a--):(o.unshift({type:"delete",indexA:s-1,indexB:a}),s--);return{distance:i[n][r],ops:o}}function HI(e,t){let n=[];for(let r=0;r<Math.min(e.length,t.length)&&e[r]===t[r];r++)n.push(e[r]);return n}function VI(e,t){let n=[],r=e.length-1,i=t.length-1;for(;r>=0&&i>=0&&e[r]===t[i];)n.unshift(e[r]),r--,i--;return n}function hp(e,t){if(e.length>t.length)return!1;let n=t.join("\u2192"),r=e.join("\u2192");return n.includes(r)}function ze(e){let t=e.orderCandidates?[...e.candidates()].sort(e.orderCandidates):e.candidates(),n=We(t,e.scanLimit),r=e.prepare?.(n)??void 0,i=[];for(let o of n){let s=e.evaluate(o,r);s&&i.push(s)}return e.orderResults&&i.sort(e.orderResults),typeof e.limit=="number"?i.slice(0,e.limit):i}function wn(e,t={}){let{scope:n,minLoc:r=10,minCallees:i=6,limit:o=20,scanLimit:s}=t,a=new T(e);return ze({candidates:()=>a.productionCallableDefinitions({scope:n,minLoc:r,excludeTypesFiles:!0,requireFunctionLikeSymbol:!0,sortByLocDesc:!0}),scanLimit:s,prepare:c=>a.calleeMap(c,{semantic:t.semantic!==!1}),evaluate:(c,l)=>qI(c,l.get(c.symbolId)??[],i),orderResults:(c,l)=>l.clusters.length-c.clusters.length||l.loc-c.loc,limit:o})}function qI(e,t,n){let r=new Set(t.map(l=>l.symbol));if(r.size<n)return null;let i=JI(r,t),o=KI(r,i);if(o.length<2)return null;let s=XI(o,i);if(s.length===0)return null;let a=b(e.symbol),c=UI(a,r.size,o.length,s);return{symbol:e.symbol,shortName:a,relativePath:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:q(e),totalCallees:r.size,extractionKind:c.extractionKind,actionTier:"signal",evidenceReasons:c.evidenceReasons,recommendation:c.recommendation,clusters:s}}function UI(e,t,n,r){let i=Math.max(...r.map(c=>c.callees.length)),o=Math.max(...r.map(c=>c.isolation)),s=[`${t} distinct callees across ${n} co-occurrence cluster(s)`,`${r.length} extractable cluster(s) passed size and isolation thresholds`,`largest extractable cluster has ${i} callees at ${Math.round(o*100)}% isolation`],a=WI(e,t,n);return a!==null?{extractionKind:"workflow-orchestration",evidenceReasons:[...s,a],recommendation:"Review the isolated helper group as a possible private or feature-local helper, but keep the orchestration sequence together when it preserves the workflow."}:i>=6?{extractionKind:"broad-helper-cluster",evidenceReasons:[...s,"one isolated helper group is broad enough to deserve a named review"],recommendation:"Review whether the broad helper cluster has a stable concept name before extracting it; avoid creating a bag-of-helpers abstraction."}:{extractionKind:"cohesive-helper-cluster",evidenceReasons:s,recommendation:"Review the isolated callee group as a possible same-file or feature-local helper; extract only if the new name preserves the current behavior."}}function WI(e,t,n){if(t>=10)return`callee breadth suggests orchestration: ${t} callees`;if(n>=4)return`multiple disconnected callee groups suggest orchestration: ${n} groups`;let r=GI(e);return zI.has(r)?`caller verb suggests orchestration: ${r}`:null}function GI(e){return e.split(":").pop()?.replace(/\(\)$/,"").replace(/[^A-Za-z0-9_]/g,"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[_\s-]+/).filter(Boolean)[0]?.toLowerCase()??""}var zI=new Set(["apply","build","check","collect","create","diff","execute","find","handle","load","prepare","process","render","resolve","run","select","sync","update","validate","verify","write"]);function JI(e,t){let n=new Map;for(let i of e)n.set(i,new Set);let r=new Map;for(let i of t){let o=r.get(i.chunkId);o||(o=new Set,r.set(i.chunkId,o)),o.add(i.symbol)}for(let i of r.values()){let o=[...i];for(let s=0;s<o.length;s++)for(let a=s+1;a<o.length;a++)n.get(o[s]).add(o[a]),n.get(o[a]).add(o[s])}return n}function KI(e,t){let n=new Set,r=[];for(let i of e){if(n.has(i))continue;let o=new Set,s=[i];for(;s.length>0;){let a=s.pop();if(!n.has(a)){n.add(a),o.add(a);for(let c of t.get(a)??[])n.has(c)||s.push(c)}}r.push(o)}return r}function XI(e,t){return e.filter(n=>n.size>=3).map(n=>QI(n,e,t)).filter(n=>n.isolation>.5).sort((n,r)=>r.isolation-n.isolation)}function QI(e,t,n){let r=new Set;for(let a of t)if(a!==e)for(let c of a)r.add(c);let i=0;for(let a of e)for(let c of n.get(a)??[])r.has(c)&&i++;let o=e.size*r.size,s=o>0?1-i/o:1;return{callees:[...e].map(b),isolation:s}}import{posix as Sr}from"path";var YI=U("definition-consumer-file-usage",{clearGroups:["whole-project","source-file"]});function Ln(e,t,n){return e.callerFileMap(t,{semantic:n.semantic,sourceFallback:n.sourceFallback})}function Wo(e,t,n){let r=[],i=0,o=0,s=$(t.symbol);for(let a of n)iD(e,a,t.relativePath,s)?i++:gc(e,a,s)?o++:r.push(a);return{realConsumers:r,barrelConsumers:i,importOnlyConsumers:o}}function gc(e,t,n){if(!n)return!1;let r=W(t);if(!r)return!1;let i=YI.get(e,t,()=>ZI(e,t,r));return i.importedLeaves.has(n)&&!i.usedLeaves.has(n)}function ZI(e,t,n){let r=F(e,t);if(!r)return tD();let i=Ye(e,t,r),o=Mt(e,"consumer-file-usage",t,i);if(o){let a=rD(o);if(a)return a}let s=eD(e,t,n);return jt(e,"consumer-file-usage",t,i,nD(s)),s}function eD(e,t,n){let r=new Set,i=new Set,o=fe(e,t);if(!o)return{importedLeaves:r,usedLeaves:i};let s=n==="rust"?new Set(["use_declaration"]):n==="python"?new Set(["import_statement","import_from_statement"]):new Set(["import_statement"]),a=(c,l)=>{let u=l||s.has(c.type);(c.type==="identifier"||c.type==="type_identifier"||c.type==="property_identifier"||c.type==="field_identifier")&&(u?r.add(c.text):i.add(c.text));for(let d of c.children)a(d,u)};return a(o.rootNode,!1),{importedLeaves:r,usedLeaves:i}}function tD(){return{importedLeaves:new Set,usedLeaves:new Set}}function nD(e){return JSON.stringify({importedLeaves:[...e.importedLeaves],usedLeaves:[...e.usedLeaves]})}function rD(e){try{let t=JSON.parse(e);return!Array.isArray(t.importedLeaves)||!Array.isArray(t.usedLeaves)?null:{importedLeaves:new Set(t.importedLeaves.filter(n=>typeof n=="string")),usedLeaves:new Set(t.usedLeaves.filter(n=>typeof n=="string"))}}catch{return null}}function iD(e,t,n,r){if(!r)return!1;let i=Qe(e,t);if(i.length===0)return!1;let o=Jr(e,t);if(o.length===0)return!1;let s=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=new RegExp(`\\b${s}\\b`),c=0;for(let l=0;l<i.length;l++){if(!a.test(i[l]??""))continue;if(c++,!o.find(d=>d.startLine<=l&&l<=d.endLine))return!1}return c>0}var oD=20,sD=1,aD=new Map([["app","app"],["apps","app"],["component","component"],["components","component"],["composable","composable"],["composables","composable"],["contract","contract"],["contracts","contract"],["domain","domain"],["domains","domain"],["feature","feature"],["features","feature"],["hook","hook"],["hooks","hook"],["lib","library"],["module","module"],["modules","module"],["package","package"],["packages","package"],["page","page"],["pages","page"],["route","route"],["routes","route"],["screen","screen"],["screens","screen"],["service","service"],["services","service"],["shared","shared"],["src","source-root"],["store","state"],["stores","state"],["test","test"],["tests","test"],["util","utility"],["utils","utility"],["view","view"],["views","view"]]),cD=new Set(["components","contracts","hooks","lib","services","shared","stores","utils"]),lD=new Set(["access","api","auth","config","db","effect","errors","hooks","lib","middleware","permissions","routes","schemas","servicetasks","services","startup","store","stores","test-utils","repository","repositories","tests","types","ui","utils","workflow","workflows"]);function Sc(e,t={}){let n=bc(t.limit,oD),r=bc(t.minConsumers,sD),i=new T(e),o=i.fileDependencyGraph(t.scope),s=PD(j(e,{includeIgnored:!1})),a=TD(e.config.locality?.architecturalBoundarySegments,t.architecturalBoundarySegments);return(t.target?uD(e,i,t.target):dD(e,t.scope,t.scanLimit)).map(u=>mD(i,o,u,t,s,a)).filter(u=>u.consumerFiles.length>=r||t.target).sort(DD).slice(0,n)}function uD(e,t,n){let r=gD(e,n);if(r)return[vp(r)];let i=B(e,n);if(!i)return[];let o=t.definitionsForFile(i.relativePath).find(s=>s.symbolId===i.symbolId);return o?[hD(o)]:[{unit:{kind:"symbol",file:i.relativePath,shortName:b(i.symbol),symbol:i.symbol,startLine:i.startLine,endLine:i.endLine}}]}function dD(e,t,n){let r=j(e,{scope:t,includeIgnored:!1}),i=bc(n,r.length);return r.slice(0,i).map(o=>vp(o))}function mD(e,t,n,r,i,o){let s=n.definition?pD(e,n.definition,r.semantic):fD(t,n.unit.file),a=n.definition?s.length>0?"exact":"none":s.length>0?"file-level":"none",c=n.unit.file,l=rt(Sr.dirname(c)),u=bD(s),d=yD(l),m=vc([...bp(l),...u?bp(u):[]]),f=SD(n.unit,l,u,s),h=xD(f,n.unit,l,u,s,i,o),g=wD(n.unit,a,u,s,l,h.whyNoSuggestedHome),y=LD(n.unit,l,u,s,h.suggestedHome,h.whyNoSuggestedHome);return{actionTier:"signal",sourceUnit:n.unit,candidatePath:c,currentDirectory:l,directoryAncestry:d,consumerFiles:s,consumerCoverage:a,nearestCommonOwner:u,boundaryMarkers:m,recommendedTier:f,suggestedHome:h.suggestedHome,destinationConfidence:h.confidence,whyNoSuggestedHome:h.whyNoSuggestedHome,counterevidence:g,reasons:y,recommendation:ID(f,h.suggestedHome,a)}}function pD(e,t,n){let r=Ln(e,[t],{semantic:n!==!1,sourceFallback:!0});return Ip(r.get(t.symbolId)??[])}function fD(e,t){let n=[];for(let[r,i]of e.entries())r!==t&&i.has(t)&&n.push(r);return Ip(n)}function gD(e,t){let n=Cc(t),r=j(e,{includeIgnored:!1}),i=r.find(s=>s===n);if(i)return i;let o=r.find(s=>s.endsWith(`/${n}`));return o||(r.find(s=>s.includes(n))??null)}function hD(e){return{definition:e,unit:{kind:"symbol",file:e.relativePath,shortName:b(e.symbol),symbol:e.symbol,startLine:e.startLine,endLine:e.endLine}}}function vp(e){return{unit:{kind:"file",file:e,shortName:Sr.basename(e)}}}function yD(e){if(e===".")return[{path:".",depth:0,markers:[]}];let t=[],n=e.split("/").filter(Boolean);for(let r=0;r<n.length;r+=1){let i=n.slice(0,r+1).join("/");t.push({path:i,depth:r,markers:xc(i)})}return t}function bp(e){return e==="."?[]:Rp(e).map(({marker:t,prefix:n})=>`${t}: ${n}`)}function xc(e){return vc(Rp(e).map(({marker:t})=>t))}function Rp(e){let t=e.split("/").filter(Boolean),n=[];for(let r=0;r<t.length;r+=1){let i=aD.get(t[r]);i&&n.push({marker:i,prefix:t.slice(0,r+1).join("/")})}return n}function bD(e){if(e.length===0)return null;let t=e.map(r=>rt(Sr.dirname(r))),n=t[0].split("/").filter(Boolean);for(let r of t.slice(1)){let i=r.split("/").filter(Boolean),o=[],s=Math.min(n.length,i.length);for(let a=0;a<s&&n[a]===i[a];a+=1)o.push(n[a]);n=o}return n.length===0?".":n.join("/")}function SD(e,t,n,r){return n?e.kind==="symbol"&&r.length===1?r[0]===e.file?"same-file":"sibling-folder":n==="."||n==="src"?"repository-level-review":xp(n,"package")?"package-level-shared":xp(n,"app")?"app-level-shared":Cp(n,["feature","domain","module"])||Cp(t,["feature","domain","module"])?"feature-local-shared":"sibling-folder":"no-exact-consumers"}function xD(e,t,n,r,i,o,s){let a=CD(e,r);if(a)return Qt(a);let c=ND(t.file),l=vD(e,n,c,i,s);if(l)return l;let u=r;if(rt(n)===rt(u))return Qt(`${n} is already the nearest common owner for its consumers.`);let d=RD(u,n,c,s);return d||kD(u,n,c,o,s)}function CD(e,t){return t?e==="no-exact-consumers"||e==="repository-level-review"?"The inferred owner is too broad or unsupported for an exact destination.":null:"No consumer owner could be inferred from the current index."}function vD(e,t,n,r,i){if(e==="same-file"){let o=r[0]??null;return o?hc(o):Qt("No same-file consumer path was available.")}if(e==="sibling-folder"&&r.length===1){let o=rt(Sr.dirname(r[0])),s=Lp(t,n,o,i);return s?Qt(s):hc(o)}return null}function RD(e,t,n,r){return FD(e)?kp(e,t,n,r,`Nearest shared owner ${e} is outside source root ${n}.`):null}function kD(e,t,n,r,i){if(e===".")return Qt("The nearest common owner is the repository root.");let o=`${e}/shared`,s=kp(o,t,n,i,`Proposed home ${o} is outside source root ${n}.`);return s.confidence==="withheld"||r.has(o)?s:Qt(`${o} does not exist in the indexed project.`)}function kp(e,t,n,r,i){if(!wp(e,n))return Qt(i);let o=Lp(t,n,e,r);return o?Qt(o):hc(e)}function hc(e){return{suggestedHome:e,confidence:"exact",whyNoSuggestedHome:null}}function Qt(e){return{suggestedHome:null,confidence:"withheld",whyNoSuggestedHome:e}}function wD(e,t,n,r,i,o){let s=["Report-only signal; review ownership before moving files."];return t==="none"&&s.push("No consumers were found in the current index."),t==="file-level"&&s.push("File-level import evidence can hide which exported unit is actually used."),(n==="."||n==="src")&&s.push("Nearest common owner is broad, so this is not enough evidence for automatic placement."),r.length===1&&s.push("Only one consumer was found; inlining or same-folder placement may be better than shared extraction."),e.kind==="file"&&s.push("File targets describe module locality, not symbol-level usage."),n&&i.startsWith(`${n}/`)&&s.push("Candidate already lives under the nearest common owner."),o&&s.push(`No exact suggested home: ${o}`),s}function LD(e,t,n,r,i,o){let s=[];return s.push(`${e.shortName} currently lives in ${t}.`),n?s.push(`${r.length} consumer file(s) share ${n} as their nearest common owner.`):s.push("No consumer owner could be inferred from the current index."),i?s.push(`Suggested home is ${i}.`):o&&s.push(`No exact suggested home: ${o}`),s}function ID(e,t,n){return e==="no-exact-consumers"?"Review references before moving; no consumers were found.":e==="repository-level-review"?"Keep this as a broad locality signal; the inferred owner is too general for automatic relocation.":t?`Review whether ${n==="exact"?"symbol usage":"module import"} supports moving or extracting toward ${t}.`:"Review ownership manually before changing structure."}function DD(e,t){return Sp(t)-Sp(e)||e.candidatePath.localeCompare(t.candidatePath)}function Sp(e){let t=e.consumerFiles.length*10;return e.consumerCoverage==="exact"&&(t+=5),e.suggestedHome&&(t+=3),e.recommendedTier==="repository-level-review"&&(t-=8),e.recommendedTier==="no-exact-consumers"&&(t-=12),t}function PD(e){let t=new Set(["."]);for(let n of e){let r=rt(Sr.dirname(n));for(;!t.has(r)&&(t.add(r),r!==".");)r=rt(Sr.dirname(r))}return t}function ND(e){let t=yc(e),n=t.indexOf("src");return n>=0?t.slice(0,n+1).join("/"):t.length<=1?".":t[0]}function wp(e,t){let n=rt(e),r=rt(t);return r==="."||n===r||n.startsWith(`${r}/`)}function ED(e,t,n){let r=yc(e),i=yc(t);return(wp(e,t)?r.slice(i.length):r).some(s=>n.has(s.toLowerCase()))}function Lp(e,t,n,r){return rt(e)===rt(n)||!ED(e,t,r)?null:`${e} is a named architectural boundary; an exact move to ${n} needs human design.`}function TD(...e){let t=new Set(lD);for(let n of e)for(let r of n??[]){let i=_D(r);i&&t.add(i)}return t}function _D(e){let t=e.trim().toLowerCase();return t===""?null:t}function xp(e,t){return xc(e).includes(t)}function Cp(e,t){let n=xc(e);return t.some(r=>n.includes(r))}function FD(e){let t=e.split("/").filter(Boolean),n=t[t.length-1];return n?cD.has(n):!1}function Cc(e){return e.replaceAll("\\","/").replace(/^\.\//,"")}function rt(e){let t=Cc(e);return t===""?".":t}function yc(e){let t=Cc(e);return t==="."?[]:t.split("/").filter(Boolean)}function bc(e,t){return!Number.isFinite(e)||e===void 0||e<1?t:Math.floor(e)}function Ip(e){return vc([...e]).sort((t,n)=>t.localeCompare(n))}function vc(e){return[...new Set(e)]}function gi(e,t,n={}){let{maxDepth:r=5,scope:i}=n,o=B(e,t);if(!o)return[];let s=[],a=new Set([o.symbolId]),c=new Set,l=[o];for(let u=1;u<=r&&l.length!==0;u++){let d=[];for(let m of l)for(let f of $D(e,m,i)){let h=`${f.file}|${f.shortName}`;if(f.symbolId!==null){if(a.has(f.symbolId))continue;a.add(f.symbolId)}else if(c.has(h))continue;c.add(h),s.push({symbol:f.symbol,shortName:f.shortName,file:f.file,depth:u}),f.symbolId!==null&&f.symbolMatch&&d.push(f.symbolMatch)}l=d}return s.sort((u,d)=>u.depth-d.depth||u.file.localeCompare(d.file)),s}function $D(e,t,n){let r=Ue(e,t,{limit:500}).filter(l=>!e.isIgnored(l.file)).filter(l=>!n||l.file.includes(n)),i=new Set(r.map(l=>l.file)),o=[];for(let l of AD(e,t,n)){if(i.has(l))continue;let u=z(e,l),d=u.length>0?Be(u,u[0].startLine):null;o.push({symbol:d?.symbol??l,file:l})}let s=[...r,...o],a=[],c=new Set;for(let l of s){let u=sr(e,l.symbol);if(!u){let m=`${l.file}|${l.symbol}`;if(c.has(m))continue;c.add(m),a.push({symbolId:null,symbol:l.symbol,shortName:b(l.symbol),file:l.file,symbolMatch:null});continue}if(u.symbolId===t.symbolId||e.isIgnored(u.relativePath)||!MD(u.symbol))continue;let d=`${u.symbolId}|${u.relativePath}`;c.has(d)||(c.add(d),a.push({symbolId:u.symbolId,symbol:u.symbol,shortName:b(u.symbol),file:u.relativePath,symbolMatch:u}))}return a}function AD(e,t,n){let r=n?"AND consumer_d.relative_path LIKE ?":"",i=[t.symbolId,t.documentId];return n&&i.push(`%${n}%`),new Set(e.all(`SELECT DISTINCT consumer_d.relative_path
462
495
  FROM mentions m
463
496
  JOIN chunks c ON m.chunk_id = c.id
464
497
  JOIN documents consumer_d ON consumer_d.id = c.document_id
@@ -466,47 +499,48 @@ ${m}`,l+=1+m.length,u+=Fi(m),i+=m.length+1}let d=OC(c);d&&n.push({...d,start:a,e
466
499
  AND m.role != 1
467
500
  AND c.document_id != ?
468
501
  ${e.pathExclusionsFor("consumer_d")}
469
- ${i}`,...r).map(o=>o.relative_path).filter(o=>!e.isIgnored(o)))}function hD(e){let t=Z(e);return t==="method"||t==="type"||e.endsWith("().")}function ir(e,t,n={}){let i=Ie(e,t);if(!i)return null;let r=bD(e,i);if(!r||e.isIgnored(r.relative_path))return null;let o=[],s=0,a=yD(e,r.relative_path),c=n.semantic===!1?new Map:ri(e,a);for(let l of a){let u=SD(e,r,l,c.get(l.symbolId)??new Set);s+=u,o.push({symbol:l.symbol,shortName:y(l.symbol),startLine:l.startLine,endLine:l.endLine,externalConsumers:u,riskLevel:xD(u)})}return{file:r.relative_path,symbols:o,totalExternalConsumers:s}}function bD(e,t){return e.get(`SELECT id, relative_path FROM documents
502
+ ${r}`,...i).map(o=>o.relative_path).filter(o=>!e.isIgnored(o)))}function MD(e){let t=ee(e);return t==="method"||t==="type"||e.endsWith("().")}function hi(e,t,n={}){let r=Ee(e,t);if(!r)return null;let i=jD(e,r);if(!i||e.isIgnored(i.relative_path))return null;let o=[],s=0,a=OD(e,i.relative_path),c=n.semantic===!1?new Map:mt(e,a);for(let l of a){let u=BD(e,i,l,c.get(l.symbolId)??new Set);s+=u,o.push({symbol:l.symbol,shortName:b(l.symbol),startLine:l.startLine,endLine:l.endLine,externalConsumers:u,riskLevel:HD(u)})}return{file:i.relative_path,symbols:o,totalExternalConsumers:s}}function jD(e,t){return e.get(`SELECT id, relative_path FROM documents
470
503
  WHERE relative_path = ?
471
504
  ${e.pathExclusionsFor("documents")}
472
- LIMIT 1`,t)??null}function yD(e,t){return new T(e).definitionsForFile(t).sort((n,i)=>n.startLine-i.startLine||n.endLine-i.endLine)}function SD(e,t,n,i){let r=e.all(`SELECT DISTINCT consumer_d.relative_path
505
+ LIMIT 1`,t)??null}function OD(e,t){return new T(e).definitionsForFile(t).sort((n,r)=>n.startLine-r.startLine||n.endLine-r.endLine)}function BD(e,t,n,r){let i=e.all(`SELECT DISTINCT consumer_d.relative_path
473
506
  FROM mentions m
474
507
  JOIN chunks c ON m.chunk_id = c.id
475
508
  JOIN documents consumer_d ON consumer_d.id = c.document_id
476
509
  WHERE m.symbol_id = ?
477
510
  AND m.role != 1
478
- AND c.document_id != ?`,n.symbolId,t.id);return new Set([...r.map(o=>o.relative_path),...[...i].filter(o=>o!==t.relative_path)]).size}function xD(e){return e>10?"high":e>0?"medium":"low"}function Lo(e,t={}){let{scope:n,minLoc:i=1,maxDepth:r=5,scanLimit:o}=t,s=new T(e),a=CD(e,n,i,o),c=new nc;for(let g of a)c.add(g);let l=[],u=[];a.length>0&&l.push(zm(e,0,a,c));let d=a.map(g=>g.definition).filter(g=>g!==null),m=new Set(a.map(g=>g.symbol));for(let g=1;g<=r&&d.length>0;g++){let b=s.calleeMap(d,{semantic:!1}),S=new Set;for(let I of d)for(let L of b.get(I.symbolId)??[])m.has(L.symbol)||S.add(L.symbol);let x=[];for(let I of S){m.add(I);let L=Km(e,I);if(!L||e.isIgnored(L.relativePath)||we(e,L.relativePath)||ie(e,L.symbol,L.relativePath)||s.fileKind(L.relativePath)==="test"||s.hasSuppressionComment(L))continue;let C=RD(e,L,c);C.removable?x.push(vD(L,"cascade")):C.blockingFiles.length>0&&u.push({shortName:y(L.symbol),file:L.relativePath,blockingFiles:C.blockingFiles.slice(0,3)})}if(x.length===0)break;for(let I of x)c.add(I);l.push(zm(e,g,x,c)),d=x.map(I=>I.definition).filter(I=>I!==null)}let p=l.reduce((g,b)=>g+b.loc,0),h=l.reduce((g,b)=>g+b.entries.length,0);return{batches:l,totalSymbols:h,totalLoc:p,blocked:u}}function CD(e,t,n,i){let r=Rt(e,{scope:t,minLoc:n,skipBarrels:!0,deadCodeOnly:!0,scanLimit:i,semantic:!1}),o=[];for(let s of r.symbols)s.kind==="dead-code"&&(we(e,s.relativePath)||ie(e,s.symbol,s.relativePath)||o.push({symbol:s.symbol,shortName:s.shortName,file:s.relativePath,startLine:s.startLine,endLine:s.endLine,loc:s.loc,evidence:"graph-fact",definition:Km(e,s.symbol)}));return o}function vD(e,t){return{symbol:e.symbol,shortName:y(e.symbol),file:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:e.endLine-e.startLine+1,evidence:t,definition:e}}function Km(e,t){let n=e.get(`SELECT d.relative_path
511
+ AND c.document_id != ?`,n.symbolId,t.id);return new Set([...i.map(o=>o.relative_path),...[...r].filter(o=>o!==t.relative_path)]).size}function HD(e){return e>10?"high":e>0?"medium":"low"}function Go(e,t={}){let{scope:n,minLoc:r=1,maxDepth:i=5,scanLimit:o}=t,s=new T(e),a=VD(e,n,r,o),c=new Rc;for(let g of a)c.add(g);let l=[],u=[];a.length>0&&l.push(Dp(e,0,a,c));let d=a.map(g=>g.definition).filter(g=>g!==null),m=new Set(a.map(g=>g.symbol));for(let g=1;g<=i&&d.length>0;g++){let y=s.calleeMap(d,{semantic:!1}),S=new Set;for(let k of d)for(let D of y.get(k.symbolId)??[])m.has(D.symbol)||S.add(D.symbol);let C=[];for(let k of S){m.add(k);let D=Pp(e,k);if(!D||e.isIgnored(D.relativePath)||De(e,D.relativePath)||ie(e,D.symbol,D.relativePath)||s.fileKind(D.relativePath)==="test"||s.hasSuppressionComment(D))continue;let x=UD(e,D,c);x.removable?C.push(qD(D,"cascade")):x.blockingFiles.length>0&&u.push({shortName:b(D.symbol),file:D.relativePath,blockingFiles:x.blockingFiles.slice(0,3)})}if(C.length===0)break;for(let k of C)c.add(k);l.push(Dp(e,g,C,c)),d=C.map(k=>k.definition).filter(k=>k!==null)}let f=l.reduce((g,y)=>g+y.loc,0),h=l.reduce((g,y)=>g+y.entries.length,0);return{batches:l,totalSymbols:h,totalLoc:f,blocked:u}}function VD(e,t,n,r){let i=Dt(e,{scope:t,minLoc:n,skipBarrels:!0,deadCodeOnly:!0,scanLimit:r,semantic:!1}),o=[];for(let s of i.symbols)s.kind==="dead-code"&&(De(e,s.relativePath)||ie(e,s.symbol,s.relativePath)||o.push({symbol:s.symbol,shortName:s.shortName,file:s.relativePath,startLine:s.startLine,endLine:s.endLine,loc:s.loc,evidence:"graph-fact",definition:Pp(e,s.symbol)}));return o}function qD(e,t){return{symbol:e.symbol,shortName:b(e.symbol),file:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:e.endLine-e.startLine+1,evidence:t,definition:e}}function Pp(e,t){let n=e.get(`SELECT d.relative_path
479
512
  FROM global_symbols gs
480
513
  JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
481
514
  JOIN documents d ON d.id = der.document_id
482
515
  WHERE gs.symbol = ?
483
- LIMIT 1`,t);return n?G(e,n.relative_path).find(i=>i.symbol===t)??null:null}function RD(e,t,n){let i=dn(e,t);if(i.length===0)return{removable:!1,blockingFiles:[]};let r=new Set;for(let o of i)o.file===t.relativePath&&o.line>=t.startLine&&o.line<=t.endLine||n.contains(o.file,o.line)||r.add(o.file);return{removable:r.size===0,blockingFiles:[...r]}}function zm(e,t,n,i){let r=[...n].sort((a,c)=>a.file.localeCompare(c.file)||a.startLine-c.startLine),o=new Set(r.map(a=>a.file)),s=[];for(let a of o){let c=G(e,a);c.length>0&&c.every(l=>i.contains(a,l.startLine))&&s.push(a)}return{depth:t,entries:r.map(({definition:a,...c})=>c),loc:r.reduce((a,c)=>a+c.loc,0),filesEmptied:s.sort()}}var nc=class{ranges=new Map;add(t){let n=this.ranges.get(t.file)??[];n.push({start:t.startLine,end:t.endLine}),this.ranges.set(t.file,n)}contains(t,n){let i=this.ranges.get(t);return i?i.some(r=>n>=r.start&&n<=r.end):!1}};import{createHash as $N}from"crypto";import{existsSync as $p}from"fs";import{execFileSync as kD}from"child_process";var Qm=2e3,Xm=50,wD=8,LD=3,DD=2160*60*60,ID=/\b(?:fix(?:es|ed)?|bug|regression|hotfix)\b/i,PD=3,ND=/#\d+|\b[A-Z][A-Z0-9]+-\d+\b/g,ED=/^([a-z][a-z0-9-]+)(?:\([^)]+\))?!?:/i;function ic(e){let t=Y(e,{clearGroups:["whole-project"]});return(n,i)=>{let r=_D(n.config.projectRoot);if(!r)return null;let o=t.has(n)?t.get(n,()=>({head:"",value:null})):null;return o&&o.head===r?o.value:(t.invalidate(n),t.get(n,()=>({head:r,value:i(n.config.projectRoot,r)})).value)}}var TD=ic("git-commit-history");function qt(e){return TD(e,$D)}function _D(e){try{return Do(e,["rev-parse","HEAD"]).trim()||null}catch{return null}}function Do(e,t){return kD("git",["-C",e,...t],{encoding:"utf-8",maxBuffer:64*1024*1024,stdio:["ignore","pipe","ignore"]})}function $D(e,t){let n;try{n=Do(e,["log","--no-merges","--name-only","-n",String(Qm),"--pretty=format:%x01%H%x00%ct%x00%s"])}catch{return null}let i=[],r=0;for(let o of n.split("")){if(o.trim()==="")continue;let s=o.indexOf(`
516
+ LIMIT 1`,t);return n?z(e,n.relative_path).find(r=>r.symbol===t)??null:null}function UD(e,t,n){let r=bn(e,t);if(r.length===0)return{removable:!1,blockingFiles:[]};let i=new Set;for(let o of r)o.file===t.relativePath&&o.line>=t.startLine&&o.line<=t.endLine||n.contains(o.file,o.line)||i.add(o.file);return{removable:i.size===0,blockingFiles:[...i]}}function Dp(e,t,n,r){let i=[...n].sort((a,c)=>a.file.localeCompare(c.file)||a.startLine-c.startLine),o=new Set(i.map(a=>a.file)),s=[];for(let a of o){let c=z(e,a);c.length>0&&c.every(l=>r.contains(a,l.startLine))&&s.push(a)}return{depth:t,entries:i.map(({definition:a,...c})=>c),loc:i.reduce((a,c)=>a+c.loc,0),filesEmptied:s.sort()}}var Rc=class{ranges=new Map;add(t){let n=this.ranges.get(t.file)??[];n.push({start:t.startLine,end:t.endLine}),this.ranges.set(t.file,n)}contains(t,n){let r=this.ranges.get(t);return r?r.some(i=>n>=i.start&&n<=i.end):!1}};import{createHash as nT}from"crypto";import{existsSync as yf}from"fs";import{execFileSync as WD}from"child_process";var Ep=2e3,Tp=50,GD=8,zD=3,JD=2160*60*60,KD=/\b(?:fix(?:es|ed)?|bug|regression|hotfix)\b/i,XD=3,QD=/#\d+|\b[A-Z][A-Z0-9]+-\d+\b/g,YD=/^([a-z][a-z0-9-]+)(?:\([^)]+\))?!?:/i;function kc(e){let t=Y(e,{clearGroups:["whole-project"]});return(n,r)=>{let i=eP(n.config.projectRoot);if(!i)return null;let o=t.has(n)?t.get(n,()=>({head:"",value:null})):null;return o&&o.head===i?o.value:(t.invalidate(n),t.get(n,()=>({head:i,value:r(n.config.projectRoot,i)})).value)}}var ZD=kc("git-commit-history");function Yt(e){return ZD(e,tP)}function eP(e){try{return zo(e,["rev-parse","HEAD"]).trim()||null}catch{return null}}function zo(e,t){return WD("git",["-C",e,...t],{encoding:"utf-8",maxBuffer:64*1024*1024,stdio:["ignore","pipe","ignore"]})}function tP(e,t){let n;try{n=zo(e,["log","--no-merges","--name-only","-n",String(Ep),"--pretty=format:%x01%H%x00%ct%x00%s"])}catch{return null}let r=[],i=0;for(let o of n.split("")){if(o.trim()==="")continue;let s=o.indexOf(`
484
517
  `),a=s>=0?o.slice(0,s):o,[c,l,u]=a.split("\0");if(!c||!l)continue;let d=s>=0?o.slice(s+1).split(`
485
- `).map(m=>m.trim()).filter(m=>m!==""):[];if(d.length>Xm){r+=1;continue}i.push({hash:c,timestamp:Number(l)||0,subject:u??"",files:d})}return{head:t,commits:i,skippedBulkCommits:r}}function FD(e){return ID.test(e.subject)}function Io(e){let t=qt(e);if(!t)return null;let n=new Map;for(let i of t.commits){let r=FD(i);for(let o of i.files){let s=n.get(o)??{changes:0,fixChanges:0,lastChangedAt:0};s.changes+=1,r&&(s.fixChanges+=1),i.timestamp>s.lastChangedAt&&(s.lastChangedAt=i.timestamp),n.set(o,s)}}return n}function Ym(e){let t=qt(e);if(!t||t.commits.length===0)return null;let n=t.commits.map(i=>i.files.length).filter(i=>i>0).sort((i,r)=>i-r);return n.length===0?null:{medianFilesPerCommit:Jm(n,.5),p90FilesPerCommit:Jm(n,.9),commitsAnalyzed:n.length}}function Jm(e,t){let n=Math.min(e.length-1,Math.floor(e.length*t));return e[n]}var AD=ic("git-tracked-files");function rc(e){return AD(e,t=>{try{let n=Do(t,["ls-files"]);return new Set(n.split(`
486
- `).map(i=>i.trim()).filter(i=>i!==""))}catch{return null}})}var MD=ic("git-file-adds");function Zm(e){return MD(e,t=>OD(t))}function OD(e){let t;try{t=Do(e,["log","--no-merges","--diff-filter=A","--name-only","-n",String(Qm),"--pretty=format:%x01%H%x00%ct%x00%s"])}catch{return null}let n=new Map,i=-1;for(let r of t.split("")){if(r.trim()==="")continue;i+=1;let o=r.indexOf(`
487
- `),s=o>=0?r.slice(0,o):r,[,a]=s.split("\0"),c=Number(a)||0;if(!(o<0))for(let l of r.slice(o+1).split(`
488
- `)){let u=l.trim();u!==""&&n.set(u,{commitsAgo:i,addedAt:c})}}return n}function ep(e,t={}){let n=qt(e);return n?np(n,t):null}function tp(e,t,n={}){let i=qt(e);return i?t.size===0?[]:np(i,n,t):null}function np(e,t,n){let{minTogether:i=4,minConfidence:r=.6,maxFilesPerCommit:o=Xm}=t,s=new Map,a=new Map,c=0;for(let d of e.commits){let m=[...new Set(d.files)].sort();if(m.length>o)continue;d.timestamp>c&&(c=d.timestamp);let p=jD(m),h=n===void 0||m.some(g=>n.has(g));for(let g of m)s.set(g,(s.get(g)??0)+1);if(h)for(let g=0;g<m.length;g++)for(let b=g+1;b<m.length;b++){if(n&&!n.has(m[g])&&!n.has(m[b]))continue;let S=`${m[g]}\0${m[b]}`,x=a.get(S)??{together:0,focusedTogether:0,broadTogether:0,lastTogetherAt:0,timestamps:[],subjects:[]};x.together+=1,p?x.broadTogether+=1:x.focusedTogether+=1,d.timestamp>x.lastTogetherAt&&(x.lastTogetherAt=d.timestamp),x.timestamps.push(d.timestamp),x.subjects.push(d.subject),a.set(S,x)}}let l=[],u=c-DD;for(let[d,m]of a){let p=m.together;if(p<i)continue;let[h,g]=d.split("\0"),b=s.get(h)??p,S=s.get(g)??p,x=Math.max(p/b,p/S);if(x<r)continue;let I=m.broadTogether/p,L=m.timestamps.filter(C=>C>=u).length;l.push({fileA:h,fileB:g,together:p,confidence:x,changesA:b,changesB:S,focusedTogether:m.focusedTogether,broadTogether:m.broadTogether,broadCommitRatio:I,lastTogetherAt:m.lastTogetherAt,recentTogether:L,commitScope:HD(m.broadTogether,p),recency:L>0?"recent":"stale",subjectContext:VD(m.subjects)})}return l.sort((d,m)=>m.together-d.together||m.confidence-d.confidence||d.fileA.localeCompare(m.fileA)),l}function jD(e){return e.length>=wD?!0:BD(e).size>=LD}function BD(e){let t=new Set;for(let n of e){let i=n.indexOf("/");t.add(i>=0?n.slice(0,i):".")}return t}function HD(e,t){return e===0?"focused":e/t>=.5?"broad-sweep":"mixed"}function VD(e){let t=new Set,n=[],i=[];for(let r of e){!i.includes(r)&&i.length<PD&&i.push(r);for(let o of qD(r))t.add(o);for(let o of r.match(ND)??[])n.includes(o)||n.push(o)}return{subjectLabels:[...t].sort(),issueRefs:n,sampleSubjects:i,externalIssueLabelStatus:"unavailable"}}function qD(e){let t=new Set,n=ED.exec(e)?.[1]?.toLowerCase();return n&&t.add(UD(n)),/\b(?:feat|feature)\b/i.test(e)&&t.add("feature"),/\b(?:fix(?:es|ed)?|bug|regression|hotfix)\b/i.test(e)&&t.add("fix"),/\b(?:docs?|documentation|guide|readme)\b/i.test(e)&&t.add("docs"),/\brefactor(?:ing|ed)?\b/i.test(e)&&t.add("refactor"),/\btests?\b/i.test(e)&&t.add("test"),/\b(?:release|version|v\d+\.\d+)\b/i.test(e)&&t.add("release"),/\bchore\b/i.test(e)&&t.add("chore"),/\bbuild\b/i.test(e)&&t.add("build"),/\bci\b/i.test(e)&&t.add("ci"),/\bperf(?:ormance)?\b/i.test(e)&&t.add("perf"),[...t]}function UD(e){return e==="feat"?"feature":e}import{existsSync as WD}from"fs";import{join as GD}from"path";function sc(e){return oc.test(e)}var oc=/(?:^|\/)(?:package-lock\.json|pnpm-lock\.yaml|yarn\.lock|Cargo\.lock|CHANGELOG(?:\.[a-z]+)?|.*\.map)$|(?:^|\/)(?:dist|build|out|node_modules|docs\/plans)\//i;function xn(e,t,n={}){let{minTogether:i=4,minConfidence:r=.6,limit:o=30,maxFilesPerCommit:s=20}=n,a=qt(e),c=t!==void 0,l=ep(e,{minTogether:c?Math.min(i,2):i,minConfidence:c?0:r,maxFilesPerCommit:s});if(!a||!l)return{available:!1,commitsAnalyzed:0,findings:[]};let u=ne(e),d=sp(e),m=lc(e,u,d),p=n.includeLinked===!0||c,h=[];for(let g of l){if(oc.test(g.fileA)||oc.test(g.fileB)||!ip(e,g.fileA)||!ip(e,g.fileB)||c&&!g.fileA.includes(t)&&!g.fileB.includes(t)||!c&&(K(g.fileA)==="test"||K(g.fileB)==="test"||zD(g.fileA,g.fileB)))continue;let b=m(g.fileA,g.fileB);if(!p&&b)continue;let S=ac(g.fileA,g.fileB),x=cc(g,S,b);if(h.push({...g,structurallyLinked:b,partnerClass:S.partnerClass,partnerClassReasons:S.reasons,...x?{declaredCouplingSuggestion:x}:{}}),h.length>=o)break}return{available:!0,commitsAnalyzed:a.commits.length,findings:h}}function ip(e,t){return WD(GD(e.config.projectRoot,t))}function ac(e,t){let n=rp(e),i=rp(t),r=[],o=c=>{r.includes(c)||r.push(c)},s=(c,l)=>n.tags.has(c)&&i.tags.has(l)||n.tags.has(l)&&i.tags.has(c);if(s("doc","code"))return o("one side is documentation and the other is executable source"),{partnerClass:"doc-code",reasons:r};if(n.tags.has("test")||i.tags.has("test"))return o("one side is classified as a test file"),{partnerClass:"test-code",reasons:r};if(s("schema","script"))return o("schema or contract file changes with a script or generated-code path"),{partnerClass:"schema-script",reasons:r};if(s("model","view"))return o("model or state path changes with a view or component path"),{partnerClass:"model-view",reasons:r};if(s("config","code"))return o("configuration file changes with executable source"),{partnerClass:"config-code",reasons:r};let a=rI(n.tokens,i.tokens).filter(c=>!nI.has(c));return op(e,t)||a.length>=2?(o(op(e,t)?"both files live in the same directory":`files share feature tokens: ${a.slice(0,4).join(", ")}`),{partnerClass:"same-feature",reasons:r}):(o("no specific relationship pattern matched"),{partnerClass:"unknown",reasons:r})}function cc(e,t,n){if(n||e.together<4||e.confidence<.75||e.commitScope==="broad-sweep"||e.recency==="stale"||!tI.has(t.partnerClass))return;let i=[e.fileA,e.fileB].sort();return{name:`co-change ${t.partnerClass}: ${oI(i)}`,files:i,reason:`${t.partnerClass} pair changed together ${e.together}x with ${Math.round(e.confidence*100)}% confidence; declare it if future edits should require both sides.`}}function lc(e,t=ne(e),n=sp(e)){return(i,r)=>KD(t,n,i,r)}function zD(e,t){let n=e.lastIndexOf("/"),i=t.lastIndexOf("/");if(e.slice(0,n)!==t.slice(0,i))return!1;let r=e.slice(n+1).split(".")[0],o=t.slice(i+1).split(".")[0];return r!==""&&r===o}function sp(e){return(e.config.declaredCouplings??[]).filter(t=>Array.isArray(t.files)&&t.files.length>=2).map(t=>new Set(t.files))}function KD(e,t,n,i){return e.get(n)?.has(i)===!0||e.get(i)?.has(n)===!0?!0:t.some(r=>r.has(n)&&r.has(i))}var JD=/(?:^|\/)(?:readme|docs?|guides?|adr|architecture|design)(?:\/|$)|\.(?:md|mdx|rst|adoc|txt)$/i,QD=/(?:^|\/)(?:\.[a-z0-9-]+rc|config|configs|settings|\.github)(?:\/|$)|(?:^|\/)(?:package\.json|tsconfig(?:\.[^.]+)?\.json|vite\.config\.[cm]?[jt]s|rollup\.config\.[cm]?[jt]s|eslint\.config\.[cm]?[jt]s)$|\.(?:json|ya?ml|toml|ini|env)$/i,XD=/(?:^|\/)(?:schemas?|contracts?|migrations?|models?|types?)(?:\/|$)|(?:^|\/)[^/]*(?:schema|contract|migration|model|types?)[^/]*|(?:\.schema)?\.(?:graphql|gql|proto|prisma)$/i,YD=/(?:^|\/)(?:scripts?|bin|tools?|tasks?|generators?|codegen|migrations?|seeds?)(?:\/|$)|(?:^|\/)[^/]*(?:generate|codegen|migrate|seed|script)[^/]*\.[cm]?[jt]s$/i,ZD=/(?:^|\/)(?:models?|entities|domain|state|stores?|reducers?)(?:\/|$)|(?:^|\/)[^/]*(?:model|entity|state|store|reducer|viewmodel)[^/]*\.[^.]+$/i,eI=/(?:^|\/)(?:views?|pages?|components?|screens?|routes?|templates?)(?:\/|$)|(?:^|\/)[^/]*(?:view|page|component|screen|template)[^/]*\.[^.]+$|\.(?:vue|svelte|tsx|jsx)$/i,tI=new Set(["doc-code","config-code","schema-script","model-view","test-code"]),nI=new Set(["src","lib","app","test","tests","spec","index","main","utils","util","types","type","config","docs","doc"]);function rp(e){let t=e.replace(/\\/g,"/"),n=new Set;return JD.test(t)&&n.add("doc"),QD.test(t)&&n.add("config"),XD.test(t)&&n.add("schema"),YD.test(t)&&n.add("script"),ZD.test(t)&&n.add("model"),eI.test(t)&&n.add("view"),K(t)==="test"&&n.add("test"),!n.has("doc")&&!n.has("config")&&n.add("code"),{tags:n,tokens:iI(t)}}function op(e,t){let n=e.lastIndexOf("/"),i=t.lastIndexOf("/"),r=n>=0?e.slice(0,n):"",o=i>=0?t.slice(0,i):"";return r!==""&&r===o}function iI(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).map(t=>t.toLowerCase()).filter(t=>t.length>=2)}function rI(e,t){let n=new Set(t);return[...new Set(e.filter(i=>n.has(i)))].sort()}function oI(e){return e.map(t=>t.split("/").pop()?.replace(/\.[^.]+$/,"")||t).join(" + ")}import{execFileSync as ct}from"child_process";import{existsSync as sI,readFileSync as aI}from"fs";import{basename as ap}from"path";function Po(e){let t=new Map;for(let n of e){let i=t.get(n.file);i||(i=[],t.set(n.file,i)),i.push(n)}return t}var uc="Unable to compute git diff.";function ci(e,t={}){let n=t.plan??lt(e,t);return n.note?cI(n.note,n.changedFileLines):n.changedFiles.length===0?lI(n.changedFileLines):Eo(n.changedFiles,[No(e,n.changedFiles,n.changedFiles,n.changedRanges)])}function lt(e,t={}){let{base:n="HEAD"}=t;try{let i=uI(e.config.projectRoot,n),r=hI(e,i),o=bI(e,dI(e.config.projectRoot,n));return{changedFileLines:i,changedFiles:r,changedRanges:o,renamedFiles:mI(e.config.projectRoot,n,r),note:i.length===0?"No changed files found.":void 0}}catch{return{changedFileLines:[],changedFiles:[],changedRanges:[],renamedFiles:[],note:uc}}}function No(e,t,n,i=[]){let r=new T(e),o=new Set(n),s=Po(i),a=[],c=new Map,l=t.flatMap(h=>r.definitionsForFile(h)).filter(wI).filter(h=>SI(h,s)).sort((h,g)=>h.relativePath.localeCompare(g.relativePath)||h.startLine-g.startLine),u=l.map(h=>h.symbolId),d=vI(e,u),m=RI(e,u,n),p=ri(e,l.filter(h=>d.get(h.symbolId)===0));for(let h of l)CI(e,h,o,a,c,p.get(h.symbolId)??new Set,d.get(h.symbolId)??0,m.get(h.symbolId)??new Set);return{changedSymbols:a,consumerEntries:[...c.entries()].map(([h,g])=>({file:h,symbols:[...g].sort()}))}}function Eo(e,t){let n=new Map,i=t.flatMap(o=>o.changedSymbols);for(let o of t)for(let s of o.consumerEntries){let a=n.get(s.file);a||(a=new Set,n.set(s.file,a));for(let c of s.symbols)a.add(c)}let r=kI(n);return{changedFiles:[...e],changedSymbols:i,affectedConsumers:r,summary:{totalChangedFiles:e.length,totalChangedSymbols:i.length,totalAffectedFiles:r.length}}}function cI(e,t=[]){return{changedFiles:t,changedSymbols:[],affectedConsumers:[],summary:{totalChangedFiles:t.length,totalChangedSymbols:0,totalAffectedFiles:0,note:e}}}function lI(e){return{changedFiles:e,changedSymbols:[],affectedConsumers:[],summary:{totalChangedFiles:e.length,totalChangedSymbols:0,totalAffectedFiles:0,note:"Changed files are not present in the current SCIP index."}}}function uI(e,t){let n=ct("git",["diff","--name-only",t],{encoding:"utf-8",cwd:e,timeout:1e4}),i=ct("git",["diff","--name-only","--cached",t],{encoding:"utf-8",cwd:e,timeout:1e4}),r=ct("git",["ls-files","--others","--exclude-standard"],{encoding:"utf-8",cwd:e,timeout:1e4});return[...new Set([n,i,r].flatMap(o=>o.split(`
489
- `)).map(o=>o.trim()).filter(o=>o.length>0))]}function dI(e,t){let n=ct("git",["diff","--unified=0",t],{encoding:"utf-8",cwd:e,timeout:1e4}),i=ct("git",["diff","--unified=0","--cached",t],{encoding:"utf-8",cwd:e,timeout:1e4});return pp([...up(n),...up(i)])}function rr(e,t,n){try{return ct("git",["show",`${t}:./${n}`],{encoding:"utf-8",cwd:e,timeout:1e4,stdio:["ignore","pipe","ignore"]})}catch{return null}}function mI(e,t,n){if(n.length===0)return[];let i=new Map,r=new Set;for(let s of fI(e,t))n.includes(s.to)&&(i.set(s.to,s),r.add(s.from));let o=pI(e,t);if(o.length===0)return[...i.values()].sort((s,a)=>s.to.localeCompare(a.to));for(let s of n){if(i.has(s)||!sI(`${e}/${s}`))continue;let a=o.filter(u=>!r.has(u)).filter(u=>ap(u)===ap(s));if(a.length===0)continue;let c=aI(`${e}/${s}`,"utf-8"),l=a.map(u=>({from:u,to:s,similarity:gI(rr(e,t,u)??"",c)})).sort((u,d)=>d.similarity-u.similarity)[0];l&&l.similarity>=.45&&(i.set(s,l),r.add(l.from))}return[...i.values()].sort((s,a)=>s.to.localeCompare(a.to))}function pI(e,t){let n=ct("git",["diff","--name-only","--diff-filter=D",t],{encoding:"utf-8",cwd:e,timeout:1e4}),i=ct("git",["diff","--name-only","--diff-filter=D","--cached",t],{encoding:"utf-8",cwd:e,timeout:1e4});return[...new Set([...lp(n),...lp(i)])]}function fI(e,t){let n=ct("git",["diff","--name-status","--find-renames",t],{encoding:"utf-8",cwd:e,timeout:1e4}),i=ct("git",["diff","--name-status","--find-renames","--cached",t],{encoding:"utf-8",cwd:e,timeout:1e4});return[...n.split(`
490
- `),...i.split(`
491
- `)].map(r=>r.trim()).filter(r=>r.startsWith("R")).map(r=>r.split(" ")).filter(r=>r.length>=3).map(([r,o,s])=>({from:o,to:s,similarity:Number(r.slice(1))/100}))}function gI(e,t){let n=new Set(cp(e)),i=new Set(cp(t));if(n.size===0&&i.size===0)return 1;if(n.size===0||i.size===0)return 0;let r=0;for(let o of n)i.has(o)&&(r+=1);return 2*r/(n.size+i.size)}function cp(e){return e.match(/[A-Za-z_$][\w$]*|[{}()[\].,]/g)??[]}function lp(e){return e.split(`
492
- `).map(t=>t.trim()).filter(t=>t.length>0)}function hI(e,t){let n=mp(e),i=[];for(let r of t){let o=n(r);o&&!e.isIgnored(o)&&i.push(o)}return i}function bI(e,t){let n=mp(e),i=[];for(let r of t){let o=n(r.file);o&&!e.isIgnored(o)&&i.push({...r,file:o})}return pp(i)}function mp(e){let t=e.all(`SELECT relative_path FROM documents
493
- ORDER BY id`).map(i=>i.relative_path),n=new Map(t.map(i=>[i,i]));return i=>{let r=i.replace(/\\/g,"/"),o=n.get(r);return o||(t.find(s=>s.endsWith(r))??null)}}function up(e){let t=[],n=null;for(let i of e.split(`
494
- `)){if(i.startsWith("+++ ")){n=yI(i.slice(4).trim());continue}if(!n||!i.startsWith("@@ "))continue;let r=/@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@/.exec(i);if(!r)continue;let o=Math.max(0,Number(r[1])-1),s=r[2]===void 0?1:Number(r[2]);t.push({file:n,startLine:o,endLine:Math.max(o,o+Math.max(s,1)-1)})}return t}function yI(e){return e==="/dev/null"?null:e.startsWith("a/")||e.startsWith("b/")?e.slice(2):e}function pp(e){let t=new Set,n=[];for(let i of e){let r=`${i.file}:${i.startLine}:${i.endLine}`;t.has(r)||(t.add(r),n.push(i))}return n}function SI(e,t){let n=t.get(e.relativePath);return!n||n.length===0?!0:n.some(i=>xI(e.startLine,e.endLine,i.startLine,i.endLine))}function xI(e,t,n,i){return e<=i&&n<=t}function CI(e,t,n,i,r,o,s,a){let c=Math.max(s,o.size);if(!LI(t,c))return;let l=y(t.symbol);i.push({symbol:t.symbol,shortName:l,file:t.relativePath,startLine:t.startLine,endLine:t.endLine,fanIn:c});for(let u of a)dp(e,n,r,u,l);for(let u of o)dp(e,n,r,u,l)}function vI(e,t){if(t.length===0)return new Map;let n=e.all(`SELECT m.symbol_id, COUNT(DISTINCT c.document_id) AS fan_in
518
+ `).map(m=>m.trim()).filter(m=>m!==""):[];if(d.length>Tp){i+=1;continue}r.push({hash:c,timestamp:Number(l)||0,subject:u??"",files:d})}return{head:t,commits:r,skippedBulkCommits:i}}function nP(e){return KD.test(e.subject)}function Jo(e){let t=Yt(e);if(!t)return null;let n=new Map;for(let r of t.commits){let i=nP(r);for(let o of r.files){let s=n.get(o)??{changes:0,fixChanges:0,lastChangedAt:0};s.changes+=1,i&&(s.fixChanges+=1),r.timestamp>s.lastChangedAt&&(s.lastChangedAt=r.timestamp),n.set(o,s)}}return n}function _p(e){let t=Yt(e);if(!t||t.commits.length===0)return null;let n=t.commits.map(r=>r.files.length).filter(r=>r>0).sort((r,i)=>r-i);return n.length===0?null:{medianFilesPerCommit:Np(n,.5),p90FilesPerCommit:Np(n,.9),commitsAnalyzed:n.length}}function Np(e,t){let n=Math.min(e.length-1,Math.floor(e.length*t));return e[n]}var rP=kc("git-tracked-files");function wc(e){return rP(e,t=>{try{let n=zo(t,["ls-files"]);return new Set(n.split(`
519
+ `).map(r=>r.trim()).filter(r=>r!==""))}catch{return null}})}var iP=kc("git-file-adds");function Fp(e){return iP(e,t=>oP(t))}function oP(e){let t;try{t=zo(e,["log","--no-merges","--diff-filter=A","--name-only","-n",String(Ep),"--pretty=format:%x01%H%x00%ct%x00%s"])}catch{return null}let n=new Map,r=-1;for(let i of t.split("")){if(i.trim()==="")continue;r+=1;let o=i.indexOf(`
520
+ `),s=o>=0?i.slice(0,o):i,[,a]=s.split("\0"),c=Number(a)||0;if(!(o<0))for(let l of i.slice(o+1).split(`
521
+ `)){let u=l.trim();u!==""&&n.set(u,{commitsAgo:r,addedAt:c})}}return n}function $p(e,t={}){let n=Yt(e);return n?Mp(n,t):null}function Ap(e,t,n={}){let r=Yt(e);return r?t.size===0?[]:Mp(r,n,t):null}function Mp(e,t,n){let{minTogether:r=4,minConfidence:i=.6,maxFilesPerCommit:o=Tp}=t,s=new Map,a=new Map,c=0;for(let d of e.commits){let m=[...new Set(d.files)].sort();if(m.length>o)continue;d.timestamp>c&&(c=d.timestamp);let f=sP(m),h=n===void 0||m.some(g=>n.has(g));for(let g of m)s.set(g,(s.get(g)??0)+1);if(h)for(let g=0;g<m.length;g++)for(let y=g+1;y<m.length;y++){if(n&&!n.has(m[g])&&!n.has(m[y]))continue;let S=`${m[g]}\0${m[y]}`,C=a.get(S)??{together:0,focusedTogether:0,broadTogether:0,lastTogetherAt:0,timestamps:[],subjects:[]};C.together+=1,f?C.broadTogether+=1:C.focusedTogether+=1,d.timestamp>C.lastTogetherAt&&(C.lastTogetherAt=d.timestamp),C.timestamps.push(d.timestamp),C.subjects.push(d.subject),a.set(S,C)}}let l=[],u=c-JD;for(let[d,m]of a){let f=m.together;if(f<r)continue;let[h,g]=d.split("\0"),y=s.get(h)??f,S=s.get(g)??f,C=Math.max(f/y,f/S);if(C<i)continue;let k=m.broadTogether/f,D=m.timestamps.filter(x=>x>=u).length;l.push({fileA:h,fileB:g,together:f,confidence:C,changesA:y,changesB:S,focusedTogether:m.focusedTogether,broadTogether:m.broadTogether,broadCommitRatio:k,lastTogetherAt:m.lastTogetherAt,recentTogether:D,commitScope:cP(m.broadTogether,f),recency:D>0?"recent":"stale",subjectContext:lP(m.subjects)})}return l.sort((d,m)=>m.together-d.together||m.confidence-d.confidence||d.fileA.localeCompare(m.fileA)),l}function sP(e){return e.length>=GD?!0:aP(e).size>=zD}function aP(e){let t=new Set;for(let n of e){let r=n.indexOf("/");t.add(r>=0?n.slice(0,r):".")}return t}function cP(e,t){return e===0?"focused":e/t>=.5?"broad-sweep":"mixed"}function lP(e){let t=new Set,n=[],r=[];for(let i of e){!r.includes(i)&&r.length<XD&&r.push(i);for(let o of uP(i))t.add(o);for(let o of i.match(QD)??[])n.includes(o)||n.push(o)}return{subjectLabels:[...t].sort(),issueRefs:n,sampleSubjects:r,externalIssueLabelStatus:"unavailable"}}function uP(e){let t=new Set,n=YD.exec(e)?.[1]?.toLowerCase();return n&&t.add(dP(n)),/\b(?:feat|feature)\b/i.test(e)&&t.add("feature"),/\b(?:fix(?:es|ed)?|bug|regression|hotfix)\b/i.test(e)&&t.add("fix"),/\b(?:docs?|documentation|guide|readme)\b/i.test(e)&&t.add("docs"),/\brefactor(?:ing|ed)?\b/i.test(e)&&t.add("refactor"),/\btests?\b/i.test(e)&&t.add("test"),/\b(?:release|version|v\d+\.\d+)\b/i.test(e)&&t.add("release"),/\bchore\b/i.test(e)&&t.add("chore"),/\bbuild\b/i.test(e)&&t.add("build"),/\bci\b/i.test(e)&&t.add("ci"),/\bperf(?:ormance)?\b/i.test(e)&&t.add("perf"),[...t]}function dP(e){return e==="feat"?"feature":e}import{existsSync as mP}from"fs";import{join as pP}from"path";function Ic(e){return Lc.test(e)}var Lc=/(?:^|\/)(?:package-lock\.json|pnpm-lock\.yaml|yarn\.lock|Cargo\.lock|CHANGELOG(?:\.[a-z]+)?|.*\.map)$|(?:^|\/)(?:dist|build|out|node_modules|docs\/plans)\//i;function In(e,t,n={}){let{minTogether:r=4,minConfidence:i=.6,limit:o=30,maxFilesPerCommit:s=20}=n,a=Yt(e),c=t!==void 0,l=$p(e,{minTogether:c?Math.min(r,2):r,minConfidence:c?0:i,maxFilesPerCommit:s});if(!a||!l)return{available:!1,commitsAnalyzed:0,findings:[]};let u=re(e),d=Hp(e),m=Nc(e,u,d),f=n.includeLinked===!0||c,h=[];for(let g of l){if(Lc.test(g.fileA)||Lc.test(g.fileB)||!jp(e,g.fileA)||!jp(e,g.fileB)||c&&!g.fileA.includes(t)&&!g.fileB.includes(t)||!c&&(J(g.fileA)==="test"||J(g.fileB)==="test"||fP(g.fileA,g.fileB)))continue;let y=m(g.fileA,g.fileB);if(!f&&y)continue;let S=Dc(g.fileA,g.fileB),C=Pc(g,S,y);if(h.push({...g,structurallyLinked:y,partnerClass:S.partnerClass,partnerClassReasons:S.reasons,...C?{declaredCouplingSuggestion:C}:{}}),h.length>=o)break}return{available:!0,commitsAnalyzed:a.commits.length,findings:h}}function jp(e,t){return mP(pP(e.config.projectRoot,t))}function Dc(e,t){let n=Op(e),r=Op(t),i=[],o=c=>{i.includes(c)||i.push(c)},s=(c,l)=>n.tags.has(c)&&r.tags.has(l)||n.tags.has(l)&&r.tags.has(c);if(s("doc","code"))return o("one side is documentation and the other is executable source"),{partnerClass:"doc-code",reasons:i};if(n.tags.has("test")||r.tags.has("test"))return o("one side is classified as a test file"),{partnerClass:"test-code",reasons:i};if(s("schema","script"))return o("schema or contract file changes with a script or generated-code path"),{partnerClass:"schema-script",reasons:i};if(s("model","view"))return o("model or state path changes with a view or component path"),{partnerClass:"model-view",reasons:i};if(s("config","code"))return o("configuration file changes with executable source"),{partnerClass:"config-code",reasons:i};let a=wP(n.tokens,r.tokens).filter(c=>!RP.has(c));return Bp(e,t)||a.length>=2?(o(Bp(e,t)?"both files live in the same directory":`files share feature tokens: ${a.slice(0,4).join(", ")}`),{partnerClass:"same-feature",reasons:i}):(o("no specific relationship pattern matched"),{partnerClass:"unknown",reasons:i})}function Pc(e,t,n){if(n||e.together<4||e.confidence<.75||e.commitScope==="broad-sweep"||e.recency==="stale"||!vP.has(t.partnerClass))return;let r=[e.fileA,e.fileB].sort();return{name:`co-change ${t.partnerClass}: ${LP(r)}`,files:r,reason:`${t.partnerClass} pair changed together ${e.together}x with ${Math.round(e.confidence*100)}% confidence; declare it if future edits should require both sides.`}}function Nc(e,t=re(e),n=Hp(e)){return(r,i)=>gP(t,n,r,i)}function fP(e,t){let n=e.lastIndexOf("/"),r=t.lastIndexOf("/");if(e.slice(0,n)!==t.slice(0,r))return!1;let i=e.slice(n+1).split(".")[0],o=t.slice(r+1).split(".")[0];return i!==""&&i===o}function Hp(e){return(e.config.declaredCouplings??[]).filter(t=>Array.isArray(t.files)&&t.files.length>=2).map(t=>new Set(t.files))}function gP(e,t,n,r){return e.get(n)?.has(r)===!0||e.get(r)?.has(n)===!0?!0:t.some(i=>i.has(n)&&i.has(r))}var hP=/(?:^|\/)(?:readme|docs?|guides?|adr|architecture|design)(?:\/|$)|\.(?:md|mdx|rst|adoc|txt)$/i,yP=/(?:^|\/)(?:\.[a-z0-9-]+rc|config|configs|settings|\.github)(?:\/|$)|(?:^|\/)(?:package\.json|tsconfig(?:\.[^.]+)?\.json|vite\.config\.[cm]?[jt]s|rollup\.config\.[cm]?[jt]s|eslint\.config\.[cm]?[jt]s)$|\.(?:json|ya?ml|toml|ini|env)$/i,bP=/(?:^|\/)(?:schemas?|contracts?|migrations?|models?|types?)(?:\/|$)|(?:^|\/)[^/]*(?:schema|contract|migration|model|types?)[^/]*|(?:\.schema)?\.(?:graphql|gql|proto|prisma)$/i,SP=/(?:^|\/)(?:scripts?|bin|tools?|tasks?|generators?|codegen|migrations?|seeds?)(?:\/|$)|(?:^|\/)[^/]*(?:generate|codegen|migrate|seed|script)[^/]*\.[cm]?[jt]s$/i,xP=/(?:^|\/)(?:models?|entities|domain|state|stores?|reducers?)(?:\/|$)|(?:^|\/)[^/]*(?:model|entity|state|store|reducer|viewmodel)[^/]*\.[^.]+$/i,CP=/(?:^|\/)(?:views?|pages?|components?|screens?|routes?|templates?)(?:\/|$)|(?:^|\/)[^/]*(?:view|page|component|screen|template)[^/]*\.[^.]+$|\.(?:vue|svelte|tsx|jsx)$/i,vP=new Set(["doc-code","config-code","schema-script","model-view","test-code"]),RP=new Set(["src","lib","app","test","tests","spec","index","main","utils","util","types","type","config","docs","doc"]);function Op(e){let t=e.replace(/\\/g,"/"),n=new Set;return hP.test(t)&&n.add("doc"),yP.test(t)&&n.add("config"),bP.test(t)&&n.add("schema"),SP.test(t)&&n.add("script"),xP.test(t)&&n.add("model"),CP.test(t)&&n.add("view"),J(t)==="test"&&n.add("test"),!n.has("doc")&&!n.has("config")&&n.add("code"),{tags:n,tokens:kP(t)}}function Bp(e,t){let n=e.lastIndexOf("/"),r=t.lastIndexOf("/"),i=n>=0?e.slice(0,n):"",o=r>=0?t.slice(0,r):"";return i!==""&&i===o}function kP(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).map(t=>t.toLowerCase()).filter(t=>t.length>=2)}function wP(e,t){let n=new Set(t);return[...new Set(e.filter(r=>n.has(r)))].sort()}function LP(e){return e.map(t=>t.split("/").pop()?.replace(/\.[^.]+$/,"")||t).join(" + ")}import{execFileSync as it}from"child_process";import{existsSync as IP,readFileSync as DP}from"fs";import{basename as Vp}from"path";function Ko(e){let t=new Map;for(let n of e){let r=t.get(n.file);r||(r=[],t.set(n.file,r)),r.push(n)}return t}var Ec="Unable to compute git diff.";function xr(e,t={}){let n=t.plan??gt(e,t);return n.note?PP(n.note,n.changedFileLines):n.changedFiles.length===0?NP(n.changedFileLines):Qo(n.changedFiles,[Xo(e,n.changedFiles,n.changedFiles,n.changedRanges)])}function gt(e,t={}){let{base:n="HEAD"}=t;try{let r=EP(e.config.projectRoot,n),i=OP(e,r),o=BP(e,TP(e.config.projectRoot,n));return{changedFileLines:r,changedFiles:i,changedRanges:o,renamedFiles:$P(e.config.projectRoot,n,i),note:r.length===0?"No changed files found.":void 0}}catch{return{changedFileLines:[],changedFiles:[],changedRanges:[],renamedFiles:[],note:Ec}}}function Xo(e,t,n,r=[]){let i=new T(e),o=new Set(n),s=Ko(r),a=[],c=new Map,l=t.flatMap(h=>i.definitionsForFile(h)).filter(JP).filter(h=>VP(h,s)).sort((h,g)=>h.relativePath.localeCompare(g.relativePath)||h.startLine-g.startLine),u=l.map(h=>h.symbolId),d=WP(e,u),m=GP(e,u,n),f=mt(e,l.filter(h=>d.get(h.symbolId)===0));for(let h of l)UP(e,h,o,a,c,f.get(h.symbolId)??new Set,d.get(h.symbolId)??0,m.get(h.symbolId)??new Set);return{changedSymbols:a,consumerEntries:[...c.entries()].map(([h,g])=>({file:h,symbols:[...g].sort()}))}}function Qo(e,t){let n=new Map,r=t.flatMap(o=>o.changedSymbols);for(let o of t)for(let s of o.consumerEntries){let a=n.get(s.file);a||(a=new Set,n.set(s.file,a));for(let c of s.symbols)a.add(c)}let i=zP(n);return{changedFiles:[...e],changedSymbols:r,affectedConsumers:i,summary:{totalChangedFiles:e.length,totalChangedSymbols:r.length,totalAffectedFiles:i.length}}}function PP(e,t=[]){return{changedFiles:t,changedSymbols:[],affectedConsumers:[],summary:{totalChangedFiles:t.length,totalChangedSymbols:0,totalAffectedFiles:0,note:e}}}function NP(e){return{changedFiles:e,changedSymbols:[],affectedConsumers:[],summary:{totalChangedFiles:e.length,totalChangedSymbols:0,totalAffectedFiles:0,note:"Changed files are not present in the current SCIP index."}}}function EP(e,t){let n=it("git",["diff","--name-only",t],{encoding:"utf-8",cwd:e,timeout:1e4}),r=it("git",["diff","--name-only","--cached",t],{encoding:"utf-8",cwd:e,timeout:1e4}),i=it("git",["ls-files","--others","--exclude-standard"],{encoding:"utf-8",cwd:e,timeout:1e4});return[...new Set([n,r,i].flatMap(o=>o.split(`
522
+ `)).map(o=>o.trim()).filter(o=>o.length>0))]}function TP(e,t){let n=it("git",["diff","--unified=0",t],{encoding:"utf-8",cwd:e,timeout:1e4}),r=it("git",["diff","--unified=0","--cached",t],{encoding:"utf-8",cwd:e,timeout:1e4});return Jp([...Wp(n),...Wp(r)])}function Tc(e,t,n){try{return it("git",["show",`${t}:./${n}`],{encoding:"utf-8",cwd:e,timeout:1e4,stdio:["ignore","pipe","ignore"]})}catch{return null}}function yi(e,t,n=[]){let r=_P(e,t,n);return i=>(r.has(i)||r.set(i,Tc(e,t,i)),r.get(i)??null)}function bi(e,t=e.changedFiles){let n=new Map(e.renamedFiles.map(r=>[r.to,r.from]));return[...new Set(t.map(r=>n.get(r)??r))]}function _P(e,t,n){let r=[...new Set(n)],i=new Map;if(r.length===0)return i;try{let o=r.map(a=>`${t}:./${a}
523
+ `).join(""),s=it("git",["cat-file","--batch"],{cwd:e,input:o,maxBuffer:256*1024*1024,timeout:1e4,stdio:["pipe","pipe","ignore"]});return FP(s,r)}catch{for(let o of r)i.set(o,Tc(e,t,o));return i}}function FP(e,t){let n=new Map,r=0;for(let i of t){let o=e.indexOf(10,r);if(o<0)throw new Error("git cat-file batch output ended before object header");let s=e.subarray(r,o).toString("utf-8");if(r=o+1,s.endsWith(" missing")){n.set(i,null);continue}let a=/^[0-9a-f]+ ([^ ]+) (\d+)$/.exec(s);if(!a)throw new Error(`unexpected git cat-file batch header: ${s}`);let[,c,l]=a,u=Number(l);if(!Number.isFinite(u)||u<0)throw new Error(`unexpected git cat-file batch size: ${s}`);if(r+u>e.length)throw new Error("git cat-file batch output ended before blob payload");let d=e.subarray(r,r+u);n.set(i,c==="blob"?d.toString("utf-8"):null),r+=u,e[r]===10&&(r+=1)}return n}function $P(e,t,n){if(n.length===0)return[];let r=new Map,i=new Set;for(let s of MP(e,t))n.includes(s.to)&&(r.set(s.to,s),i.add(s.from));let o=AP(e,t);if(o.length===0)return[...r.values()].sort((s,a)=>s.to.localeCompare(a.to));for(let s of n){if(r.has(s)||!IP(`${e}/${s}`))continue;let a=o.filter(u=>!i.has(u)).filter(u=>Vp(u)===Vp(s));if(a.length===0)continue;let c=DP(`${e}/${s}`,"utf-8"),l=a.map(u=>({from:u,to:s,similarity:jP(Tc(e,t,u)??"",c)})).sort((u,d)=>d.similarity-u.similarity)[0];l&&l.similarity>=.45&&(r.set(s,l),i.add(l.from))}return[...r.values()].sort((s,a)=>s.to.localeCompare(a.to))}function AP(e,t){let n=it("git",["diff","--name-only","--diff-filter=D",t],{encoding:"utf-8",cwd:e,timeout:1e4}),r=it("git",["diff","--name-only","--diff-filter=D","--cached",t],{encoding:"utf-8",cwd:e,timeout:1e4});return[...new Set([...Up(n),...Up(r)])]}function MP(e,t){let n=it("git",["diff","--name-status","--find-renames",t],{encoding:"utf-8",cwd:e,timeout:1e4}),r=it("git",["diff","--name-status","--find-renames","--cached",t],{encoding:"utf-8",cwd:e,timeout:1e4});return[...n.split(`
524
+ `),...r.split(`
525
+ `)].map(i=>i.trim()).filter(i=>i.startsWith("R")).map(i=>i.split(" ")).filter(i=>i.length>=3).map(([i,o,s])=>({from:o,to:s,similarity:Number(i.slice(1))/100}))}function jP(e,t){let n=new Set(qp(e)),r=new Set(qp(t));if(n.size===0&&r.size===0)return 1;if(n.size===0||r.size===0)return 0;let i=0;for(let o of n)r.has(o)&&(i+=1);return 2*i/(n.size+r.size)}function qp(e){return e.match(/[A-Za-z_$][\w$]*|[{}()[\].,]/g)??[]}function Up(e){return e.split(`
526
+ `).map(t=>t.trim()).filter(t=>t.length>0)}function OP(e,t){let n=zp(e),r=[];for(let i of t){let o=n(i);o&&!e.isIgnored(o)&&r.push(o)}return r}function BP(e,t){let n=zp(e),r=[];for(let i of t){let o=n(i.file);o&&!e.isIgnored(o)&&r.push({...i,file:o})}return Jp(r)}function zp(e){let t=e.all(`SELECT relative_path FROM documents
527
+ ORDER BY id`).map(r=>r.relative_path),n=new Map(t.map(r=>[r,r]));return r=>{let i=r.replace(/\\/g,"/"),o=n.get(i);return o||(t.find(s=>s.endsWith(i))??null)}}function Wp(e){let t=[],n=null;for(let r of e.split(`
528
+ `)){if(r.startsWith("+++ ")){n=HP(r.slice(4).trim());continue}if(!n||!r.startsWith("@@ "))continue;let i=/@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@/.exec(r);if(!i)continue;let o=Math.max(0,Number(i[1])-1),s=i[2]===void 0?1:Number(i[2]);t.push({file:n,startLine:o,endLine:Math.max(o,o+Math.max(s,1)-1)})}return t}function HP(e){return e==="/dev/null"?null:e.startsWith("a/")||e.startsWith("b/")?e.slice(2):e}function Jp(e){let t=new Set,n=[];for(let r of e){let i=`${r.file}:${r.startLine}:${r.endLine}`;t.has(i)||(t.add(i),n.push(r))}return n}function VP(e,t){let n=t.get(e.relativePath);return!n||n.length===0?!0:n.some(r=>qP(e.startLine,e.endLine,r.startLine,r.endLine))}function qP(e,t,n,r){return e<=r&&n<=t}function UP(e,t,n,r,i,o,s,a){let c=Math.max(s,o.size);if(!KP(t,c))return;let l=b(t.symbol);r.push({symbol:t.symbol,shortName:l,file:t.relativePath,startLine:t.startLine,endLine:t.endLine,fanIn:c});for(let u of a)Gp(e,n,i,u,l);for(let u of o)Gp(e,n,i,u,l)}function WP(e,t){if(t.length===0)return new Map;let n=e.all(`SELECT m.symbol_id, COUNT(DISTINCT c.document_id) AS fan_in
495
529
  FROM mentions m
496
530
  JOIN chunks c ON m.chunk_id = c.id
497
531
  WHERE m.symbol_id IN (${t.map(()=>"?").join(",")})
498
532
  AND m.role != 1
499
- GROUP BY m.symbol_id`,...t);return new Map(n.map(i=>[i.symbol_id,i.fan_in]))}function RI(e,t,n){if(t.length===0||n.length===0)return new Map;let i=e.all(`SELECT DISTINCT m.symbol_id, ref_d.relative_path
533
+ GROUP BY m.symbol_id`,...t);return new Map(n.map(r=>[r.symbol_id,r.fan_in]))}function GP(e,t,n){if(t.length===0||n.length===0)return new Map;let r=e.all(`SELECT DISTINCT m.symbol_id, ref_d.relative_path
500
534
  FROM mentions m
501
535
  JOIN chunks c ON m.chunk_id = c.id
502
536
  JOIN documents ref_d ON c.document_id = ref_d.id
503
537
  WHERE m.symbol_id IN (${t.map(()=>"?").join(",")})
504
538
  AND m.role != 1
505
539
  AND ref_d.relative_path NOT IN (${n.map(()=>"?").join(",")})
506
- ${e.pathExclusionsFor("ref_d")}`,...t,...n),r=new Map;for(let o of i){let s=r.get(o.symbol_id);s||(s=new Set,r.set(o.symbol_id,s)),s.add(o.relative_path)}return r}function dp(e,t,n,i,r){if(e.isIgnored(i)||t.has(i))return;let o=n.get(i);o||(o=new Set,n.set(i,o)),o.add(r)}function kI(e){return[...e.entries()].map(([t,n])=>({file:t,consumedSymbols:n.size})).sort((t,n)=>n.consumedSymbols-t.consumedSymbols)}function wI(e){return!(Tt(e.symbol)||e.parentTypeName!==null&&!xe(e.symbol))}function LI(e,t){return xe(e.symbol)||e.isTypeLike?!0:e.parentTypeName===null&&t>0}function fp(e){let[t,n]=To(e,":"),i=t||"unknown",r=(o={})=>{let s=o.actionTier??DI(i);return{sourceAnalyzer:i,actionTier:s,rootCauseKey:o.rootCauseKey??(n||e),label:o.label??`${i} finding`,relatedFiles:o.relatedFiles??[],why:o.why??[],remediation:o.remediation??II(s,i),file:o.file}};if(!n)return r({rootCauseKey:e,why:["Baseline identity did not include analyzer payload."]});if(["dead","isolated","extract","wrapper","passthrough","stale"].includes(i)){let[o,s]=To(n,":");return r({file:o,relatedFiles:o?[o]:[],rootCauseKey:s?`${o}:${s}`:n,label:`${i} finding`,why:s?[`Baseline subject: ${s}.`]:[]})}if(i==="cycle"){let o=n.split(">").filter(Boolean);return r({relatedFiles:o,rootCauseKey:n,label:"cycle finding",why:o.length>0?[`Cycle path: ${o.join(" > ")}.`]:[]})}if(i==="similar"){let o=n.split("|").filter(Boolean);return r({relatedFiles:[],rootCauseKey:n,label:"similarity finding",why:o.length>0?[`Similar symbols: ${o.join(" | ")}.`]:[]})}if(i==="drift"){let[o,s]=To(n,":"),[a,c]=To(s,":");return r({actionTier:o==="unused-import"?"direct":"signal",file:a,relatedFiles:[...new Set([a,c].filter(Boolean))],rootCauseKey:n,label:`${o||"drift"} finding`,why:[...o?[`Drift kind: ${o}.`]:[],...c?[`Related dependency: ${c}.`]:[]]})}return r({why:["Baseline analyzer prefix is not recognized by this diff-gate version."]})}function DI(e){switch(e){case"dead":case"isolated":case"cycle":case"passthrough":return"direct";case"similar":case"extract":case"wrapper":case"stale":return"signal";default:return"signal"}}function II(e,t){return e==="direct"?`Fix the new ${t} baseline finding, or knowingly accept it via health --write-baseline.`:`Review the new ${t} baseline signal; fix it if it reflects real debt, or knowingly accept it via health --write-baseline.`}function To(e,t){let n=e.indexOf(t);return n<0?[e,""]:[e.slice(0,n),e.slice(n+t.length)]}import{existsSync as $I,readFileSync as bp}from"fs";function Fo(e,t){let n=PI(e,t)??NI(e,t)??EI(e,t)??TI(e,t);return _I(e,n,t)}function PI(e,t){let n=-1,i=null;for(let r=0;r<=t;r+=1){let o=dc(e[r]??"");o&&(i===null?(i=o,n=r):o===i&&(i=null,n=-1))}if(i===null||n<0)return null;for(let r=t+1;r<e.length;r+=1)if(dc(e[r]??"")===i)return{start:n,end:r+1};return{start:n,end:e.length}}function dc(e){let t=e.match(/^\s*(```+|~~~+)/);return t?t[1].startsWith("`")?"`":"~":null}function NI(e,t){if(!_o(e[t]??""))return null;let n=t;for(;n>0&&_o(e[n-1]??"");)n-=1;let i=t+1;for(;i<e.length&&_o(e[i]??"");)i+=1;return{start:n,end:i}}function _o(e){let t=e.trim();return t.startsWith("|")&&t.endsWith("|")&&t.includes("|")}function EI(e,t){let n=t;for(;n>=0;){let o=e[n]??"";if($o(o)!==null)break;if(mc(o)!==null)return null;n-=1}if(n<0)return null;let i=$o(e[n]??"");if(i===null)return null;let r=n+1;for(;r<e.length;){let o=e[r]??"",s=$o(o);if(s!==null){if(s<=i)break;r+=1;continue}if(mc(o)!==null)break;r+=1}return{start:n,end:r}}function $o(e){let t=e.match(/^(\s*)(?:[-*+]\s+|\d+[.)]\s+)/);return t?t[1].length:null}function TI(e,t){let n=e[t]??"";if(hp(n)||n.trim().length===0)return{start:t,end:t+1};let i=t;for(;i>0&&gp(e[i-1]??"");)i-=1;let r=t+1;for(;r<e.length&&gp(e[r]??"");)r+=1;return{start:i,end:r}}function gp(e){return mc(e)===null}function mc(e){return e.trim().length===0?"blank":hp(e)?"heading":dc(e)?"fence":_o(e)?"table":$o(e)!==null?"list":null}function hp(e){return/^#{1,6}\s+/.test(e.trim())}function _I(e,t,n){let{start:i,end:r}=t;if(r-i>40){let s=Math.floor(20);i=Math.max(i,n-s),r=Math.min(r,i+40),i=Math.max(t.start,r-40)}let o=e.slice(i,r).join(`
507
- `).trim();return o.length<=2e3?o:`${o.slice(0,2e3).trimEnd()}...`}function Cn(e,t){return t.filter(n=>e.includes(n))}var li={classifyCitation:FI,citationContexts:AI,citationKindLabel:OI,citationRemediation:jI,referenceTargets:BI};function FI(e){let t=e.join(`
508
- `).toLowerCase(),n=[],i=Cn(t,[".scipquery","declaredcouplings","suppression","suppressions","config","configuration","json"]);if(i.length>0)return n.push(`configuration/example terms near citation: ${i.join(", ")}`),{citationKind:"configuration-example",actionTier:"support",reasons:n};let r=Cn(t,["accepted","intentional","intentionally","retained","historical"]);if(r.length>0)return n.push(`intentional-record terms near citation: ${r.join(", ")}`),{citationKind:"intentional-record",actionTier:"support",reasons:n};let o=Cn(t,["command","cli","usage","example","run","workflow"]);return o.length>0?(n.push(`guide/reference terms near citation: ${o.join(", ")}`),{citationKind:"guide-reference",actionTier:"signal",reasons:n}):(n.push(e.length>0?"citation appears in prose without config or guide markers":"citation context unavailable"),{citationKind:"behavioral-claim",actionTier:"direct",reasons:n})}function AI(e,t,n){let i;try{i=bp(`${e.config.projectRoot}/${t}`,"utf-8").split(/\r?\n/)}catch{return[]}let r=n.flatMap(MI),o=[];for(let s=0;s<i.length;s+=1){let a=i[s]??"";r.some(c=>a.includes(c))&&o.push(Fo(i,s))}return o}function MI(e){let t=e.split("/");return[e,`./${e}`,t.slice(-3).join("/"),t.slice(-2).join("/")].filter((n,i,r)=>n.length>0&&r.indexOf(n)===i)}function OI(e){switch(e){case"behavioral-claim":return"a behavioral doc claim";case"configuration-example":return"a configuration example";case"guide-reference":return"a guide reference";case"intentional-record":return"an intentional record"}}function jI(e,t){switch(e){case"behavioral-claim":return`Re-read ${t} and update the behavioral claim or citation.`;case"configuration-example":return`Verify the configuration example in ${t} still points at the intended file; update only if the example target changed.`;case"guide-reference":return`Verify the guide reference in ${t} still sends readers to the right implementation or command surface.`;case"intentional-record":return`Verify the intentional citation in ${t} is still meant to name this file.`}}function BI(e,t,n){let i=Po(n),r=new Set;for(let o of t)HI(e,o,i.get(o)??[])&&r.add(o);return r}function HI(e,t,n){if(n.length===0)return!1;if(!VI.test(t))return!0;let i=`${e.config.projectRoot}/${t}`;if(!$I(i))return!0;let r=bp(i,"utf-8").split(/\r?\n/),o=qI(r);for(let s of n)for(let a=s.startLine;a<=s.endLine;a+=1)if((r[a]??"").trim()!==""&&!o.has(a))return!0;return!1}var VI=/\.(?:[cm]?[jt]sx?)$/i;function qI(e){let t=new Set,n=!1;for(let i=0;i<e.length;i+=1){let r=e[i].trim();!n&&UI(r)&&(n=!0),n&&(t.add(i),r.endsWith(";")&&(n=!1))}return t}function UI(e){return/^import(?:\s|$)/.test(e)||/^export(?:\s+type)?\s+(?:\*|\{)/.test(e)}import{existsSync as yp,readFileSync as fc}from"fs";import{join as sr}from"path";var or=/\.(?:md|mdx|rst|txt)$/i;function WI(e){return/(?:^|\/)(?:docs\/plans|plans|adrs?|rfcs?|decisions|changelogs?|archive|reports?)\//i.test(e)||/(?:^|\/)CHANGELOG\.(?:md|mdx|rst|txt)$/i.test(e)}var GI=3,Sp=/[A-Za-z0-9_@-]+(?:\/[A-Za-z0-9_.@-]+)+\.[A-Za-z0-9]{1,6}\b/g;function gc(e,t={}){let{doc:n,limit:i=20,minCoupling:r=GI}=t,o=JI(e);if(!o)return{available:!1,commitsAnalyzed:0,docsScanned:0,findings:[]};let s=[];for(let a of o.docFiles){if(n!==void 0&&!a.includes(n)||n===void 0&&!Cp(e,a)||n!==void 0&&!yp(sr(e.config.projectRoot,a)))continue;let c=Math.max(0,...o.changeTimes.get(a)??[]),l=zI(e,a),u=new Map,{resolved:d,broken:m,citations:p}=Rp(e,a,o.tracked,o.trackedBySuffix,o.everSeenInHistory),h=new Map(p.map(b=>[b.file,b.contexts]));for(let b of d){if(b===a||or.test(b))continue;let S=(o.changeTimes.get(b)??[]).filter(x=>x>c).length;S!==0&&u.set(b,{file:b,evidence:"reference",coChanges:0,changesSinceDocUpdate:S,...pc("reference",l),citationContexts:h.get(b)})}for(let[b,S]of o.coupling.get(a)??[]){if(S<r||!o.tracked.has(b))continue;let x=(o.changeTimes.get(b)??[]).filter(L=>L>c).length;if(x===0)continue;let I=u.get(b);I?(I.evidence="both",I.coChanges=S,Object.assign(I,pc("both",l))):u.set(b,{file:b,evidence:"co-change",coChanges:S,changesSinceDocUpdate:x,...pc("co-change",l)})}if(u.size===0&&m.length===0)continue;let g=[...u.values()].sort((b,S)=>S.changesSinceDocUpdate-b.changesSinceDocUpdate);s.push({doc:a,docLastChangedAt:c,staleness:g.reduce((b,S)=>b+S.changesSinceDocUpdate,0)+m.length*10,subjects:g.slice(0,8),brokenReferences:m})}return s.sort((a,c)=>c.staleness-a.staleness),{available:!0,commitsAnalyzed:o.historyCommitCount,docsScanned:o.docFiles.length,findings:s.slice(0,i)}}function zI(e,t){let n;try{n=fc(sr(e.config.projectRoot,t),"utf8").slice(0,6e3)}catch{return{docIntent:"unknown",reasons:["doc text unavailable"]}}let i=`${t}
509
- ${n}`.toLowerCase(),r=Cn(i,["historical note","historical record","history note","retrospective","postmortem","post-mortem","archived","archive","previously","legacy","recorded","record of","snapshot","as of","migration note","decision record"]);if(r.length>0)return{docIntent:"historical-note",reasons:[`historical-note terms: ${r.join(", ")}`]};let o=Cn(i,["current","standard","standards","must","should","policy","guide","guidance","workflow","contract","invariant","source of truth"]);return o.length>0?{docIntent:"current-guidance",reasons:[`current-guidance terms: ${o.join(", ")}`]}:{docIntent:"unknown",reasons:["no current-guidance or historical-note markers found"]}}function pc(e,t){return{actionTier:KI(e,t.docIntent),docIntent:t.docIntent,docIntentReasons:t.reasons}}function KI(e,t){return t==="historical-note"?"support":e==="co-change"?"signal":"direct"}function JI(e){let t=qt(e);if(!t)return null;let n=rc(e)??new Set,i=new Map,r=new Map,o=new Set;for(let s of t.commits){let a=[...new Set(s.files)],c=a.filter(u=>or.test(u)),l=a.filter(u=>!or.test(u));for(let u of a){o.add(u);let d=i.get(u)??[];d.push(s.timestamp),i.set(u,d)}for(let u of c){let d=r.get(u);d||(d=new Map,r.set(u,d));for(let m of l)d.set(m,(d.get(m)??0)+1)}}return{changeTimes:i,coupling:r,docFiles:[...n].filter(s=>or.test(s)),everSeenInHistory:o,historyCommitCount:t.commits.length,tracked:n,trackedBySuffix:vp(n)}}function xp(e,t){let n=rc(e)??new Set,i=vp(n),r=[];for(let o of n){if(!Cp(e,o))continue;let{resolved:s,citations:a}=Rp(e,o,n,i,new Set),c=[...s].filter(l=>t.has(l));if(c.length>0){let l=c.sort(),u=new Set(l),d=a.filter(m=>u.has(m.file));r.push({doc:o,cited:l,citations:d,citedClaims:hc(d.flatMap(m=>m.contexts)).slice(0,3)})}}return r}function Cp(e,t){return or.test(t)&&!WI(t)&&yp(sr(e.config.projectRoot,t))}function vp(e){let t=new Map;for(let n of e){let i=n.split("/");for(let r of[2,3]){if(i.length<r)continue;let o=i.slice(-r).join("/"),s=t.get(o)??[];s.push(n),t.set(o,s)}}return t}function Rp(e,t,n,i,r){let o=new Set,s=new Set,a=YI(e,t);if(!a)return{resolved:o,broken:[],citations:[]};let c=QI(e,t,a),l=new Map,u=(d,m)=>{let p=c.get(m);if(!p||p.length===0)return;let h=l.get(d)??[];h.push(...p),l.set(d,hc(h).slice(0,3))};for(let d of a){if(n.has(d)){o.add(d),u(d,d);continue}let m=i.get(d);if(m&&m.length===1){o.add(m[0]),u(m[0],d);continue}m&&m.length>1||r.has(d)&&s.add(d)}return{resolved:o,broken:[...s],citations:[...l].map(([d,m])=>({file:d,contexts:m}))}}function QI(e,t,n){let i;try{i=fc(sr(e.config.projectRoot,t),"utf-8").split(/\r?\n/)}catch{return new Map}let r=new Set(n),o=new Map;for(let s=0;s<i.length;s+=1){let a=i[s]??"";for(let c of a.matchAll(Sp)){let l=c[0].replace(/^\.?\//,"");if(!r.has(l))continue;let u=Fo(i,s);if(u.length===0)continue;let d=o.get(l)??[];d.push(u),o.set(l,hc(d).slice(0,3))}}return o}function hc(e){let t=[];for(let n of new Set(e))t.some(i=>XI(i,n))||t.push(n);return t}function XI(e,t){if(e===t)return!0;let n=e.split(/\r?\n/).map(a=>a.trim()).filter(a=>a.length>0),i=t.split(/\r?\n/).map(a=>a.trim()).filter(a=>a.length>0),r=Math.min(n.length,i.length);if(r===0)return!1;if(r<3)return e.includes(t)||t.includes(e);let o=new Set(i),s=n.filter(a=>o.has(a)).length;return s>=3&&s/r>=.6}function YI(e,t){let n;try{n=fc(sr(e.config.projectRoot,t),"utf-8")}catch{return null}let i=Qt(e,t,n),r=Fr(e,"doc-path-tokens",t,i);if(r!==null)try{return JSON.parse(r)}catch{}let o=[...new Set([...n.matchAll(Sp)].map(s=>s[0].replace(/^\.?\//,"")))];return Ar(e,"doc-path-tokens",t,i,JSON.stringify(o)),o}import{existsSync as dN,readFileSync as mN,writeFileSync as pN}from"fs";import{isAbsolute as fN,join as gN}from"path";var ae={dead:{minLoc:3,skipBarrels:!0,deadCodeOnly:!0,semantic:!1},isolated:{minLoc:3,semantic:!1},similar:{minSimilarity:.6,limit:50,minCallees:4,semantic:!1},extract:{minLoc:15,minCallees:5,limit:50,semantic:!1},wrappers:{maxLoc:15,limit:50,semantic:!1},passthroughs:{maxLoc:15,limit:50,semantic:!1},stale:{minLoc:3,limit:50,semantic:!1},drift:{semantic:!1}};import ar from"path";function vn(e){let n=e.replace(/\\/g,"/").split("/").filter(Boolean);return n.length<=1?"(root)":n.length>=3&&["src","lib","app","server","client"].includes(n[0])?`${n[0]}/${n[1]}`:n[0]}function bc(e,t){if(e===t)return"ok";let n=Ao(e),i=Ao(t);return n&&i?ZI(n,i)?"ok":"violation":eP(e,t)}function kp(e,t){let n=Ao(vn(e)),i=Ao(vn(t));return!!n&&!!i}function Ao(e){return/^src\/([^/]+)$/.exec(e)?.[1]??null}function ZI(e,t){return t==="domain"?!0:e==="domain"?!1:{analysis:new Set(["domain","source","storage","symbols"]),core:new Set(["analysis","domain","resolution","source","storage","symbols"]),"language-parsers":new Set(["domain","resolution","source","storage"]),queries:new Set(["analysis","core","domain","language-parsers","resolution","semantic","source","storage","symbols"]),reindex:new Set(["domain","language-parsers","resolution","runtime","semantic","source","storage","symbols"]),resolution:new Set(["domain","source","storage","symbols"]),runtime:new Set(["domain","queries","reindex","resolution","semantic","source","storage","symbols"]),semantic:new Set(["domain","resolution","storage","symbols"]),source:new Set(["domain","storage"]),storage:new Set(["domain","source"]),symbols:new Set(["analysis","domain","language-parsers","resolution","semantic","source","storage"])}[e]?.has(t)??!1}function eP(e,t){if(t==="shared")return"ok";let n={app:new Set(["core","shared","ui"]),core:new Set(["shared"]),infra:new Set(["core","shared"]),ui:new Set(["core","shared"])};return n[e]?n[e].has(t)?"ok":"violation":null}function Rn(e,t){let{scope:n,minDeviation:i=5}=t??{},r=t?.semantic!==!1,s=new T(e).fileDependencyGraph(n),a=aP(e,n);return rP([...tP(e,s,a,{semantic:r}),...nP(s),...iP(s,i)])}function tP(e,t,n,i){let r=[];for(let[o,s]of t){if(wt(o))continue;let a=n.get(o)??new Set;for(let c of s)if(!wt(c)&&!a.has(c)){if(i.semantic&&pP(e,o,c)||fP(e,o,c)||gP(e,o,c)||mP(c)||bP(e,o,c)||hP(c))continue;r.push({file:o,kind:"unused-import",description:`Depends on ${c} but references none of its symbols`,dep:c,actionTier:"direct",evidenceReasons:[`dependency edge exists from ${o} to ${c}`,"no semantic, source, type-only, side-effect, or Vue-template usage survived the conservative skip gates"],recommendation:"Remove the unused import or dependency edge after running the project checks."})}}return r}function nP(e){let t=[],n=dP(e);for(let[i,r]of e){if(wt(i))continue;let o=vn(i);for(let s of r){if(wt(s))continue;let a=vn(s);if(o===a)continue;let c=bc(o,a),l=c?"explicit":"inferred";if((c??n.get(`${o}->${a}`))==="violation"){let d=l==="explicit"?"direct":"signal";t.push({file:i,kind:"layer-violation",description:`Imports from ${a}/ (${s}) \u2014 may cross architectural boundary`,dep:s,detail:`${o}/ should not depend on ${a}/`,actionTier:d,policyBasis:l,evidenceReasons:[`dependency edge exists from ${i} to ${s}`,l==="explicit"?`explicit layer policy rejects ${o}/ -> ${a}/`:`rare cross-layer edge ${o}/ -> ${a}/ is inferred as a violation`],recommendation:l==="explicit"?"Move the dependency behind an allowed layer boundary or document a policy change.":"Review whether this is a real boundary break or an intentional exception before moving code."})}}}return t}function iP(e,t){let n=[];for(let[i,r]of oP(e)){let o=r.filter(a=>!wt(a));if(o.length<t)continue;let s=sP(e,o);for(let a of o)for(let c of e.get(a)??[])wt(c)||(s.get(c)??0)===1&&ar.dirname(c)!==i&&ar.dirname(c)!==ar.dirname(i)&&(kp(a,c)||n.push({file:a,kind:"pattern-deviation",description:`Only file in ${i}/ that depends on ${c}`,dep:c,actionTier:"signal",evidenceReasons:[`${o.length} sibling file(s) in ${i}/ were compared`,`${a} is the only non-skipped sibling depending on ${c}`],recommendation:"Review sibling ownership before changing this import; unique dependency shape can be intentional specialization."}))}return n}function rP(e){return{results:e,unusedImports:e.filter(t=>t.kind==="unused-import").length,layerViolations:e.filter(t=>t.kind==="layer-violation").length,patternDeviations:e.filter(t=>t.kind==="pattern-deviation").length}}function oP(e){let t=new Map;for(let n of e.keys()){let i=ar.dirname(n),r=t.get(i);r||(r=[],t.set(i,r)),r.push(n)}return t}function sP(e,t){let n=new Map;for(let i of t)for(let r of e.get(i)??[])wt(r)||n.set(r,(n.get(r)??0)+1);return n}function aP(e,t){let n=new Map;return cP(e,n,t),uP(e,n),n}function cP(e,t,n){for(let i of lP(e,n))wp(e,t,i.from_file,i.to_file)}function lP(e,t){let n=t?`AND d1.relative_path LIKE '%${t}%'`:"";return e.all(`SELECT DISTINCT d1.relative_path AS from_file, d2.relative_path AS to_file
540
+ ${e.pathExclusionsFor("ref_d")}`,...t,...n),i=new Map;for(let o of r){let s=i.get(o.symbol_id);s||(s=new Set,i.set(o.symbol_id,s)),s.add(o.relative_path)}return i}function Gp(e,t,n,r,i){if(e.isIgnored(r)||t.has(r))return;let o=n.get(r);o||(o=new Set,n.set(r,o)),o.add(i)}function zP(e){return[...e.entries()].map(([t,n])=>({file:t,consumedSymbols:n.size})).sort((t,n)=>n.consumedSymbols-t.consumedSymbols)}function JP(e){return!(Ot(e.symbol)||e.parentTypeName!==null&&!Ce(e.symbol))}function KP(e,t){return Ce(e.symbol)||e.isTypeLike?!0:e.parentTypeName===null&&t>0}function Kp(e){let[t,n]=Yo(e,":"),r=t||"unknown",i=(o={})=>{let s=o.actionTier??XP(r);return{sourceAnalyzer:r,actionTier:s,rootCauseKey:o.rootCauseKey??(n||e),label:o.label??`${r} finding`,relatedFiles:o.relatedFiles??[],why:o.why??[],remediation:o.remediation??QP(s,r),file:o.file}};if(!n)return i({rootCauseKey:e,why:["Baseline identity did not include analyzer payload."]});if(["dead","isolated","extract","wrapper","passthrough","stale"].includes(r)){let[o,s]=Yo(n,":");return i({file:o,relatedFiles:o?[o]:[],rootCauseKey:s?`${o}:${s}`:n,label:`${r} finding`,why:s?[`Baseline subject: ${s}.`]:[]})}if(r==="cycle"){let o=n.split(">").filter(Boolean);return i({relatedFiles:o,rootCauseKey:n,label:"cycle finding",why:o.length>0?[`Cycle path: ${o.join(" > ")}.`]:[]})}if(r==="similar"){let o=n.split("|").filter(Boolean);return i({relatedFiles:[],rootCauseKey:n,label:"similarity finding",why:o.length>0?[`Similar symbols: ${o.join(" | ")}.`]:[]})}if(r==="drift"){let[o,s]=Yo(n,":"),[a,c]=Yo(s,":");return i({actionTier:o==="unused-import"?"direct":"signal",file:a,relatedFiles:[...new Set([a,c].filter(Boolean))],rootCauseKey:n,label:`${o||"drift"} finding`,why:[...o?[`Drift kind: ${o}.`]:[],...c?[`Related dependency: ${c}.`]:[]]})}return i({why:["Baseline analyzer prefix is not recognized by this diff-gate version."]})}function XP(e){switch(e){case"dead":case"isolated":case"cycle":case"passthrough":return"direct";case"similar":case"extract":case"wrapper":case"stale":return"signal";default:return"signal"}}function QP(e,t){return e==="direct"?`Fix the new ${t} baseline finding, or knowingly accept it via health --write-baseline.`:`Review the new ${t} baseline signal; fix it if it reflects real debt, or knowingly accept it via health --write-baseline.`}function Yo(e,t){let n=e.indexOf(t);return n<0?[e,""]:[e.slice(0,n),e.slice(n+t.length)]}import{existsSync as rN,readFileSync as Yp}from"fs";function ts(e,t){let n=YP(e,t)??ZP(e,t)??eN(e,t)??tN(e,t);return nN(e,n,t)}function YP(e,t){let n=-1,r=null;for(let i=0;i<=t;i+=1){let o=_c(e[i]??"");o&&(r===null?(r=o,n=i):o===r&&(r=null,n=-1))}if(r===null||n<0)return null;for(let i=t+1;i<e.length;i+=1)if(_c(e[i]??"")===r)return{start:n,end:i+1};return{start:n,end:e.length}}function _c(e){let t=e.match(/^\s*(```+|~~~+)/);return t?t[1].startsWith("`")?"`":"~":null}function ZP(e,t){if(!Zo(e[t]??""))return null;let n=t;for(;n>0&&Zo(e[n-1]??"");)n-=1;let r=t+1;for(;r<e.length&&Zo(e[r]??"");)r+=1;return{start:n,end:r}}function Zo(e){let t=e.trim();return t.startsWith("|")&&t.endsWith("|")&&t.includes("|")}function eN(e,t){let n=t;for(;n>=0;){let o=e[n]??"";if(es(o)!==null)break;if(Fc(o)!==null)return null;n-=1}if(n<0)return null;let r=es(e[n]??"");if(r===null)return null;let i=n+1;for(;i<e.length;){let o=e[i]??"",s=es(o);if(s!==null){if(s<=r)break;i+=1;continue}if(Fc(o)!==null)break;i+=1}return{start:n,end:i}}function es(e){let t=e.match(/^(\s*)(?:[-*+]\s+|\d+[.)]\s+)/);return t?t[1].length:null}function tN(e,t){let n=e[t]??"";if(Qp(n)||n.trim().length===0)return{start:t,end:t+1};let r=t;for(;r>0&&Xp(e[r-1]??"");)r-=1;let i=t+1;for(;i<e.length&&Xp(e[i]??"");)i+=1;return{start:r,end:i}}function Xp(e){return Fc(e)===null}function Fc(e){return e.trim().length===0?"blank":Qp(e)?"heading":_c(e)?"fence":Zo(e)?"table":es(e)!==null?"list":null}function Qp(e){return/^#{1,6}\s+/.test(e.trim())}function nN(e,t,n){let{start:r,end:i}=t;if(i-r>40){let s=Math.floor(20);r=Math.max(r,n-s),i=Math.min(i,r+40),r=Math.max(t.start,i-40)}let o=e.slice(r,i).join(`
541
+ `).trim();return o.length<=2e3?o:`${o.slice(0,2e3).trimEnd()}...`}function Dn(e,t){return t.filter(n=>e.includes(n))}var Cr={classifyCitation:iN,citationContexts:oN,citationKindLabel:aN,citationRemediation:cN,referenceTargets:lN};function iN(e){let t=e.join(`
542
+ `).toLowerCase(),n=[],r=Dn(t,[".scipquery","declaredcouplings","suppression","suppressions","config","configuration","json"]);if(r.length>0)return n.push(`configuration/example terms near citation: ${r.join(", ")}`),{citationKind:"configuration-example",actionTier:"support",reasons:n};let i=Dn(t,["accepted","intentional","intentionally","retained","historical"]);if(i.length>0)return n.push(`intentional-record terms near citation: ${i.join(", ")}`),{citationKind:"intentional-record",actionTier:"support",reasons:n};let o=Dn(t,["command","cli","usage","example","run","workflow"]);return o.length>0?(n.push(`guide/reference terms near citation: ${o.join(", ")}`),{citationKind:"guide-reference",actionTier:"signal",reasons:n}):(n.push(e.length>0?"citation appears in prose without config or guide markers":"citation context unavailable"),{citationKind:"behavioral-claim",actionTier:"direct",reasons:n})}function oN(e,t,n){let r;try{r=Yp(`${e.config.projectRoot}/${t}`,"utf-8").split(/\r?\n/)}catch{return[]}let i=n.flatMap(sN),o=[];for(let s=0;s<r.length;s+=1){let a=r[s]??"";i.some(c=>a.includes(c))&&o.push(ts(r,s))}return o}function sN(e){let t=e.split("/");return[e,`./${e}`,t.slice(-3).join("/"),t.slice(-2).join("/")].filter((n,r,i)=>n.length>0&&i.indexOf(n)===r)}function aN(e){switch(e){case"behavioral-claim":return"a behavioral doc claim";case"configuration-example":return"a configuration example";case"guide-reference":return"a guide reference";case"intentional-record":return"an intentional record"}}function cN(e,t){switch(e){case"behavioral-claim":return`Re-read ${t} and update the behavioral claim or citation.`;case"configuration-example":return`Verify the configuration example in ${t} still points at the intended file; update only if the example target changed.`;case"guide-reference":return`Verify the guide reference in ${t} still sends readers to the right implementation or command surface.`;case"intentional-record":return`Verify the intentional citation in ${t} is still meant to name this file.`}}function lN(e,t,n){let r=Ko(n),i=new Set;for(let o of t)uN(e,o,r.get(o)??[])&&i.add(o);return i}function uN(e,t,n){if(n.length===0)return!1;if(!dN.test(t))return!0;let r=`${e.config.projectRoot}/${t}`;if(!rN(r))return!0;let i=Yp(r,"utf-8").split(/\r?\n/),o=mN(i);for(let s of n)for(let a=s.startLine;a<=s.endLine;a+=1)if((i[a]??"").trim()!==""&&!o.has(a))return!0;return!1}var dN=/\.(?:[cm]?[jt]sx?)$/i;function mN(e){let t=new Set,n=!1;for(let r=0;r<e.length;r+=1){let i=e[r].trim();!n&&pN(i)&&(n=!0),n&&(t.add(r),i.endsWith(";")&&(n=!1))}return t}function pN(e){return/^import(?:\s|$)/.test(e)||/^export(?:\s+type)?\s+(?:\*|\{)/.test(e)}import{existsSync as Zp,readFileSync as Ac}from"fs";import{join as xi}from"path";var Si=/\.(?:md|mdx|rst|txt)$/i;function fN(e){return/(?:^|\/)(?:docs\/plans|plans|adrs?|rfcs?|decisions|changelogs?|archive|reports?)\//i.test(e)||/(?:^|\/)CHANGELOG\.(?:md|mdx|rst|txt)$/i.test(e)}var gN=3,ef=/[A-Za-z0-9_@-]+(?:\/[A-Za-z0-9_.@-]+)+\.[A-Za-z0-9]{1,6}\b/g;function Mc(e,t={}){let{doc:n,limit:r=20,minCoupling:i=gN}=t,o=bN(e);if(!o)return{available:!1,commitsAnalyzed:0,docsScanned:0,findings:[]};let s=[];for(let a of o.docFiles){if(n!==void 0&&!a.includes(n)||n===void 0&&!nf(e,a)||n!==void 0&&!Zp(xi(e.config.projectRoot,a)))continue;let c=Math.max(0,...o.changeTimes.get(a)??[]),l=hN(e,a),u=new Map,{resolved:d,broken:m,citations:f}=CN(e,a,o.tracked,o.trackedBySuffix,o.everSeenInHistory),h=new Map(f.map(y=>[y.file,y.contexts]));for(let y of d){if(y===a||Si.test(y))continue;let S=(o.changeTimes.get(y)??[]).filter(C=>C>c).length;S!==0&&u.set(y,{file:y,evidence:"reference",coChanges:0,changesSinceDocUpdate:S,...$c("reference",l),citationContexts:h.get(y)})}for(let[y,S]of o.coupling.get(a)??[]){if(S<i||!o.tracked.has(y))continue;let C=(o.changeTimes.get(y)??[]).filter(D=>D>c).length;if(C===0)continue;let k=u.get(y);k?(k.evidence="both",k.coChanges=S,Object.assign(k,$c("both",l))):u.set(y,{file:y,evidence:"co-change",coChanges:S,changesSinceDocUpdate:C,...$c("co-change",l)})}if(u.size===0&&m.length===0)continue;let g=[...u.values()].sort((y,S)=>S.changesSinceDocUpdate-y.changesSinceDocUpdate);s.push({doc:a,docLastChangedAt:c,staleness:g.reduce((y,S)=>y+S.changesSinceDocUpdate,0)+m.length*10,subjects:g.slice(0,8),brokenReferences:m})}return s.sort((a,c)=>c.staleness-a.staleness),{available:!0,commitsAnalyzed:o.historyCommitCount,docsScanned:o.docFiles.length,findings:s.slice(0,r)}}function hN(e,t){let n;try{n=Ac(xi(e.config.projectRoot,t),"utf8").slice(0,6e3)}catch{return{docIntent:"unknown",reasons:["doc text unavailable"]}}let r=`${t}
543
+ ${n}`.toLowerCase(),i=Dn(r,["historical note","historical record","history note","retrospective","postmortem","post-mortem","archived","archive","previously","legacy","recorded","record of","snapshot","as of","migration note","decision record"]);if(i.length>0)return{docIntent:"historical-note",reasons:[`historical-note terms: ${i.join(", ")}`]};let o=Dn(r,["current","standard","standards","must","should","policy","guide","guidance","workflow","contract","invariant","source of truth"]);return o.length>0?{docIntent:"current-guidance",reasons:[`current-guidance terms: ${o.join(", ")}`]}:{docIntent:"unknown",reasons:["no current-guidance or historical-note markers found"]}}function $c(e,t){return{actionTier:yN(e,t.docIntent),docIntent:t.docIntent,docIntentReasons:t.reasons}}function yN(e,t){return t==="historical-note"?"support":e==="co-change"?"signal":"direct"}function bN(e){let t=Yt(e);if(!t)return null;let n=wc(e)??new Set,r=new Map,i=new Map,o=new Set;for(let s of t.commits){let a=[...new Set(s.files)],c=a.filter(u=>Si.test(u)),l=a.filter(u=>!Si.test(u));for(let u of a){o.add(u);let d=r.get(u)??[];d.push(s.timestamp),r.set(u,d)}for(let u of c){let d=i.get(u);d||(d=new Map,i.set(u,d));for(let m of l)d.set(m,(d.get(m)??0)+1)}}return{changeTimes:r,coupling:i,docFiles:[...n].filter(s=>Si.test(s)),everSeenInHistory:o,historyCommitCount:t.commits.length,tracked:n,trackedBySuffix:rf(n)}}function tf(e,t){if(t.size===0)return[];let n=wc(e)??new Set,r=rf(n),i=SN(t,r),o=[];for(let s of n){if(!nf(e,s))continue;let a=sf(e,s);if(!a)continue;let c=xN(a,t,i,n,r);if(c.size===0)continue;let l=[...new Set([...c.values()].flatMap(f=>[...f]))],u=of(e,s,l),d=[...c].map(([f,h])=>({file:f,contexts:ns([...h].flatMap(g=>u.get(g)??[])).slice(0,3)})).filter(f=>f.contexts.length>0),m=[...c.keys()];if(m.length>0){let f=m.sort();o.push({doc:s,cited:f,citations:d,citedClaims:ns(d.flatMap(h=>h.contexts)).slice(0,3)})}}return o}function nf(e,t){return Si.test(t)&&!fN(t)&&Zp(xi(e.config.projectRoot,t))}function rf(e){let t=new Map;for(let n of e){let r=n.split("/");for(let i of[2,3]){if(r.length<i)continue;let o=r.slice(-i).join("/"),s=t.get(o)??[];s.push(n),t.set(o,s)}}return t}function SN(e,t){let n=new Set(e);for(let r of e){let i=r.split("/");for(let o of[2,3]){if(i.length<o)continue;let s=i.slice(-o).join("/"),a=t.get(s);a?.length===1&&a[0]===r&&n.add(s)}}return n}function xN(e,t,n,r,i){let o=new Map;for(let s of e){if(!n.has(s))continue;let a;if(r.has(s))a=s;else{let l=i.get(s);l?.length===1&&(a=l[0])}if(!a||!t.has(a))continue;let c=o.get(a)??new Set;c.add(s),o.set(a,c)}return o}function CN(e,t,n,r,i){let o=new Set,s=new Set,a=sf(e,t);if(!a)return{resolved:o,broken:[],citations:[]};let c=of(e,t,a),l=new Map,u=(d,m)=>{let f=c.get(m);if(!f||f.length===0)return;let h=l.get(d)??[];h.push(...f),l.set(d,ns(h).slice(0,3))};for(let d of a){if(n.has(d)){o.add(d),u(d,d);continue}let m=r.get(d);if(m&&m.length===1){o.add(m[0]),u(m[0],d);continue}m&&m.length>1||i.has(d)&&s.add(d)}return{resolved:o,broken:[...s],citations:[...l].map(([d,m])=>({file:d,contexts:m}))}}function of(e,t,n){let r;try{r=Ac(xi(e.config.projectRoot,t),"utf-8").split(/\r?\n/)}catch{return new Map}let i=new Set(n),o=new Map;for(let s=0;s<r.length;s+=1){let a=r[s]??"";for(let c of a.matchAll(ef)){let l=c[0].replace(/^\.?\//,"");if(!i.has(l))continue;let u=ts(r,s);if(u.length===0)continue;let d=o.get(l)??[];d.push(u),o.set(l,ns(d).slice(0,3))}}return o}function ns(e){let t=[];for(let n of new Set(e))t.some(r=>vN(r,n))||t.push(n);return t}function vN(e,t){if(e===t)return!0;let n=e.split(/\r?\n/).map(a=>a.trim()).filter(a=>a.length>0),r=t.split(/\r?\n/).map(a=>a.trim()).filter(a=>a.length>0),i=Math.min(n.length,r.length);if(i===0)return!1;if(i<3)return e.includes(t)||t.includes(e);let o=new Set(r),s=n.filter(a=>o.has(a)).length;return s>=3&&s/i>=.6}function sf(e,t){let n;try{n=Ac(xi(e.config.projectRoot,t),"utf-8")}catch{return null}let r=Ye(e,t,n),i=Mt(e,"doc-path-tokens",t,r);if(i!==null)try{return JSON.parse(i)}catch{}let o=[...new Set([...n.matchAll(ef)].map(s=>s[0].replace(/^\.?\//,"")))];return jt(e,"doc-path-tokens",t,r,JSON.stringify(o)),o}import{existsSync as FE,readFileSync as $E,writeFileSync as AE}from"fs";import{isAbsolute as ME,join as jE}from"path";var le={dead:{minLoc:3,skipBarrels:!0,deadCodeOnly:!0,semantic:!1},isolated:{minLoc:3,semantic:!1},similar:{minSimilarity:.6,limit:50,minCallees:4,semantic:!1},extract:{minLoc:15,minCallees:5,limit:50,semantic:!1},wrappers:{maxLoc:15,limit:50,semantic:!1},passthroughs:{maxLoc:15,limit:50,semantic:!1},stale:{minLoc:3,limit:50,semantic:!1},drift:{semantic:!1}};import Ci from"path";function Pn(e){let n=e.replace(/\\/g,"/").split("/").filter(Boolean);return n.length<=1?"(root)":n.length>=3&&["src","lib","app","server","client"].includes(n[0])?`${n[0]}/${n[1]}`:n[0]}function jc(e,t){if(e===t)return"ok";let n=rs(e),r=rs(t);return n&&r?RN(n,r)?"ok":"violation":kN(e,t)}function af(e,t){let n=rs(Pn(e)),r=rs(Pn(t));return!!n&&!!r}function rs(e){return/^src\/([^/]+)$/.exec(e)?.[1]??null}function RN(e,t){return t==="domain"?!0:e==="domain"?!1:{analysis:new Set(["domain","source","storage","symbols"]),core:new Set(["analysis","domain","resolution","source","storage","symbols"]),"language-parsers":new Set(["domain","resolution","source","storage"]),queries:new Set(["analysis","core","domain","language-parsers","resolution","semantic","source","storage","symbols"]),reindex:new Set(["domain","language-parsers","resolution","runtime","semantic","source","storage","symbols"]),resolution:new Set(["domain","source","storage","symbols"]),runtime:new Set(["domain","queries","reindex","resolution","semantic","source","storage","symbols"]),semantic:new Set(["domain","resolution","storage","symbols"]),source:new Set(["domain","storage"]),storage:new Set(["domain","source"]),symbols:new Set(["analysis","domain","language-parsers","resolution","semantic","source","storage"])}[e]?.has(t)??!1}function kN(e,t){if(t==="shared")return"ok";let n={app:new Set(["core","shared","ui"]),core:new Set(["shared"]),infra:new Set(["core","shared"]),ui:new Set(["core","shared"])};return n[e]?n[e].has(t)?"ok":"violation":null}function Nn(e,t){let{scope:n,minDeviation:r=5}=t??{},i=t?.semantic!==!1,s=new T(e).fileDependencyGraph(n),a=EN(e,n);return DN([...wN(e,s,a,{semantic:i}),...LN(s),...IN(s,r)])}function wN(e,t,n,r){let i=[];for(let[o,s]of t){if(Nt(o))continue;let a=n.get(o)??new Set;for(let c of s)if(!Nt(c)&&!a.has(c)){if(r.semantic&&MN(e,o,c)||jN(e,o,c)||ON(e,o,c)||AN(c)||HN(e,o,c)||BN(c))continue;i.push({file:o,kind:"unused-import",description:`Depends on ${c} but references none of its symbols`,dep:c,actionTier:"direct",evidenceReasons:[`dependency edge exists from ${o} to ${c}`,"no semantic, source, type-only, side-effect, or Vue-template usage survived the conservative skip gates"],recommendation:"Remove the unused import or dependency edge after running the project checks."})}}return i}function LN(e){let t=[],n=$N(e);for(let[r,i]of e){if(Nt(r))continue;let o=Pn(r);for(let s of i){if(Nt(s))continue;let a=Pn(s);if(o===a)continue;let c=jc(o,a),l=c?"explicit":"inferred";if((c??n.get(`${o}->${a}`))==="violation"){let d=l==="explicit"?"direct":"signal";t.push({file:r,kind:"layer-violation",description:`Imports from ${a}/ (${s}) \u2014 may cross architectural boundary`,dep:s,detail:`${o}/ should not depend on ${a}/`,actionTier:d,policyBasis:l,evidenceReasons:[`dependency edge exists from ${r} to ${s}`,l==="explicit"?`explicit layer policy rejects ${o}/ -> ${a}/`:`rare cross-layer edge ${o}/ -> ${a}/ is inferred as a violation`],recommendation:l==="explicit"?"Move the dependency behind an allowed layer boundary or document a policy change.":"Review whether this is a real boundary break or an intentional exception before moving code."})}}}return t}function IN(e,t){let n=[];for(let[r,i]of PN(e)){let o=i.filter(a=>!Nt(a));if(o.length<t)continue;let s=NN(e,o);for(let a of o)for(let c of e.get(a)??[])Nt(c)||(s.get(c)??0)===1&&Ci.dirname(c)!==r&&Ci.dirname(c)!==Ci.dirname(r)&&(af(a,c)||n.push({file:a,kind:"pattern-deviation",description:`Only file in ${r}/ that depends on ${c}`,dep:c,actionTier:"signal",evidenceReasons:[`${o.length} sibling file(s) in ${r}/ were compared`,`${a} is the only non-skipped sibling depending on ${c}`],recommendation:"Review sibling ownership before changing this import; unique dependency shape can be intentional specialization."}))}return n}function DN(e){return{results:e,unusedImports:e.filter(t=>t.kind==="unused-import").length,layerViolations:e.filter(t=>t.kind==="layer-violation").length,patternDeviations:e.filter(t=>t.kind==="pattern-deviation").length}}function PN(e){let t=new Map;for(let n of e.keys()){let r=Ci.dirname(n),i=t.get(r);i||(i=[],t.set(r,i)),i.push(n)}return t}function NN(e,t){let n=new Map;for(let r of t)for(let i of e.get(r)??[])Nt(i)||n.set(i,(n.get(i)??0)+1);return n}function EN(e,t){let n=new Map;return TN(e,n,t),FN(e,n),n}function TN(e,t,n){for(let r of _N(e,n))cf(e,t,r.from_file,r.to_file)}function _N(e,t){let n=t?`AND d1.relative_path LIKE '%${t}%'`:"";return e.all(`SELECT DISTINCT d1.relative_path AS from_file, d2.relative_path AS to_file
510
544
  FROM mentions m
511
545
  JOIN chunks c ON m.chunk_id = c.id
512
546
  JOIN documents d1 ON c.document_id = d1.id
@@ -522,31 +556,31 @@ ${n}`.toLowerCase(),r=Cn(i,["historical note","historical record","history note"
522
556
  WHERE d1.id != d2.id
523
557
  AND m.role != 1
524
558
  ${e.pathExclusionsFor("d1","d2")}
525
- ${n}`)}function uP(e,t){new T(e).scanSourceReferences({paths:j(e,{includeIgnored:!1}),includeRustAttributeNames:!0,identifierResolution:"permissive"},i=>{i.target.relativePath!==i.sourceFile&&(e.isIgnored(i.target.relativePath)||wp(e,t,i.sourceFile,i.target.relativePath))})}function wp(e,t,n,i){if(e.isIgnored(n)||e.isIgnored(i))return;let r=t.get(n);r||(r=new Set,t.set(n,r)),r.add(i)}function dP(e){let t=new Map;for(let[i,r]of e){if(wt(i))continue;let o=vn(i);for(let s of r){if(wt(s))continue;let a=vn(s);if(o===a||bc(o,a))continue;let c=`${o}->${a}`;t.set(c,(t.get(c)??0)+1)}}let n=new Map;for(let[i,r]of t)n.set(i,r<=2?"violation":"ok");return n}function mP(e){return e.includes("types")||e.endsWith(".d.ts")}function pP(e,t,n){let i=qi(e,t).filter(r=>r.sourcePath===n);return i.length>0&&i.some(r=>r.isUsed)}function fP(e,t,n){let i=fe(e,t).filter(r=>r.sourcePath===n);return i.length>0&&i.some(r=>r.used)}function gP(e,t,n){let i=fe(e,t).filter(r=>r.sourcePath===n);return i.length>0&&i.every(r=>r.isTypeOnly===!0)}function hP(e){return e.endsWith(".vue")}function bP(e,t,n){let i=fe(e,t).filter(r=>r.sourcePath===n);return i.length===0?!1:i.every(r=>r.kind==="side-effect"||r.kind==="namespace"&&r.usedMembers.length===0&&!r.used)}function wt(e){let t=K(e);return!!(t==="entry"||t==="barrel"||t==="test"||t==="worker"||yP(ar.basename(e)))}function yP(e){return!!(e==="index.ts"||e==="index.js"||e==="cli.ts"||e==="main.ts"||e==="main.rs"||e.includes("worker.")||e.includes("postinstall.")||e==="health.ts"||e==="health.js")}import{basename as Lp,extname as Dp}from"path";function Mo(e,t,n,i,r,o){let s=new Set;xP(e,t,n,i)&&s.add(r);for(let a of o)a.value&&SP(s,a.label,a.value);return[...s].slice(0,6)}function SP(e,t,n){let i=CP(n);t.endsWith("name")&&vP(i)&&e.add(`${t} has type-guard boundary shape`);for(let r of i){let o=RP.get(r);o&&e.add(`${t} has ${o} term: ${r}`)}}function xP(e,t,n,i){if(n<=0)return!1;let r=_e(e,t);if(r.length===0)return!1;for(let o=n-1;o>=0&&o>=n-5;o-=1){let s=(r[o]??"").trim();if(s!==""){if(Li(s)===i)return!0;if(!s.startsWith("//")&&!s.startsWith("*")&&!s.startsWith("/*")&&!s.startsWith("@")&&!s.startsWith("#"))return!1}}return!1}function CP(e){return e.replace(/([A-Z])([A-Z][a-z])/g,"$1 $2").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean)}function vP(e){return e.some(t=>kP.has(t))&&e.some(t=>wP.has(t))}var RP=new Map([["access","access policy"],["accessible","access policy"],["adapter","adapter"],["adapters","adapter"],["allow","access policy"],["allowed","access policy"],["animation","animation calculation"],["api","api surface"],["apply","settings/application"],["audit","side-effect boundary"],["auth","authorization"],["authorize","authorization"],["audio","audio side-effect"],["can","access policy"],["capabilities","capability boundary"],["capability","capability boundary"],["boundary","boundary"],["begin","lifecycle"],["bridge","bridge"],["bridges","bridge"],["cache","state cache"],["chase","gameplay action"],["command","command boundary"],["context","context policy"],["cooldown","temporal state"],["cooldowns","temporal state"],["controller","controller"],["controllers","controller"],["diagnostic","diagnostics"],["diagnostics","diagnostics"],["effect","side-effect boundary"],["effects","side-effect boundary"],["energy","gameplay calculation"],["expired","temporal state"],["facade","facade"],["facades","facade"],["fire","gameplay action"],["gateway","gateway"],["gateways","gateway"],["guard","guard"],["guards","guard"],["haptic","haptic side-effect"],["haptics","haptic side-effect"],["head","sequence boundary"],["history","state history"],["input","input boundary"],["jump","gameplay action"],["keyboard","input boundary"],["log","side-effect boundary"],["logger","side-effect boundary"],["lock","coordination boundary"],["middleware","middleware"],["multiplier","gameplay calculation"],["mute","audio side-effect"],["normalize","normalization"],["normalise","normalization"],["normalizer","normalization"],["oscillate","animation calculation"],["oscillation","animation calculation"],["overlap","collision predicate"],["performance","diagnostics"],["permission","access policy"],["permissions","access policy"],["policy","policy"],["pool","state pool"],["pooled","state pool"],["pools","state pool"],["predict","prediction"],["presenter","presenter"],["presenters","presenter"],["projectile","gameplay entity"],["provider","provider boundary"],["providers","provider boundary"],["public","public surface"],["quality","settings/application"],["rate","calculation"],["register","registry"],["registry","registry"],["relay","relay"],["relays","relay"],["reseed","state lifecycle"],["reset","state lifecycle"],["respond","response boundary"],["response","response boundary"],["resolve","resolution"],["resolver","resolution"],["route","route boundary"],["routes","route boundary"],["run","lifecycle"],["sample","diagnostics"],["score","gameplay calculation"],["scope","scope policy"],["scroll","position state"],["scrolled","position state"],["seed","state lifecycle"],["seeded","state lifecycle"],["segment","segment boundary"],["segments","segment boundary"],["setting","settings/application"],["settings","settings/application"],["spawn","gameplay lifecycle"],["spawning","gameplay lifecycle"],["speed","gameplay calculation"],["surface","public surface"],["tail","sequence boundary"],["tick","temporal state"],["transaction","transaction"],["transactional","transaction"],["transform","transformation"],["transformer","transformation"],["translate","translation"],["translator","translation"],["try","fallible action"],["validate","validation"],["validation","validation"],["validator","validation"],["visual","diagnostics"],["window","settings/application"],["socket","transport boundary"],["websocket","transport boundary"]]),kP=new Set(["can","has","is","should"]),wP=new Set(["access","api","auth","collision","expired","input","keyboard","overlap","permission","permissions","policy","projectile","response","route","routes","scope"]);function kn(e,t){let{scope:n,maxLoc:i=15,limit:r=30,scanLimit:o}=t??{},s=new T(e);return We({candidates:()=>FP(s,n,i),orderCandidates:So,scanLimit:o,prepare:a=>s.calleeMap(a,{semantic:t?.semantic!==!1}),evaluate:(a,c)=>LP(e,a,c.get(a.symbolId)??[]),orderResults:(a,c)=>a.loc-c.loc||a.file.localeCompare(c.file),limit:r})}function LP(e,t,n){let i=$P(n);if(i.size!==1||!Os(e,t.relativePath,t.startLine,t.endLine))return null;let[,r]=[...i.entries()][0],o=DP(e,t,r),s=PP(e,t),a=o.length>0||s.length>0?"signal":"direct";return{symbol:t.symbol,shortName:y(t.symbol),file:t.relativePath,startLine:t.startLine,endLine:t.endLine,loc:q(t),forwardsTo:r.symbol,forwardsToShort:y(r.symbol),forwardsToFile:r.file,actionTier:a,boundaryEvidence:o,publicFacadeEvidence:s,recommendation:IP(a,o,s)}}function DP(e,t,n){return Mo(e,t.relativePath,t.startLine,"passthrough","explicit ignore-passthrough comment",[{label:"passthrough name",value:y(t.symbol)},{label:"callee name",value:y(n.symbol)},{label:"passthrough module",value:Lp(t.relativePath,Dp(t.relativePath))},{label:"callee module",value:Lp(n.file,Dp(n.file))}])}function IP(e,t,n){if(e==="signal"){if(n.length>0)return`Review the public API before inlining; public-facade evidence: ${n.slice(0,2).join("; ")}.`;let i=t.filter(TP);return i.length>0?`Review the public API before inlining; public-surface evidence: ${i.slice(0,2).join("; ")}.`:`Review the boundary before inlining; boundary evidence: ${t.slice(0,2).join("; ")}.`}return"Inline or remove this passthrough unless an external API or runtime registration depends on the forwarding name."}function PP(e,t){return NP(e,t)?ei(e,t.relativePath)?["exported passthrough is declared on the package public surface"]:ie(e,t.symbol,t.relativePath)?["exported passthrough matches configured or framework public entry surface"]:[]:[]}function NP(e,t){let n=_e(e,t.relativePath);if(n.length===0)return!1;let i=n.slice(Math.max(0,t.startLine-2),t.startLine+1).join(`
526
- `);return AP.test(i)?!0:EP(n,$(t.symbol))}function EP(e,t){if(!t)return!1;let n=new RegExp(`^\\s*export\\s*\\{[^}\\n]*\\b${_P(t)}\\b`);return e.some(i=>n.test(i))}function TP(e){return e.includes("public surface")}function _P(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function $P(e){let t=e.some(i=>se(i.symbol))?e.filter(i=>se(i.symbol)):e,n=new Map;for(let i of t)n.has(i.symbol)||n.set(i.symbol,i);return n}function FP(e,t,n){return e.productionCallableDefinitions({scope:t,minLoc:3,maxLoc:n,requireFunctionLikeSymbol:!0,excludeRustTraitImplMembers:!0})}var AP=/^\s*export\s+(?:default\s+)?(?:(?:async\s+)?function\b|(?:const|let|var)\b)/m;function wn(e,t){let{scope:n,minLoc:i=3,maxLoc:r=80,limit:o=30,includeLowConfidence:s=!1,scanLimit:a}=t??{},c=t?.semantic!==!1,l=new T(e),u=l.scopedDefinitions(n),d=JP(l,n),m={high:0,medium:1,low:2};return We({candidates:()=>MP(e,l,u,{minLoc:i,maxLoc:r}),orderCandidates:(p,h)=>q(h)-q(p)||p.relativePath.localeCompare(h.relativePath),scanLimit:a,prepare:p=>({consumerFileMap:OP(l,p,{semantic:c}),singletonBackedClassIds:qP(e,l,u,p,{semantic:c}),candidateIndex:jP(p)}),evaluate:(p,h)=>{if(h.singletonBackedClassIds.has(p.symbolId))return null;let g=BP(e,p,h.consumerFileMap,h.candidateIndex);if(g.transitivelyReachable||g.realConsumers.length>1||g.realConsumers.length===0&&g.barrelConsumers>0||!XP(g.definition,g.realConsumers.length,d))return null;let b=HP(e,g);return!s&&b.confidence==="low"?null:b},orderResults:(p,h)=>m[p.confidence]-m[h.confidence]||h.loc-p.loc||p.file.localeCompare(h.file)||p.startLine-h.startLine,limit:o})}function MP(e,t,n,i){return n.filter(r=>r.isTypeLike&&q(r)>=i.minLoc).filter(r=>q(r)<=i.maxLoc).filter(r=>!e.isIgnored(r.relativePath)).filter(r=>K(r.relativePath)!=="test").filter(r=>!ie(e,r.symbol,r.relativePath)).filter(r=>!QP(r.symbol)).filter(r=>!t.hasSuppressionComment(r))}function OP(e,t,n){return Sn(e,t,{semantic:n.semantic})}function jP(e){let t=new Map;for(let n of e){let i=t.get(n.relativePath);i||(i=new Map,t.set(n.relativePath,i));let r=$(n.symbol);r&&i.set(r,n)}return t}function BP(e,t,n,i){let o=[...n.get(t.symbolId)??new Set].filter(u=>u!==t.relativePath&&!e.isIgnored(u)),{realConsumers:s,barrelConsumers:a,importOnlyConsumers:c}=wo(e,t,o),l=YP(e,t,n,i);return{definition:t,realConsumers:s,barrelConsumers:a+c,transitivelyReachable:l}}function HP(e,t){let n=Np(e,t.definition.relativePath,t.definition.startLine),i=Pp(t.definition.relativePath)?!0:ZP(e,t.definition),{confidence:r,reason:o}=eN(t.realConsumers.length,n,i),s=VP(t.realConsumers.length,n,i);return{symbol:t.definition.symbol,shortName:y(t.definition.symbol),file:t.definition.relativePath,startLine:t.definition.startLine,endLine:t.definition.endLine,loc:q(t.definition),consumers:t.realConsumers.length,barrelConsumers:t.barrelConsumers,kind:n,definerUsesType:i,confidence:r,reason:o,actionTier:s.actionTier,stalenessKind:s.stalenessKind,recommendation:s.recommendation}}function VP(e,t,n){return e===0?{actionTier:"direct",stalenessKind:"unused-abstraction",recommendation:"Delete the abstraction or wire the missing consumer after checking public/package surfaces."}:t==="class"?{actionTier:"signal",stalenessKind:"one-to-one-class-encapsulation",recommendation:"Treat as weak signal: a one-consumer class may be intentional encapsulation, so inline only after reviewing ownership and state boundaries."}:n?{actionTier:"signal",stalenessKind:"single-consumer-abstraction",recommendation:"Review whether this single-consumer abstraction earns its name or should be folded into the owning feature."}:{actionTier:"signal",stalenessKind:"misplaced-single-consumer-type",recommendation:"Review moving or co-locating the type with its only real consumer; keep it here only if this file owns the public contract."}}function qP(e,t,n,i,r){let o=WP(e,UP(n),i),s=o.map(l=>l.singleton);if(o.length===0)return new Set;let a=Sn(t,s,{semantic:r.semantic}),c=new Set;for(let{singleton:l,classId:u}of o)zP(e,l,a)&&c.add(u);return c}function UP(e){let t=new Map;for(let n of e){let i=$(n.symbol);i&&t.set(Ip(n.relativePath,i),n)}return t}function WP(e,t,n){let i=[];for(let r of n){let o=GP(e,t,r);o&&i.push({singleton:o,classId:r.symbolId})}return i}function GP(e,t,n){if(Np(e,n.relativePath,n.startLine)!=="class")return null;let i=$(n.symbol);if(!i)return null;let r=KP(e,n.relativePath,i);return r?t.get(Ip(n.relativePath,r))??null:null}function zP(e,t,n){let i=$(t.symbol),r=n.get(t.symbolId);return!i||!r?!1:[...r].some(o=>o!==t.relativePath&&!e.isIgnored(o)&&!Ka(e,o,i))}function Ip(e,t){return`${e}\0${t}`}function KP(e,t,n){let i=M(e,t);if(!i)return null;let r=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o=new RegExp(`\\bexport\\s+const\\s+([A-Za-z_$][\\w$]*)\\s*=\\s*new\\s+${r}\\s*\\(`);return i.match(o)?.[1]??null}function JP(e,t){return new Set(e.scopedDefinitions(t).filter(n=>n.isFunctionLike).map(n=>n.relativePath))}function QP(e){let t=pe(e);if("kind"in t)return!1;let n=t.descriptors;if(n.length<2)return!1;let i=n[n.length-1],r=n[n.length-2];return i?.suffix==="type"&&r?.suffix==="type"}function Pp(e){let n=(e.split("/").pop()??"").replace(/\.[^.]+$/,"");return!!(n==="types"||n.endsWith("-types")||n==="models"||n==="schema"||n==="common"||n==="protocol"||n==="proto"||n==="dto"||n==="mod"||n==="contracts"||/(^|\/)types(\/|\.)/.test(e)||/(^|\/)models?(\/|\.)/.test(e)||/(^|\/)proto(?:col)?(\/|\.)/.test(e)||/(^|\/)schema(\/|\.)/.test(e)||/(^|\/)contracts?(\/|\.)/.test(e))}function XP(e,t,n){return!(Pp(e.relativePath)&&t>0||t===0&&n.has(e.relativePath))}function YP(e,t,n,i){let r=Bs(e,t.relativePath),o=$(t.symbol);if(!o)return!1;let s=r.get(o);if(!s||s.size===0)return!1;let a=i.get(t.relativePath);if(!a)return!1;for(let c of s){let l=a.get(c);if(!l)continue;let u=n.get(l.symbolId);if(u){for(let d of u)if(d!==t.relativePath&&!e.isIgnored(d))return!0}}return!1}function Np(e,t,n){let i=M(e,t);if(!i)return"other";let r=i.split(`
527
- `),o=Math.max(0,n-2),s=Math.min(r.length-1,n+2);for(let a=o;a<=s;a++){let l=(r[a]??"").replace(/^\s*\/\/.*$/g,"");if(/\b(?:export\s+)?(?:abstract\s+)?class\s+\w/.test(l))return"class";if(/\b(?:export\s+)?interface\s+\w/.test(l))return"interface";if(/\b(?:export\s+)?type\s+\w/.test(l))return"type";if(/\b(?:export\s+)?(?:const\s+)?enum\s+\w/.test(l))return"enum"}return"other"}function ZP(e,t){let n=M(e,t.relativePath);if(!n)return!1;let i=$(t.symbol);if(!i)return!1;let r=i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o=new RegExp(`\\b${r}\\b`),s=n.split(`
528
- `);for(let a=0;a<s.length;a++)if(!(a>=t.startLine&&a<=t.endLine)&&o.test(s[a]??""))return!0;return!1}function eN(e,t,n){return e===0?{confidence:"high",reason:"unused \u2014 no consumers and defining file has no real usage"}:e===1&&t==="class"?{confidence:"low",reason:"1 consumer + class kind \u2014 likely 1:1 encapsulation, not over-abstraction"}:e===1&&!n?{confidence:"high",reason:"1 consumer + defining file never uses it \u2014 type belongs with its consumer"}:{confidence:"medium",reason:"1 consumer \u2014 single-use abstraction"}}import{basename as ui,extname as Oo}from"path";function Ln(e,t){let{scope:n,maxLoc:i=15,limit:r=30,scanLimit:o}=t??{},s=new T(e),a=cN(s.fileDependencyGraph(n));return We({candidates:()=>nN(s,n,i),orderCandidates:So,scanLimit:o,prepare:c=>({callerFileMap:Sn(s,c,{semantic:t?.semantic!==!1}),reverseFanIn:a}),evaluate:(c,l)=>tN(e,s,c,l),orderResults:(c,l)=>l.callerFanIn-c.callerFanIn||l.loc-c.loc,limit:r})}function tN(e,t,n,i){let r=iN(e,t,n,i.callerFileMap);if(r.length!==1)return null;let o=r[0],s=rN(e,n.symbolId,o);if(!s)return null;let a=oN(t,e,o,n.symbol,s);if(a&&Vn(a.symbol))return null;let{fanIn:c,source:l}=sN(i.callerFileMap,i.reverseFanIn,o,a);if(l==="function"?c<=3:c<=5)return null;let u=uN(e,n,o,a);return{symbol:n.symbol,shortName:y(n.symbol),file:n.relativePath,startLine:n.startLine,endLine:n.endLine,loc:q(n),singleCaller:a?.symbol??"",singleCallerShort:a?.isFunctionLike?y(a.symbol):ui(o),callerFanIn:c,actionTier:u.length>0?"signal":"direct",boundaryEvidence:u}}function nN(e,t,n){return e.productionCallableDefinitions({scope:t,minLoc:2,maxLoc:n,requireFunctionLikeSymbol:!0,excludeRootedSymbols:!0})}function iN(e,t,n,i){let r=ui(n.relativePath,Oo(n.relativePath)),o=[...i.get(n.symbolId)??[]].filter(s=>s!==n.relativePath).filter(s=>ui(s,Oo(s))!==r).filter(s=>{let a=t.fileKind(s);return a!=="barrel"&&a!=="entry"&&a!=="test"});return wo(e,n,o).realConsumers}function rN(e,t,n){return e.get(`SELECT c.start_line, c.end_line
559
+ ${n}`)}function FN(e,t){new T(e).scanSourceReferences({paths:j(e,{includeIgnored:!1}),includeRustAttributeNames:!0,identifierResolution:"permissive"},r=>{r.target.relativePath!==r.sourceFile&&(e.isIgnored(r.target.relativePath)||cf(e,t,r.sourceFile,r.target.relativePath))})}function cf(e,t,n,r){if(e.isIgnored(n)||e.isIgnored(r))return;let i=t.get(n);i||(i=new Set,t.set(n,i)),i.add(r)}function $N(e){let t=new Map;for(let[r,i]of e){if(Nt(r))continue;let o=Pn(r);for(let s of i){if(Nt(s))continue;let a=Pn(s);if(o===a||jc(o,a))continue;let c=`${o}->${a}`;t.set(c,(t.get(c)??0)+1)}}let n=new Map;for(let[r,i]of t)n.set(r,i<=2?"violation":"ok");return n}function AN(e){return e.includes("types")||e.endsWith(".d.ts")}function MN(e,t,n){let r=ti(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.some(i=>i.isUsed)}function jN(e,t,n){let r=he(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.some(i=>i.used)}function ON(e,t,n){let r=he(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.every(i=>i.isTypeOnly===!0)}function BN(e){return e.endsWith(".vue")}function HN(e,t,n){let r=he(e,t).filter(i=>i.sourcePath===n);return r.length===0?!1:r.every(i=>i.kind==="side-effect"||i.kind==="namespace"&&i.usedMembers.length===0&&!i.used)}function Nt(e){let t=J(e);return!!(t==="entry"||t==="barrel"||t==="test"||t==="worker"||VN(Ci.basename(e)))}function VN(e){return!!(e==="index.ts"||e==="index.js"||e==="cli.ts"||e==="main.ts"||e==="main.rs"||e.includes("worker.")||e.includes("postinstall.")||e==="health.ts"||e==="health.js")}import{basename as lf,extname as uf}from"path";function is(e,t,n,r,i,o){let s=new Set;UN(e,t,n,r)&&s.add(i);for(let a of o)a.value&&qN(s,a.label,a.value);return[...s].slice(0,6)}function qN(e,t,n){let r=WN(n);t.endsWith("name")&&GN(r)&&e.add(`${t} has type-guard boundary shape`);for(let i of r){let o=zN.get(i);o&&e.add(`${t} has ${o} term: ${i}`)}}function UN(e,t,n,r){if(n<=0)return!1;let i=Qe(e,t);if(i.length===0)return!1;for(let o=n-1;o>=0&&o>=n-5;o-=1){let s=(i[o]??"").trim();if(s!==""){if(Br(s)===r)return!0;if(!s.startsWith("//")&&!s.startsWith("*")&&!s.startsWith("/*")&&!s.startsWith("@")&&!s.startsWith("#"))return!1}}return!1}function WN(e){return e.replace(/([A-Z])([A-Z][a-z])/g,"$1 $2").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean)}function GN(e){return e.some(t=>JN.has(t))&&e.some(t=>KN.has(t))}var zN=new Map([["access","access policy"],["accessible","access policy"],["adapter","adapter"],["adapters","adapter"],["allow","access policy"],["allowed","access policy"],["animation","animation calculation"],["api","api surface"],["apply","settings/application"],["audit","side-effect boundary"],["auth","authorization"],["authorize","authorization"],["audio","audio side-effect"],["can","access policy"],["capabilities","capability boundary"],["capability","capability boundary"],["boundary","boundary"],["begin","lifecycle"],["bridge","bridge"],["bridges","bridge"],["cache","state cache"],["chase","gameplay action"],["command","command boundary"],["context","context policy"],["cooldown","temporal state"],["cooldowns","temporal state"],["controller","controller"],["controllers","controller"],["diagnostic","diagnostics"],["diagnostics","diagnostics"],["effect","side-effect boundary"],["effects","side-effect boundary"],["energy","gameplay calculation"],["expired","temporal state"],["facade","facade"],["facades","facade"],["fire","gameplay action"],["gateway","gateway"],["gateways","gateway"],["guard","guard"],["guards","guard"],["haptic","haptic side-effect"],["haptics","haptic side-effect"],["head","sequence boundary"],["history","state history"],["input","input boundary"],["jump","gameplay action"],["keyboard","input boundary"],["log","side-effect boundary"],["logger","side-effect boundary"],["lock","coordination boundary"],["middleware","middleware"],["multiplier","gameplay calculation"],["mute","audio side-effect"],["normalize","normalization"],["normalise","normalization"],["normalizer","normalization"],["oscillate","animation calculation"],["oscillation","animation calculation"],["overlap","collision predicate"],["performance","diagnostics"],["permission","access policy"],["permissions","access policy"],["policy","policy"],["pool","state pool"],["pooled","state pool"],["pools","state pool"],["predict","prediction"],["presenter","presenter"],["presenters","presenter"],["projectile","gameplay entity"],["provider","provider boundary"],["providers","provider boundary"],["public","public surface"],["quality","settings/application"],["rate","calculation"],["register","registry"],["registry","registry"],["relay","relay"],["relays","relay"],["reseed","state lifecycle"],["reset","state lifecycle"],["respond","response boundary"],["response","response boundary"],["resolve","resolution"],["resolver","resolution"],["route","route boundary"],["routes","route boundary"],["run","lifecycle"],["sample","diagnostics"],["score","gameplay calculation"],["scope","scope policy"],["scroll","position state"],["scrolled","position state"],["seed","state lifecycle"],["seeded","state lifecycle"],["segment","segment boundary"],["segments","segment boundary"],["setting","settings/application"],["settings","settings/application"],["spawn","gameplay lifecycle"],["spawning","gameplay lifecycle"],["speed","gameplay calculation"],["surface","public surface"],["tail","sequence boundary"],["tick","temporal state"],["transaction","transaction"],["transactional","transaction"],["transform","transformation"],["transformer","transformation"],["translate","translation"],["translator","translation"],["try","fallible action"],["validate","validation"],["validation","validation"],["validator","validation"],["visual","diagnostics"],["window","settings/application"],["socket","transport boundary"],["websocket","transport boundary"]]),JN=new Set(["can","has","is","should"]),KN=new Set(["access","api","auth","collision","expired","input","keyboard","overlap","permission","permissions","policy","projectile","response","route","routes","scope"]);function En(e,t){let{scope:n,maxLoc:r=15,limit:i=30,scanLimit:o}=t??{},s=new T(e);return ze({candidates:()=>oE(s,n,r),orderCandidates:jo,scanLimit:o,prepare:a=>s.calleeMap(a,{semantic:t?.semantic!==!1}),evaluate:(a,c)=>XN(e,a,c.get(a.symbolId)??[]),orderResults:(a,c)=>a.loc-c.loc||a.file.localeCompare(c.file),limit:i})}function XN(e,t,n){let r=iE(n);if(r.size!==1||!ia(e,t.relativePath,t.startLine,t.endLine))return null;let[,i]=[...r.entries()][0],o=QN(e,t,i),s=ZN(e,t),a=o.length>0||s.length>0?"signal":"direct";return{symbol:t.symbol,shortName:b(t.symbol),file:t.relativePath,startLine:t.startLine,endLine:t.endLine,loc:q(t),forwardsTo:i.symbol,forwardsToShort:b(i.symbol),forwardsToFile:i.file,actionTier:a,boundaryEvidence:o,publicFacadeEvidence:s,recommendation:YN(a,o,s)}}function QN(e,t,n){return is(e,t.relativePath,t.startLine,"passthrough","explicit ignore-passthrough comment",[{label:"passthrough name",value:b(t.symbol)},{label:"callee name",value:b(n.symbol)},{label:"passthrough module",value:lf(t.relativePath,uf(t.relativePath))},{label:"callee module",value:lf(n.file,uf(n.file))}])}function YN(e,t,n){if(e==="signal"){if(n.length>0)return`Review the public API before inlining; public-facade evidence: ${n.slice(0,2).join("; ")}.`;let r=t.filter(nE);return r.length>0?`Review the public API before inlining; public-surface evidence: ${r.slice(0,2).join("; ")}.`:`Review the boundary before inlining; boundary evidence: ${t.slice(0,2).join("; ")}.`}return"Inline or remove this passthrough unless an external API or runtime registration depends on the forwarding name."}function ZN(e,t){return eE(e,t)?fr(e,t.relativePath)?["exported passthrough is declared on the package public surface"]:ie(e,t.symbol,t.relativePath)?["exported passthrough matches configured or framework public entry surface"]:[]:[]}function eE(e,t){let n=Qe(e,t.relativePath);if(n.length===0)return!1;let r=n.slice(Math.max(0,t.startLine-2),t.startLine+1).join(`
560
+ `);return sE.test(r)?!0:tE(n,$(t.symbol))}function tE(e,t){if(!t)return!1;let n=new RegExp(`^\\s*export\\s*\\{[^}\\n]*\\b${rE(t)}\\b`);return e.some(r=>n.test(r))}function nE(e){return e.includes("public surface")}function rE(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function iE(e){let t=e.some(r=>ce(r.symbol))?e.filter(r=>ce(r.symbol)):e,n=new Map;for(let r of t)n.has(r.symbol)||n.set(r.symbol,r);return n}function oE(e,t,n){return e.productionCallableDefinitions({scope:t,minLoc:3,maxLoc:n,requireFunctionLikeSymbol:!0,excludeRustTraitImplMembers:!0})}var sE=/^\s*export\s+(?:default\s+)?(?:(?:async\s+)?function\b|(?:const|let|var)\b)/m;function Tn(e,t){let{scope:n,minLoc:r=3,maxLoc:i=80,limit:o=30,includeLowConfidence:s=!1,scanLimit:a}=t??{},c=t?.semantic!==!1,l=new T(e),u=l.scopedDefinitions(n),d=SE(l,n),m={high:0,medium:1,low:2};return ze({candidates:()=>aE(e,l,u,{minLoc:r,maxLoc:i}),orderCandidates:(f,h)=>q(h)-q(f)||f.relativePath.localeCompare(h.relativePath),scanLimit:a,prepare:f=>{let h=uE(f),g=lE(e,l,f,h,{semantic:c}),y=f.filter(S=>{let C=os(e,S,g,h);return C.realConsumers.length<=1&&!C.transitivelyReachable&&df(S,C.realConsumers.length,d)});return{consumerFileMap:g,singletonBackedClassIds:pE(e,l,u,y,{semantic:c}),candidateIndex:h}},evaluate:(f,h)=>{if(h.singletonBackedClassIds.has(f.symbolId))return null;let g=os(e,f,h.consumerFileMap,h.candidateIndex);if(g.transitivelyReachable||g.realConsumers.length>1||g.realConsumers.length===0&&g.barrelConsumers>0||!df(g.definition,g.realConsumers.length,d))return null;let y=dE(e,g);return!s&&y.confidence==="low"?null:y},orderResults:(f,h)=>m[f.confidence]-m[h.confidence]||h.loc-f.loc||f.file.localeCompare(h.file)||f.startLine-h.startLine,limit:o})}function aE(e,t,n,r){return n.filter(i=>i.isTypeLike&&q(i)>=r.minLoc).filter(i=>q(i)<=r.maxLoc).filter(i=>!e.isIgnored(i.relativePath)).filter(i=>J(i.relativePath)!=="test").filter(i=>!ie(e,i.symbol,i.relativePath)).filter(i=>!xE(i.symbol)).filter(i=>!t.hasSuppressionComment(i))}function cE(e,t,n){return Ln(e,t,{semantic:n.semantic,sourceFallback:n.sourceFallback})}function lE(e,t,n,r,i){let o=cE(t,n,{semantic:!1,sourceFallback:!1}),s=n.filter(l=>{let u=os(e,l,o,r);return u.realConsumers.length<=1&&!(u.realConsumers.length>0&&Oc(l.relativePath))}),a=i.semantic&&s.length>0?Mo(o,mt(e,s)):o,c=s.filter(l=>os(e,l,a,r).realConsumers.length<=1);return Mo(a,t.sourceFallbackCallerFiles(c))}function uE(e){let t=new Map;for(let n of e){let r=t.get(n.relativePath);r||(r=new Map,t.set(n.relativePath,r));let i=$(n.symbol);i&&r.set(i,n)}return t}function os(e,t,n,r){let o=[...n.get(t.symbolId)??new Set].filter(u=>u!==t.relativePath&&!e.isIgnored(u)),{realConsumers:s,barrelConsumers:a,importOnlyConsumers:c}=Wo(e,t,o),l=CE(e,t,n,r);return{definition:t,realConsumers:s,barrelConsumers:a+c,transitivelyReachable:l}}function dE(e,t){let n=pf(e,t.definition.relativePath,t.definition.startLine),r=Oc(t.definition.relativePath)?!0:vE(e,t.definition),{confidence:i,reason:o}=RE(t.realConsumers.length,n,r),s=mE(t.realConsumers.length,n,r);return{symbol:t.definition.symbol,shortName:b(t.definition.symbol),file:t.definition.relativePath,startLine:t.definition.startLine,endLine:t.definition.endLine,loc:q(t.definition),consumers:t.realConsumers.length,barrelConsumers:t.barrelConsumers,kind:n,definerUsesType:r,confidence:i,reason:o,actionTier:s.actionTier,stalenessKind:s.stalenessKind,recommendation:s.recommendation}}function mE(e,t,n){return e===0?{actionTier:"direct",stalenessKind:"unused-abstraction",recommendation:"Delete the abstraction or wire the missing consumer after checking public/package surfaces."}:t==="class"?{actionTier:"signal",stalenessKind:"one-to-one-class-encapsulation",recommendation:"Treat as weak signal: a one-consumer class may be intentional encapsulation, so inline only after reviewing ownership and state boundaries."}:n?{actionTier:"signal",stalenessKind:"single-consumer-abstraction",recommendation:"Review whether this single-consumer abstraction earns its name or should be folded into the owning feature."}:{actionTier:"signal",stalenessKind:"misplaced-single-consumer-type",recommendation:"Review moving or co-locating the type with its only real consumer; keep it here only if this file owns the public contract."}}function pE(e,t,n,r,i){let o=gE(e,fE(n),r),s=o.map(l=>l.singleton);if(o.length===0)return new Set;let a=Ln(t,s,{semantic:i.semantic}),c=new Set;for(let{singleton:l,classId:u}of o)yE(e,l,a)&&c.add(u);return c}function fE(e){let t=new Map;for(let n of e){let r=$(n.symbol);r&&t.set(mf(n.relativePath,r),n)}return t}function gE(e,t,n){let r=[];for(let i of n){let o=hE(e,t,i);o&&r.push({singleton:o,classId:i.symbolId})}return r}function hE(e,t,n){if(pf(e,n.relativePath,n.startLine)!=="class")return null;let r=$(n.symbol);if(!r)return null;let i=bE(e,n.relativePath,r);return i?t.get(mf(n.relativePath,i))??null:null}function yE(e,t,n){let r=$(t.symbol),i=n.get(t.symbolId);return!r||!i?!1:[...i].some(o=>o!==t.relativePath&&!e.isIgnored(o)&&!gc(e,o,r))}function mf(e,t){return`${e}\0${t}`}function bE(e,t,n){let r=F(e,t);if(!r)return null;let i=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o=new RegExp(`\\bexport\\s+const\\s+([A-Za-z_$][\\w$]*)\\s*=\\s*new\\s+${i}\\s*\\(`);return r.match(o)?.[1]??null}function SE(e,t){return new Set(e.scopedDefinitions(t).filter(n=>n.isFunctionLike).map(n=>n.relativePath))}function xE(e){let t=ge(e);if("kind"in t)return!1;let n=t.descriptors;if(n.length<2)return!1;let r=n[n.length-1],i=n[n.length-2];return r?.suffix==="type"&&i?.suffix==="type"}function Oc(e){let n=(e.split("/").pop()??"").replace(/\.[^.]+$/,"");return!!(n==="types"||n.endsWith("-types")||n==="models"||n==="schema"||n==="common"||n==="protocol"||n==="proto"||n==="dto"||n==="mod"||n==="contracts"||/(^|\/)types(\/|\.)/.test(e)||/(^|\/)models?(\/|\.)/.test(e)||/(^|\/)proto(?:col)?(\/|\.)/.test(e)||/(^|\/)schema(\/|\.)/.test(e)||/(^|\/)contracts?(\/|\.)/.test(e))}function df(e,t,n){return!(Oc(e.relativePath)&&t>0||t===0&&n.has(e.relativePath))}function CE(e,t,n,r){let i=sa(e,t.relativePath),o=$(t.symbol);if(!o)return!1;let s=i.get(o);if(!s||s.size===0)return!1;let a=r.get(t.relativePath);if(!a)return!1;for(let c of s){let l=a.get(c);if(!l)continue;let u=n.get(l.symbolId);if(u){for(let d of u)if(d!==t.relativePath&&!e.isIgnored(d))return!0}}return!1}function pf(e,t,n){let r=F(e,t);if(!r)return"other";let i=r.split(`
561
+ `),o=Math.max(0,n-2),s=Math.min(i.length-1,n+2);for(let a=o;a<=s;a++){let l=(i[a]??"").replace(/^\s*\/\/.*$/g,"");if(/\b(?:export\s+)?(?:abstract\s+)?class\s+\w/.test(l))return"class";if(/\b(?:export\s+)?interface\s+\w/.test(l))return"interface";if(/\b(?:export\s+)?type\s+\w/.test(l))return"type";if(/\b(?:export\s+)?(?:const\s+)?enum\s+\w/.test(l))return"enum"}return"other"}function vE(e,t){let n=F(e,t.relativePath);if(!n)return!1;let r=$(t.symbol);if(!r)return!1;let i=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o=new RegExp(`\\b${i}\\b`),s=n.split(`
562
+ `);for(let a=0;a<s.length;a++)if(!(a>=t.startLine&&a<=t.endLine)&&o.test(s[a]??""))return!0;return!1}function RE(e,t,n){return e===0?{confidence:"high",reason:"unused \u2014 no consumers and defining file has no real usage"}:e===1&&t==="class"?{confidence:"low",reason:"1 consumer + class kind \u2014 likely 1:1 encapsulation, not over-abstraction"}:e===1&&!n?{confidence:"high",reason:"1 consumer + defining file never uses it \u2014 type belongs with its consumer"}:{confidence:"medium",reason:"1 consumer \u2014 single-use abstraction"}}import{basename as vr,extname as ss}from"path";function _n(e,t){let{scope:n,maxLoc:r=15,limit:i=30,scanLimit:o}=t??{},s=new T(e),a=EE(s.fileDependencyGraph(n));return ze({candidates:()=>wE(s,n,r),orderCandidates:jo,scanLimit:o,prepare:c=>({callerFileMap:Ln(s,c,{semantic:t?.semantic!==!1}),reverseFanIn:a}),evaluate:(c,l)=>kE(e,s,c,l),orderResults:(c,l)=>l.callerFanIn-c.callerFanIn||l.loc-c.loc,limit:i})}function kE(e,t,n,r){let i=LE(e,t,n,r.callerFileMap);if(i.length!==1)return null;let o=i[0],s=IE(e,n.symbolId,o);if(!s)return null;let a=DE(t,e,o,n.symbol,s);if(a&&tr(a.symbol))return null;let{fanIn:c,source:l}=PE(r.callerFileMap,r.reverseFanIn,o,a);if(l==="function"?c<=3:c<=5)return null;let u=_E(e,n,o,a);return{symbol:n.symbol,shortName:b(n.symbol),file:n.relativePath,startLine:n.startLine,endLine:n.endLine,loc:q(n),singleCaller:a?.symbol??"",singleCallerShort:a?.isFunctionLike?b(a.symbol):vr(o),callerFanIn:c,actionTier:u.length>0?"signal":"direct",boundaryEvidence:u}}function wE(e,t,n){return e.productionCallableDefinitions({scope:t,minLoc:2,maxLoc:n,requireFunctionLikeSymbol:!0,excludeRootedSymbols:!0})}function LE(e,t,n,r){let i=vr(n.relativePath,ss(n.relativePath)),o=[...r.get(n.symbolId)??[]].filter(s=>s!==n.relativePath).filter(s=>vr(s,ss(s))!==i).filter(s=>{let a=t.fileKind(s);return a!=="barrel"&&a!=="entry"&&a!=="test"});return Wo(e,n,o).realConsumers}function IE(e,t,n){return e.get(`SELECT c.start_line, c.end_line
529
563
  FROM mentions m
530
564
  JOIN chunks c ON m.chunk_id = c.id
531
565
  JOIN documents d ON c.document_id = d.id
532
566
  WHERE m.symbol_id = ? AND m.role != 1 AND d.relative_path = ?
533
- LIMIT 1`,t,n)}function oN(e,t,n,i,r){let o=e.definitionsForFile(n),s=aN(t,n,i,r.start_line,r.end_line);return je(o,s)}function sN(e,t,n,i){if(i?.isFunctionLike){let r=[...e.get(i.symbolId)??[]].filter(o=>o!==i.relativePath);if(r.length>0)return{fanIn:r.length,source:"function"}}return{fanIn:lN(t,n),source:"file"}}function aN(e,t,n,i,r){let o=$(n);if(!o)return i;let s=vt(e,t).get(o);if(!s||s.length===0)return i;for(let a of s)if(a>=i&&a<=r)return a;return i}function cN(e){let t=new Map;for(let[n,i]of e){t.has(n)||t.set(n,t.get(n)??0);for(let r of i)t.set(r,(t.get(r)??0)+1)}return t}function lN(e,t){let n=e.get(t)??0;if(n>0)return n;let i=ui(t,Oo(t)),r=0;for(let[o,s]of e)o!==t&&ui(o,Oo(o))===i&&s>r&&(r=s);return r}function uN(e,t,n,i){return Mo(e,t.relativePath,t.startLine,"wrapper","explicit ignore-wrapper comment",[{label:"wrapper name",value:y(t.symbol)},{label:"caller name",value:i?.symbol?y(i.symbol):ui(n)},{label:"wrapper path",value:t.relativePath},{label:"caller path",value:n}])}var hN=75e3,bN=5e3,yN=2500;function SN(e){let t=Oe(e);return t.symbols>=hN||t.documents>=bN?yN:void 0}var xN=".scipquery-baseline.json";function jo(e,t){return t&&fN(t)?t:gN(e.config.projectRoot,t??xN)}function yc(e,t={}){let{scope:n}=t,i=SN(e),r=[],o=Rt(e,{scope:n,...ae.dead,scanLimit:i});for(let s of o.symbols)we(e,s.relativePath)||ie(e,s.symbol,s.relativePath)||s.kind==="dead-code"&&r.push(`dead:${s.relativePath}:${s.shortName}`);for(let s of pn(e,{scope:n,...ae.isolated,scanLimit:i}))we(e,s.relativePath)||ie(e,s.symbol,s.relativePath)||r.push(`isolated:${s.relativePath}:${s.shortName}`);for(let s of mn(e,{scope:n}))s.kind==="real"&&r.push(`cycle:${CN(s.path)}`);for(let s of kt(e,{scope:n,...ae.similar,scanLimit:i}))r.push(`similar:${[s.symbolA,s.symbolB].sort().join("|")}`);for(let s of yn(e,{scope:n,...ae.extract,scanLimit:i}))r.push(`extract:${s.relativePath}:${s.shortName}`);for(let s of Ln(e,{scope:n,...ae.wrappers,scanLimit:i}))r.push(`wrapper:${s.file}:${s.shortName}`);for(let s of kn(e,{scope:n,...ae.passthroughs,scanLimit:i}))r.push(`passthrough:${s.file}:${s.shortName}`);for(let s of wn(e,{scope:n,...ae.stale,scanLimit:i}))r.push(`stale:${s.file}:${s.shortName}`);for(let s of Rn(e,{scope:n,...ae.drift}).results)s.kind!=="pattern-deviation"&&r.push(`drift:${s.kind}:${s.file}:${s.dep}`);return[...new Set(r)].sort()}function CN(e){if(e.length===0)return"";let t=0;for(let n=1;n<e.length;n++)e[n]<e[t]&&(t=n);return[...e.slice(t),...e.slice(0,t)].join(">")}function Sc(e,t={}){let n=yc(e,{scope:t.scope}),i=jo(e,t.path);return pN(i,JSON.stringify({version:1,findings:n},null,2)+`
534
- `),{path:i,findingCount:n.length}}function cr(e,t={}){let n=jo(e,t.path);if(!dN(n))throw new Error(`No baseline found at ${n}. Create one with: scip-query health --write-baseline`);let i=JSON.parse(mN(n,"utf-8")),r=new Set(i.findings??[]),o=yc(e,{scope:t.scope}),s=new Set(o);return{baselinePath:n,baselineCount:r.size,current:o,newFindings:o.filter(a=>!r.has(a)),fixedFindings:[...r].filter(a=>!s.has(a))}}var vN=5;function lr(e,t={}){let{base:n="HEAD",minContainment:i=.7,minCallees:r=3,minSiteCoverage:o=.4,maxHelpers:s=Number.POSITIVE_INFINITY,limit:a=20}=t,c=t.semantic!==!1,l=t.diffPlan??lt(e,{base:n}),u={available:l.note!==uc,base:n,changedFiles:l.changedFiles,helpersChecked:0,skipped:[],findings:[]};if(!u.available||l.changedFiles.length===0)return u;let d=new T(e),m=new Set(l.changedFiles),p=new Map(l.renamedFiles.map(L=>[L.to,L.from])),h=PN(e,d,m,n,p);if(h.length===0)return u;let g=h.slice(0,s);h.length>s&&(u.note=`helper scoring capped at ${s} of ${h.length} new symbols`);let b=Co(e,{minCallees:Math.min(3,r),semantic:c}),S=RN(b),x=d.calleeMap(g,{semantic:c}),I=g.map(L=>({def:L,callees:vo((x.get(L.symbolId)??[]).map(C=>C.symbol))}));for(let{def:L,callees:C}of I){let D=y(L.symbol);if(C.size<r){u.skipped.push({helperShortName:D,helperFile:L.relativePath,reason:`fewer than ${r} meaningful callees \u2014 too small to score`});continue}let k=IN(C,S);if(k===0){u.skipped.push({helperShortName:D,helperFile:L.relativePath,reason:"helper callee pattern is all project-wide infrastructure \u2014 too generic to score"});continue}let A=NN(e,L.symbolId);if(A.length===0){u.skipped.push({helperShortName:D,helperFile:L.relativePath,reason:"no references yet \u2014 covered by the new-dead check"});continue}u.helpersChecked+=1;let Se=kN({candidateIndex:S,changed:m,helperCallees:C,helperFile:L.relativePath,helperSymbol:L.symbol,minContainment:i,minSiteCoverage:o,migratedFiles:A});Se.length!==0&&(Se.sort((de,Te)=>Ep(Te.migrationScope)-Ep(de.migrationScope)||Te.containment-de.containment||Te.siteCoverage-de.siteCoverage||de.file.localeCompare(Te.file)),u.findings.push({helperSymbol:L.symbol,helperShortName:D,helperFile:L.relativePath,helperShape:"specific-callee-cluster",helperCalleeCount:C.size,specificHelperCalleeCount:k,migratedFiles:A.sort(),leftovers:Se.slice(0,vN)}))}return u.findings.sort((L,C)=>(C.leftovers[0]?.containment??0)-(L.leftovers[0]?.containment??0)||L.helperFile.localeCompare(C.helperFile)),u.findings=u.findings.slice(0,a),u}function RN(e){let t=new Map,n=new Map;for(let i of e)for(let r of i.callees){t.set(r,(t.get(r)??0)+1);let o=n.get(r);o||(o=[],n.set(r,o)),o.push(i)}return{candidatesByCallee:n,docFreq:t,ubiquityThreshold:Math.max(8,Math.ceil(Math.sqrt(e.length)))}}function kN(e){let t=[],n=wN(e.helperSymbol,e.helperFile,e.migratedFiles),i=new Set;for(let r of e.helperCallees)for(let o of e.candidateIndex.candidatesByCallee.get(r)??[])i.add(o);for(let r of i){if(r.symbol===e.helperSymbol||e.changed.has(r.file)||r.callees.has(e.helperSymbol))continue;let o=Cm(e.helperCallees,r.callees);if(o<e.minContainment)continue;let s=[...e.helperCallees].filter(l=>r.callees.has(l)),a=r.callees.size===0?0:s.length/r.callees.size;if(a<e.minSiteCoverage||!s.some(l=>(e.candidateIndex.docFreq.get(l)??0)<=e.candidateIndex.ubiquityThreshold))continue;let c=LN(n,r.symbol,r.file);t.push({symbol:r.symbol,shortName:y(r.symbol),file:r.file,...c,containment:o,siteCoverage:a,uniqueSiteCalleeCount:Math.max(0,r.callees.size-s.length),sharedCallees:s.map(y).sort()})}return t}function Ep(e){return e==="same-scope"?2:e==="unknown"?1:0}function wN(e,t,n){let i=new Set([...xc(t),...Cc($(e))]);for(let r of n)for(let o of xc(r))i.add(o);return i}function LN(e,t,n){let i=new Set([...xc(n),...Cc($(t))]);if(e.size===0||i.size===0)return{migrationScope:"unknown",migrationScopeReasons:["insufficient path/name tokens to infer migration scope"]};let r=[...i].filter(o=>e.has(o)).sort();return r.length>0?{migrationScope:"same-scope",migrationScopeReasons:[`shares migration-scope token(s): ${r.slice(0,5).join(", ")}`]}:{migrationScope:"possible-subtype",migrationScopeReasons:["no path/name tokens shared with the helper or already migrated files"]}}var DN=new Set(["app","apps","common","component","components","helper","helpers","index","lib","package","packages","page","pages","route","routes","service","services","shared","spec","src","test","tests","util","utils"]);function xc(e){return Cc(e.replace(/\.[^.]+$/,""))}function Cc(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(t=>t.length>1&&!DN.has(t))}function IN(e,t){let n=0;for(let i of e)(t.docFreq.get(i)??0)<=t.ubiquityThreshold&&(n+=1);return n}function PN(e,t,n,i,r){let o=new Map;return t.productionCallableDefinitions({requireFunctionLikeSymbol:!0}).filter(s=>{if(!n.has(s.relativePath))return!1;let a=r.get(s.relativePath)??s.relativePath,c=o.get(a);return c===void 0&&(c=rr(e.config.projectRoot,i,a),o.set(a,c)),c===null||!new RegExp(`\\b${EN(s.leaf)}\\b`).test(c)})}function NN(e,t){return e.all(`SELECT DISTINCT ref_d.relative_path
567
+ LIMIT 1`,t,n)}function DE(e,t,n,r,i){let o=e.definitionsForFile(n),s=NE(t,n,r,i.start_line,i.end_line);return Be(o,s)}function PE(e,t,n,r){if(r?.isFunctionLike){let i=[...e.get(r.symbolId)??[]].filter(o=>o!==r.relativePath);if(i.length>0)return{fanIn:i.length,source:"function"}}return{fanIn:TE(t,n),source:"file"}}function NE(e,t,n,r,i){let o=$(n);if(!o)return r;let s=It(e,t).get(o);if(!s||s.length===0)return r;for(let a of s)if(a>=r&&a<=i)return a;return r}function EE(e){let t=new Map;for(let[n,r]of e){t.has(n)||t.set(n,t.get(n)??0);for(let i of r)t.set(i,(t.get(i)??0)+1)}return t}function TE(e,t){let n=e.get(t)??0;if(n>0)return n;let r=vr(t,ss(t)),i=0;for(let[o,s]of e)o!==t&&vr(o,ss(o))===r&&s>i&&(i=s);return i}function _E(e,t,n,r){return is(e,t.relativePath,t.startLine,"wrapper","explicit ignore-wrapper comment",[{label:"wrapper name",value:b(t.symbol)},{label:"caller name",value:r?.symbol?b(r.symbol):vr(n)},{label:"wrapper path",value:t.relativePath},{label:"caller path",value:n}])}var OE=75e3,BE=5e3,HE=2500;function VE(e){let t=$e(e);return t.symbols>=OE||t.documents>=BE?HE:void 0}var qE=".scipquery-baseline.json";function as(e,t){return t&&ME(t)?t:jE(e.config.projectRoot,t??qE)}function Bc(e,t={}){let{scope:n}=t,r=VE(e),i=[],o=Dt(e,{scope:n,...le.dead,scanLimit:r});for(let s of o.symbols)De(e,s.relativePath)||ie(e,s.symbol,s.relativePath)||s.kind==="dead-code"&&i.push(`dead:${s.relativePath}:${s.shortName}`);for(let s of xn(e,{scope:n,...le.isolated,scanLimit:r}))De(e,s.relativePath)||ie(e,s.symbol,s.relativePath)||i.push(`isolated:${s.relativePath}:${s.shortName}`);for(let s of Sn(e,{scope:n}))s.kind==="real"&&i.push(`cycle:${UE(s.path)}`);for(let s of Pt(e,{scope:n,...le.similar,scanLimit:r}))i.push(`similar:${[s.symbolA,s.symbolB].sort().join("|")}`);for(let s of wn(e,{scope:n,...le.extract,scanLimit:r}))i.push(`extract:${s.relativePath}:${s.shortName}`);for(let s of _n(e,{scope:n,...le.wrappers,scanLimit:r}))i.push(`wrapper:${s.file}:${s.shortName}`);for(let s of En(e,{scope:n,...le.passthroughs,scanLimit:r}))i.push(`passthrough:${s.file}:${s.shortName}`);for(let s of Tn(e,{scope:n,...le.stale,scanLimit:r}))i.push(`stale:${s.file}:${s.shortName}`);for(let s of Nn(e,{scope:n,...le.drift}).results)s.kind!=="pattern-deviation"&&i.push(`drift:${s.kind}:${s.file}:${s.dep}`);return[...new Set(i)].sort()}function UE(e){if(e.length===0)return"";let t=0;for(let n=1;n<e.length;n++)e[n]<e[t]&&(t=n);return[...e.slice(t),...e.slice(0,t)].join(">")}function Hc(e,t={}){let n=Bc(e,{scope:t.scope}),r=as(e,t.path);return AE(r,JSON.stringify({version:1,findings:n},null,2)+`
568
+ `),{path:r,findingCount:n.length}}function vi(e,t={}){let n=as(e,t.path);if(!FE(n))throw new Error(`No baseline found at ${n}. Create one with: scip-query health --write-baseline`);let r=JSON.parse($E(n,"utf-8")),i=new Set(r.findings??[]),o=Bc(e,{scope:t.scope}),s=new Set(o);return{baselinePath:n,baselineCount:i.size,current:o,newFindings:o.filter(a=>!i.has(a)),fixedFindings:[...i].filter(a=>!s.has(a))}}var WE=5;function Ri(e,t={}){let{base:n="HEAD",minContainment:r=.7,minCallees:i=3,minSiteCoverage:o=.4,maxHelpers:s=Number.POSITIVE_INFINITY,limit:a=20,scanLimit:c}=t,l=t.semantic!==!1,u=t.diffPlan??gt(e,{base:n}),d={available:u.note!==Ec,base:n,changedFiles:u.changedFiles,helpersChecked:0,skipped:[],findings:[]};if(!d.available||u.changedFiles.length===0)return d;let m=new T(e),f=new Set(u.changedFiles),h=new Map(u.renamedFiles.map(x=>[x.to,x.from])),g=t.baseContentAt??yi(e.config.projectRoot,n,bi(u)),y=QE(m,f,h,g);if(y.length===0)return d;let S=y.slice(0,s);y.length>s&&(d.note=`helper scoring capped at ${s} of ${y.length} new symbols`);let C=Ho(e,{minCallees:Math.min(3,i),scanLimit:c,semantic:l}),k=m.calleeMap(S,{semantic:l}),D=S.map(x=>({def:x,callees:Vo((k.get(x.symbolId)??[]).map(I=>I.symbol))}));for(let{def:x,callees:I}of D){let M=b(x.symbol);if(I.size<i){d.skipped.push({helperShortName:M,helperFile:x.relativePath,reason:`fewer than ${i} meaningful callees \u2014 too small to score`});continue}let L=XE(I,C);if(L===0){d.skipped.push({helperShortName:M,helperFile:x.relativePath,reason:"helper callee pattern is all project-wide infrastructure \u2014 too generic to score"});continue}let G=YE(e,x.symbolId);if(G.length===0){d.skipped.push({helperShortName:M,helperFile:x.relativePath,reason:"no references yet \u2014 covered by the new-dead check"});continue}d.helpersChecked+=1;let xe=GE({candidateIndex:C,changed:f,helperCallees:I,helperFile:x.relativePath,helperSymbol:x.symbol,minContainment:r,minSiteCoverage:o,migratedFiles:G});xe.length!==0&&(xe.sort((Fe,Ne)=>ff(Ne.migrationScope)-ff(Fe.migrationScope)||Ne.containment-Fe.containment||Ne.siteCoverage-Fe.siteCoverage||Fe.file.localeCompare(Ne.file)),d.findings.push({helperSymbol:x.symbol,helperShortName:M,helperFile:x.relativePath,helperShape:"specific-callee-cluster",helperCalleeCount:I.size,specificHelperCalleeCount:L,migratedFiles:G.sort(),leftovers:xe.slice(0,WE)}))}return d.findings.sort((x,I)=>(I.leftovers[0]?.containment??0)-(x.leftovers[0]?.containment??0)||x.helperFile.localeCompare(I.helperFile)),d.findings=d.findings.slice(0,a),d}function GE(e){let t=[],n=zE(e.helperSymbol,e.helperFile,e.migratedFiles),r=new Set;for(let i of e.helperCallees)for(let o of e.candidateIndex.candidateIndexesByCallee.get(i)??[])r.add(o);for(let i of r){let o=e.candidateIndex.corpus[i];if(o.symbol===e.helperSymbol||e.changed.has(o.file)||o.callees.has(e.helperSymbol))continue;let s=tp(e.helperCallees,o.callees);if(s<e.minContainment)continue;let a=[...e.helperCallees].filter(u=>o.callees.has(u)),c=o.callees.size===0?0:a.length/o.callees.size;if(c<e.minSiteCoverage||!a.some(u=>(e.candidateIndex.docFreq.get(u)??0)<=e.candidateIndex.ubiquityThreshold))continue;let l=JE(n,o.symbol,o.file);t.push({symbol:o.symbol,shortName:b(o.symbol),file:o.file,...l,containment:s,siteCoverage:c,uniqueSiteCalleeCount:Math.max(0,o.callees.size-a.length),sharedCallees:a.map(b).sort()})}return t}function ff(e){return e==="same-scope"?2:e==="unknown"?1:0}function zE(e,t,n){let r=new Set([...Vc(t),...qc($(e))]);for(let i of n)for(let o of Vc(i))r.add(o);return r}function JE(e,t,n){let r=new Set([...Vc(n),...qc($(t))]);if(e.size===0||r.size===0)return{migrationScope:"unknown",migrationScopeReasons:["insufficient path/name tokens to infer migration scope"]};let i=[...r].filter(o=>e.has(o)).sort();return i.length>0?{migrationScope:"same-scope",migrationScopeReasons:[`shares migration-scope token(s): ${i.slice(0,5).join(", ")}`]}:{migrationScope:"possible-subtype",migrationScopeReasons:["no path/name tokens shared with the helper or already migrated files"]}}var KE=new Set(["app","apps","common","component","components","helper","helpers","index","lib","package","packages","page","pages","route","routes","service","services","shared","spec","src","test","tests","util","utils"]);function Vc(e){return qc(e.replace(/\.[^.]+$/,""))}function qc(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(t=>t.length>1&&!KE.has(t))}function XE(e,t){let n=0;for(let r of e)(t.docFreq.get(r)??0)<=t.ubiquityThreshold&&(n+=1);return n}function QE(e,t,n,r){return e.productionCallableDefinitions({requireFunctionLikeSymbol:!0}).filter(i=>{if(!t.has(i.relativePath))return!1;let o=n.get(i.relativePath)??i.relativePath,s=r(o);return s===null||!new RegExp(`\\b${ZE(i.leaf)}\\b`).test(s)})}function YE(e,t){return e.all(`SELECT DISTINCT ref_d.relative_path
535
569
  FROM mentions m
536
570
  JOIN chunks c ON m.chunk_id = c.id
537
571
  JOIN documents ref_d ON c.document_id = ref_d.id
538
572
  WHERE m.symbol_id = ?
539
573
  AND m.role != 1
540
- ${e.pathExclusionsFor("ref_d")}`,t).map(i=>i.relative_path)}function EN(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ur(e,t={}){let{scope:n,limit:i=30,scanLimit:r}=t,o=t.files===void 0?null:new Set(t.files),s=new T(e);return We({candidates:()=>s.productionCallableDefinitions({scope:n,minLoc:2,excludeRootedSymbols:!0,requireFunctionLikeSymbol:!0}).filter(a=>TN(a.relativePath)&&(o===null||o.has(a.relativePath))),scanLimit:r,evaluate:a=>{let c=oe(e,a.relativePath)?.callables.find(d=>d.startLine===a.startLine&&d.endLine===a.endLine);if(!c||c.params.length===0||c.params.some(d=>!d.simple)||c.paramsEndLine>=c.endLine)return null;let l=vt(e,a.relativePath),u=[];for(let d=c.params.length-1;d>=0;d--){let m=c.params[d];if(m.name===""||m.name.startsWith("_")||_N(l.get(m.name),c.paramsEndLine,c.endLine))break;u.unshift(m.name)}return u.length===0?null:{symbol:a.symbol,shortName:y(a.symbol),file:a.relativePath,startLine:a.startLine,endLine:a.endLine,paramCount:c.paramCount,unusedTrailing:u}},orderResults:(a,c)=>c.unusedTrailing.length-a.unusedTrailing.length||a.file.localeCompare(c.file)||a.startLine-c.startLine,limit:i})}function TN(e){let t=W(e);return t==="typescript"||t==="tsx"||t==="javascript"}function _N(e,t,n){return e?e.some(i=>i>t&&i<=n):!1}var Ho=["echo","incomplete-migration","co-change-partner","doc-reference","unused-params","new-dead","baseline"];function dr(e,t={}){let n=t.base??"HEAD",{minTogether:i=6,minConfidence:r=.6,maxEchoChecks:o=Number.POSITIVE_INFINITY,maxHelpers:s=Number.POSITIVE_INFINITY,minSimilarity:a=.8}=t,c=new Set(t.skip??[]),l=lt(e,{base:n}),u=ci(e,{base:n,plan:l}),d=u.changedFiles,m=new Set(d),p=new Set(l.changedFileLines),h=oE(e.config.projectRoot,n,l),g={base:n,changedFiles:d,changedSymbols:u.changedSymbols.length,checksRun:[],skipped:[],suppressed:[],findings:[],rootCauseGroups:[],note:u.summary.note};if(d.length===0)return g;let b=(S,x)=>{if(c.has(S)){g.skipped.push({check:S,reason:"skipped via --skip"});return}x()};return b("echo",()=>BN(e,u.changedSymbols,m,h,o,a,g)),b("incomplete-migration",()=>JN(e,n,l,s,g)),b("co-change-partner",()=>QN(e,m,i,r,g)),b("doc-reference",()=>tE(e,m,p,l.changedRanges,g)),b("unused-params",()=>nE(e,d,g)),b("new-dead",()=>iE(e,u.changedSymbols,h,g)),b("baseline",()=>cE(e,g)),ON(g,e.config.suppressions??[]),g.rootCauseGroups=FN(g.findings),g}function FN(e){let t=new Map;for(let n of e){let i=n.groupKey??`${n.check}:${n.id}`,r=t.get(i);r||(r={groupKey:i,check:n.check,severity:n.severity,actionTier:n.actionTier,sourceAnalyzer:n.sourceAnalyzer,rootCauseKey:n.rootCauseKey,count:0,findingIds:[],files:new Set,relatedFiles:new Set,message:n.message,remediation:n.remediation},t.set(i,r)),r.count+=1,r.findingIds.push(n.id),r.severity=AN(r.severity,n.severity),r.actionTier=MN(r.actionTier,n.actionTier),n.file&&r.files.add(n.file);for(let o of n.relatedFiles??[])r.relatedFiles.add(o)}return[...t.values()].map(n=>({...n,files:[...n.files].sort(),relatedFiles:[...n.relatedFiles].sort()})).sort((n,i)=>i.count-n.count||Bo(i.severity)-Bo(n.severity)||n.groupKey.localeCompare(i.groupKey))}function AN(e,t){return Bo(t)>Bo(e)?t:e}function Bo(e){return e==="error"?2:e==="warning"?1:0}function MN(e,t){return e?t&&Tp(t)>Tp(e)?t:e:t}function Tp(e){return e==="direct"?2:e==="signal"?1:0}function ON(e,t){if(t.length===0||e.findings.length===0)return;let n=[];for(let i of e.findings){let r=t.find(o=>jN(o,i));r?e.suppressed.push({finding:i,suppression:r}):n.push(i)}e.findings=n}function jN(e,t){return!e.reason||e.reason.trim()===""||e.expiresAt&&Date.parse(e.expiresAt)<=Date.now()||e.id&&e.id!==t.id||e.check&&e.check!==t.check||e.file&&e.file!==t.file?!1:!!(e.id||e.check)}function di(e,t){e.findings.push({...t,suppressionHint:`scip-query: ignore ${t.check} ${t.id} -- <reason>`})}function BN(e,t,n,i,r,o,s){s.checksRun.push("echo");for(let a of t.slice(0,r)){if(i(a))continue;let c=Zi(e,a.symbol,{minSimilarity:o,limit:5}),l=[];for(let p of c){let h=p.fileA===a.file?p.fileB:p.fileA,g=p.fileA===a.file?p.shortNameB:p.shortNameA,b=p.fileA===a.file?p.symbolB:p.symbolA;n.has(h)||l.push({otherFile:h,otherShort:g,otherSymbol:b,similarity:p.similarity,similarityBasis:p.similarityBasis??"callees",sharedEvidence:p.sharedCallees})}if(l.length===0)continue;let u=l[0],d=Dn("echo",a.symbol,a.file,...l.map(p=>`${p.otherSymbol}|${p.otherFile}`).sort()),m=HN(a,l);di(s,{id:d,groupKey:d,actionTier:m,check:"echo",severity:"warning",evidence:"heuristic",confidence:u.similarity,file:a.file,symbol:a.symbol,relatedFiles:[...new Set(l.map(p=>p.otherFile))].sort(),message:GN(a,l),why:zN(a,l),remediation:KN(m,a.shortName,u.otherShort)})}t.length>r&&s.skipped.push({check:"echo",reason:`echo check capped at ${r} of ${t.length} changed symbols`})}function HN(e,t){return t.some(i=>VN(e.symbol,i))?"direct":"signal"}function VN(e,t){if(t.similarityBasis!=="source-tokens"||t.similarity<.98||t.sharedEvidence.length>8)return!1;let n=$(e),i=$(t.otherSymbol);return!n||!i?!1:n===i?!0:WN(t.sharedEvidence)?!1:qN(n,i)}function qN(e,t){let n=_p(e),i=_p(t);if(n.length===0||i.length===0)return!1;let r=new Set(i),o=n.filter(s=>r.has(s)).length;return o>=2&&o/Math.min(n.length,i.length)>=.5}function _p(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).map(t=>t.toLowerCase()).filter(t=>t.length>=2)}var UN=new Set(["bytes","crypto","hex","num","random","secret","to","token"]);function WN(e){return e.length>=3&&e.every(t=>UN.has(t.toLowerCase()))}function GN(e,t){let n=t[0],i=Math.round(n.similarity*100);return t.length===1?`${e.shortName} (${e.file}) is ${i}% similar to established ${n.otherShort} (${n.otherFile})`:`${e.shortName} (${e.file}) resembles ${t.length} established symbol(s); strongest is ${i}% similar to ${n.otherShort} (${n.otherFile})`}function zN(e,t){let n=[`${e.shortName} was changed in this diff.`];for(let i of t.slice(0,3))n.push(`${i.otherShort} is outside this diff and scored ${Math.round(i.similarity*100)}% similar by ${i.similarityBasis} evidence.`),n.push(`Shared evidence: ${i.sharedEvidence.slice(0,5).join(", ")||"(none listed)"}.`);return t.length>3&&n.push(`${t.length-3} additional similar match(es) grouped into this finding.`),n}function KN(e,t,n){return e==="direct"?`Extract or reuse the shared behavior with ${n}, or keep the duplicate with a suppression reason.`:`Review whether ${t} is intentionally parallel to the established implementation(s); extract shared behavior only if the product semantics match.`}function JN(e,t,n,i,r){let o=lr(e,{base:t,maxHelpers:i,diffPlan:n});if(!o.available){r.skipped.push({check:"incomplete-migration",reason:"no git history"});return}r.checksRun.push("incomplete-migration"),o.note&&r.skipped.push({check:"incomplete-migration",reason:o.note});for(let s of o.findings){let a=s.leftovers.map(p=>`${p.shortName} (${p.file}, ${Math.round(p.containment*100)}% helper / ${Math.round(p.siteCoverage*100)}% site, ${p.migrationScope})`).join(", "),c=s.leftovers.map(p=>`${p.shortName}: ${p.migrationScope} (${p.migrationScopeReasons[0]})`).join("; "),l=[...s.migratedFiles,...s.leftovers.map(p=>p.file)],u=s.leftovers.length===0?void 0:Math.max(...s.leftovers.map(p=>Math.min(p.containment,p.siteCoverage))),d=s.leftovers.some(p=>p.migrationScope==="possible-subtype"),m=Dn("incomplete-migration",s.helperSymbol,s.helperFile,l.join("|"));di(r,{id:m,check:"incomplete-migration",severity:"warning",evidence:"heuristic",confidence:u,file:s.helperFile,symbol:s.helperSymbol,relatedFiles:l,message:`new helper ${s.helperShortName} (${s.helperFile}) is wired into ${s.migratedFiles.length} file(s), but ${s.leftovers.length} similar un-migrated site(s) remain: ${a}`,why:[`${s.helperShortName} is new in this diff and already referenced by ${s.migratedFiles.join(", ")}.`,`Helper shape: ${s.helperShape}; ${s.specificHelperCalleeCount}/${s.helperCalleeCount} helper callees are specific enough to score.`,`Unchanged site(s) still contain the helper's callee pattern: ${a}.`,`Migration scope hints: ${c}.`],remediation:d?`Migrate same-scope sites to ${s.helperShortName}; review possible subtype/variant sites before applying the helper.`:`Migrate the remaining sites to ${s.helperShortName}, or confirm they are intentionally different.`})}}function QN(e,t,n,i,r){let o=tp(e,t,{minTogether:n,minConfidence:0,maxFilesPerCommit:20});if(!o){r.skipped.push({check:"co-change-partner",reason:"no git history"});return}r.checksRun.push("co-change-partner");let s=new Set,a;for(let c of o){let l=t.has(c.fileA),u=t.has(c.fileB);if(l===u)continue;let d=l?c.fileA:c.fileB,m=l?c.fileB:c.fileA,p=l?c.changesA:c.changesB,h=p>0?c.together/p:0;if(h<i||sc(m)||sc(d)||!$p(`${e.config.projectRoot}/${m}`))continue;let g=`${d}|${m}`;if(s.has(g))continue;s.add(g);let b=Dn("co-change-partner",d,m,String(c.together)),S=ac(d,m),x=cc({fileA:d,fileB:m,together:c.together,confidence:h,commitScope:c.commitScope,recency:c.recency,subjectContext:c.subjectContext},S,(a??=lc(e))(d,m)),I=[d,m].sort().join("|");r.findings.push({id:b,check:"co-change-partner",severity:"warning",evidence:"change-graph",actionTier:"signal",groupKey:`co-change-partner:${I}`,confidence:h,file:d,relatedFiles:[m],sourceAnalyzer:"co-change",rootCauseKey:I,partnerClass:S.partnerClass,partnerClassReasons:S.reasons,commitScope:c.commitScope,recency:c.recency,focusedTogether:c.focusedTogether,broadTogether:c.broadTogether,broadCommitRatio:c.broadCommitRatio,lastTogetherAt:c.lastTogetherAt,recentTogether:c.recentTogether,subjectContext:c.subjectContext,...x?{declaredCouplingSuggestion:x}:{},message:`${d} changed, but ${m} did not \u2014 they change together ${c.together}x (${Math.round(h*100)}% of the time)`,why:[`${d} is in this diff and ${m} is not.`,`Git history shows ${c.together} co-change(s), which is ${Math.round(h*100)}% of changes to the edited side.`,`History context: ${XN(c)}.`,`Subject context: ${YN(c.subjectContext)}.`,...ZN(c),`Partner class: ${S.partnerClass} (${S.reasons.join("; ")}).`],remediation:x?`Update ${m} alongside this change, declare the coupling "${x.name}", or confirm the coupling no longer holds.`:`Update ${m} alongside this change, or confirm the coupling no longer holds.`})}}function XN(e){return`${e.commitScope}/${e.recency}; ${e.focusedTogether} focused, ${e.broadTogether} broad-sweep (${Math.round(e.broadCommitRatio*100)}% broad), ${e.recentTogether} recent, last ${eE(e.lastTogetherAt)}`}function YN(e){let t=e.subjectLabels.length>0?e.subjectLabels.slice(0,5).join(", "):"none inferred",n=e.issueRefs.length>0?e.issueRefs.slice(0,5).join(", "):"none",i=e.sampleSubjects.length>0?e.sampleSubjects.slice(0,3).map(r=>`"${r}"`).join("; "):"none";return`labels ${t}; refs ${n}; samples ${i}; external issue/PR labels ${e.externalIssueLabelStatus}`}function ZN(e){let t=[];return e.commitScope==="broad-sweep"&&t.push("Broad-sweep history is weaker than focused co-edits; confirm this is a real coordination contract."),e.recency==="stale"&&t.push("The pair has no co-change in the recent history window; confirm the coupling still holds."),t}function eE(e){return e<=0?"unknown":new Date(e*1e3).toISOString().slice(0,10)}function tE(e,t,n,i,r){r.checksRun.push("doc-reference");let o=li.referenceTargets(e,t,i);if(o.size!==0)for(let s of xp(e,o)){if(n.has(s.doc))continue;let a=s.citedClaims.length>0?s.citedClaims:li.citationContexts(e,s.doc,s.cited),c=li.classifyCitation(a),l=Dn("doc-reference",s.doc,s.cited.join("|"));di(r,{id:l,check:"doc-reference",severity:"warning",evidence:"change-graph",actionTier:c.actionTier,confidence:1,file:s.doc,relatedFiles:s.cited,citationKind:c.citationKind,citationKindReasons:c.reasons,citedClaims:a,message:`${s.doc} cites ${s.cited.join(", ")} as ${li.citationKindLabel(c.citationKind)} \u2014 changed in this diff, doc untouched`,why:[`${s.cited.join(", ")} changed in this diff.`,`${s.doc} cites the changed file(s) but was not updated in the same diff.`,...c.reasons.map(u=>`Citation kind evidence: ${u}`)],remediation:li.citationRemediation(c.citationKind,s.doc)})}}function nE(e,t,n){n.checksRun.push("unused-params");for(let i of ur(e,{files:t,limit:50})){let r=Dn("unused-params",i.symbol,i.file,i.unusedTrailing.join("|"));di(n,{id:r,check:"unused-params",severity:"warning",evidence:"heuristic",confidence:.85,file:i.file,startLine:i.startLine,endLine:i.endLine,symbol:i.symbol,message:`${i.shortName} (${i.file}) has trailing unused parameter(s): ${i.unusedTrailing.join(", ")}`,why:[`${i.shortName} is in a changed file.`,`The trailing parameter(s) ${i.unusedTrailing.join(", ")} are not referenced in the function body.`],remediation:"Drop the unused trailing parameters and their call-site arguments."})}}function iE(e,t,n,i){i.checksRun.push("new-dead");let r=new T(e);for(let o of t){if(n(o)||o.fanIn>0||r.fileKind(o.file)==="test"||we(e,o.file)||ie(e,o.symbol,o.file)||rE(o.symbol))continue;let s=Dn("new-dead",o.symbol,o.file);di(i,{id:s,check:"new-dead",severity:"warning",evidence:"graph-fact",confidence:.9,file:o.file,symbol:o.symbol,message:`${o.shortName} (${o.file}) was changed but has zero indexed consumers`,why:[`${o.shortName} is a changed production symbol.`,"The index reports zero consumers for this symbol.","The symbol is not in a detected entry surface or configured live root."],remediation:"Wire it up, or remove it before it becomes permanent dead code."})}}function rE(e){if(Z(e)!=="type")return!1;let t=$(e);return t.startsWith("_Assert")||t.startsWith("Assert")}function oE(e,t,n){let i=new Map(n.renamedFiles.map(o=>[o.to,o.from])),r=new Map;return o=>{let s=i.get(o.file)??o.file,a=$(o.symbol);if(!a)return!1;let c=r.get(s);return c===void 0&&(c=rr(e,t,s),r.set(s,c)),c!==null&&sE(c,a)}}function sE(e,t){return new RegExp(`\\b${aE(t)}\\b`).test(e)}function aE(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function cE(e,t){if(!$p(jo(e))){t.skipped.push({check:"baseline",reason:"no .scipquery-baseline.json \u2014 run health --write-baseline to enable"});return}t.checksRun.push("baseline");let n=cr(e);for(let i of n.newFindings){let r=fp(i),o=Dn("baseline",i);di(t,{id:o,groupKey:`baseline:${r.sourceAnalyzer}:${r.rootCauseKey}`,check:"baseline",severity:"error",evidence:"baseline",actionTier:r.actionTier,confidence:1,file:r.file,relatedFiles:r.relatedFiles.length>0?r.relatedFiles:void 0,sourceAnalyzer:r.sourceAnalyzer,rootCauseKey:r.rootCauseKey,message:`new ${r.label} vs committed baseline: ${i}`,why:["A committed health baseline exists.","The current health result contains a finding not present in that baseline.",`Underlying analyzer: ${r.sourceAnalyzer}.`,`Inherited action tier: ${r.actionTier}.`,`Root cause key: ${r.rootCauseKey}.`,...r.why],remediation:r.remediation})}}function Dn(e,...t){return`SQ${$N("sha256").update([e,...t].join("\0")).digest("hex").slice(0,12).toUpperCase()}`}var lE=.7,Fp=.62,Ap=.45;function vc(e,t={}){let{windowCommits:n=100,limit:i=30,scope:r,scanLimit:o}=t,s=Zm(e);if(!s)return{available:!1,windowCommits:n,findings:[]};if(i<=0)return{available:!0,windowCommits:n,findings:[]};let c=uE(e,{limit:i,minSimilarity:t.minSimilarity,scanLimit:o,scope:r,semantic:t.semantic}).map(u=>hE(u,s,n)).filter(u=>u!==null);c.sort((u,d)=>(u.kind===d.kind?0:u.kind==="echo"?-1:1)||d.similarity-u.similarity||u.echoFile.localeCompare(d.echoFile)||u.echoSymbol.localeCompare(d.echoSymbol)||u.domain.localeCompare(d.domain));let l=c.slice(0,i).map(bE);return{available:!0,windowCommits:n,findings:l,rootCauseGroups:yE(l)}}function uE(e,t){let n=xE(t.limit);return[...dE(e,{scope:t.scope,minSimilarity:t.minSimilarity??lE,limit:n,scanLimit:t.scanLimit,semantic:t.semantic}),...mE(e,{scope:t.scope,minSimilarity:t.minSimilarity??Fp,limit:n,scanLimit:t.scanLimit}),...pE(e,{scope:t.scope,minSimilarity:t.minSimilarity??Ap,limit:n,scanLimit:t.scanLimit}),...fE(e,{scope:t.scope,minSimilarity:t.minSimilarity??Fp,limit:n,scanLimit:t.scanLimit}),...gE(e,{scope:t.scope,minSimilarity:t.minSimilarity??Ap,limit:n,scanLimit:t.scanLimit})]}function dE(e,t){return kt(e,{scope:t.scope,minSimilarity:t.minSimilarity,limit:t.limit,crossFileOnly:!0,scanLimit:t.scanLimit,semantic:t.semantic}).map(n=>({domain:"callable",basis:n.similarityBasis??"callees",symbolA:n.shortNameA,fileA:n.fileA,symbolB:n.shortNameB,fileB:n.fileB,similarity:n.similarity,sharedEvidence:n.sharedCallees,sharedCallees:n.sharedCallees}))}function mE(e,t){return qo(e,t,{query:fn,domain:"react-component",basis:"jsx-structure",symbolA:n=>n.componentA,symbolB:n=>n.componentB,evidenceBuckets:n=>[["component",n.sharedComponents],["tag",n.sharedNativeTags],["prop",n.sharedProps],["event",n.sharedEvents],["binding",n.sharedBindings]]})}function qo(e,t,n){return n.query(e,t).filter(i=>i.fileA!==i.fileB).map(i=>({domain:n.domain,basis:n.basis,symbolA:n.symbolA(i),fileA:i.fileA,symbolB:n.symbolB(i),fileB:i.fileB,similarity:i.similarity,sharedEvidence:CE(...n.evidenceBuckets(i)),sharedCallees:[]}))}function pE(e,t){return qo(e,t,{query:gn,domain:"react-hook",basis:"react-behavior",symbolA:n=>n.componentA,symbolB:n=>n.componentB,evidenceBuckets:n=>[["hook",n.sharedHooks],["react-hook",n.sharedReactHooks],["effect",n.sharedEffects],["state",n.sharedState],["request",n.sharedRequests],["handler",n.sharedHandlers],["action",n.sharedHandlerVerbs]]})}function fE(e,t){return qo(e,t,{query:hn,domain:"vue-component",basis:"vue-template",symbolA:n=>Vo(n.fileA),symbolB:n=>Vo(n.fileB),evidenceBuckets:n=>[["component",n.sharedComponents],["prop",n.sharedProps],["event",n.sharedEvents],["directive",n.sharedDirectives],["slot",n.sharedSlots],["identifier",n.sharedIdentifiers]]})}function gE(e,t){return qo(e,t,{query:bn,domain:"vue-composable",basis:"vue-behavior",symbolA:n=>Vo(n.fileA),symbolB:n=>Vo(n.fileB),evidenceBuckets:n=>[["composable",n.sharedComposables],["store",n.sharedStores],["reactivity",n.sharedReactivity],["lifecycle",n.sharedLifecycle],["request",n.sharedRequests],["function",n.sharedFunctions],["action",n.sharedFunctionVerbs],["binding",n.sharedBindings],["template-event",n.sharedTemplateEvents]]})}function hE(e,t,n){let i=t.get(e.fileA)?.commitsAgo??null,r=t.get(e.fileB)?.commitsAgo??null,o=i!==null&&i<=n,s=r!==null&&r<=n;if(!o&&!s)return null;if(o&&s){let a=(i??0)<=(r??0);return{kind:"twin",domain:e.domain,basis:e.basis,echoSymbol:a?e.symbolA:e.symbolB,echoFile:a?e.fileA:e.fileB,echoAgeCommits:(a?i:r)??0,establishedSymbol:a?e.symbolB:e.symbolA,establishedFile:a?e.fileB:e.fileA,establishedAgeCommits:a?r:i,similarity:e.similarity,sharedEvidence:e.sharedEvidence,sharedCallees:e.sharedCallees}}return{kind:"echo",domain:e.domain,basis:e.basis,echoSymbol:o?e.symbolA:e.symbolB,echoFile:o?e.fileA:e.fileB,echoAgeCommits:(o?i:r)??0,establishedSymbol:o?e.symbolB:e.symbolA,establishedFile:o?e.fileB:e.fileA,establishedAgeCommits:o?r:i,similarity:e.similarity,sharedEvidence:e.sharedEvidence,sharedCallees:e.sharedCallees}}function bE(e){let t=Mp(e);return{...e,rootCauseKey:t,groupKey:`recent-duplicate:${t}`}}function Mp(e){if(e.kind==="echo")return["echo",e.domain,e.basis,e.establishedSymbol].join(":");let t=e.sharedEvidence.slice().sort().join("|"),n=[e.echoSymbol,e.establishedSymbol].sort().join("|");return["twin",e.domain,e.basis,t||n].join(":")}function yE(e){let t=new Map;for(let[n,i]of e.entries()){let r=i.rootCauseKey??Mp(i),o=i.groupKey??`recent-duplicate:${r}`,s=t.get(o);s||(s={groupKey:o,rootCauseKey:r,kind:i.kind,domain:i.domain,basis:i.basis,count:0,maxSimilarity:i.similarity,findingIndexes:[],echoFiles:new Set,establishedFile:i.kind==="echo"?i.establishedFile:void 0,establishedSymbol:i.kind==="echo"?i.establishedSymbol:void 0,relatedFiles:new Set,sharedEvidence:new Set,recommendation:SE(i)},t.set(o,s)),s.count+=1,s.maxSimilarity=Math.max(s.maxSimilarity,i.similarity),s.findingIndexes.push(n),s.echoFiles.add(i.echoFile),s.relatedFiles.add(i.echoFile),s.relatedFiles.add(i.establishedFile);for(let a of i.sharedEvidence)s.sharedEvidence.add(a)}return[...t.values()].map(n=>({...n,echoFiles:[...n.echoFiles].sort(),relatedFiles:[...n.relatedFiles].sort(),sharedEvidence:[...n.sharedEvidence].sort().slice(0,16)})).sort((n,i)=>i.count-n.count||i.maxSimilarity-n.maxSimilarity||n.groupKey.localeCompare(i.groupKey))}function SE(e){return e.kind==="echo"?"Review the established side once, then migrate or delete every echo in this group.":"Pick one owner for the new twins and consolidate the group before the copies diverge."}function xE(e){return Number.isFinite(e)?e*5:Number.POSITIVE_INFINITY}function CE(...e){let t=[],n=new Set;for(let[i,r]of e)for(let o of r){let s=`${i}:${o}`;n.has(s)||(n.add(s),t.push(s))}return t}function Vo(e){return(e.split("/").pop()??e).replace(/\.[^.]+$/,"")}var vE=Y("suppression-inventory",{clearGroups:["whole-project"]});function Uo(e){return vE.get(e,()=>RE(e))}function RE(e){let t={dead:0,stale:0,wrapper:0,passthrough:0,drift:0,extract:0,similar:0,uncategorized:0},n=new Map,i=0;for(let r of De(e)){let o=M(e,r);if(!(!o||!o.includes("scip-query")))for(let s of o.split(/\r?\n/)){let a=Li(s);if(a===null)continue;i+=1,n.set(r,(n.get(r)??0)+1);let c=kE(a);t[c]+=1}}return{total:i,byCategory:t,byFile:n}}function kE(e){if(!e)return"uncategorized";let t=e.toLowerCase();return t==="dead-code"?"dead":t}import{readFileSync as wE}from"fs";import{join as LE}from"path";function mr(e,t,n={}){let i=B(e,t);if(!i)return null;let r=new T(e),o=EE(IE(e,i.relativePath,i.startLine,i.endLine),DE(e,i.relativePath)),s=i.endLine-i.startLine+1,c=r.calleeMap([i],{additive:!0,semantic:n.semantic}).get(i.symbolId)??[],l=new Set(c.map(u=>u.symbol));return{symbol:i.symbol,shortName:y(i.symbol),relativePath:i.relativePath,startLine:i.startLine,endLine:i.endLine,loc:s,branches:o,cyclomaticEstimate:o+1,calleeCount:l.size,fanIn:PE(e,i.symbolId),fanOut:NE(c,i.relativePath)}}function DE(e,t){return e.get("SELECT language FROM documents WHERE relative_path = ?",t)?.language??"unknown"}function IE(e,t,n,i){try{return wE(LE(e.config.projectRoot,t),"utf-8").split(`
541
- `).slice(n,i+1).join(`
542
- `)}catch{return""}}function PE(e,t){return e.get(`SELECT COUNT(DISTINCT c.document_id) AS c
574
+ ${e.pathExclusionsFor("ref_d")}`,t).map(r=>r.relative_path)}function ZE(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ki(e,t={}){let{scope:n,limit:r=30,scanLimit:i}=t,o=t.files===void 0?null:new Set(t.files),s=new T(e);return ze({candidates:()=>s.productionCallableDefinitions({scope:n,minLoc:2,excludeRootedSymbols:!0,requireFunctionLikeSymbol:!0}).filter(a=>eT(a.relativePath)&&(o===null||o.has(a.relativePath))),scanLimit:i,evaluate:a=>{let c=ae(e,a.relativePath)?.callables.find(d=>d.startLine===a.startLine&&d.endLine===a.endLine);if(!c||c.params.length===0||c.params.some(d=>!d.simple)||c.paramsEndLine>=c.endLine)return null;let l=It(e,a.relativePath),u=[];for(let d=c.params.length-1;d>=0;d--){let m=c.params[d];if(m.name===""||m.name.startsWith("_")||tT(l.get(m.name),c.paramsEndLine,c.endLine))break;u.unshift(m.name)}return u.length===0?null:{symbol:a.symbol,shortName:b(a.symbol),file:a.relativePath,startLine:a.startLine,endLine:a.endLine,paramCount:c.paramCount,unusedTrailing:u}},orderResults:(a,c)=>c.unusedTrailing.length-a.unusedTrailing.length||a.file.localeCompare(c.file)||a.startLine-c.startLine,limit:r})}function eT(e){let t=W(e);return t==="typescript"||t==="tsx"||t==="javascript"}function tT(e,t,n){return e?e.some(r=>r>t&&r<=n):!1}var ls=["echo","incomplete-migration","co-change-partner","doc-reference","unused-params","new-dead","baseline"];function wi(e,t={}){let n=t.base??"HEAD",{minTogether:r=6,minConfidence:i=.6,maxEchoChecks:o=Number.POSITIVE_INFINITY,maxHelpers:s=Number.POSITIVE_INFINITY,minSimilarity:a=.8,includeBaseline:c=!1,scanLimit:l}=t,u=t.semantic!==!1,d=new Set(t.skip??[]),m=gt(e,{base:n}),f=xr(e,{base:n,plan:m}),h=f.changedFiles,g=new Set(h),y=new Set(m.changedFileLines),S=yi(e.config.projectRoot,n,bi(m,h)),C=IT(e.config.projectRoot,n,m,S),k={base:n,changedFiles:h,changedSymbols:f.changedSymbols.length,checksRun:[],skipped:[],suppressed:[],findings:[],rootCauseGroups:[],note:f.summary.note};if(h.length===0)return k;let D=(x,I)=>{if(d.has(x)){k.skipped.push({check:x,reason:"skipped via --skip"});return}I()};return D("echo",()=>cT(e,f.changedSymbols,g,C,o,a,l,u,k)),D("incomplete-migration",()=>yT(e,n,m,s,l,u,S,k)),D("co-change-partner",()=>bT(e,g,r,i,k)),D("doc-reference",()=>RT(e,g,y,m.changedRanges,k)),D("unused-params",()=>kT(e,h,k)),D("new-dead",()=>wT(e,f.changedSymbols,C,k)),c&&D("baseline",()=>NT(e,k)),sT(k,e.config.suppressions??[]),k.rootCauseGroups=rT(k.findings),k}function rT(e){let t=new Map;for(let n of e){let r=n.groupKey??`${n.check}:${n.id}`,i=t.get(r);i||(i={groupKey:r,check:n.check,severity:n.severity,actionTier:n.actionTier,sourceAnalyzer:n.sourceAnalyzer,rootCauseKey:n.rootCauseKey,count:0,findingIds:[],files:new Set,relatedFiles:new Set,message:n.message,remediation:n.remediation},t.set(r,i)),i.count+=1,i.findingIds.push(n.id),i.severity=iT(i.severity,n.severity),i.actionTier=oT(i.actionTier,n.actionTier),n.file&&i.files.add(n.file);for(let o of n.relatedFiles??[])i.relatedFiles.add(o)}return[...t.values()].map(n=>({...n,files:[...n.files].sort(),relatedFiles:[...n.relatedFiles].sort()})).sort((n,r)=>r.count-n.count||cs(r.severity)-cs(n.severity)||n.groupKey.localeCompare(r.groupKey))}function iT(e,t){return cs(t)>cs(e)?t:e}function cs(e){return e==="error"?2:e==="warning"?1:0}function oT(e,t){return e?t&&gf(t)>gf(e)?t:e:t}function gf(e){return e==="direct"?2:e==="signal"?1:0}function sT(e,t){if(t.length===0||e.findings.length===0)return;let n=[];for(let r of e.findings){let i=t.find(o=>aT(o,r));i?e.suppressed.push({finding:r,suppression:i}):n.push(r)}e.findings=n}function aT(e,t){return!e.reason||e.reason.trim()===""||e.expiresAt&&Date.parse(e.expiresAt)<=Date.now()||e.id&&e.id!==t.id||e.check&&e.check!==t.check||e.file&&e.file!==t.file?!1:!!(e.id||e.check)}function Rr(e,t){e.findings.push({...t,suppressionHint:`scip-query: ignore ${t.check} ${t.id} -- <reason>`})}function cT(e,t,n,r,i,o,s,a,c){c.checksRun.push("echo");for(let l of t.slice(0,i)){if(r(l))continue;let u=mi(e,l.symbol,{minSimilarity:o,limit:5,scanLimit:s,semantic:a}),d=[];for(let g of u){let y=g.fileA===l.file?g.fileB:g.fileA,S=g.fileA===l.file?g.shortNameB:g.shortNameA,C=g.fileA===l.file?g.symbolB:g.symbolA;n.has(y)||d.push({otherFile:y,otherShort:S,otherSymbol:C,similarity:g.similarity,similarityBasis:g.similarityBasis??"callees",sharedEvidence:g.sharedCallees})}if(d.length===0)continue;let m=d[0],f=Fn("echo",l.symbol,l.file,...d.map(g=>`${g.otherSymbol}|${g.otherFile}`).sort()),h=lT(l,d);Rr(c,{id:f,groupKey:f,actionTier:h,check:"echo",severity:"warning",evidence:"heuristic",confidence:m.similarity,file:l.file,symbol:l.symbol,relatedFiles:[...new Set(d.map(g=>g.otherFile))].sort(),message:fT(l,d),why:gT(l,d),remediation:hT(h,l.shortName,m.otherShort)})}t.length>i&&c.skipped.push({check:"echo",reason:`echo check capped at ${i} of ${t.length} changed symbols`})}function lT(e,t){return t.some(r=>uT(e.symbol,r))?"direct":"signal"}function uT(e,t){if(t.similarityBasis!=="source-tokens"||t.similarity<.98||t.sharedEvidence.length>8)return!1;let n=$(e),r=$(t.otherSymbol);return!n||!r?!1:n===r?!0:pT(t.sharedEvidence)?!1:dT(n,r)}function dT(e,t){let n=hf(e),r=hf(t);if(n.length===0||r.length===0)return!1;let i=new Set(r),o=n.filter(s=>i.has(s)).length;return o>=2&&o/Math.min(n.length,r.length)>=.5}function hf(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).map(t=>t.toLowerCase()).filter(t=>t.length>=2)}var mT=new Set(["bytes","crypto","hex","num","random","secret","to","token"]);function pT(e){return e.length>=3&&e.every(t=>mT.has(t.toLowerCase()))}function fT(e,t){let n=t[0],r=Math.round(n.similarity*100);return t.length===1?`${e.shortName} (${e.file}) is ${r}% similar to established ${n.otherShort} (${n.otherFile})`:`${e.shortName} (${e.file}) resembles ${t.length} established symbol(s); strongest is ${r}% similar to ${n.otherShort} (${n.otherFile})`}function gT(e,t){let n=[`${e.shortName} was changed in this diff.`];for(let r of t.slice(0,3))n.push(`${r.otherShort} is outside this diff and scored ${Math.round(r.similarity*100)}% similar by ${r.similarityBasis} evidence.`),n.push(`Shared evidence: ${r.sharedEvidence.slice(0,5).join(", ")||"(none listed)"}.`);return t.length>3&&n.push(`${t.length-3} additional similar match(es) grouped into this finding.`),n}function hT(e,t,n){return e==="direct"?`Extract or reuse the shared behavior with ${n}, or keep the duplicate with a suppression reason.`:`Review whether ${t} is intentionally parallel to the established implementation(s); extract shared behavior only if the product semantics match.`}function yT(e,t,n,r,i,o,s,a){let c=Ri(e,{base:t,maxHelpers:r,diffPlan:n,scanLimit:i,semantic:o,baseContentAt:s});if(!c.available){a.skipped.push({check:"incomplete-migration",reason:"no git history"});return}a.checksRun.push("incomplete-migration"),c.note&&a.skipped.push({check:"incomplete-migration",reason:c.note});for(let l of c.findings){let u=l.leftovers.map(y=>`${y.shortName} (${y.file}, ${Math.round(y.containment*100)}% helper / ${Math.round(y.siteCoverage*100)}% site, ${y.migrationScope})`).join(", "),d=l.leftovers.map(y=>`${y.shortName}: ${y.migrationScope} (${y.migrationScopeReasons[0]})`).join("; "),m=[...l.migratedFiles,...l.leftovers.map(y=>y.file)],f=l.leftovers.length===0?void 0:Math.max(...l.leftovers.map(y=>Math.min(y.containment,y.siteCoverage))),h=l.leftovers.some(y=>y.migrationScope==="possible-subtype"),g=Fn("incomplete-migration",l.helperSymbol,l.helperFile,m.join("|"));Rr(a,{id:g,check:"incomplete-migration",severity:"warning",evidence:"heuristic",confidence:f,file:l.helperFile,symbol:l.helperSymbol,relatedFiles:m,message:`new helper ${l.helperShortName} (${l.helperFile}) is wired into ${l.migratedFiles.length} file(s), but ${l.leftovers.length} similar un-migrated site(s) remain: ${u}`,why:[`${l.helperShortName} is new in this diff and already referenced by ${l.migratedFiles.join(", ")}.`,`Helper shape: ${l.helperShape}; ${l.specificHelperCalleeCount}/${l.helperCalleeCount} helper callees are specific enough to score.`,`Unchanged site(s) still contain the helper's callee pattern: ${u}.`,`Migration scope hints: ${d}.`],remediation:h?`Migrate same-scope sites to ${l.helperShortName}; review possible subtype/variant sites before applying the helper.`:`Migrate the remaining sites to ${l.helperShortName}, or confirm they are intentionally different.`})}}function bT(e,t,n,r,i){let o=Ap(e,t,{minTogether:n,minConfidence:0,maxFilesPerCommit:20});if(!o){i.skipped.push({check:"co-change-partner",reason:"no git history"});return}i.checksRun.push("co-change-partner");let s=new Set,a;for(let c of o){let l=t.has(c.fileA),u=t.has(c.fileB);if(l===u)continue;let d=l?c.fileA:c.fileB,m=l?c.fileB:c.fileA,f=l?c.changesA:c.changesB,h=f>0?c.together/f:0;if(h<r||Ic(m)||Ic(d)||!yf(`${e.config.projectRoot}/${m}`))continue;let g=`${d}|${m}`;if(s.has(g))continue;s.add(g);let y=Fn("co-change-partner",d,m,String(c.together)),S=Dc(d,m),C=Pc({fileA:d,fileB:m,together:c.together,confidence:h,commitScope:c.commitScope,recency:c.recency,subjectContext:c.subjectContext},S,(a??=Nc(e))(d,m)),k=[d,m].sort().join("|");i.findings.push({id:y,check:"co-change-partner",severity:"warning",evidence:"change-graph",actionTier:"signal",groupKey:`co-change-partner:${k}`,confidence:h,file:d,relatedFiles:[m],sourceAnalyzer:"co-change",rootCauseKey:k,partnerClass:S.partnerClass,partnerClassReasons:S.reasons,commitScope:c.commitScope,recency:c.recency,focusedTogether:c.focusedTogether,broadTogether:c.broadTogether,broadCommitRatio:c.broadCommitRatio,lastTogetherAt:c.lastTogetherAt,recentTogether:c.recentTogether,subjectContext:c.subjectContext,...C?{declaredCouplingSuggestion:C}:{},message:`${d} changed, but ${m} did not \u2014 they change together ${c.together}x (${Math.round(h*100)}% of the time)`,why:[`${d} is in this diff and ${m} is not.`,`Git history shows ${c.together} co-change(s), which is ${Math.round(h*100)}% of changes to the edited side.`,`History context: ${ST(c)}.`,`Subject context: ${xT(c.subjectContext)}.`,...CT(c),`Partner class: ${S.partnerClass} (${S.reasons.join("; ")}).`],remediation:C?`Update ${m} alongside this change, declare the coupling "${C.name}", or confirm the coupling no longer holds.`:`Update ${m} alongside this change, or confirm the coupling no longer holds.`})}}function ST(e){return`${e.commitScope}/${e.recency}; ${e.focusedTogether} focused, ${e.broadTogether} broad-sweep (${Math.round(e.broadCommitRatio*100)}% broad), ${e.recentTogether} recent, last ${vT(e.lastTogetherAt)}`}function xT(e){let t=e.subjectLabels.length>0?e.subjectLabels.slice(0,5).join(", "):"none inferred",n=e.issueRefs.length>0?e.issueRefs.slice(0,5).join(", "):"none",r=e.sampleSubjects.length>0?e.sampleSubjects.slice(0,3).map(i=>`"${i}"`).join("; "):"none";return`labels ${t}; refs ${n}; samples ${r}; external issue/PR labels ${e.externalIssueLabelStatus}`}function CT(e){let t=[];return e.commitScope==="broad-sweep"&&t.push("Broad-sweep history is weaker than focused co-edits; confirm this is a real coordination contract."),e.recency==="stale"&&t.push("The pair has no co-change in the recent history window; confirm the coupling still holds."),t}function vT(e){return e<=0?"unknown":new Date(e*1e3).toISOString().slice(0,10)}function RT(e,t,n,r,i){i.checksRun.push("doc-reference");let o=Cr.referenceTargets(e,t,r);if(o.size!==0)for(let s of tf(e,o)){if(n.has(s.doc))continue;let a=s.citedClaims.length>0?s.citedClaims:Cr.citationContexts(e,s.doc,s.cited),c=Cr.classifyCitation(a),l=Fn("doc-reference",s.doc,s.cited.join("|"));Rr(i,{id:l,check:"doc-reference",severity:"warning",evidence:"change-graph",actionTier:c.actionTier,confidence:1,file:s.doc,relatedFiles:s.cited,citationKind:c.citationKind,citationKindReasons:c.reasons,citedClaims:a,message:`${s.doc} cites ${s.cited.join(", ")} as ${Cr.citationKindLabel(c.citationKind)} \u2014 changed in this diff, doc untouched`,why:[`${s.cited.join(", ")} changed in this diff.`,`${s.doc} cites the changed file(s) but was not updated in the same diff.`,...c.reasons.map(u=>`Citation kind evidence: ${u}`)],remediation:Cr.citationRemediation(c.citationKind,s.doc)})}}function kT(e,t,n){n.checksRun.push("unused-params");for(let r of ki(e,{files:t,limit:50})){let i=Fn("unused-params",r.symbol,r.file,r.unusedTrailing.join("|"));Rr(n,{id:i,check:"unused-params",severity:"warning",evidence:"heuristic",confidence:.85,file:r.file,startLine:r.startLine,endLine:r.endLine,symbol:r.symbol,message:`${r.shortName} (${r.file}) has trailing unused parameter(s): ${r.unusedTrailing.join(", ")}`,why:[`${r.shortName} is in a changed file.`,`The trailing parameter(s) ${r.unusedTrailing.join(", ")} are not referenced in the function body.`],remediation:"Drop the unused trailing parameters and their call-site arguments."})}}function wT(e,t,n,r){r.checksRun.push("new-dead");let i=new T(e);for(let o of t){if(n(o)||o.fanIn>0||i.fileKind(o.file)==="test"||De(e,o.file)||ie(e,o.symbol,o.file)||LT(o.symbol))continue;let s=Fn("new-dead",o.symbol,o.file);Rr(r,{id:s,check:"new-dead",severity:"warning",evidence:"graph-fact",confidence:.9,file:o.file,symbol:o.symbol,message:`${o.shortName} (${o.file}) was changed but has zero indexed consumers`,why:[`${o.shortName} is a changed production symbol.`,"The index reports zero consumers for this symbol.","The symbol is not in a detected entry surface or configured live root."],remediation:"Wire it up, or remove it before it becomes permanent dead code."})}}function LT(e){if(ee(e)!=="type")return!1;let t=$(e);return t.startsWith("_Assert")||t.startsWith("Assert")}function IT(e,t,n,r){let i=new Map(n.renamedFiles.map(s=>[s.to,s.from])),o=r??yi(e,t,bi(n));return s=>{let a=i.get(s.file)??s.file,c=$(s.symbol);if(!c)return!1;let l=o(a);return l!==null&&DT(l,c)}}function DT(e,t){return new RegExp(`\\b${PT(t)}\\b`).test(e)}function PT(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function NT(e,t){if(!yf(as(e))){t.skipped.push({check:"baseline",reason:"no .scipquery-baseline.json \u2014 run health --write-baseline to enable"});return}t.checksRun.push("baseline");let n=vi(e);for(let r of n.newFindings){let i=Kp(r),o=Fn("baseline",r);Rr(t,{id:o,groupKey:`baseline:${i.sourceAnalyzer}:${i.rootCauseKey}`,check:"baseline",severity:"error",evidence:"baseline",actionTier:i.actionTier,confidence:1,file:i.file,relatedFiles:i.relatedFiles.length>0?i.relatedFiles:void 0,sourceAnalyzer:i.sourceAnalyzer,rootCauseKey:i.rootCauseKey,message:`new ${i.label} vs committed baseline: ${r}`,why:["A committed health baseline exists.","The current health result contains a finding not present in that baseline.",`Underlying analyzer: ${i.sourceAnalyzer}.`,`Inherited action tier: ${i.actionTier}.`,`Root cause key: ${i.rootCauseKey}.`,...i.why],remediation:i.remediation})}}function Fn(e,...t){return`SQ${nT("sha256").update([e,...t].join("\0")).digest("hex").slice(0,12).toUpperCase()}`}var ET=.7,bf=.62,Sf=.45;function Uc(e,t={}){let{windowCommits:n=100,limit:r=30,scope:i,scanLimit:o}=t,s=Fp(e);if(!s)return{available:!1,windowCommits:n,findings:[]};if(r<=0)return{available:!0,windowCommits:n,findings:[]};let c=TT(e,{limit:r,minSimilarity:t.minSimilarity,scanLimit:o,scope:i,semantic:t.semantic}).map(u=>jT(u,s,n)).filter(u=>u!==null);c.sort((u,d)=>(u.kind===d.kind?0:u.kind==="echo"?-1:1)||d.similarity-u.similarity||u.echoFile.localeCompare(d.echoFile)||u.echoSymbol.localeCompare(d.echoSymbol)||u.domain.localeCompare(d.domain));let l=c.slice(0,r).map(OT);return{available:!0,windowCommits:n,findings:l,rootCauseGroups:BT(l)}}function TT(e,t){let n=VT(t.limit),r=[..._T(e,{scope:t.scope,minSimilarity:t.minSimilarity??ET,limit:n,scanLimit:t.scanLimit,semantic:t.semantic})],i=to(e,{scope:t.scope});return i.react&&r.push(...FT(e,{scope:t.scope,minSimilarity:t.minSimilarity??bf,limit:n,scanLimit:t.scanLimit}),...$T(e,{scope:t.scope,minSimilarity:t.minSimilarity??Sf,limit:n,scanLimit:t.scanLimit})),i.vue&&r.push(...AT(e,{scope:t.scope,minSimilarity:t.minSimilarity??bf,limit:n,scanLimit:t.scanLimit}),...MT(e,{scope:t.scope,minSimilarity:t.minSimilarity??Sf,limit:n,scanLimit:t.scanLimit})),r}function _T(e,t){return Pt(e,{scope:t.scope,minSimilarity:t.minSimilarity,limit:t.limit,crossFileOnly:!0,scanLimit:t.scanLimit,semantic:t.semantic}).map(n=>({domain:"callable",basis:n.similarityBasis??"callees",symbolA:n.shortNameA,fileA:n.fileA,symbolB:n.shortNameB,fileB:n.fileB,similarity:n.similarity,sharedEvidence:n.sharedCallees,sharedCallees:n.sharedCallees}))}function FT(e,t){return ds(e,t,{query:Cn,domain:"react-component",basis:"jsx-structure",symbolA:n=>n.componentA,symbolB:n=>n.componentB,evidenceBuckets:n=>[["component",n.sharedComponents],["tag",n.sharedNativeTags],["prop",n.sharedProps],["event",n.sharedEvents],["binding",n.sharedBindings]]})}function ds(e,t,n){return n.query(e,t).filter(r=>r.fileA!==r.fileB).map(r=>({domain:n.domain,basis:n.basis,symbolA:n.symbolA(r),fileA:r.fileA,symbolB:n.symbolB(r),fileB:r.fileB,similarity:r.similarity,sharedEvidence:qT(...n.evidenceBuckets(r)),sharedCallees:[]}))}function $T(e,t){return ds(e,t,{query:vn,domain:"react-hook",basis:"react-behavior",symbolA:n=>n.componentA,symbolB:n=>n.componentB,evidenceBuckets:n=>[["hook",n.sharedHooks],["react-hook",n.sharedReactHooks],["effect",n.sharedEffects],["state",n.sharedState],["request",n.sharedRequests],["handler",n.sharedHandlers],["action",n.sharedHandlerVerbs]]})}function AT(e,t){return ds(e,t,{query:Rn,domain:"vue-component",basis:"vue-template",symbolA:n=>us(n.fileA),symbolB:n=>us(n.fileB),evidenceBuckets:n=>[["component",n.sharedComponents],["prop",n.sharedProps],["event",n.sharedEvents],["directive",n.sharedDirectives],["slot",n.sharedSlots],["identifier",n.sharedIdentifiers]]})}function MT(e,t){return ds(e,t,{query:kn,domain:"vue-composable",basis:"vue-behavior",symbolA:n=>us(n.fileA),symbolB:n=>us(n.fileB),evidenceBuckets:n=>[["composable",n.sharedComposables],["store",n.sharedStores],["reactivity",n.sharedReactivity],["lifecycle",n.sharedLifecycle],["request",n.sharedRequests],["function",n.sharedFunctions],["action",n.sharedFunctionVerbs],["binding",n.sharedBindings],["template-event",n.sharedTemplateEvents]]})}function jT(e,t,n){let r=t.get(e.fileA)?.commitsAgo??null,i=t.get(e.fileB)?.commitsAgo??null,o=r!==null&&r<=n,s=i!==null&&i<=n;if(!o&&!s)return null;if(o&&s){let a=(r??0)<=(i??0);return{kind:"twin",domain:e.domain,basis:e.basis,echoSymbol:a?e.symbolA:e.symbolB,echoFile:a?e.fileA:e.fileB,echoAgeCommits:(a?r:i)??0,establishedSymbol:a?e.symbolB:e.symbolA,establishedFile:a?e.fileB:e.fileA,establishedAgeCommits:a?i:r,similarity:e.similarity,sharedEvidence:e.sharedEvidence,sharedCallees:e.sharedCallees}}return{kind:"echo",domain:e.domain,basis:e.basis,echoSymbol:o?e.symbolA:e.symbolB,echoFile:o?e.fileA:e.fileB,echoAgeCommits:(o?r:i)??0,establishedSymbol:o?e.symbolB:e.symbolA,establishedFile:o?e.fileB:e.fileA,establishedAgeCommits:o?i:r,similarity:e.similarity,sharedEvidence:e.sharedEvidence,sharedCallees:e.sharedCallees}}function OT(e){let t=xf(e);return{...e,rootCauseKey:t,groupKey:`recent-duplicate:${t}`}}function xf(e){if(e.kind==="echo")return["echo",e.domain,e.basis,e.establishedSymbol].join(":");let t=e.sharedEvidence.slice().sort().join("|"),n=[e.echoSymbol,e.establishedSymbol].sort().join("|");return["twin",e.domain,e.basis,t||n].join(":")}function BT(e){let t=new Map;for(let[n,r]of e.entries()){let i=r.rootCauseKey??xf(r),o=r.groupKey??`recent-duplicate:${i}`,s=t.get(o);s||(s={groupKey:o,rootCauseKey:i,kind:r.kind,domain:r.domain,basis:r.basis,count:0,maxSimilarity:r.similarity,findingIndexes:[],echoFiles:new Set,establishedFile:r.kind==="echo"?r.establishedFile:void 0,establishedSymbol:r.kind==="echo"?r.establishedSymbol:void 0,relatedFiles:new Set,sharedEvidence:new Set,recommendation:HT(r)},t.set(o,s)),s.count+=1,s.maxSimilarity=Math.max(s.maxSimilarity,r.similarity),s.findingIndexes.push(n),s.echoFiles.add(r.echoFile),s.relatedFiles.add(r.echoFile),s.relatedFiles.add(r.establishedFile);for(let a of r.sharedEvidence)s.sharedEvidence.add(a)}return[...t.values()].map(n=>({...n,echoFiles:[...n.echoFiles].sort(),relatedFiles:[...n.relatedFiles].sort(),sharedEvidence:[...n.sharedEvidence].sort().slice(0,16)})).sort((n,r)=>r.count-n.count||r.maxSimilarity-n.maxSimilarity||n.groupKey.localeCompare(r.groupKey))}function HT(e){return e.kind==="echo"?"Review the established side once, then migrate or delete every echo in this group.":"Pick one owner for the new twins and consolidate the group before the copies diverge."}function VT(e){return Number.isFinite(e)?e*5:Number.POSITIVE_INFINITY}function qT(...e){let t=[],n=new Set;for(let[r,i]of e)for(let o of i){let s=`${r}:${o}`;n.has(s)||(n.add(s),t.push(s))}return t}function us(e){return(e.split("/").pop()??e).replace(/\.[^.]+$/,"")}var UT=Y("suppression-inventory",{clearGroups:["whole-project"]});function ms(e){return UT.get(e,()=>WT(e))}function WT(e){let t={dead:0,stale:0,wrapper:0,passthrough:0,drift:0,extract:0,similar:0,uncategorized:0},n=new Map,r=0;for(let i of Ie(e)){let o=F(e,i);if(!(!o||!o.includes("scip-query")))for(let s of o.split(/\r?\n/)){let a=Br(s);if(a===null)continue;r+=1,n.set(i,(n.get(i)??0)+1);let c=GT(a);t[c]+=1}}return{total:r,byCategory:t,byFile:n}}function GT(e){if(!e)return"uncategorized";let t=e.toLowerCase();return t==="dead-code"?"dead":t}import{readFileSync as zT}from"fs";import{join as JT}from"path";function Li(e,t,n={}){let r=B(e,t);if(!r)return null;let i=new T(e),o=ZT(XT(e,r.relativePath,r.startLine,r.endLine),KT(e,r.relativePath)),s=r.endLine-r.startLine+1,c=i.calleeMap([r],{additive:!0,semantic:n.semantic}).get(r.symbolId)??[],l=new Set(c.map(u=>u.symbol));return{symbol:r.symbol,shortName:b(r.symbol),relativePath:r.relativePath,startLine:r.startLine,endLine:r.endLine,loc:s,branches:o,cyclomaticEstimate:o+1,calleeCount:l.size,fanIn:QT(e,r.symbolId),fanOut:YT(c,r.relativePath)}}function KT(e,t){return e.get("SELECT language FROM documents WHERE relative_path = ?",t)?.language??"unknown"}function XT(e,t,n,r){try{return zT(JT(e.config.projectRoot,t),"utf-8").split(`
575
+ `).slice(n,r+1).join(`
576
+ `)}catch{return""}}function QT(e,t){return e.get(`SELECT COUNT(DISTINCT c.document_id) AS c
543
577
  FROM mentions m
544
578
  JOIN chunks c ON m.chunk_id = c.id
545
- WHERE m.symbol_id = ? AND m.role != 1`,t)?.c??0}function NE(e,t){return new Set(e.filter(n=>n.file!==t).map(n=>n.symbol)).size}function EE(e,t){let n=rn(e),i=0,r=[/\bif\b/g,/\belse\s+if\b/g,/\belse\b/g,/\bfor\b/g,/\bwhile\b/g,/\bswitch\b/g,/\bcase\b/g,/\bcatch\b/g,/\?\s*[^?]/g,/&&/g,/\|\|/g];for(let o of r){let s=n.match(o);s&&(i+=s.length)}if(t==="python"){let o=[/\belif\b/g,/\bexcept\b/g,/\bfinally\b/g];for(let s of o){let a=n.match(s);a&&(i+=a.length)}}else if(t==="rust"){let o=[/\bmatch\b/g,/=>/g,/\bloop\b/g];for(let s of o){let a=n.match(s);a&&(i+=a.length)}}else if(t==="ruby"){let o=[/\belsif\b/g,/\bunless\b/g,/\brescue\b/g,/\bwhen\b/g];for(let s of o){let a=n.match(s);a&&(i+=a.length)}}else if(t==="go"){let o=[/\bselect\b/g,/\bdefer\b/g];for(let s of o){let a=n.match(s);a&&(i+=a.length)}}return i}function pr(e,t,n={}){let i=B(e,t);if(!i)return null;let r=[{file:i.relativePath,line:i.startLine}],o=Bt(e,i,{semantic:n.semantic}).map(c=>({file:c.file,line:c.line,enclosingSymbol:c.enclosingSymbol??"(top-level)",enclosingShort:c.enclosingSymbol?y(c.enclosingSymbol):"(top-level)"})),{producers:s,consumers:a}=TE(e,i,o,{semantic:n.semantic!==!1});return{symbol:i.symbol,shortName:y(i.symbol),relativePath:i.relativePath,definitionSites:r.filter(c=>!e.isIgnored(c.file)),usageSites:o,producers:s.filter(c=>!e.isIgnored(c.file)).map(c=>({symbol:c.symbol,shortName:y(c.symbol),file:c.file})),consumers:a.filter(c=>!e.isIgnored(c.file)).map(c=>({symbol:c.symbol,shortName:c.symbol===c.file?"(top-level)":y(c.symbol),file:c.file}))}}function TE(e,t,n,i){let r=si(Ae(e,t,{limit:30,semantic:i.semantic}).map(a=>({symbol:a.symbol,file:a.file}))),o=si(qe(e,t,{limit:30,semantic:i.semantic})),s=o.length>0?o:si(n.map(a=>({symbol:a.enclosingSymbol==="(top-level)"?a.file:a.enclosingSymbol,file:a.file})));return{producers:r,consumers:s}}function mi(e,t,n={}){let{direction:i="backward",maxDepth:r=3}=n,o=B(e,t);return o?i==="backward"?_E(e,o,r,{semantic:n.semantic!==!1}):$E(e,o,{semantic:n.semantic!==!1}):null}function _E(e,t,n,i){let r=[],o=new Set([t.symbol]),s=[t];for(let a=1;a<=n&&s.length!==0;a++){let c=[];for(let l of s){let u=Ae(e,l,{semantic:i.semantic});for(let d of u){if(o.has(d.symbol))continue;o.add(d.symbol),r.push({symbol:d.symbol,shortName:y(d.symbol),file:d.file,relationship:a===1?"referenced within definition (callee)":`depth ${a} callee`});let m=zn(e,d.symbol);m&&!e.isIgnored(m.relativePath)&&c.push(m)}}s=c}return{symbol:t.symbol,shortName:y(t.symbol),direction:"backward",connectedSymbols:r}}function $E(e,t,n){let i=new Set,r=[],o=new T(e);for(let s of Bt(e,t,{semantic:n.semantic})){if(r.length>=30)break;let a=s.enclosingSymbol??je(o.definitionsForFile(s.file),s.line)?.symbol??null;if(!a||a===t.symbol)continue;let c=zn(e,a);!c||e.isIgnored(c.relativePath)||i.has(c.symbol)||(i.add(c.symbol),r.push({symbol:c.symbol,shortName:y(c.symbol),file:c.relativePath,relationship:`references target at ${s.file}:${s.line+1}`}))}return r.sort((s,a)=>s.file.localeCompare(a.file)),{symbol:t.symbol,shortName:y(t.symbol),direction:"forward",connectedSymbols:r}}function Rc(e,t,n={}){let i=n.impactDepth??3,r=n.sliceDepth??3,o=n.semantic,s=!AE(t),a=s?Wi(e,t,{semantic:o}):{definitions:[],referencedBy:[]},c=s?Xi(e,t,{semantic:o}):null,l=s?mr(e,t,{semantic:o}):null,u=s?pr(e,t,{semantic:o}):null,d=s?mi(e,t,{direction:"backward",maxDepth:r,semantic:o}):null,m=s?mi(e,t,{direction:"forward",maxDepth:r,semantic:o}):null,p=s?nr(e,t,{maxDepth:i,scope:n.scope}):[],h=ir(e,t,{semantic:o}),g=Gi(e,t),b=zi(e,t),S=Ki(e,t),x=Ji(e,t),I={symbol:a.definitions.length>0||a.referencedBy.length>0||c!==null||l!==null||u!==null||d!==null||m!==null||p.length>0,file:h!==null||g.length>0||b.length>0,module:S.files.length>0||S.symbols.length>0||x.length>0},L=[];!I.symbol&&!I.file&&!I.module&&L.push("No symbol, file, or module matched target.");let C=h?.file??a.definitions[0]?.relativePath??null;return{target:t,matched:I,history:FE(e,C),trace:a,callGraph:c,complexity:l,dataflow:u,backwardSlice:d,forwardSlice:m,affected:p,changeSurface:h,deps:g,rdeps:b,system:S,surface:x,warnings:L}}function FE(e,t){let n={available:!1,file:t,churn:null,coChangePartners:[],suppressionsInFile:0};if(!t)return n;let i=Io(e);if(!i)return n;let r=xn(e,t,{limit:5});return{available:!0,file:t,churn:i.get(t)??{changes:0,fixChanges:0,lastChangedAt:0},coChangePartners:r.findings.map(o=>({file:o.fileA===t?o.fileB:o.fileA,together:o.together,confidence:o.confidence,subjectContext:o.subjectContext})),suppressionsInFile:Uo(e).byFile.get(t)??0}}function AE(e){return e.includes("/")||e.includes("\\")||/\.[A-Za-z0-9]+(?::\d+(?:-\d+)?)?$/.test(e)}function fr(e,t){let{scope:n,minLoc:i=10,limit:r=30,scanLimit:o}=t??{},s=new T(e);return We({candidates:()=>s.productionCallableDefinitions({scope:n,requireCallableSymbol:!0,includeSuppressed:!0,sortByLocDesc:typeof o=="number"&&o>0}),scanLimit:o,prepare:a=>({callerMap:s.crossFileCallerMap(a,{semantic:t?.semantic!==!1}),calleeMap:s.calleeMap(a,{semantic:t?.semantic!==!1})}),evaluate:(a,c)=>ME(a,c,i),orderResults:(a,c)=>c.score-a.score||c.loc-a.loc,limit:r})}function ME(e,t,n){let i=e.endLine-e.startLine+1;if(i<n)return null;let r=t.callerMap.get(e.symbolId)?.size??0,o=t.calleeMap.get(e.symbolId)??[],s=o.filter(l=>l.file!==e.relativePath),a=new Set(s.map(l=>`${l.symbol}|${l.file}`)).size,c=new Set(o.map(l=>`${l.symbol}|${l.file}`)).size;return{symbol:e.symbol,shortName:y(e.symbol),file:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:i,fanIn:r,fanOut:a,calleeCount:c,score:Math.round(i/50*(r/5)*Math.max(a/5,1)*100)/100}}function Lt(e){return e.scoreCount??e.count}function Bp(e){let t=HE(e),{breakdown:n,pressure:i}=VE(e),r=jp(n,"risk"),o=jp(n,"hygiene");return{score:Math.min(r,o),riskScore:r,hygieneScore:o,scoreBreakdown:n,overview:{documents:e.statsResult.documents,symbols:e.statsResult.symbols,indexSizeBytes:e.statsResult.indexSizeBytes},findings:{deadSymbols:e.dead.count,deadLoc:e.dead.loc,isolatedSymbols:e.isolated.count,isolatedLoc:e.isolated.loc,cycles:e.realCycleCount,similarPairs:e.similarCount,reactComponentDuplicatePairs:e.reactComponentDuplicates.count,reactHookCandidatePairs:e.reactHookCandidates.count,reactHookCandidateScoreCount:Lt(e.reactHookCandidates),reactLargeComponentPressureFiles:e.reactLargeComponentPressure.count,vueComponentDuplicatePairs:e.vueComponentDuplicates.count,vueComposableCandidatePairs:e.vueComposableCandidates.count,vueComposableCandidateScoreCount:Lt(e.vueComposableCandidates),vueLargeViewPressureFiles:e.vueLargeViewPressure.count,extractionCandidates:e.extractCount,wrappers:e.wrappers.count,wrapperScoreCount:Lt(e.wrappers),passthroughs:e.passthroughs.count,staleTypes:e.stale.count,driftedFiles:e.drift.count,complexityHotspotCount:e.complexity.extremeCount,hiddenCouplingPairs:e.gitEvidence?.hiddenCoupling.pairCount??null,hiddenCouplingScoreCount:e.gitEvidence?.hiddenCoupling.scoreCount??null},axes:OE(e),validation:BE(e),suppressions:e.suppressions,actions:t,pressure:i,topComplexity:e.complexity.top,warnings:e.warnings.length>0?e.warnings:void 0}}function OE(e){return{deletable:{loc:e.dead.loc+e.isolated.loc,symbols:e.dead.count+e.isolated.count},cycles:{count:e.realCycleCount},changeAmplification:e.gitEvidence?.amplification??null,hiddenCoupling:e.gitEvidence?.hiddenCoupling??null,churnWeightedComplexity:jE(e),evidenceQuality:{graphFindings:e.dead.count+e.isolated.count+e.realCycleCount,heuristicFindings:e.similarCount+e.reactComponentDuplicates.count+e.reactHookCandidates.count+e.reactLargeComponentPressure.count+e.vueComponentDuplicates.count+e.vueComposableCandidates.count+e.vueLargeViewPressure.count+e.extractCount+e.wrappers.count+e.passthroughs.count+e.stale.count+e.drift.count,userSuppressed:e.suppressions?.total??0}}}function jE(e){let t=e.gitEvidence?.fileStats;return t?e.complexity.top.map(n=>{let i=n.file?t[n.file]?.changes??0:0;return{...n,changes:i,weighted:ut(n.score*Math.log2(1+i))}}).sort((n,i)=>i.weighted-n.weighted):null}function BE(e){let t=e.gitEvidence?.fileStats;if(!t)return null;let n={dead:e.dead.files??[],isolated:e.isolated.files??[],wrappers:e.wrappers.files??[],passthroughs:e.passthroughs.files??[],stale:e.stale.files??[],reactComponents:e.reactComponentDuplicates.files??[],reactHooks:e.reactHookCandidates.files??[],reactLargeComponents:e.reactLargeComponentPressure.files??[],vueComponents:e.vueComponentDuplicates.files??[],vueComposables:e.vueComposableCandidates.files??[],vueLargeViews:e.vueLargeViewPressure.files??[]},i=new Set(Object.values(n).flat()),r=0,o=0,s=0;for(let[u,d]of Object.entries(t))i.has(u)?r+=d.fixChanges:(o+=d.fixChanges,s+=1);let a=i.size>0?ut(r/i.size):0,c=s>0?ut(o/s):0,l={};for(let[u,d]of Object.entries(n)){let m=new Set(d);if(m.size===0)continue;let p=0;for(let g of m)p+=t[g]?.fixChanges??0;let h=ut(p/m.size);l[u]={flaggedFiles:m.size,fixDensity:h,lift:c>0?ut(h/c):null}}return{flaggedFiles:i.size,flaggedFixDensity:a,baselineFixDensity:c,ratio:i.size>0&&c>0?ut(a/c):null,byCategory:l}}function ut(e){return Math.round(e*100)/100}function Hp(e){return Number.isInteger(e)?String(e):e.toFixed(2).replace(/0+$/,"").replace(/\.$/,"")}function Wo(e,t="existing shared infrastructure discount"){let n=Lt(e);return Math.abs(n-e.count)<.01?"":` (${Hp(n)} score-weighted after ${t})`}function gr(e,t){let n=Lt(e),i=`${e.count} ${t}`;return Math.abs(n-e.count)<.01?i:`${i} (${Hp(n)} score-weighted)`}function HE(e){let t=[];if(e.dead.count>0&&t.push({category:"Dead code",evidence:"graph-fact",description:`${e.dead.count} symbols with zero references anywhere \u2014 safe to delete`,effort:"low",impact:"high",count:e.dead.count,locRecoverable:e.dead.loc}),e.isolated.count>0&&t.push({category:"Isolated symbols",evidence:"graph-fact",description:`${e.isolated.count} symbols completely disconnected from the codebase graph`,effort:"low",impact:"medium",count:e.isolated.count,locRecoverable:e.isolated.loc}),e.realCycleCount>0&&t.push({category:"Circular dependencies",evidence:"graph-fact",description:`${e.realCycleCount} cycle(s) \u2014 break with dependency inversion or module restructuring`,effort:"medium",impact:"high",count:e.realCycleCount,locRecoverable:0}),e.similarCount>0&&t.push({category:"Similar functions",evidence:"heuristic",description:`${e.similarCount} pairs with real logic overlap (beyond shared imports) \u2014 consolidation candidates`,effort:"medium",impact:"medium",count:e.similarCount,locRecoverable:0}),e.reactComponentDuplicates.count>0&&t.push({category:"Duplicated React components",evidence:"heuristic",description:`${e.reactComponentDuplicates.count} React component pair(s) share JSX structure \u2014 extract or reuse the shared UI concept`,effort:"medium",impact:"medium",count:e.reactComponentDuplicates.count,locRecoverable:e.reactComponentDuplicates.loc}),e.reactHookCandidates.count>0&&t.push({category:"Duplicated React hook behavior",evidence:"heuristic",description:`${e.reactHookCandidates.count} React component pair(s) share state/effect/request behavior${Wo(e.reactHookCandidates)} \u2014 extract or reuse a hook`,effort:"medium",impact:"medium",count:e.reactHookCandidates.count,locRecoverable:e.reactHookCandidates.loc}),e.reactLargeComponentPressure.count>0&&t.push({category:"Large React components",evidence:"heuristic",description:`${e.reactLargeComponentPressure.count} React component(s) concentrate JSX/behavior pressure \u2014 split by reason to change`,effort:"medium",impact:"medium",count:e.reactLargeComponentPressure.count,locRecoverable:0}),e.vueComponentDuplicates.count>0&&t.push({category:"Duplicated Vue components",evidence:"heuristic",description:`${e.vueComponentDuplicates.count} Vue component pair(s) share template structure \u2014 extract or reuse the shared UI concept`,effort:"medium",impact:"medium",count:e.vueComponentDuplicates.count,locRecoverable:e.vueComponentDuplicates.loc}),e.vueComposableCandidates.count>0&&t.push({category:"Duplicated Vue behavior",evidence:"heuristic",description:`${e.vueComposableCandidates.count} Vue component pair(s) share state/effect/request behavior${Wo(e.vueComposableCandidates)} \u2014 extract or reuse a composable`,effort:"medium",impact:"medium",count:e.vueComposableCandidates.count,locRecoverable:e.vueComposableCandidates.loc}),e.vueLargeViewPressure.count>0&&t.push({category:"Large Vue views",evidence:"heuristic",description:`${e.vueLargeViewPressure.count} Vue file(s) concentrate template/script/style pressure \u2014 split by reason to change`,effort:"medium",impact:"medium",count:e.vueLargeViewPressure.count,locRecoverable:0}),e.extractCount>0&&t.push({category:"Extraction candidates",evidence:"heuristic",description:`${e.extractCount} large functions with isolated callee clusters \u2014 review same-file or feature-local extraction seams`,effort:"medium",impact:"medium",count:e.extractCount,locRecoverable:0}),e.wrappers.count>0&&t.push({category:"Wrapper functions",evidence:"heuristic",description:`${e.wrappers.count} single-consumer symbols${Wo(e.wrappers,"boundary-evidence discount")} \u2014 inline direct wrappers or review boundary signals`,effort:"low",impact:"low",count:e.wrappers.count,locRecoverable:e.wrappers.loc}),e.passthroughs.count>0&&t.push({category:"Passthrough functions",evidence:"heuristic",description:`${e.passthroughs.count} functions that just forward to one callee \u2014 unnecessary indirection`,effort:"low",impact:"low",count:e.passthroughs.count,locRecoverable:e.passthroughs.loc}),e.stale.count>0){let r=[];e.stale.unused>0&&r.push(`${e.stale.unused} unused`),e.stale.singleUse>0&&r.push(`${e.stale.singleUse} single-consumer (not in types file)`),t.push({category:"Stale abstractions",evidence:"heuristic",description:`${r.join(", ")} \u2014 remove unused abstractions; review single-consumer ownership before moving or inlining`,effort:"low",impact:"medium",count:e.stale.count,locRecoverable:e.stale.loc})}if(e.drift.count>0){let r=[];e.drift.unusedImports>0&&r.push(`${e.drift.unusedImports} unused imports`),e.drift.layerViolations>0&&r.push(`${e.drift.layerViolations} layer violations`),t.push({category:"Structural drift",evidence:"heuristic",description:`${r.join(", ")} \u2014 remove direct drift; review signal drift against layer ownership`,effort:e.drift.layerViolations>0?"medium":"low",impact:e.drift.layerViolations>0?"medium":"low",count:e.drift.count,locRecoverable:0})}if(e.gitEvidence&&e.gitEvidence.hiddenCoupling.pairCount>0){let r=e.gitEvidence.hiddenCoupling.top[0];t.push({category:"Hidden coupling",evidence:"change-graph",description:`${e.gitEvidence.hiddenCoupling.pairCount} file pair(s) co-change without a structural link`+Wo({count:e.gitEvidence.hiddenCoupling.pairCount,scoreCount:e.gitEvidence.hiddenCoupling.scoreCount},"broad/stale-history discount")+(r?` (e.g. ${r.fileA} \u2194 ${r.fileB})`:"")+" \u2014 name the shared concept or enforce the sync",effort:"medium",impact:"high",count:e.gitEvidence.hiddenCoupling.pairCount,locRecoverable:0})}let n={high:3,medium:2,low:1},i={low:3,medium:2,high:1};return t.sort((r,o)=>{let s=n[r.impact]*i[r.effort];return n[o.impact]*i[o.effort]-s}),t}var Op={"dead-code":"risk",isolated:"risk",cycles:"risk",complexity:"risk","hidden-coupling":"risk","cycles-pressure":"risk","complexity-pressure":"risk","hidden-coupling-pressure":"risk",similar:"hygiene","react-component-duplicates":"hygiene","react-hook-candidates":"hygiene","react-large-component-pressure":"hygiene","vue-component-duplicates":"hygiene","vue-composable-candidates":"hygiene","vue-large-view-pressure":"hygiene",extract:"hygiene",wrappers:"hygiene",passthroughs:"hygiene","stale-abstractions":"hygiene",drift:"hygiene","similar-pressure":"hygiene","react-component-duplicates-pressure":"hygiene","react-hook-candidates-pressure":"hygiene","react-large-component-pressure-pressure":"hygiene","vue-component-duplicates-pressure":"hygiene","vue-composable-candidates-pressure":"hygiene","vue-large-view-pressure-pressure":"hygiene","extract-pressure":"hygiene","wrappers-pressure":"hygiene","passthroughs-pressure":"hygiene","stale-abstractions-pressure":"hygiene","drift-pressure":"hygiene"};function jp(e,t){let n=e.filter(i=>i.kind===t).reduce((i,r)=>i+r.points,0);return Math.max(0,Math.min(100,100-n))}function VE(e){let t=Math.max(e.statsResult.documents,1),n=Math.max(e.statsResult.symbols,1),i=[],r=[],o=(C,D,k)=>{D>0&&i.push({axis:C,points:D,detail:k,kind:Op[C]??"hygiene"})},s=(C,D,k,A,Se,de,Te)=>{let bt=Math.max(A,1);if(k<=bt)return;let Ps=k/bt,Ns=Math.min(Se,Math.ceil(Math.log2(Ps)*de));if(Ns<=0)return;let Ib=Op[C]??"hygiene";r.push({axis:C,category:D,kind:Ib,count:k,threshold:ut(bt),ratio:ut(Ps),extraPenalty:Ns}),o(C,Ns,`${k} ${Te} exceed pressure threshold ${ut(bt)} (${ut(Ps)}x)`)},a=e.dead.count/n;o("dead-code",Math.min(20,Math.round(a*200)),`${e.dead.count} dead symbols (${e.dead.loc} LOC deletable)`);let c=e.isolated.count/n;o("isolated",Math.min(10,Math.round(c*200)),`${e.isolated.count} isolated symbols (${e.isolated.loc} LOC deletable)`),o("cycles",Math.min(15,e.realCycleCount*5),`${e.realCycleCount} real dependency cycle(s)`);let l=e.similarCount/n*1e3;o("similar",Math.min(10,Math.round(l)),`${e.similarCount} similar function pair(s)`);let u=e.reactComponentDuplicates.count/t*1e3;o("react-component-duplicates",Math.min(10,Math.round(u)),`${e.reactComponentDuplicates.count} duplicated React component pair(s)`);let d=Lt(e.reactHookCandidates),m=d/t*1e3;o("react-hook-candidates",Math.min(10,Math.round(m)),gr(e.reactHookCandidates,"duplicated React behavior pair(s)"));let p=e.reactLargeComponentPressure.count/t*1e3;o("react-large-component-pressure",Math.min(5,Math.round(p/2)),`${e.reactLargeComponentPressure.count} large React component pressure file(s)`);let h=e.vueComponentDuplicates.count/t*1e3;o("vue-component-duplicates",Math.min(10,Math.round(h)),`${e.vueComponentDuplicates.count} duplicated Vue component pair(s)`);let g=Lt(e.vueComposableCandidates),b=g/t*1e3;o("vue-composable-candidates",Math.min(10,Math.round(b)),gr(e.vueComposableCandidates,"duplicated Vue behavior pair(s)"));let S=e.vueLargeViewPressure.count/t*1e3;o("vue-large-view-pressure",Math.min(5,Math.round(S/2)),`${e.vueLargeViewPressure.count} large Vue view pressure file(s)`);let x=Lt(e.wrappers);o("wrappers",Math.min(3,x),gr(e.wrappers,"wrapper candidate(s)"));let I=Lt(e.passthroughs);o("passthroughs",Math.min(3,I),gr(e.passthroughs,"passthrough candidate(s)")),o("stale-abstractions",Math.min(8,e.stale.unused),`${e.stale.unused} unused stale abstraction(s); ${e.stale.singleUse} single-consumer signal(s)`);let L=e.drift.direct/t;if(o("drift",Math.min(5,Math.round(L*50)),`${e.drift.direct} direct drift finding(s); ${e.drift.signal} signal drift finding(s)`),o("complexity",Math.min(5,e.complexity.extremeCount*2),`${e.complexity.extremeCount} extreme complexity hotspot(s)`),e.gitEvidence){let C=e.gitEvidence.hiddenCoupling.scoreCount;o("hidden-coupling",Math.min(5,Math.ceil(C/10)),gr({count:e.gitEvidence.hiddenCoupling.pairCount,scoreCount:C},"co-changing pair(s) without a structural link"))}if(s("cycles-pressure","Circular dependencies",e.realCycleCount,3,10,3,"cycle(s)"),s("complexity-pressure","Extreme complexity",e.complexity.extremeCount,3,5,2,"extreme complexity hotspot(s)"),e.gitEvidence){let C=e.gitEvidence.hiddenCoupling.scoreCount;s("hidden-coupling-pressure","Hidden coupling",C,50,10,4,"score-weighted co-changing pair(s)")}return s("similar-pressure","Similar functions",e.similarCount,Math.max(50,n*.01),8,4,"similar function pair(s)"),s("react-component-duplicates-pressure","Duplicated React components",e.reactComponentDuplicates.count,Math.max(10,t*.01),8,4,"duplicated React component pair(s)"),s("react-hook-candidates-pressure","Duplicated React hook behavior",d,Math.max(10,t*.01),8,4,"duplicated React behavior pair(s)"),s("react-large-component-pressure-pressure","Large React components",e.reactLargeComponentPressure.count,Math.max(10,t*.01),4,2,"large React component pressure file(s)"),s("vue-component-duplicates-pressure","Duplicated Vue components",e.vueComponentDuplicates.count,Math.max(10,t*.01),8,4,"duplicated Vue component pair(s)"),s("vue-composable-candidates-pressure","Duplicated Vue behavior",g,Math.max(10,t*.01),8,4,"duplicated Vue behavior pair(s)"),s("vue-large-view-pressure-pressure","Large Vue views",e.vueLargeViewPressure.count,Math.max(10,t*.01),4,2,"large Vue view pressure file(s)"),s("extract-pressure","Extraction candidates",e.extractCount,Math.max(50,n*.01),4,2,"extraction candidate(s)"),s("wrappers-pressure","Wrapper functions",x,50,4,2,"wrapper candidate(s)"),s("passthroughs-pressure","Passthrough functions",I,50,4,2,"passthrough candidate(s)"),s("stale-abstractions-pressure","Single-consumer stale abstraction signals",e.stale.singleUse,Math.max(50,n*.02),4,2,"single-consumer stale abstraction signal(s)"),s("drift-pressure","Structural drift signals",e.drift.signal,Math.max(10,t*.1),4,2,"signal drift finding(s)"),{breakdown:i,pressure:r}}import{getHeapStatistics as qE}from"v8";var UE=64*1024*1024;function kc(){let e=globalThis.gc;if(!e)return;let t=qE();t.heap_size_limit-t.used_heap_size<UE||e()}var WE=50,GE=75e3,zE=5e3,Vp=2500,qp=50,KE=10,hr=["overview","dead","isolated","cycles","similar","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"],JE={overview:(e,t,n,i)=>({phase:"overview",statsResult:i,warnings:n.warnings}),dead:(e,t,n)=>({phase:"dead",dead:YE(e,t,n)}),isolated:(e,t,n)=>({phase:"isolated",isolated:ZE(e,t,n)}),cycles:(e,t,n)=>({phase:"cycles",realCycleCount:eT(e,t,n)}),similar:(e,t,n)=>({phase:"similar",similarCount:tT(e,t,n)}),"react-component-duplicates":(e,t,n)=>({phase:"react-component-duplicates",reactComponentDuplicates:iT(e,t,n)}),"react-hook-candidates":(e,t,n)=>({phase:"react-hook-candidates",reactHookCandidates:rT(e,t,n)}),"react-large-component-pressure":(e,t,n)=>({phase:"react-large-component-pressure",reactLargeComponentPressure:oT(e,t,n)}),"vue-component-duplicates":(e,t,n)=>({phase:"vue-component-duplicates",vueComponentDuplicates:sT(e,t,n)}),"vue-composable-candidates":(e,t,n)=>({phase:"vue-composable-candidates",vueComposableCandidates:aT(e,t,n)}),"vue-large-view-pressure":(e,t,n)=>({phase:"vue-large-view-pressure",vueLargeViewPressure:cT(e,t,n)}),"extract-candidates":(e,t,n)=>({phase:"extract-candidates",extractCount:nT(e,t,n)}),"wrapper-candidates":(e,t,n)=>({phase:"wrapper-candidates",wrappers:lT(e,t,n)}),"passthrough-candidates":(e,t,n)=>({phase:"passthrough-candidates",passthroughs:uT(e,t,n)}),"stale-abstractions":(e,t,n)=>({phase:"stale-abstractions",stale:dT(e,t,n)}),drift:(e,t,n)=>({phase:"drift",drift:fT(e,t,n)}),"complexity-hotspots":(e,t,n)=>({phase:"complexity-hotspots",complexity:gT(e,t,n)}),"git-evidence":(e,t,n)=>({phase:"git-evidence",gitEvidence:mT(e,n)}),suppressions:(e,t,n)=>({phase:"suppressions",suppressions:pT(e,n)})};function wc(e,t,n={}){return QE(e,n.full!==!1,(i,r)=>JE[t](e,n.scope,r,i))}function QE(e,t,n){let i=Oe(e),r=hT(i,t);try{return n(i,r)}finally{Sa(e,{semanticProvider:!0}),kc()}}function Lc(e){return Bp(XE(e))}function XE(e){let t=he(e,"overview");return{statsResult:t.statsResult,warnings:t.warnings,dead:he(e,"dead").dead,isolated:he(e,"isolated").isolated,realCycleCount:he(e,"cycles").realCycleCount,similarCount:he(e,"similar").similarCount,reactComponentDuplicates:he(e,"react-component-duplicates").reactComponentDuplicates,reactHookCandidates:he(e,"react-hook-candidates").reactHookCandidates,reactLargeComponentPressure:he(e,"react-large-component-pressure").reactLargeComponentPressure,vueComponentDuplicates:he(e,"vue-component-duplicates").vueComponentDuplicates,vueComposableCandidates:he(e,"vue-composable-candidates").vueComposableCandidates,vueLargeViewPressure:he(e,"vue-large-view-pressure").vueLargeViewPressure,extractCount:he(e,"extract-candidates").extractCount,wrappers:he(e,"wrapper-candidates").wrappers,passthroughs:he(e,"passthrough-candidates").passthroughs,stale:he(e,"stale-abstractions").stale,drift:he(e,"drift").drift,complexity:he(e,"complexity-hotspots").complexity,gitEvidence:Up(e,"git-evidence")?.gitEvidence??null,suppressions:Up(e,"suppressions")?.suppressions??null}}function Up(e,t){return e.find(n=>n.phase===t)}function he(e,t){let n=e.find(i=>i.phase===t);if(!n)throw new Error(`Missing health phase result: ${t}`);return n}function YE(e,t,n){return ce(e,n,"dead",()=>{let i=Rt(e,{scope:t,...ae.dead,scanLimit:n.candidateScanLimit});return Go(ST(e,i.symbols))})}function ZE(e,t,n){return ce(e,n,"isolated",()=>{let i=pn(e,{scope:t,...ae.isolated,scanLimit:n.candidateScanLimit});return Go(xT(e,i))})}function eT(e,t,n){return ce(e,n,"cycles",()=>mn(e,{scope:t}).filter(r=>r.kind==="real").length)}function tT(e,t,n){return ce(e,n,"similar",()=>kt(e,{scope:t,...ae.similar,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit}).length)}function nT(e,t,n){return ce(e,n,"extract-candidates",()=>yn(e,{scope:t,...ae.extract,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit}).length)}function iT(e,t,n){return ce(e,n,"react-component-duplicates",()=>{let i=fn(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Dc(i)})}function rT(e,t,n){return ce(e,n,"react-hook-candidates",()=>{let i=gn(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return zp(i,vT)})}function oT(e,t,n){return ce(e,n,"react-large-component-pressure",()=>{let i=er(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return CT(i)})}function sT(e,t,n){return ce(e,n,"vue-component-duplicates",()=>{let i=hn(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Dc(i)})}function aT(e,t,n){return ce(e,n,"vue-composable-candidates",()=>{let i=bn(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return zp(i,RT)})}function cT(e,t,n){return ce(e,n,"vue-large-view-pressure",()=>{let i=tr(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Go(i)})}function lT(e,t,n){return ce(e,n,"wrapper-candidates",()=>{let i=Ln(e,{scope:t,...ae.wrappers,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Gp(i,kT)})}function uT(e,t,n){return ce(e,n,"passthrough-candidates",()=>{let i=kn(e,{scope:t,...ae.passthroughs,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Gp(i,wT)})}function dT(e,t,n){return ce(e,n,"stale-abstractions",()=>{let i=wn(e,{scope:t,...ae.stale,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit}),r=i.filter(o=>o.consumers===0).length;return{count:i.length,loc:i.reduce((o,s)=>o+s.loc,0),files:[...new Set(i.map(o=>o.file))],unused:r,singleUse:i.length-r}})}function mT(e,t){return ce(e,t,"git-evidence",()=>{let n=Io(e);if(!n)return null;let i=xn(e,void 0,{limit:t.candidateResultLimit}),r={};for(let[o,s]of n)r[o]={changes:s.changes,fixChanges:s.fixChanges};return{amplification:Ym(e),hiddenCoupling:{pairCount:i.findings.length,scoreCount:Ic(i.findings.reduce((o,s)=>o+Wp(s),0)),top:i.findings.slice(0,5).map(o=>({fileA:o.fileA,fileB:o.fileB,together:o.together,confidence:o.confidence,focusedTogether:o.focusedTogether,broadTogether:o.broadTogether,broadCommitRatio:o.broadCommitRatio,lastTogetherAt:o.lastTogetherAt,recentTogether:o.recentTogether,commitScope:o.commitScope,recency:o.recency,scoreWeight:Wp(o),subjectContext:o.subjectContext}))},fileStats:r}})}function pT(e,t){return ce(e,t,"suppressions",()=>{let n=Uo(e);return{total:n.total,byCategory:{...n.byCategory}}})}function fT(e,t,n){return ce(e,n,"drift",()=>{let i=Rn(e,{scope:t,...ae.drift}),r=i.results.filter(a=>a.kind!=="pattern-deviation"),o=r.filter(a=>a.actionTier==="direct").length,s=r.length-o;return{count:r.length,unusedImports:i.unusedImports,layerViolations:i.layerViolations,direct:o,signal:s}})}function gT(e,t,n){return ce(e,n,"complexity-hotspots",()=>{let i=fr(e,{scope:t,minLoc:10,limit:n.complexityResultLimit,scanLimit:n.candidateScanLimit,semantic:!1});return{top:i.slice(0,5).map(r=>({symbol:r.shortName,score:r.score,file:r.file})),extremeCount:i.filter(r=>r.score>WE).length}})}function hT(e,t){let n=e.symbols>=GE||e.documents>=zE,i=t?Number.POSITIVE_INFINITY:qp,r=t?Number.POSITIVE_INFINITY:KE;return!n||t?{candidateScanLimit:void 0,candidateResultLimit:i,complexityResultLimit:r,releaseCachesBetweenPhases:!0,warnings:t&&n?["Large index detected; running health without candidate scan or result caps because full mode is enabled."]:[]}:{candidateScanLimit:Vp,candidateResultLimit:i,complexityResultLimit:r,releaseCachesBetweenPhases:!0,warnings:[`Large index detected; candidate-style health checks scanned their highest-priority ${Vp} symbols and reported their top ${qp} findings. Enable full mode for unbounded candidate counts.`]}}function bT(e,t){t.releaseCachesBetweenPhases&&(Sa(e),kc())}function ce(e,t,n,i){yT(n);try{return i()}finally{bT(e,t)}}function yT(e){process.env.SCIP_QUERY_HEALTH_TRACE==="1"&&console.error(`[health] ${e}`)}function ST(e,t){return t.filter(n=>!we(e,n.relativePath)&&!ie(e,n.symbol,n.relativePath)&&n.kind==="dead-code")}function xT(e,t){return t.filter(n=>!we(e,n.relativePath)&&!ie(e,n.symbol,n.relativePath))}function Go(e){let t=new Set;for(let n of e){let i=n.relativePath??n.file;i&&t.add(i)}return{count:e.length,loc:e.reduce((n,i)=>n+i.loc,0),files:[...t]}}function Gp(e,t){return{...Go(e),scoreCount:Ic(e.reduce((i,r)=>i+t(r),0))}}function CT(e){let t=new Map;for(let n of e)t.set(n.file,Math.max(t.get(n.file)??0,n.loc));return{count:t.size,loc:[...t.values()].reduce((n,i)=>n+i,0),files:[...t.keys()]}}function Dc(e){let t=new Map;for(let n of e)t.set(n.fileA,Math.max(t.get(n.fileA)??0,n.locA)),t.set(n.fileB,Math.max(t.get(n.fileB)??0,n.locB));return{count:e.length,loc:[...t.values()].reduce((n,i)=>n+i,0),files:[...t.keys()]}}function zp(e,t){return{...Dc(e),scoreCount:Ic(e.reduce((i,r)=>i+t(r),0))}}function vT(e){let t=e.sharedHooks.length>0,n=Kp({namedState:e.sharedState,requests:e.sharedRequests,lifecycle:e.sharedEffects,functions:e.sharedHandlers});return t&&n<=2?0:t?.5:Jp(e.sharedState,e.sharedHandlers,e.sharedHandlerVerbs)?.25:n>=2?1:.5}function RT(e){let t=e.sharedComposables.length+e.sharedStores.length>0,n=Kp({namedState:e.sharedBindings,requests:e.sharedRequests,lifecycle:e.sharedLifecycle,functions:e.sharedFunctions});return t&&n<=2?0:t?.5:Jp(e.sharedBindings,e.sharedFunctions,e.sharedFunctionVerbs)?.25:n>=2?1:.5}function Kp(e){return e.requests.length*2+e.lifecycle.length+e.namedState.filter(t=>!Xp.has(Qp(t))).length+Math.min(e.functions.length,3)}function Jp(e,t,n){let i=[...e,...t,...n].map(Qp);return i.length>0&&i.every(r=>Xp.has(r))}function Qp(e){return e.replace(/^handle/,"").replace(/^is/,"").replace(/^has/,"").toLowerCase()}function kT(e){return e.actionTier==="signal"?.25:1}function wT(e){return e.actionTier==="signal"?.25:1}function Wp(e){return e.commitScope==="broad-sweep"?e.recency==="recent"?.25:0:e.commitScope==="mixed"?e.recency==="recent"?.5:.25:e.recency==="recent"?1:.5}function Ic(e){return Math.round(e*100)/100}var Xp=new Set(["add","apply","cancel","change","clear","close","create","delete","draft","edit","error","filter","form","load","loading","name","open","refresh","remove","reset","save","saving","search","select","selected","submit","toggle","update","value"]);function Pc(e,t,n,i={}){let r=B(e,t),o=B(e,n);if(!r||!o)return null;let s=new Set(Ae(e,r,{semantic:i.semantic}).map(b=>b.symbol)),a=new Set(Ae(e,o,{semantic:i.semantic}).map(b=>b.symbol)),c=[];for(let b of s)a.has(b)&&c.push(b);let l=[];for(let b of s)a.has(b)||l.push(b);let u=[];for(let b of a)s.has(b)||u.push(b);let d=new Set([...s,...a]),m=d.size>0?c.length/d.size:0,p;d.size===0?p="Neither function calls other tracked symbols. There is no callee-pattern evidence for consolidation; inspect the source bodies directly.":c.length===0?p="These functions do not share any callees. They are not a callee-based consolidation candidate.":l.length===0&&u.length===0?p="These functions have identical tracked callee sets. They are a strong structural match, but identical callees do not prove interchangeable semantics; inspect signatures, control flow, and return values before consolidating.":l.length===0?p="A's tracked callees are a subset of B's. B may subsume part of A's structure, but verify signatures, guards, and non-call logic before replacing A with B.":u.length===0?p="B's tracked callees are a subset of A's. A may subsume part of B's structure, but verify signatures, guards, and non-call logic before replacing B with A.":l.length<=2&&u.length<=2?p=`Create a shared function with the ${c.length} common callees. Pass the ${l.length+u.length} divergent callees as parameters or strategy callbacks.`:p=`Extract the ${c.length} shared callees into a common helper. Each function calls the helper plus its own unique logic (${l.length} callees in A, ${u.length} in B).`;let h=r.endLine-r.startLine+1,g=o.endLine-o.startLine+1;return{symbolA:{symbol:r.symbol,shortName:y(r.symbol),file:r.relativePath,loc:h},symbolB:{symbol:o.symbol,shortName:y(o.symbol),file:o.relativePath,loc:g},similarity:m,sharedCallees:c.map(y),uniqueToA:l.map(y),uniqueToB:u.map(y),consolidationStrategy:p}}import{readFileSync as Yp}from"fs";import{extname as LT,join as Zp}from"path";function Nc(e,t,n={}){let{context:i=0}=n,r=DT(t);if(r)return PT(e,r.filePath,r.startLine,r.endLine,i);let o=B(e,t);return o?IT(e,o,i):null}function DT(e){let t=e.match(/^(.+\.\w+):(\d+)-(\d+)$/);return t?{filePath:t[1],startLine:parseInt(t[2],10),endLine:parseInt(t[3],10)}:null}function IT(e,t,n){let i=e.get("SELECT language FROM documents WHERE relative_path = ?",t.relativePath),r=Zp(e.config.projectRoot,t.relativePath),o;try{o=Yp(r,"utf-8")}catch{return null}let s=o.split(`
579
+ WHERE m.symbol_id = ? AND m.role != 1`,t)?.c??0}function YT(e,t){return new Set(e.filter(n=>n.file!==t).map(n=>n.symbol)).size}function ZT(e,t){let n=mn(e),r=0,i=[/\bif\b/g,/\belse\s+if\b/g,/\belse\b/g,/\bfor\b/g,/\bwhile\b/g,/\bswitch\b/g,/\bcase\b/g,/\bcatch\b/g,/\?\s*[^?]/g,/&&/g,/\|\|/g];for(let o of i){let s=n.match(o);s&&(r+=s.length)}if(t==="python"){let o=[/\belif\b/g,/\bexcept\b/g,/\bfinally\b/g];for(let s of o){let a=n.match(s);a&&(r+=a.length)}}else if(t==="rust"){let o=[/\bmatch\b/g,/=>/g,/\bloop\b/g];for(let s of o){let a=n.match(s);a&&(r+=a.length)}}else if(t==="ruby"){let o=[/\belsif\b/g,/\bunless\b/g,/\brescue\b/g,/\bwhen\b/g];for(let s of o){let a=n.match(s);a&&(r+=a.length)}}else if(t==="go"){let o=[/\bselect\b/g,/\bdefer\b/g];for(let s of o){let a=n.match(s);a&&(r+=a.length)}}return r}function Ii(e,t,n={}){let r=B(e,t);if(!r)return null;let i=[{file:r.relativePath,line:r.startLine}],o=Kt(e,r,{semantic:n.semantic}).map(c=>({file:c.file,line:c.line,enclosingSymbol:c.enclosingSymbol??"(top-level)",enclosingShort:c.enclosingSymbol?b(c.enclosingSymbol):"(top-level)"})),{producers:s,consumers:a}=e_(e,r,o,{semantic:n.semantic!==!1});return{symbol:r.symbol,shortName:b(r.symbol),relativePath:r.relativePath,definitionSites:i.filter(c=>!e.isIgnored(c.file)),usageSites:o,producers:s.filter(c=>!e.isIgnored(c.file)).map(c=>({symbol:c.symbol,shortName:b(c.symbol),file:c.file})),consumers:a.filter(c=>!e.isIgnored(c.file)).map(c=>({symbol:c.symbol,shortName:c.symbol===c.file?"(top-level)":b(c.symbol),file:c.file}))}}function e_(e,t,n,r){let i=br(je(e,t,{limit:30,semantic:r.semantic}).map(a=>({symbol:a.symbol,file:a.file}))),o=br(Ue(e,t,{limit:30,semantic:r.semantic})),s=o.length>0?o:br(n.map(a=>({symbol:a.enclosingSymbol==="(top-level)"?a.file:a.enclosingSymbol,file:a.file})));return{producers:i,consumers:s}}function kr(e,t,n={}){let{direction:r="backward",maxDepth:i=3}=n,o=B(e,t);return o?r==="backward"?t_(e,o,i,{semantic:n.semantic!==!1}):n_(e,o,{semantic:n.semantic!==!1}):null}function t_(e,t,n,r){let i=[],o=new Set([t.symbol]),s=[t];for(let a=1;a<=n&&s.length!==0;a++){let c=[];for(let l of s){let u=je(e,l,{semantic:r.semantic});for(let d of u){if(o.has(d.symbol))continue;o.add(d.symbol),i.push({symbol:d.symbol,shortName:b(d.symbol),file:d.file,relationship:a===1?"referenced within definition (callee)":`depth ${a} callee`});let m=sr(e,d.symbol);m&&!e.isIgnored(m.relativePath)&&c.push(m)}}s=c}return{symbol:t.symbol,shortName:b(t.symbol),direction:"backward",connectedSymbols:i}}function n_(e,t,n){let r=new Set,i=[],o=new T(e);for(let s of Kt(e,t,{semantic:n.semantic})){if(i.length>=30)break;let a=s.enclosingSymbol??Be(o.definitionsForFile(s.file),s.line)?.symbol??null;if(!a||a===t.symbol)continue;let c=sr(e,a);!c||e.isIgnored(c.relativePath)||r.has(c.symbol)||(r.add(c.symbol),i.push({symbol:c.symbol,shortName:b(c.symbol),file:c.relativePath,relationship:`references target at ${s.file}:${s.line+1}`}))}return i.sort((s,a)=>s.file.localeCompare(a.file)),{symbol:t.symbol,shortName:b(t.symbol),direction:"forward",connectedSymbols:i}}function Wc(e,t,n={}){let r=n.impactDepth??3,i=n.sliceDepth??3,o=n.semantic,s=!i_(t),a=s?ri(e,t,{semantic:o}):{definitions:[],referencedBy:[]},c=s?li(e,t,{semantic:o}):null,l=s?Li(e,t,{semantic:o}):null,u=s?Ii(e,t,{semantic:o}):null,d=s?kr(e,t,{direction:"backward",maxDepth:i,semantic:o}):null,m=s?kr(e,t,{direction:"forward",maxDepth:i,semantic:o}):null,f=s?gi(e,t,{maxDepth:r,scope:n.scope}):[],h=hi(e,t,{semantic:o}),g=ii(e,t),y=oi(e,t),S=si(e,t),C=ai(e,t),k={symbol:a.definitions.length>0||a.referencedBy.length>0||c!==null||l!==null||u!==null||d!==null||m!==null||f.length>0,file:h!==null||g.length>0||y.length>0,module:S.files.length>0||S.symbols.length>0||C.length>0},D=[];!k.symbol&&!k.file&&!k.module&&D.push("No symbol, file, or module matched target.");let x=h?.file??a.definitions[0]?.relativePath??null;return{target:t,matched:k,history:r_(e,x),trace:a,callGraph:c,complexity:l,dataflow:u,backwardSlice:d,forwardSlice:m,affected:f,changeSurface:h,deps:g,rdeps:y,system:S,surface:C,warnings:D}}function r_(e,t){let n={available:!1,file:t,churn:null,coChangePartners:[],suppressionsInFile:0};if(!t)return n;let r=Jo(e);if(!r)return n;let i=In(e,t,{limit:5});return{available:!0,file:t,churn:r.get(t)??{changes:0,fixChanges:0,lastChangedAt:0},coChangePartners:i.findings.map(o=>({file:o.fileA===t?o.fileB:o.fileA,together:o.together,confidence:o.confidence,subjectContext:o.subjectContext})),suppressionsInFile:ms(e).byFile.get(t)??0}}function i_(e){return e.includes("/")||e.includes("\\")||/\.[A-Za-z0-9]+(?::\d+(?:-\d+)?)?$/.test(e)}function Di(e,t){let{scope:n,minLoc:r=10,limit:i=30,scanLimit:o}=t??{},s=new T(e);return ze({candidates:()=>s.productionCallableDefinitions({scope:n,requireCallableSymbol:!0,includeSuppressed:!0,sortByLocDesc:typeof o=="number"&&o>0}),scanLimit:o,prepare:a=>({callerMap:s.crossFileCallerMap(a,{semantic:t?.semantic!==!1}),calleeMap:s.calleeMap(a,{semantic:t?.semantic!==!1})}),evaluate:(a,c)=>o_(a,c,r),orderResults:(a,c)=>c.score-a.score||c.loc-a.loc,limit:i})}function o_(e,t,n){let r=e.endLine-e.startLine+1;if(r<n)return null;let i=t.callerMap.get(e.symbolId)?.size??0,o=t.calleeMap.get(e.symbolId)??[],s=o.filter(l=>l.file!==e.relativePath),a=new Set(s.map(l=>`${l.symbol}|${l.file}`)).size,c=new Set(o.map(l=>`${l.symbol}|${l.file}`)).size;return{symbol:e.symbol,shortName:b(e.symbol),file:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:r,fanIn:i,fanOut:a,calleeCount:c,score:Math.round(r/50*(i/5)*Math.max(a/5,1)*100)/100}}function Et(e){return e.scoreCount??e.count}function Rf(e){let t=l_(e),{breakdown:n,pressure:r}=u_(e),i=vf(n,"risk"),o=vf(n,"hygiene");return{score:Math.min(i,o),riskScore:i,hygieneScore:o,scoreBreakdown:n,overview:{documents:e.statsResult.documents,symbols:e.statsResult.symbols,indexSizeBytes:e.statsResult.indexSizeBytes},findings:{deadSymbols:e.dead.count,deadLoc:e.dead.loc,isolatedSymbols:e.isolated.count,isolatedLoc:e.isolated.loc,cycles:e.realCycleCount,similarPairs:e.similarCount,reactComponentDuplicatePairs:e.reactComponentDuplicates.count,reactHookCandidatePairs:e.reactHookCandidates.count,reactHookCandidateScoreCount:Et(e.reactHookCandidates),reactLargeComponentPressureFiles:e.reactLargeComponentPressure.count,vueComponentDuplicatePairs:e.vueComponentDuplicates.count,vueComposableCandidatePairs:e.vueComposableCandidates.count,vueComposableCandidateScoreCount:Et(e.vueComposableCandidates),vueLargeViewPressureFiles:e.vueLargeViewPressure.count,extractionCandidates:e.extractCount,wrappers:e.wrappers.count,wrapperScoreCount:Et(e.wrappers),passthroughs:e.passthroughs.count,staleTypes:e.stale.count,driftedFiles:e.drift.count,complexityHotspotCount:e.complexity.extremeCount,hiddenCouplingPairs:e.gitEvidence?.hiddenCoupling.pairCount??null,hiddenCouplingScoreCount:e.gitEvidence?.hiddenCoupling.scoreCount??null},axes:s_(e),validation:c_(e),suppressions:e.suppressions,actions:t,pressure:r,topComplexity:e.complexity.top,warnings:e.warnings.length>0?e.warnings:void 0}}function s_(e){return{deletable:{loc:e.dead.loc+e.isolated.loc,symbols:e.dead.count+e.isolated.count},cycles:{count:e.realCycleCount},changeAmplification:e.gitEvidence?.amplification??null,hiddenCoupling:e.gitEvidence?.hiddenCoupling??null,churnWeightedComplexity:a_(e),evidenceQuality:{graphFindings:e.dead.count+e.isolated.count+e.realCycleCount,heuristicFindings:e.similarCount+e.reactComponentDuplicates.count+e.reactHookCandidates.count+e.reactLargeComponentPressure.count+e.vueComponentDuplicates.count+e.vueComposableCandidates.count+e.vueLargeViewPressure.count+e.extractCount+e.wrappers.count+e.passthroughs.count+e.stale.count+e.drift.count,userSuppressed:e.suppressions?.total??0}}}function a_(e){let t=e.gitEvidence?.fileStats;return t?e.complexity.top.map(n=>{let r=n.file?t[n.file]?.changes??0:0;return{...n,changes:r,weighted:ht(n.score*Math.log2(1+r))}}).sort((n,r)=>r.weighted-n.weighted):null}function c_(e){let t=e.gitEvidence?.fileStats;if(!t)return null;let n={dead:e.dead.files??[],isolated:e.isolated.files??[],wrappers:e.wrappers.files??[],passthroughs:e.passthroughs.files??[],stale:e.stale.files??[],reactComponents:e.reactComponentDuplicates.files??[],reactHooks:e.reactHookCandidates.files??[],reactLargeComponents:e.reactLargeComponentPressure.files??[],vueComponents:e.vueComponentDuplicates.files??[],vueComposables:e.vueComposableCandidates.files??[],vueLargeViews:e.vueLargeViewPressure.files??[]},r=new Set(Object.values(n).flat()),i=0,o=0,s=0;for(let[u,d]of Object.entries(t))r.has(u)?i+=d.fixChanges:(o+=d.fixChanges,s+=1);let a=r.size>0?ht(i/r.size):0,c=s>0?ht(o/s):0,l={};for(let[u,d]of Object.entries(n)){let m=new Set(d);if(m.size===0)continue;let f=0;for(let g of m)f+=t[g]?.fixChanges??0;let h=ht(f/m.size);l[u]={flaggedFiles:m.size,fixDensity:h,lift:c>0?ht(h/c):null}}return{flaggedFiles:r.size,flaggedFixDensity:a,baselineFixDensity:c,ratio:r.size>0&&c>0?ht(a/c):null,byCategory:l}}function ht(e){return Math.round(e*100)/100}function kf(e){return Number.isInteger(e)?String(e):e.toFixed(2).replace(/0+$/,"").replace(/\.$/,"")}function ps(e,t="existing shared infrastructure discount"){let n=Et(e);return Math.abs(n-e.count)<.01?"":` (${kf(n)} score-weighted after ${t})`}function Pi(e,t){let n=Et(e),r=`${e.count} ${t}`;return Math.abs(n-e.count)<.01?r:`${r} (${kf(n)} score-weighted)`}function l_(e){let t=[];if(e.dead.count>0&&t.push({category:"Dead code",evidence:"graph-fact",description:`${e.dead.count} symbols with zero references anywhere \u2014 safe to delete`,effort:"low",impact:"high",count:e.dead.count,locRecoverable:e.dead.loc}),e.isolated.count>0&&t.push({category:"Isolated symbols",evidence:"graph-fact",description:`${e.isolated.count} symbols completely disconnected from the codebase graph`,effort:"low",impact:"medium",count:e.isolated.count,locRecoverable:e.isolated.loc}),e.realCycleCount>0&&t.push({category:"Circular dependencies",evidence:"graph-fact",description:`${e.realCycleCount} cycle(s) \u2014 break with dependency inversion or module restructuring`,effort:"medium",impact:"high",count:e.realCycleCount,locRecoverable:0}),e.similarCount>0&&t.push({category:"Similar functions",evidence:"heuristic",description:`${e.similarCount} pairs with real logic overlap (beyond shared imports) \u2014 consolidation candidates`,effort:"medium",impact:"medium",count:e.similarCount,locRecoverable:0}),e.reactComponentDuplicates.count>0&&t.push({category:"Duplicated React components",evidence:"heuristic",description:`${e.reactComponentDuplicates.count} React component pair(s) share JSX structure \u2014 extract or reuse the shared UI concept`,effort:"medium",impact:"medium",count:e.reactComponentDuplicates.count,locRecoverable:e.reactComponentDuplicates.loc}),e.reactHookCandidates.count>0&&t.push({category:"Duplicated React hook behavior",evidence:"heuristic",description:`${e.reactHookCandidates.count} React component pair(s) share state/effect/request behavior${ps(e.reactHookCandidates)} \u2014 extract or reuse a hook`,effort:"medium",impact:"medium",count:e.reactHookCandidates.count,locRecoverable:e.reactHookCandidates.loc}),e.reactLargeComponentPressure.count>0&&t.push({category:"Large React components",evidence:"heuristic",description:`${e.reactLargeComponentPressure.count} React component(s) concentrate JSX/behavior pressure \u2014 split by reason to change`,effort:"medium",impact:"medium",count:e.reactLargeComponentPressure.count,locRecoverable:0}),e.vueComponentDuplicates.count>0&&t.push({category:"Duplicated Vue components",evidence:"heuristic",description:`${e.vueComponentDuplicates.count} Vue component pair(s) share template structure \u2014 extract or reuse the shared UI concept`,effort:"medium",impact:"medium",count:e.vueComponentDuplicates.count,locRecoverable:e.vueComponentDuplicates.loc}),e.vueComposableCandidates.count>0&&t.push({category:"Duplicated Vue behavior",evidence:"heuristic",description:`${e.vueComposableCandidates.count} Vue component pair(s) share state/effect/request behavior${ps(e.vueComposableCandidates)} \u2014 extract or reuse a composable`,effort:"medium",impact:"medium",count:e.vueComposableCandidates.count,locRecoverable:e.vueComposableCandidates.loc}),e.vueLargeViewPressure.count>0&&t.push({category:"Large Vue views",evidence:"heuristic",description:`${e.vueLargeViewPressure.count} Vue file(s) concentrate template/script/style pressure \u2014 split by reason to change`,effort:"medium",impact:"medium",count:e.vueLargeViewPressure.count,locRecoverable:0}),e.extractCount>0&&t.push({category:"Extraction candidates",evidence:"heuristic",description:`${e.extractCount} large functions with isolated callee clusters \u2014 review same-file or feature-local extraction seams`,effort:"medium",impact:"medium",count:e.extractCount,locRecoverable:0}),e.wrappers.count>0&&t.push({category:"Wrapper functions",evidence:"heuristic",description:`${e.wrappers.count} single-consumer symbols${ps(e.wrappers,"boundary-evidence discount")} \u2014 inline direct wrappers or review boundary signals`,effort:"low",impact:"low",count:e.wrappers.count,locRecoverable:e.wrappers.loc}),e.passthroughs.count>0&&t.push({category:"Passthrough functions",evidence:"heuristic",description:`${e.passthroughs.count} functions that just forward to one callee \u2014 unnecessary indirection`,effort:"low",impact:"low",count:e.passthroughs.count,locRecoverable:e.passthroughs.loc}),e.stale.count>0){let i=[];e.stale.unused>0&&i.push(`${e.stale.unused} unused`),e.stale.singleUse>0&&i.push(`${e.stale.singleUse} single-consumer (not in types file)`),t.push({category:"Stale abstractions",evidence:"heuristic",description:`${i.join(", ")} \u2014 remove unused abstractions; review single-consumer ownership before moving or inlining`,effort:"low",impact:"medium",count:e.stale.count,locRecoverable:e.stale.loc})}if(e.drift.count>0){let i=[];e.drift.unusedImports>0&&i.push(`${e.drift.unusedImports} unused imports`),e.drift.layerViolations>0&&i.push(`${e.drift.layerViolations} layer violations`),t.push({category:"Structural drift",evidence:"heuristic",description:`${i.join(", ")} \u2014 remove direct drift; review signal drift against layer ownership`,effort:e.drift.layerViolations>0?"medium":"low",impact:e.drift.layerViolations>0?"medium":"low",count:e.drift.count,locRecoverable:0})}if(e.gitEvidence&&e.gitEvidence.hiddenCoupling.pairCount>0){let i=e.gitEvidence.hiddenCoupling.top[0];t.push({category:"Hidden coupling",evidence:"change-graph",description:`${e.gitEvidence.hiddenCoupling.pairCount} file pair(s) co-change without a structural link`+ps({count:e.gitEvidence.hiddenCoupling.pairCount,scoreCount:e.gitEvidence.hiddenCoupling.scoreCount},"broad/stale-history discount")+(i?` (e.g. ${i.fileA} \u2194 ${i.fileB})`:"")+" \u2014 name the shared concept or enforce the sync",effort:"medium",impact:"high",count:e.gitEvidence.hiddenCoupling.pairCount,locRecoverable:0})}let n={high:3,medium:2,low:1},r={low:3,medium:2,high:1};return t.sort((i,o)=>{let s=n[i.impact]*r[i.effort];return n[o.impact]*r[o.effort]-s}),t}var Cf={"dead-code":"risk",isolated:"risk",cycles:"risk",complexity:"risk","hidden-coupling":"risk","cycles-pressure":"risk","complexity-pressure":"risk","hidden-coupling-pressure":"risk",similar:"hygiene","react-component-duplicates":"hygiene","react-hook-candidates":"hygiene","react-large-component-pressure":"hygiene","vue-component-duplicates":"hygiene","vue-composable-candidates":"hygiene","vue-large-view-pressure":"hygiene",extract:"hygiene",wrappers:"hygiene",passthroughs:"hygiene","stale-abstractions":"hygiene",drift:"hygiene","similar-pressure":"hygiene","react-component-duplicates-pressure":"hygiene","react-hook-candidates-pressure":"hygiene","react-large-component-pressure-pressure":"hygiene","vue-component-duplicates-pressure":"hygiene","vue-composable-candidates-pressure":"hygiene","vue-large-view-pressure-pressure":"hygiene","extract-pressure":"hygiene","wrappers-pressure":"hygiene","passthroughs-pressure":"hygiene","stale-abstractions-pressure":"hygiene","drift-pressure":"hygiene"};function vf(e,t){let n=e.filter(r=>r.kind===t).reduce((r,i)=>r+i.points,0);return Math.max(0,Math.min(100,100-n))}function u_(e){let t=Math.max(e.statsResult.documents,1),n=Math.max(e.statsResult.symbols,1),r=[],i=[],o=(x,I,M)=>{I>0&&r.push({axis:x,points:I,detail:M,kind:Cf[x]??"hygiene"})},s=(x,I,M,L,G,xe,Fe)=>{let Ne=Math.max(L,1);if(M<=Ne)return;let Ks=M/Ne,Xs=Math.min(G,Math.ceil(Math.log2(Ks)*xe));if(Xs<=0)return;let kb=Cf[x]??"hygiene";i.push({axis:x,category:I,kind:kb,count:M,threshold:ht(Ne),ratio:ht(Ks),extraPenalty:Xs}),o(x,Xs,`${M} ${Fe} exceed pressure threshold ${ht(Ne)} (${ht(Ks)}x)`)},a=e.dead.count/n;o("dead-code",Math.min(20,Math.round(a*200)),`${e.dead.count} dead symbols (${e.dead.loc} LOC deletable)`);let c=e.isolated.count/n;o("isolated",Math.min(10,Math.round(c*200)),`${e.isolated.count} isolated symbols (${e.isolated.loc} LOC deletable)`),o("cycles",Math.min(15,e.realCycleCount*5),`${e.realCycleCount} real dependency cycle(s)`);let l=e.similarCount/n*1e3;o("similar",Math.min(10,Math.round(l)),`${e.similarCount} similar function pair(s)`);let u=e.reactComponentDuplicates.count/t*1e3;o("react-component-duplicates",Math.min(10,Math.round(u)),`${e.reactComponentDuplicates.count} duplicated React component pair(s)`);let d=Et(e.reactHookCandidates),m=d/t*1e3;o("react-hook-candidates",Math.min(10,Math.round(m)),Pi(e.reactHookCandidates,"duplicated React behavior pair(s)"));let f=e.reactLargeComponentPressure.count/t*1e3;o("react-large-component-pressure",Math.min(5,Math.round(f/2)),`${e.reactLargeComponentPressure.count} large React component pressure file(s)`);let h=e.vueComponentDuplicates.count/t*1e3;o("vue-component-duplicates",Math.min(10,Math.round(h)),`${e.vueComponentDuplicates.count} duplicated Vue component pair(s)`);let g=Et(e.vueComposableCandidates),y=g/t*1e3;o("vue-composable-candidates",Math.min(10,Math.round(y)),Pi(e.vueComposableCandidates,"duplicated Vue behavior pair(s)"));let S=e.vueLargeViewPressure.count/t*1e3;o("vue-large-view-pressure",Math.min(5,Math.round(S/2)),`${e.vueLargeViewPressure.count} large Vue view pressure file(s)`);let C=Et(e.wrappers);o("wrappers",Math.min(3,C),Pi(e.wrappers,"wrapper candidate(s)"));let k=Et(e.passthroughs);o("passthroughs",Math.min(3,k),Pi(e.passthroughs,"passthrough candidate(s)")),o("stale-abstractions",Math.min(8,e.stale.unused),`${e.stale.unused} unused stale abstraction(s); ${e.stale.singleUse} single-consumer signal(s)`);let D=e.drift.direct/t;if(o("drift",Math.min(5,Math.round(D*50)),`${e.drift.direct} direct drift finding(s); ${e.drift.signal} signal drift finding(s)`),o("complexity",Math.min(5,e.complexity.extremeCount*2),`${e.complexity.extremeCount} extreme complexity hotspot(s)`),e.gitEvidence){let x=e.gitEvidence.hiddenCoupling.scoreCount;o("hidden-coupling",Math.min(5,Math.ceil(x/10)),Pi({count:e.gitEvidence.hiddenCoupling.pairCount,scoreCount:x},"co-changing pair(s) without a structural link"))}if(s("cycles-pressure","Circular dependencies",e.realCycleCount,3,10,3,"cycle(s)"),s("complexity-pressure","Extreme complexity",e.complexity.extremeCount,3,5,2,"extreme complexity hotspot(s)"),e.gitEvidence){let x=e.gitEvidence.hiddenCoupling.scoreCount;s("hidden-coupling-pressure","Hidden coupling",x,50,10,4,"score-weighted co-changing pair(s)")}return s("similar-pressure","Similar functions",e.similarCount,Math.max(50,n*.01),8,4,"similar function pair(s)"),s("react-component-duplicates-pressure","Duplicated React components",e.reactComponentDuplicates.count,Math.max(10,t*.01),8,4,"duplicated React component pair(s)"),s("react-hook-candidates-pressure","Duplicated React hook behavior",d,Math.max(10,t*.01),8,4,"duplicated React behavior pair(s)"),s("react-large-component-pressure-pressure","Large React components",e.reactLargeComponentPressure.count,Math.max(10,t*.01),4,2,"large React component pressure file(s)"),s("vue-component-duplicates-pressure","Duplicated Vue components",e.vueComponentDuplicates.count,Math.max(10,t*.01),8,4,"duplicated Vue component pair(s)"),s("vue-composable-candidates-pressure","Duplicated Vue behavior",g,Math.max(10,t*.01),8,4,"duplicated Vue behavior pair(s)"),s("vue-large-view-pressure-pressure","Large Vue views",e.vueLargeViewPressure.count,Math.max(10,t*.01),4,2,"large Vue view pressure file(s)"),s("extract-pressure","Extraction candidates",e.extractCount,Math.max(50,n*.01),4,2,"extraction candidate(s)"),s("wrappers-pressure","Wrapper functions",C,50,4,2,"wrapper candidate(s)"),s("passthroughs-pressure","Passthrough functions",k,50,4,2,"passthrough candidate(s)"),s("stale-abstractions-pressure","Single-consumer stale abstraction signals",e.stale.singleUse,Math.max(50,n*.02),4,2,"single-consumer stale abstraction signal(s)"),s("drift-pressure","Structural drift signals",e.drift.signal,Math.max(10,t*.1),4,2,"signal drift finding(s)"),{breakdown:r,pressure:i}}import{getHeapStatistics as d_}from"v8";var m_=64*1024*1024;function Gc(){let e=globalThis.gc;if(!e)return;let t=d_();t.heap_size_limit-t.used_heap_size<m_||e()}var p_=50,f_=75e3,g_=5e3,wf=2500,Lf=50,h_=10,wr=["overview","dead","isolated","cycles","similar","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"],y_={overview:(e,t,n,r)=>({phase:"overview",statsResult:r,warnings:n.warnings}),dead:(e,t,n)=>({phase:"dead",dead:x_(e,t,n)}),isolated:(e,t,n)=>({phase:"isolated",isolated:C_(e,t,n)}),cycles:(e,t,n)=>({phase:"cycles",realCycleCount:v_(e,t,n)}),similar:(e,t,n)=>({phase:"similar",similarCount:R_(e,t,n)}),"react-component-duplicates":(e,t,n)=>({phase:"react-component-duplicates",reactComponentDuplicates:w_(e,t,n)}),"react-hook-candidates":(e,t,n)=>({phase:"react-hook-candidates",reactHookCandidates:L_(e,t,n)}),"react-large-component-pressure":(e,t,n)=>({phase:"react-large-component-pressure",reactLargeComponentPressure:I_(e,t,n)}),"vue-component-duplicates":(e,t,n)=>({phase:"vue-component-duplicates",vueComponentDuplicates:D_(e,t,n)}),"vue-composable-candidates":(e,t,n)=>({phase:"vue-composable-candidates",vueComposableCandidates:P_(e,t,n)}),"vue-large-view-pressure":(e,t,n)=>({phase:"vue-large-view-pressure",vueLargeViewPressure:N_(e,t,n)}),"extract-candidates":(e,t,n)=>({phase:"extract-candidates",extractCount:k_(e,t,n)}),"wrapper-candidates":(e,t,n)=>({phase:"wrapper-candidates",wrappers:E_(e,t,n)}),"passthrough-candidates":(e,t,n)=>({phase:"passthrough-candidates",passthroughs:T_(e,t,n)}),"stale-abstractions":(e,t,n)=>({phase:"stale-abstractions",stale:__(e,t,n)}),drift:(e,t,n)=>({phase:"drift",drift:A_(e,t,n)}),"complexity-hotspots":(e,t,n)=>({phase:"complexity-hotspots",complexity:M_(e,t,n)}),"git-evidence":(e,t,n)=>({phase:"git-evidence",gitEvidence:F_(e,n)}),suppressions:(e,t,n)=>({phase:"suppressions",suppressions:$_(e,n)})};function zc(e,t,n={}){return Jc(e,[t],n)[0]}function Jc(e,t,n={}){return b_(e,n.full!==!1,(r,i)=>{let o={...i,releaseCachesBetweenPhases:!1};return t.map(s=>y_[s](e,n.scope,o,r))})}function b_(e,t,n){let r=$e(e),i=j_(r,t);try{return n(r,i)}finally{Oa(e,{semanticProvider:!0}),Gc()}}function Kc(e){return Rf(S_(e))}function S_(e){let t=be(e,"overview");return{statsResult:t.statsResult,warnings:t.warnings,dead:be(e,"dead").dead,isolated:be(e,"isolated").isolated,realCycleCount:be(e,"cycles").realCycleCount,similarCount:be(e,"similar").similarCount,reactComponentDuplicates:be(e,"react-component-duplicates").reactComponentDuplicates,reactHookCandidates:be(e,"react-hook-candidates").reactHookCandidates,reactLargeComponentPressure:be(e,"react-large-component-pressure").reactLargeComponentPressure,vueComponentDuplicates:be(e,"vue-component-duplicates").vueComponentDuplicates,vueComposableCandidates:be(e,"vue-composable-candidates").vueComposableCandidates,vueLargeViewPressure:be(e,"vue-large-view-pressure").vueLargeViewPressure,extractCount:be(e,"extract-candidates").extractCount,wrappers:be(e,"wrapper-candidates").wrappers,passthroughs:be(e,"passthrough-candidates").passthroughs,stale:be(e,"stale-abstractions").stale,drift:be(e,"drift").drift,complexity:be(e,"complexity-hotspots").complexity,gitEvidence:If(e,"git-evidence")?.gitEvidence??null,suppressions:If(e,"suppressions")?.suppressions??null}}function If(e,t){return e.find(n=>n.phase===t)}function be(e,t){let n=e.find(r=>r.phase===t);if(!n)throw new Error(`Missing health phase result: ${t}`);return n}function x_(e,t,n){return ue(e,n,"dead",()=>{let r=Dt(e,{scope:t,...le.dead,scanLimit:n.candidateScanLimit});return fs(H_(e,r.symbols))})}function C_(e,t,n){return ue(e,n,"isolated",()=>{let r=xn(e,{scope:t,...le.isolated,scanLimit:n.candidateScanLimit});return fs(V_(e,r))})}function v_(e,t,n){return ue(e,n,"cycles",()=>Sn(e,{scope:t}).filter(i=>i.kind==="real").length)}function R_(e,t,n){return ue(e,n,"similar",()=>Pt(e,{scope:t,...le.similar,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit}).length)}function k_(e,t,n){return ue(e,n,"extract-candidates",()=>wn(e,{scope:t,...le.extract,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit}).length)}function w_(e,t,n){return ue(e,n,"react-component-duplicates",()=>{let r=Cn(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Xc(r)})}function L_(e,t,n){return ue(e,n,"react-hook-candidates",()=>{let r=vn(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Nf(r,U_)})}function I_(e,t,n){return ue(e,n,"react-large-component-pressure",()=>{let r=pi(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return q_(r)})}function D_(e,t,n){return ue(e,n,"vue-component-duplicates",()=>{let r=Rn(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Xc(r)})}function P_(e,t,n){return ue(e,n,"vue-composable-candidates",()=>{let r=kn(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Nf(r,W_)})}function N_(e,t,n){return ue(e,n,"vue-large-view-pressure",()=>{let r=fi(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return fs(r)})}function E_(e,t,n){return ue(e,n,"wrapper-candidates",()=>{let r=_n(e,{scope:t,...le.wrappers,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Pf(r,G_)})}function T_(e,t,n){return ue(e,n,"passthrough-candidates",()=>{let r=En(e,{scope:t,...le.passthroughs,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Pf(r,z_)})}function __(e,t,n){return ue(e,n,"stale-abstractions",()=>{let r=Tn(e,{scope:t,...le.stale,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit}),i=r.filter(o=>o.consumers===0).length;return{count:r.length,loc:r.reduce((o,s)=>o+s.loc,0),files:[...new Set(r.map(o=>o.file))],unused:i,singleUse:r.length-i}})}function F_(e,t){return ue(e,t,"git-evidence",()=>{let n=Jo(e);if(!n)return null;let r=In(e,void 0,{limit:t.candidateResultLimit}),i={};for(let[o,s]of n)i[o]={changes:s.changes,fixChanges:s.fixChanges};return{amplification:_p(e),hiddenCoupling:{pairCount:r.findings.length,scoreCount:Qc(r.findings.reduce((o,s)=>o+Df(s),0)),top:r.findings.slice(0,5).map(o=>({fileA:o.fileA,fileB:o.fileB,together:o.together,confidence:o.confidence,focusedTogether:o.focusedTogether,broadTogether:o.broadTogether,broadCommitRatio:o.broadCommitRatio,lastTogetherAt:o.lastTogetherAt,recentTogether:o.recentTogether,commitScope:o.commitScope,recency:o.recency,scoreWeight:Df(o),subjectContext:o.subjectContext}))},fileStats:i}})}function $_(e,t){return ue(e,t,"suppressions",()=>{let n=ms(e);return{total:n.total,byCategory:{...n.byCategory}}})}function A_(e,t,n){return ue(e,n,"drift",()=>{let r=Nn(e,{scope:t,...le.drift}),i=r.results.filter(a=>a.kind!=="pattern-deviation"),o=i.filter(a=>a.actionTier==="direct").length,s=i.length-o;return{count:i.length,unusedImports:r.unusedImports,layerViolations:r.layerViolations,direct:o,signal:s}})}function M_(e,t,n){return ue(e,n,"complexity-hotspots",()=>{let r=Di(e,{scope:t,minLoc:10,limit:n.complexityResultLimit,scanLimit:n.candidateScanLimit,semantic:!1});return{top:r.slice(0,5).map(i=>({symbol:i.shortName,score:i.score,file:i.file})),extremeCount:r.filter(i=>i.score>p_).length}})}function j_(e,t){let n=e.symbols>=f_||e.documents>=g_,r=t?Number.POSITIVE_INFINITY:Lf,i=t?Number.POSITIVE_INFINITY:h_;return!n||t?{candidateScanLimit:void 0,candidateResultLimit:r,complexityResultLimit:i,releaseCachesBetweenPhases:!0,warnings:t&&n?["Large index detected; running health without candidate scan or result caps because full mode is enabled."]:[]}:{candidateScanLimit:wf,candidateResultLimit:r,complexityResultLimit:i,releaseCachesBetweenPhases:!0,warnings:[`Large index detected; candidate-style health checks scanned their highest-priority ${wf} symbols and reported their top ${Lf} findings. Enable full mode for unbounded candidate counts.`]}}function O_(e,t){t.releaseCachesBetweenPhases&&(Oa(e),Gc())}function ue(e,t,n,r){B_(n);try{return r()}finally{O_(e,t)}}function B_(e){process.env.SCIP_QUERY_HEALTH_TRACE==="1"&&console.error(`[health] ${e}`)}function H_(e,t){return t.filter(n=>!De(e,n.relativePath)&&!ie(e,n.symbol,n.relativePath)&&n.kind==="dead-code")}function V_(e,t){return t.filter(n=>!De(e,n.relativePath)&&!ie(e,n.symbol,n.relativePath))}function fs(e){let t=new Set;for(let n of e){let r=n.relativePath??n.file;r&&t.add(r)}return{count:e.length,loc:e.reduce((n,r)=>n+r.loc,0),files:[...t]}}function Pf(e,t){return{...fs(e),scoreCount:Qc(e.reduce((r,i)=>r+t(i),0))}}function q_(e){let t=new Map;for(let n of e)t.set(n.file,Math.max(t.get(n.file)??0,n.loc));return{count:t.size,loc:[...t.values()].reduce((n,r)=>n+r,0),files:[...t.keys()]}}function Xc(e){let t=new Map;for(let n of e)t.set(n.fileA,Math.max(t.get(n.fileA)??0,n.locA)),t.set(n.fileB,Math.max(t.get(n.fileB)??0,n.locB));return{count:e.length,loc:[...t.values()].reduce((n,r)=>n+r,0),files:[...t.keys()]}}function Nf(e,t){return{...Xc(e),scoreCount:Qc(e.reduce((r,i)=>r+t(i),0))}}function U_(e){let t=e.sharedHooks.length>0,n=Ef({namedState:e.sharedState,requests:e.sharedRequests,lifecycle:e.sharedEffects,functions:e.sharedHandlers});return t&&n<=2?0:t?.5:Tf(e.sharedState,e.sharedHandlers,e.sharedHandlerVerbs)?.25:n>=2?1:.5}function W_(e){let t=e.sharedComposables.length+e.sharedStores.length>0,n=Ef({namedState:e.sharedBindings,requests:e.sharedRequests,lifecycle:e.sharedLifecycle,functions:e.sharedFunctions});return t&&n<=2?0:t?.5:Tf(e.sharedBindings,e.sharedFunctions,e.sharedFunctionVerbs)?.25:n>=2?1:.5}function Ef(e){return e.requests.length*2+e.lifecycle.length+e.namedState.filter(t=>!Ff.has(_f(t))).length+Math.min(e.functions.length,3)}function Tf(e,t,n){let r=[...e,...t,...n].map(_f);return r.length>0&&r.every(i=>Ff.has(i))}function _f(e){return e.replace(/^handle/,"").replace(/^is/,"").replace(/^has/,"").toLowerCase()}function G_(e){return e.actionTier==="signal"?.25:1}function z_(e){return e.actionTier==="signal"?.25:1}function Df(e){return e.commitScope==="broad-sweep"?e.recency==="recent"?.25:0:e.commitScope==="mixed"?e.recency==="recent"?.5:.25:e.recency==="recent"?1:.5}function Qc(e){return Math.round(e*100)/100}var Ff=new Set(["add","apply","cancel","change","clear","close","create","delete","draft","edit","error","filter","form","load","loading","name","open","refresh","remove","reset","save","saving","search","select","selected","submit","toggle","update","value"]);function Yc(e,t,n,r={}){let i=B(e,t),o=B(e,n);if(!i||!o)return null;let s=new Set(je(e,i,{semantic:r.semantic}).map(y=>y.symbol)),a=new Set(je(e,o,{semantic:r.semantic}).map(y=>y.symbol)),c=[];for(let y of s)a.has(y)&&c.push(y);let l=[];for(let y of s)a.has(y)||l.push(y);let u=[];for(let y of a)s.has(y)||u.push(y);let d=new Set([...s,...a]),m=d.size>0?c.length/d.size:0,f;d.size===0?f="Neither function calls other tracked symbols. There is no callee-pattern evidence for consolidation; inspect the source bodies directly.":c.length===0?f="These functions do not share any callees. They are not a callee-based consolidation candidate.":l.length===0&&u.length===0?f="These functions have identical tracked callee sets. They are a strong structural match, but identical callees do not prove interchangeable semantics; inspect signatures, control flow, and return values before consolidating.":l.length===0?f="A's tracked callees are a subset of B's. B may subsume part of A's structure, but verify signatures, guards, and non-call logic before replacing A with B.":u.length===0?f="B's tracked callees are a subset of A's. A may subsume part of B's structure, but verify signatures, guards, and non-call logic before replacing B with A.":l.length<=2&&u.length<=2?f=`Create a shared function with the ${c.length} common callees. Pass the ${l.length+u.length} divergent callees as parameters or strategy callbacks.`:f=`Extract the ${c.length} shared callees into a common helper. Each function calls the helper plus its own unique logic (${l.length} callees in A, ${u.length} in B).`;let h=i.endLine-i.startLine+1,g=o.endLine-o.startLine+1;return{symbolA:{symbol:i.symbol,shortName:b(i.symbol),file:i.relativePath,loc:h},symbolB:{symbol:o.symbol,shortName:b(o.symbol),file:o.relativePath,loc:g},similarity:m,sharedCallees:c.map(b),uniqueToA:l.map(b),uniqueToB:u.map(b),consolidationStrategy:f}}import{readFileSync as $f}from"fs";import{extname as J_,join as Af}from"path";function Zc(e,t,n={}){let{context:r=0}=n,i=K_(t);if(i)return Q_(e,i.filePath,i.startLine,i.endLine,r);let o=B(e,t);return o?X_(e,o,r):null}function K_(e){let t=e.match(/^(.+\.\w+):(\d+)-(\d+)$/);return t?{filePath:t[1],startLine:parseInt(t[2],10),endLine:parseInt(t[3],10)}:null}function X_(e,t,n){let r=e.get("SELECT language FROM documents WHERE relative_path = ?",t.relativePath),i=Af(e.config.projectRoot,t.relativePath),o;try{o=$f(i,"utf-8")}catch{return null}let s=o.split(`
546
580
  `),a=Math.max(0,t.startLine-n),c=Math.min(s.length-1,t.endLine+n),l=s.slice(a,c+1).join(`
547
- `);return{symbol:t.symbol,shortName:y(t.symbol),relativePath:t.relativePath,startLine:a,endLine:c,language:i?.language??ef(t.relativePath),source:l}}function PT(e,t,n,i,r){let o=Ie(e,t);if(!o)return null;let s=e.get("SELECT relative_path, language FROM documents WHERE relative_path = ?",o);if(!s)return null;let a=Zp(e.config.projectRoot,s.relative_path),c;try{c=Yp(a,"utf-8")}catch{return null}let l=c.split(`
548
- `),u=Math.max(0,n-1-r),d=Math.min(l.length-1,i-1+r),m=l.slice(u,d+1).join(`
549
- `);return{symbol:`${s.relative_path}:${n}-${i}`,shortName:`${s.relative_path}:${n}-${i}`,relativePath:s.relative_path,startLine:u,endLine:d,language:s.language??ef(s.relative_path),source:m}}function ef(e){switch(LT(e).toLowerCase()){case".ts":case".tsx":case".mts":case".cts":return"typescript";case".js":case".jsx":case".mjs":case".cjs":return"javascript";case".py":case".pyi":return"python";case".rs":return"rust";case".go":return"go";case".java":return"java";case".kt":case".kts":return"kotlin";case".scala":return"scala";case".rb":return"ruby";case".php":return"php";case".cs":return"csharp";case".vb":return"vb";case".dart":return"dart";case".c":case".h":return"c";case".cc":case".cpp":case".cxx":case".hpp":case".hh":case".hxx":return"cpp";case".vue":return"vue";default:return null}}function Ec(e,t={}){let{scope:n,limit:i}=t,r=new T(e),o=MT([...NT(e,n),..._T(e,r,n)]);return OT(o),i?o.slice(0,i):o}function NT(e,t){let n=[];for(let i of ET(e,t)){if(e.isIgnored(i.barrel_path)||e.isIgnored(i.original_path)||ia(e,i.barrel_path)||M(e,i.barrel_path)&&ro(e,i.barrel_path).length===0)continue;let r=TT(e,i),o=r?.barrel_consumers??0,s=r?.direct_consumers??0;o!==0||s!==0||n.push({barrelFile:i.barrel_path,symbol:i.symbol,shortName:y(i.symbol),originalFile:i.original_path,barrelConsumers:o,directConsumers:s,...nf(e,i.barrel_path)})}return n}function ET(e,t){let n=t?`AND barrel_d.relative_path LIKE '%${t}%'`:"";return e.all(`SELECT DISTINCT
581
+ `);return{symbol:t.symbol,shortName:b(t.symbol),relativePath:t.relativePath,startLine:a,endLine:c,language:r?.language??Mf(t.relativePath),source:l}}function Q_(e,t,n,r,i){let o=Ee(e,t);if(!o)return null;let s=e.get("SELECT relative_path, language FROM documents WHERE relative_path = ?",o);if(!s)return null;let a=Af(e.config.projectRoot,s.relative_path),c;try{c=$f(a,"utf-8")}catch{return null}let l=c.split(`
582
+ `),u=Math.max(0,n-1-i),d=Math.min(l.length-1,r-1+i),m=l.slice(u,d+1).join(`
583
+ `);return{symbol:`${s.relative_path}:${n}-${r}`,shortName:`${s.relative_path}:${n}-${r}`,relativePath:s.relative_path,startLine:u,endLine:d,language:s.language??Mf(s.relative_path),source:m}}function Mf(e){switch(J_(e).toLowerCase()){case".ts":case".tsx":case".mts":case".cts":return"typescript";case".js":case".jsx":case".mjs":case".cjs":return"javascript";case".py":case".pyi":return"python";case".rs":return"rust";case".go":return"go";case".java":return"java";case".kt":case".kts":return"kotlin";case".scala":return"scala";case".rb":return"ruby";case".php":return"php";case".cs":return"csharp";case".vb":return"vb";case".dart":return"dart";case".c":case".h":return"c";case".cc":case".cpp":case".cxx":case".hpp":case".hh":case".hxx":return"cpp";case".vue":return"vue";default:return null}}function el(e,t={}){let{scope:n,limit:r}=t,i=new T(e),o=o0([...Y_(e,n),...t0(e,i,n)]);return s0(o),r?o.slice(0,r):o}function Y_(e,t){let n=[];for(let r of Z_(e,t)){if(e.isIgnored(r.barrel_path)||e.isIgnored(r.original_path)||Ra(e,r.barrel_path)||F(e,r.barrel_path)&&vo(e,r.barrel_path).length===0)continue;let i=e0(e,r),o=i?.barrel_consumers??0,s=i?.direct_consumers??0;o!==0||s!==0||n.push({barrelFile:r.barrel_path,symbol:r.symbol,shortName:b(r.symbol),originalFile:r.original_path,barrelConsumers:o,directConsumers:s,...Of(e,r.barrel_path)})}return n}function Z_(e,t){let n=t?`AND barrel_d.relative_path LIKE '%${t}%'`:"";return e.all(`SELECT DISTINCT
550
584
  barrel_d.id AS barrel_doc_id,
551
585
  barrel_d.relative_path AS barrel_path,
552
586
  gs.id AS symbol_id,
@@ -576,7 +610,7 @@ ${n}`.toLowerCase(),r=Cn(i,["historical note","historical record","history note"
576
610
  -- Only function-level symbols (ending with ().), not module-level
577
611
  AND gs.symbol LIKE '%().'
578
612
  ${n}
579
- ORDER BY barrel_d.relative_path, gs.symbol`)}function TT(e,t){return e.get(`SELECT
613
+ ORDER BY barrel_d.relative_path, gs.symbol`)}function e0(e,t){return e.get(`SELECT
580
614
  SUM(CASE WHEN uses_barrel = 1 THEN 1 ELSE 0 END) AS barrel_consumers,
581
615
  SUM(CASE WHEN uses_barrel = 0 THEN 1 ELSE 0 END) AS direct_consumers
582
616
  FROM (
@@ -605,7 +639,7 @@ ${n}`.toLowerCase(),r=Cn(i,["historical note","historical record","history note"
605
639
  AND consumer_d.id != ?
606
640
  ${e.pathExclusionsFor("consumer_d")}
607
641
  GROUP BY consumer_d.id
608
- )`,t.barrel_doc_id,t.symbol_id,t.barrel_doc_id,t.original_doc_id)}function _T(e,t,n){let i=[];for(let r of $T(e,n))rf(e,r,r)>0||i.push(...FT(e,t,r));return i}function $T(e,t){return j(e,{scope:t,includeIgnored:!1}).filter(n=>ro(e,n).length>0||Mi(e,n).length>0)}function FT(e,t,n){let i=ro(e,n).filter(o=>o.sourcePath&&!e.isIgnored(o.sourcePath)).flatMap(o=>tf(e,t,n,o.sourcePath)),r=Mi(e,n).filter(o=>o.sourcePath&&!e.isIgnored(o.sourcePath)).flatMap(o=>tf(e,t,n,o.sourcePath));return[...i,...r]}function tf(e,t,n,i){let r=AT(t,i);return r?[{barrelFile:n,symbol:r.symbol,shortName:y(r.symbol),originalFile:i,barrelConsumers:0,directConsumers:rf(e,i,n),...nf(e,n)}]:[]}function nf(e,t){return ei(e,t)?{actionTier:"signal",surfaceEvidence:["barrel file is declared on the package public surface"],recommendation:"Review the package API before removing this re-export; local consumers are zero, but external consumers may import through the public barrel."}:{actionTier:"direct",surfaceEvidence:[],recommendation:"Remove this unused re-export when the barrel is not part of an external API surface."}}function rf(e,t,n){let i=new Set;for(let r of j(e,{includeIgnored:!1}))if(r!==n)for(let o of fe(e,r))o.sourcePath===t&&i.add(r);return i.size}function AT(e,t){let n=e.definitionsForFile(t);return n.find(i=>Z(i.symbol)==="method")??n[0]??null}function MT(e){let t=new Set,n=[];for(let i of e){let r=`${i.barrelFile}|${i.symbol}|${i.originalFile}`;t.has(r)||(t.add(r),n.push(i))}return n}function OT(e){e.sort((t,n)=>n.directConsumers-t.directConsumers||t.barrelFile.localeCompare(n.barrelFile)||t.shortName.localeCompare(n.shortName))}function _c(e,t={}){let{samples:n=50,scope:i,maxDisagreements:r=5}=t,o=new T(e),s=jT(o.productionCallableDefinitions({scope:i,minLoc:2,requireFunctionLikeSymbol:!0}),n);if(s.length===0||!BT(e,s))return{available:!1,sampleSize:s.length,oracleCoverage:0,scores:[],topDisagreements:[]};let a={references:of(),callees:of()},c=[],l=0,u=go(e,s);for(let d of s){let m=zo(d,un(e,d).map(b=>b.file)),p=zo(d,(u.get(d.symbolId)??[]).map(b=>b.file));if(m.size===0&&p.size===0)continue;l+=1;let h=zo(d,dn(e,d).map(b=>b.file)),g=zo(d,(o.calleeMap([d],{semantic:!1}).get(d.symbolId)??[]).map(b=>b.file));sf(a.references,d,"references",h,m,c),sf(a.callees,d,"callees",g,p,c)}return c.sort((d,m)=>m.cheapOnly.length+m.oracleOnly.length-(d.cheapOnly.length+d.oracleOnly.length)),{available:!0,sampleSize:s.length,oracleCoverage:s.length>0?Tc(l/s.length):0,scores:["references","callees"].map(d=>VT(d,a[d])),topDisagreements:c.slice(0,r)}}function of(){return{comparedSymbols:0,agreed:0,cheapTotal:0,oracleTotal:0}}function jT(e,t){let n=[...e].sort((o,s)=>o.symbolId-s.symbolId);if(n.length<=t)return n;let i=n.length/t,r=[];for(let o=0;o<t;o++)r.push(n[Math.floor(o*i)]);return r}function BT(e,t){let n=t[0];if(!n)return!1;try{return ln(e,n.relativePath).availability().available}catch{return!1}}function zo(e,t){let n=new Set;for(let i of t)i!==e.relativePath&&n.add(i);return n}function sf(e,t,n,i,r,o){if(i.size===0&&r.size===0)return;e.comparedSymbols+=1,e.cheapTotal+=i.size,e.oracleTotal+=r.size;let s=[],a=[];for(let c of i)r.has(c)?e.agreed+=1:s.push(c);for(let c of r)i.has(c)||a.push(c);(s.length>0||a.length>0)&&o.push({symbol:y(t.symbol),question:n,cheapOnly:s,oracleOnly:a})}var HT={references:!0,callees:!1};function VT(e,t){let n=t.oracleTotal>0?t.agreed/t.oracleTotal:1,i=t.cheapTotal-t.agreed;return{question:e,comparedSymbols:t.comparedSymbols,precision:HT[e]&&t.cheapTotal>0?Tc(t.agreed/t.cheapTotal):null,recall:Tc(n),unverified:i}}function Tc(e){return Math.round(e*1e3)/1e3}function $c(e,t={}){let{scope:n,minLoc:i=1,limit:r,scanLimit:o}=t,s=t.semantic!==!1,a=UT(e,qT(e,{scope:n,minLoc:i,scanLimit:o}),{semantic:s}),c=GT(a);return r?c.slice(0,r):c}function qT(e,t){let n=rt(e,{scope:t.scope}).filter(i=>i.isFunctionLike&&!e.isIgnored(i.relativePath)).filter(i=>q(i)>=t.minLoc);return typeof t.scanLimit=="number"&&t.scanLimit>0&&n.sort((i,r)=>q(r)-q(i)||i.relativePath.localeCompare(r.relativePath)),Ue(n,t.scanLimit)}function UT(e,t,n){let i=new Map;for(let r of t){let o=zT(e,r,n);if(!o)continue;let s=i.get(o)??[];s.push(WT(r)),i.set(o,s)}return i}function WT(e){return{symbol:e.symbol,shortName:y(e.symbol),file:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:q(e)}}function GT(e){let t=[];for(let[n,i]of e)i.length>=2&&t.push({signature:n,functions:i});return t.sort((n,i)=>{let r=i.functions.length-n.functions.length;if(r!==0)return r;let o=n.functions.reduce((a,c)=>a+c.loc,0);return i.functions.reduce((a,c)=>a+c.loc,0)-o}),t}function zT(e,t,n){if(n.semantic){let o=jd(e,t);if(o)return o}let i=KT(t.documentation),r=i?XT(i):null;return r||YT(JT(e,t.relativePath,t.startLine,t.endLine,t.leaf),t.leaf)}function KT(e){return Yt(Zt(e))}function JT(e,t,n,i,r){let o=M(e,t);if(!o)return null;let s=o.split(/\r?\n/),a=e_(s,n,i,r);for(let c of a){let l=Math.min(s.length-1,Math.max(c,c+4)),u="";for(let d=c;d<=l;d+=1){let m=s[d]?.trim();if(m&&(u=u?`${u} ${m}`:m,QT(u)))return u}if(u&&u.includes("("))return u}return null}function QT(e){let t=e.replace(/\s+/g," ").trim();return!t.includes("(")||Fi(t)>0?!1:/[;{]$/.test(t)||/\)\s*(?::\s*[^={]+)?\s*(?:=>|=|throws\b|where\b|$)/i.test(t)||/\)\s*As\s+.+$/i.test(t)}function XT(e){if(!e||!e.trim())return null;let t=e.replace(/^```\w*\s*/,"").replace(/\s*```$/,"").replace(/^\(method\)\s*/,"").replace(/^\(property\)\s*/,"").replace(/^\(function\)\s*/,"").replace(/^\(class\)\s*/,"").replace(/^\(interface\)\s*/,"").replace(/^\(enum\)\s*/,"").replace(/^\(type alias\)\s*/,"").replace(/^\(const\)\s*/,"").replace(/^\(var\)\s*/,"").trim(),n=t.indexOf("(");return n===-1||(t=t.slice(n),t=t.replace(/\s+/g,"").toLowerCase(),t.length<3)?null:t}function YT(e,t){if(!e||!e.trim())return null;let n=e.replace(/\s+/g," ").trim(),i=n.indexOf("(");if(i===-1)return null;let r=n.slice(0,i),s=new RegExp(`\\b${af(t)}\\b`,"i").exec(r);s&&typeof s.index=="number"&&(r=r.slice(0,s.index)),r=r.replace(/\b(public|private|protected|internal|final|static|abstract|sealed|virtual|override|async|suspend|inline|constexpr|consteval|constinit|const|pub|fn|function|def|sub|friend|shared|readonly|new|open|partial|export)\b/gi," ").replace(/\s+/g," ").trim();let a=ZT(n.slice(i)).replace(/\)\s*=\s*[\s\S]*$/,")").replace(/\s+throws\s+[^={]+$/i,"").replace(/\s+where\s+.+$/i,"").replace(/\s+/g," ").trim();if(!a.startsWith("("))return null;let c=`${r?`${r} `:""}${a}`.replace(/\s+/g,"").toLowerCase();return c.length>=3?c:null}function ZT(e){let t=0,n=0,i=0,r=0,o=null,s=!1;for(let a=0;a<e.length;a+=1){let c=e[a];if(o){if(s){s=!1;continue}if(c==="\\"){s=!0;continue}c===o&&(o=null);continue}if(c==='"'||c==="'"||c==="`"){o=c;continue}if(c==="(")t+=1;else if(c===")")t=Math.max(0,t-1);else if(c==="[")i+=1;else if(c==="]")i=Math.max(0,i-1);else if(c==="<")r+=1;else if(c===">")r=Math.max(0,r-1);else if(c==="{"){if(t===0&&i===0&&r===0)return e.slice(0,a);n+=1}else if(c==="}")n=Math.max(0,n-1);else if(c==="="&&e[a+1]===">"&&t===0&&n===0&&i===0&&r===0)return e.slice(0,a)}return e}function e_(e,t,n,i){let r=af(i),o=new RegExp(`\\b${r}\\b\\s*\\(`,"i"),s=new RegExp(`\\bdef\\s+${r}\\b`,"i"),a=[],c=new Set,l=Math.max(0,Math.min(t,e.length-1)),u=Math.max(l,Math.min(e.length-1,Math.max(n,t+4)));for(let d=l;d<=u;d+=1){let m=e[d]??"";(o.test(m)||s.test(m))&&!c.has(d)&&(c.add(d),a.push(d))}for(let d=0;d<e.length;d+=1){let m=e[d]??"";(o.test(m)||s.test(m))&&!c.has(d)&&(c.add(d),a.push(d))}return a}function af(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}import{existsSync as gf}from"fs";import{join as y_}from"path";import t_ from"better-sqlite3";var n_=["node_modules",".git","dist","build","out","coverage","target",".next",".nuxt",".cache",".turbo",".scipquery-cache","__pycache__",".venv","venv"],pi=class{db;config;pathFilter;constructor(t,n){this.config=t,this.pathFilter=n??null,this.db=new t_(t.dbPath,{readonly:!0}),this.db.pragma("busy_timeout = 5000")}isIgnored(t){return this.pathFilter?.isIgnored(t)??!1}get localSymbolPredicate(){return`(
642
+ )`,t.barrel_doc_id,t.symbol_id,t.barrel_doc_id,t.original_doc_id)}function t0(e,t,n){let r=[];for(let i of n0(e,n))Bf(e,i,i)>0||r.push(...r0(e,t,i));return r}function n0(e,t){return j(e,{scope:t,includeIgnored:!1}).filter(n=>vo(e,n).length>0||Jr(e,n).length>0)}function r0(e,t,n){let r=vo(e,n).filter(o=>o.sourcePath&&!e.isIgnored(o.sourcePath)).flatMap(o=>jf(e,t,n,o.sourcePath)),i=Jr(e,n).filter(o=>o.sourcePath&&!e.isIgnored(o.sourcePath)).flatMap(o=>jf(e,t,n,o.sourcePath));return[...r,...i]}function jf(e,t,n,r){let i=i0(t,r);return i?[{barrelFile:n,symbol:i.symbol,shortName:b(i.symbol),originalFile:r,barrelConsumers:0,directConsumers:Bf(e,r,n),...Of(e,n)}]:[]}function Of(e,t){return fr(e,t)?{actionTier:"signal",surfaceEvidence:["barrel file is declared on the package public surface"],recommendation:"Review the package API before removing this re-export; local consumers are zero, but external consumers may import through the public barrel."}:{actionTier:"direct",surfaceEvidence:[],recommendation:"Remove this unused re-export when the barrel is not part of an external API surface."}}function Bf(e,t,n){let r=new Set;for(let i of j(e,{includeIgnored:!1}))if(i!==n)for(let o of he(e,i))o.sourcePath===t&&r.add(i);return r.size}function i0(e,t){let n=e.definitionsForFile(t);return n.find(r=>ee(r.symbol)==="method")??n[0]??null}function o0(e){let t=new Set,n=[];for(let r of e){let i=`${r.barrelFile}|${r.symbol}|${r.originalFile}`;t.has(i)||(t.add(i),n.push(r))}return n}function s0(e){e.sort((t,n)=>n.directConsumers-t.directConsumers||t.barrelFile.localeCompare(n.barrelFile)||t.shortName.localeCompare(n.shortName))}function nl(e,t={}){let{samples:n=50,scope:r,maxDisagreements:i=5}=t,o=new T(e),s=a0(o.productionCallableDefinitions({scope:r,minLoc:2,requireFunctionLikeSymbol:!0}),n);if(s.length===0||!c0(e,s))return{available:!1,sampleSize:s.length,oracleCoverage:0,scores:[],topDisagreements:[]};let a={references:Hf(),callees:Hf()},c=[],l=0,u=_o(e,s);for(let d of s){let m=gs(d,Jt(e,d).map(y=>y.file)),f=gs(d,(u.get(d.symbolId)??[]).map(y=>y.file));if(m.size===0&&f.size===0)continue;l+=1;let h=gs(d,bn(e,d).map(y=>y.file)),g=gs(d,(o.calleeMap([d],{semantic:!1}).get(d.symbolId)??[]).map(y=>y.file));Vf(a.references,d,"references",h,m,c),Vf(a.callees,d,"callees",g,f,c)}return c.sort((d,m)=>m.cheapOnly.length+m.oracleOnly.length-(d.cheapOnly.length+d.oracleOnly.length)),{available:!0,sampleSize:s.length,oracleCoverage:s.length>0?tl(l/s.length):0,scores:["references","callees"].map(d=>u0(d,a[d])),topDisagreements:c.slice(0,i)}}function Hf(){return{comparedSymbols:0,agreed:0,cheapTotal:0,oracleTotal:0}}function a0(e,t){let n=[...e].sort((o,s)=>o.symbolId-s.symbolId);if(n.length<=t)return n;let r=n.length/t,i=[];for(let o=0;o<t;o++)i.push(n[Math.floor(o*r)]);return i}function c0(e,t){let n=t[0];if(!n)return!1;try{return zt(e,n.relativePath).availability().available}catch{return!1}}function gs(e,t){let n=new Set;for(let r of t)r!==e.relativePath&&n.add(r);return n}function Vf(e,t,n,r,i,o){if(r.size===0&&i.size===0)return;e.comparedSymbols+=1,e.cheapTotal+=r.size,e.oracleTotal+=i.size;let s=[],a=[];for(let c of r)i.has(c)?e.agreed+=1:s.push(c);for(let c of i)r.has(c)||a.push(c);(s.length>0||a.length>0)&&o.push({symbol:b(t.symbol),question:n,cheapOnly:s,oracleOnly:a})}var l0={references:!0,callees:!1};function u0(e,t){let n=t.oracleTotal>0?t.agreed/t.oracleTotal:1,r=t.cheapTotal-t.agreed;return{question:e,comparedSymbols:t.comparedSymbols,precision:l0[e]&&t.cheapTotal>0?tl(t.agreed/t.cheapTotal):null,recall:tl(n),unverified:r}}function tl(e){return Math.round(e*1e3)/1e3}function rl(e,t={}){let{scope:n,minLoc:r=1,limit:i,scanLimit:o}=t,s=t.semantic!==!1,a=m0(e,d0(e,{scope:n,minLoc:r,scanLimit:o}),{semantic:s}),c=f0(a);return i?c.slice(0,i):c}function d0(e,t){let n=ut(e,{scope:t.scope}).filter(r=>r.isFunctionLike&&!e.isIgnored(r.relativePath)).filter(r=>q(r)>=t.minLoc);return typeof t.scanLimit=="number"&&t.scanLimit>0&&n.sort((r,i)=>q(i)-q(r)||r.relativePath.localeCompare(i.relativePath)),We(n,t.scanLimit)}function m0(e,t,n){let r=new Map;for(let i of t){let o=g0(e,i,n);if(!o)continue;let s=r.get(o)??[];s.push(p0(i)),r.set(o,s)}return r}function p0(e){return{symbol:e.symbol,shortName:b(e.symbol),file:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:q(e)}}function f0(e){let t=[];for(let[n,r]of e)r.length>=2&&t.push({signature:n,functions:r});return t.sort((n,r)=>{let i=r.functions.length-n.functions.length;if(i!==0)return i;let o=n.functions.reduce((a,c)=>a+c.loc,0);return r.functions.reduce((a,c)=>a+c.loc,0)-o}),t}function g0(e,t,n){if(n.semantic){let o=bm(e,t);if(o)return o}let r=h0(t.documentation),i=r?S0(r):null;return i||x0(y0(e,t.relativePath,t.startLine,t.endLine,t.leaf),t.leaf)}function h0(e){return an(cn(e))}function y0(e,t,n,r,i){let o=F(e,t);if(!o)return null;let s=o.split(/\r?\n/),a=v0(s,n,r,i);for(let c of a){let l=Math.min(s.length-1,Math.max(c,c+4)),u="";for(let d=c;d<=l;d+=1){let m=s[d]?.trim();if(m&&(u=u?`${u} ${m}`:m,b0(u)))return u}if(u&&u.includes("("))return u}return null}function b0(e){let t=e.replace(/\s+/g," ").trim();return!t.includes("(")||Gr(t)>0?!1:/[;{]$/.test(t)||/\)\s*(?::\s*[^={]+)?\s*(?:=>|=|throws\b|where\b|$)/i.test(t)||/\)\s*As\s+.+$/i.test(t)}function S0(e){if(!e||!e.trim())return null;let t=e.replace(/^```\w*\s*/,"").replace(/\s*```$/,"").replace(/^\(method\)\s*/,"").replace(/^\(property\)\s*/,"").replace(/^\(function\)\s*/,"").replace(/^\(class\)\s*/,"").replace(/^\(interface\)\s*/,"").replace(/^\(enum\)\s*/,"").replace(/^\(type alias\)\s*/,"").replace(/^\(const\)\s*/,"").replace(/^\(var\)\s*/,"").trim(),n=t.indexOf("(");return n===-1||(t=t.slice(n),t=t.replace(/\s+/g,"").toLowerCase(),t.length<3)?null:t}function x0(e,t){if(!e||!e.trim())return null;let n=e.replace(/\s+/g," ").trim(),r=n.indexOf("(");if(r===-1)return null;let i=n.slice(0,r),s=new RegExp(`\\b${qf(t)}\\b`,"i").exec(i);s&&typeof s.index=="number"&&(i=i.slice(0,s.index)),i=i.replace(/\b(public|private|protected|internal|final|static|abstract|sealed|virtual|override|async|suspend|inline|constexpr|consteval|constinit|const|pub|fn|function|def|sub|friend|shared|readonly|new|open|partial|export)\b/gi," ").replace(/\s+/g," ").trim();let a=C0(n.slice(r)).replace(/\)\s*=\s*[\s\S]*$/,")").replace(/\s+throws\s+[^={]+$/i,"").replace(/\s+where\s+.+$/i,"").replace(/\s+/g," ").trim();if(!a.startsWith("("))return null;let c=`${i?`${i} `:""}${a}`.replace(/\s+/g,"").toLowerCase();return c.length>=3?c:null}function C0(e){let t=0,n=0,r=0,i=0,o=null,s=!1;for(let a=0;a<e.length;a+=1){let c=e[a];if(o){if(s){s=!1;continue}if(c==="\\"){s=!0;continue}c===o&&(o=null);continue}if(c==='"'||c==="'"||c==="`"){o=c;continue}if(c==="(")t+=1;else if(c===")")t=Math.max(0,t-1);else if(c==="[")r+=1;else if(c==="]")r=Math.max(0,r-1);else if(c==="<")i+=1;else if(c===">")i=Math.max(0,i-1);else if(c==="{"){if(t===0&&r===0&&i===0)return e.slice(0,a);n+=1}else if(c==="}")n=Math.max(0,n-1);else if(c==="="&&e[a+1]===">"&&t===0&&n===0&&r===0&&i===0)return e.slice(0,a)}return e}function v0(e,t,n,r){let i=qf(r),o=new RegExp(`\\b${i}\\b\\s*\\(`,"i"),s=new RegExp(`\\bdef\\s+${i}\\b`,"i"),a=[],c=new Set,l=Math.max(0,Math.min(t,e.length-1)),u=Math.max(l,Math.min(e.length-1,Math.max(n,t+4)));for(let d=l;d<=u;d+=1){let m=e[d]??"";(o.test(m)||s.test(m))&&!c.has(d)&&(c.add(d),a.push(d))}for(let d=0;d<e.length;d+=1){let m=e[d]??"";(o.test(m)||s.test(m))&&!c.has(d)&&(c.add(d),a.push(d))}return a}function qf(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}import{existsSync as Kf}from"fs";import{join as V0}from"path";import R0 from"better-sqlite3";var k0=["node_modules",".git","dist","build","out","coverage","target",".next",".nuxt",".cache",".turbo",".scipquery-cache","__pycache__",".venv","venv"],Lr=class{db;config;pathFilter;constructor(t,n){this.config=t,this.pathFilter=n??null,this.db=new R0(t.dbPath,{readonly:!0}),this.db.pragma("busy_timeout = 5000"),this.db.pragma("query_only = ON"),this.db.pragma("temp_store = MEMORY"),this.db.pragma("cache_size = -64000"),this.db.pragma("mmap_size = 268435456")}isIgnored(t){return this.pathFilter?.isIgnored(t)??!1}get localSymbolPredicate(){return`(
609
643
  EXISTS (
610
644
  SELECT 1
611
645
  FROM defn_enclosing_ranges local_der
@@ -622,8 +656,8 @@ ${n}`.toLowerCase(),r=Cn(i,["historical note","historical record","history note"
622
656
  AND local_m.role = 1
623
657
  ${this.pathExclusionsFor("local_d").trimStart()}
624
658
  )
625
- )`}get pathExclusions(){return this.pathExclusionsFor("d")}get symbolNoise(){return this.symbolNoiseFor("gs")}pathExclusionsFor(...t){return t.flatMap(n=>n_.flatMap(i=>[`AND ${n}.relative_path NOT LIKE '${i}/%'`,`AND ${n}.relative_path NOT LIKE '%/${i}/%'`])).join(`
626
- `)}symbolNoiseFor(t){return`AND ${t}.symbol NOT LIKE '%().(%' AND ${t}.symbol NOT LIKE '%typeLiteral%'`}all(t,...n){return this.db.prepare(t).all(...n)}get(t,...n){return this.db.prepare(t).get(...n)}close(){this.db.close()}};import i_ from"ignore";import{readFileSync as r_,existsSync as Fc}from"fs";import{dirname as Ac,isAbsolute as cf,join as Mc,relative as o_,resolve as s_}from"path";function Ut(e){let t=i_(),n=!1,i=a_(e);for(let r of i)try{let o=r_(r,"utf-8");t.add(o),n=!0}catch{}return n||t.add(c_),{isIgnored:r=>lf(t,e,r),filter:r=>r.filter(o=>!lf(t,e,o))}}function a_(e){let t=[],n=Mc(e,".gitignore");Fc(n)&&t.push(n);let i=Ac(e),r=0;for(;i!==Ac(i)&&r<5;){let o=Mc(i,".gitignore");if(Fc(o)&&t.push(o),Fc(Mc(i,".git")))break;i=Ac(i),r++}return t}var c_=`
659
+ )`}get pathExclusions(){return this.pathExclusionsFor("d")}get symbolNoise(){return this.symbolNoiseFor("gs")}pathExclusionsFor(...t){return t.flatMap(n=>k0.flatMap(r=>[`AND ${n}.relative_path NOT LIKE '${r}/%'`,`AND ${n}.relative_path NOT LIKE '%/${r}/%'`])).join(`
660
+ `)}symbolNoiseFor(t){return`AND ${t}.symbol NOT LIKE '%().(%' AND ${t}.symbol NOT LIKE '%typeLiteral%'`}all(t,...n){return this.db.prepare(t).all(...n)}get(t,...n){return this.db.prepare(t).get(...n)}close(){this.db.close()}};import w0 from"ignore";import{readFileSync as L0,existsSync as il}from"fs";import{dirname as ol,isAbsolute as Uf,join as sl,relative as I0,resolve as D0}from"path";function Zt(e){let t=w0(),n=!1,r=P0(e);for(let i of r)try{let o=L0(i,"utf-8");t.add(o),n=!0}catch{}return n||t.add(N0),{isIgnored:i=>Wf(t,e,i),filter:i=>i.filter(o=>!Wf(t,e,o))}}function P0(e){let t=[],n=sl(e,".gitignore");il(n)&&t.push(n);let r=ol(e),i=0;for(;r!==ol(r)&&i<5;){let o=sl(r,".gitignore");if(il(o)&&t.push(o),il(sl(r,".git")))break;r=ol(r),i++}return t}var N0=`
627
661
  # Dependencies
628
662
  node_modules/
629
663
  vendor/
@@ -680,52 +714,30 @@ Thumbs.db
680
714
 
681
715
  # Type definitions (often noise in queries)
682
716
  *.d.ts
683
- `;function lf(e,t,n){let i=l_(t,n);if(!i)return!1;try{return e.ignores(i)}catch{return!1}}function l_(e,t){if(!t||t===".")return null;if(!cf(t)&&!t.startsWith(".."))return t.replaceAll("\\","/");let n=cf(t)?t:s_(e,t),i=o_(e,n).replaceAll("\\","/");return!i||i==="."||i.startsWith("..")?null:i}import{readFileSync as u_,writeFileSync as df,existsSync as Ko,mkdirSync as d_}from"fs";import{join as dt,resolve as uf}from"path";import{createHash as m_}from"crypto";import{homedir as p_}from"os";var br=".scipquery.json",f_={enabled:!1,debounceMs:3e4,cooldownMs:6e4,ignore:[]},g_=["typescript","javascript","java","scala","kotlin","rust","python","ruby","go","cpp","c","csharp","vb","dart","php"];function et(e){let t=dt(e,br);if(!Ko(t))return{};try{let n=u_(t,"utf-8");return JSON.parse(n)}catch(n){let i=n instanceof Error?n.message:String(n);throw n instanceof SyntaxError?new Error(`invalid ${br} at ${t}: ${i}`,{cause:n}):new Error(`unable to read ${br} at ${t}: ${i}`,{cause:n})}}function fi(e,t={}){let n=[],i=new Set(g_);for(let[o,s]of(e.languages??[]).entries())i.has(s)||n.push({level:"error",path:`languages[${o}]`,message:`Unsupported language: ${s}`});if(e.watch?.debounceMs!==void 0&&e.watch.debounceMs<=0&&n.push({level:"error",path:"watch.debounceMs",message:"Must be greater than 0."}),e.watch?.cooldownMs!==void 0&&e.watch.cooldownMs<=0&&n.push({level:"error",path:"watch.cooldownMs",message:"Must be greater than 0."}),e.locality!==void 0)if(!b_(e.locality))n.push({level:"error",path:"locality",message:"Must be an object."});else{let o=e.locality.architecturalBoundarySegments;if(o!==void 0)if(!Array.isArray(o))n.push({level:"error",path:"locality.architecturalBoundarySegments",message:"Must be an array."});else for(let[s,a]of o.entries()){let c=`locality.architecturalBoundarySegments[${s}]`;typeof a!="string"||a.trim()===""?n.push({level:"error",path:c,message:"Boundary segment must be a non-empty string."}):(a.includes("/")||a.includes("\\"))&&n.push({level:"error",path:c,message:"Boundary segment must be a single folder name, not a path."})}}if(e.declaredCouplings!==void 0&&!Array.isArray(e.declaredCouplings))n.push({level:"error",path:"declaredCouplings",message:"Must be an array."});else for(let[o,s]of(e.declaredCouplings??[]).entries()){let a=`declaredCouplings[${o}]`;if((!s.name||s.name.trim()==="")&&n.push({level:"error",path:`${a}.name`,message:"Declared coupling name is required."}),!Array.isArray(s.files)||s.files.length<2)n.push({level:"error",path:`${a}.files`,message:"Declared coupling needs at least two files."});else for(let[c,l]of s.files.entries())!l||l.trim()===""?n.push({level:"error",path:`${a}.files[${c}]`,message:"Declared coupling file path is required."}):t.projectRoot&&!Ko(dt(t.projectRoot,l))&&n.push({level:"warning",path:`${a}.files[${c}]`,message:`Declared coupling file does not exist: ${l}`});s.reason!==void 0&&s.reason.trim()===""&&n.push({level:"error",path:`${a}.reason`,message:"Declared coupling reason cannot be blank."})}let r=t.now??new Date;for(let[o,s]of(e.suppressions??[]).entries()){let a=`suppressions[${o}]`;if((!s.reason||s.reason.trim()==="")&&n.push({level:"error",path:`${a}.reason`,message:"Suppression reason is required."}),!s.id&&!s.check&&n.push({level:"error",path:a,message:"Suppression must include id or check."}),s.file!==void 0&&(s.file.trim()===""?n.push({level:"error",path:`${a}.file`,message:"Suppression file path cannot be blank."}):t.projectRoot&&!Ko(dt(t.projectRoot,s.file))&&n.push({level:"warning",path:`${a}.file`,message:`Suppression file does not exist: ${s.file}`})),s.expiresAt){let c=Date.parse(s.expiresAt);Number.isNaN(c)?n.push({level:"error",path:`${a}.expiresAt`,message:"Must be an ISO date string."}):c<=r.getTime()&&n.push({level:"warning",path:`${a}.expiresAt`,message:"Suppression has expired."})}}return n}function mf(e){return{...f_,...e.watch}}function h_(e,t){let n=process.env.SCIP_QUERY_CACHE_DIR;if(n)return Oc(n);if(t?.dbPath)return Oc(uf(e,t.dbPath));let r=process.env.XDG_CACHE_HOME||dt(p_(),".cache"),o=m_("sha256").update(uf(e)).digest("hex").slice(0,12),s=dt(r,"scip-query","projects",o);return Oc(s)}function Wt(e,t){let n=h_(e,t);return{cacheDir:n,dbPath:dt(n,"index.db"),indexPath:dt(n,"index.scip"),metaPath:dt(n,"meta.json")}}function pf(e,t){let n=dt(e,br);return Ko(n)||df(n,JSON.stringify({languages:t,watch:{enabled:!1,debounceMs:3e4,cooldownMs:6e4}},null,2)+`
684
- `),n}function ff(e,t){let n=dt(e,br),i=et(e),r={...i,suppressions:[...i.suppressions??[],t]},o=fi(r,{projectRoot:e}).filter(s=>s.level==="error");if(o.length>0){let s=o.map(a=>`${a.path}: ${a.message}`).join("; ");throw new Error(`invalid suppression: ${s}`)}return df(n,JSON.stringify(r,null,2)+`
685
- `),{path:n,suppressionCount:r.suppressions?.length??0}}function Oc(e){return d_(e,{recursive:!0}),e}function b_(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function be(){return process.env.SCIP_QUERY_PROJECT_ROOT??process.cwd()}function gi(e=be()){let t=et(e),n=Wt(e,t),i=process.env.SCIP_QUERY_INDEX_DB??(gf(n.dbPath)?n.dbPath:y_(e,"index.db"));return{projectRoot:e,config:t,paths:n,dbPath:i}}function jc(e){return gi(e).dbPath}function S_(){let{projectRoot:e,config:t,paths:n,dbPath:i}=gi();gf(i)||(console.error("error: No index.db found. Run: scip-query reindex"),process.exit(1));let r={dbPath:i,indexPath:process.env.SCIP_QUERY_INDEX_SCIP??n.indexPath,projectRoot:e,entryRoots:t.entryRoots,semantic:t.semantic,suppressions:t.suppressions,declaredCouplings:t.declaredCouplings,locality:t.locality},o=Ut(e);return new pi(r,o)}function mt(e){let t=S_();try{return e(t)}finally{t.close()}}function Bc(e,t){return t.concat([e])}function hi(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(0)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(1)} GB`}function hf(e){switch(e.state){case"idle":return"Watching (idle)";case"waiting":{let t=Math.round((e.reindexAt-Date.now())/1e3);return`${e.changedFiles} file(s) changed, reindexing in ${t}s...`}case"indexing":return`Reindexing... (${Math.round((Date.now()-e.startedAt)/1e3)}s)`;case"cooldown":return`Cooldown (${Math.round((e.until-Date.now())/1e3)}s)${e.dirty?" \u2014 changes pending":""}`;default:return x_(e)}}function x_(e){throw new Error(`Unhandled watcher status: ${JSON.stringify(e)}`)}import{spawnSync as C_}from"child_process";function Hc(e){let t=C_(process.execPath,[...process.execArgv,e.cliPath,e.command,...e.args??[]],{cwd:process.cwd(),env:e.env??process.env,encoding:"utf8",maxBuffer:e.maxBuffer??10485760});if(t.status!==0){let n=t.stderr.trim();throw new Error(`${e.label} failed${n?`:
686
- ${n}`:""}`)}return JSON.parse(t.stdout)}function bf(e,t){let n=[];for(let i=0;i<e.length;i+=t)n.push(e.slice(i,i+t));return n}function Me(e){return e+1}function ve(e,t){return`${Me(e)}-${Me(t)}`}function ye(e,t,n){return`${e}:${ve(t,n)}`}function Jo(e,t=180){let n=e.replace(/\s+/g," ").trim();return n.length>t?`${n.slice(0,t-3)}...`:n}var P={empty(e){console.log(e)},list(e,t){for(let n of e)console.log(t(n))},groupedByFile(e,t,n=i=>i.relativePath){let i="";for(let r of e){let o=n(r);o!==i&&(i&&console.log(""),console.log(o),i=o),console.log(t(r))}},sectionedReport(e){let t=!0;for(let n of e)if(!(n.skipIfEmpty&&n.rows.length===0)){t||console.log(""),t=!1,n.title!==void 0&&console.log(`\u2550\u2550\u2550 ${n.title} \u2550\u2550\u2550`),n.explanation!==void 0&&console.log(n.explanation);for(let i of n.rows)console.log(i)}},table(e,t,n){console.log(` ${e.join(" ")}`);let i=n??e.map(r=>r.length);console.log(` ${i.map(r=>"\u2500".repeat(r)).join(" ")}`);for(let r of t)console.log(r)}};var R_=v_(import.meta.url),{version:Qo}=D_(),Xo="__health-phase",Yo="__diff-impact-batch",k_=10,w_=75e3,L_=5e3,yf=2500;function D_(){for(let e of["../package.json","../../package.json"])try{return R_(e)}catch{}return{version:"0.0.0"}}function bi(e){console.log(`Heuristic ${e}: review before acting; these are candidates, not exact compiler facts.
687
- `)}function qc(e){let t=Oe(e);return t.symbols>=w_||t.documents>=L_}function xf(e,t,n,i={}){return qc(e)?n?(i.quiet||console.error(`Large index detected; ${t} is running the unbounded semantic pass because --full was supplied.`),{semantic:!0}):(i.quiet||console.error(`Large index detected; ${t} will scan the highest-priority ${yf} candidates with semantic enrichment disabled. Run "scip-query ${t} --full" for the unbounded semantic pass.`),{scanLimit:yf,semantic:!1}):{semantic:!0}}function Zo(e){let t=hr.map(n=>I_(n,e));return Lc(t)}function I_(e,t){let n=process.argv[1]??Sf(import.meta.url),i=[e];return t.scope&&i.push("--scope",t.scope),t.full&&i.push("--full"),Hc({cliPath:n,command:Xo,args:i,label:`Health phase "${e}"`})}function Cf(e,t){if(t){console.log(JSON.stringify(e,null,2));return}if(console.log(`
717
+ `;function Wf(e,t,n){let r=E0(t,n);if(!r)return!1;try{return e.ignores(r)}catch{return!1}}function E0(e,t){if(!t||t===".")return null;if(!Uf(t)&&!t.startsWith(".."))return t.replaceAll("\\","/");let n=Uf(t)?t:D0(e,t),r=I0(e,n).replaceAll("\\","/");return!r||r==="."||r.startsWith("..")?null:r}import{readFileSync as T0,writeFileSync as Gf,existsSync as Ni,mkdirSync as _0}from"fs";import{isAbsolute as F0,join as yt,relative as $0,resolve as cl}from"path";import{createHash as A0}from"crypto";import{homedir as M0}from"os";var Ei=".scipquery.json",j0={enabled:!1,debounceMs:3e4,cooldownMs:6e4,gitPollMs:2e3,autoRefresh:!0,ignore:[]},O0=["typescript","javascript","java","scala","kotlin","rust","python","ruby","go","cpp","c","csharp","vb","dart","php"];function Pe(e){let t=yt(e,Ei);if(!Ni(t))return{};try{let n=T0(t,"utf-8");return JSON.parse(n)}catch(n){let r=n instanceof Error?n.message:String(n);throw n instanceof SyntaxError?new Error(`invalid ${Ei} at ${t}: ${r}`,{cause:n}):new Error(`unable to read ${Ei} at ${t}: ${r}`,{cause:n})}}function Ir(e,t={}){let n=[],r=new Set(O0);for(let[s,a]of(e.languages??[]).entries())r.has(a)||n.push({level:"error",path:`languages[${s}]`,message:`Unsupported language: ${a}`});e.indexerConcurrency!==void 0&&(!Number.isInteger(e.indexerConcurrency)||e.indexerConcurrency<=0)&&n.push({level:"error",path:"indexerConcurrency",message:"Must be a positive integer."}),e.watch?.debounceMs!==void 0&&e.watch.debounceMs<=0&&n.push({level:"error",path:"watch.debounceMs",message:"Must be greater than 0."}),e.watch?.cooldownMs!==void 0&&e.watch.cooldownMs<=0&&n.push({level:"error",path:"watch.cooldownMs",message:"Must be greater than 0."}),e.watch?.gitPollMs!==void 0&&e.watch.gitPollMs<=0&&n.push({level:"error",path:"watch.gitPollMs",message:"Must be greater than 0."}),e.watch?.autoRefresh!==void 0&&typeof e.watch.autoRefresh!="boolean"&&n.push({level:"error",path:"watch.autoRefresh",message:"Must be a boolean."});let i=e.indexer?.typescript;if(i?.projectMode!==void 0&&i.projectMode!=="single"&&i.projectMode!=="workspace"&&n.push({level:"error",path:"indexer.typescript.projectMode",message:'Must be "single" or "workspace".'}),i?.projects!==void 0)if(!Array.isArray(i.projects))n.push({level:"error",path:"indexer.typescript.projects",message:"Must be an array."});else for(let[s,a]of i.projects.entries()){let c=`indexer.typescript.projects[${s}]`;if(typeof a!="string"||a.trim()==="")n.push({level:"error",path:c,message:"Project path must be a non-empty string."});else if(t.projectRoot){let l=cl(t.projectRoot,a),u=$0(t.projectRoot,l);u.startsWith("..")||F0(u)?n.push({level:"error",path:c,message:"Project path must stay inside the project root."}):Ni(l)||n.push({level:"warning",path:c,message:`TypeScript project path does not exist: ${a}`})}}if(i?.projectMode==="workspace"&&i.pnpmWorkspaces===!0&&n.push({level:"warning",path:"indexer.typescript.pnpmWorkspaces",message:'Ignored when projectMode is "workspace"; explicit TypeScript projects are indexed directly.'}),e.locality!==void 0)if(!H0(e.locality))n.push({level:"error",path:"locality",message:"Must be an object."});else{let s=e.locality.architecturalBoundarySegments;if(s!==void 0)if(!Array.isArray(s))n.push({level:"error",path:"locality.architecturalBoundarySegments",message:"Must be an array."});else for(let[a,c]of s.entries()){let l=`locality.architecturalBoundarySegments[${a}]`;typeof c!="string"||c.trim()===""?n.push({level:"error",path:l,message:"Boundary segment must be a non-empty string."}):(c.includes("/")||c.includes("\\"))&&n.push({level:"error",path:l,message:"Boundary segment must be a single folder name, not a path."})}}if(e.declaredCouplings!==void 0&&!Array.isArray(e.declaredCouplings))n.push({level:"error",path:"declaredCouplings",message:"Must be an array."});else for(let[s,a]of(e.declaredCouplings??[]).entries()){let c=`declaredCouplings[${s}]`;if((!a.name||a.name.trim()==="")&&n.push({level:"error",path:`${c}.name`,message:"Declared coupling name is required."}),!Array.isArray(a.files)||a.files.length<2)n.push({level:"error",path:`${c}.files`,message:"Declared coupling needs at least two files."});else for(let[l,u]of a.files.entries())!u||u.trim()===""?n.push({level:"error",path:`${c}.files[${l}]`,message:"Declared coupling file path is required."}):t.projectRoot&&!Ni(yt(t.projectRoot,u))&&n.push({level:"warning",path:`${c}.files[${l}]`,message:`Declared coupling file does not exist: ${u}`});a.reason!==void 0&&a.reason.trim()===""&&n.push({level:"error",path:`${c}.reason`,message:"Declared coupling reason cannot be blank."})}let o=t.now??new Date;for(let[s,a]of(e.suppressions??[]).entries()){let c=`suppressions[${s}]`;if((!a.reason||a.reason.trim()==="")&&n.push({level:"error",path:`${c}.reason`,message:"Suppression reason is required."}),!a.id&&!a.check&&n.push({level:"error",path:c,message:"Suppression must include id or check."}),a.file!==void 0&&(a.file.trim()===""?n.push({level:"error",path:`${c}.file`,message:"Suppression file path cannot be blank."}):t.projectRoot&&!Ni(yt(t.projectRoot,a.file))&&n.push({level:"warning",path:`${c}.file`,message:`Suppression file does not exist: ${a.file}`})),a.expiresAt){let l=Date.parse(a.expiresAt);Number.isNaN(l)?n.push({level:"error",path:`${c}.expiresAt`,message:"Must be an ISO date string."}):l<=o.getTime()&&n.push({level:"warning",path:`${c}.expiresAt`,message:"Suppression has expired."})}}return n}function Dr(e){return{...j0,...e.watch}}function B0(e,t){let n=process.env.SCIP_QUERY_CACHE_DIR;if(n)return al(n);if(t?.dbPath)return al(cl(e,t.dbPath));let i=process.env.XDG_CACHE_HOME||yt(M0(),".cache"),o=A0("sha256").update(cl(e)).digest("hex").slice(0,12),s=yt(i,"scip-query","projects",o);return al(s)}function bt(e,t){let n=B0(e,t);return{cacheDir:n,dbPath:yt(n,"index.db"),indexPath:yt(n,"index.scip"),metaPath:yt(n,"meta.json")}}function zf(e,t){let n=yt(e,Ei);return Ni(n)||Gf(n,JSON.stringify({languages:t,watch:{enabled:!1,debounceMs:3e4,cooldownMs:6e4,gitPollMs:2e3,autoRefresh:!0}},null,2)+`
718
+ `),n}function Jf(e,t){let n=yt(e,Ei),r=Pe(e),i={...r,suppressions:[...r.suppressions??[],t]},o=Ir(i,{projectRoot:e}).filter(s=>s.level==="error");if(o.length>0){let s=o.map(a=>`${a.path}: ${a.message}`).join("; ");throw new Error(`invalid suppression: ${s}`)}return Gf(n,JSON.stringify(i,null,2)+`
719
+ `),{path:n,suppressionCount:i.suppressions?.length??0}}function al(e){return _0(e,{recursive:!0}),e}function H0(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function de(){return process.env.SCIP_QUERY_PROJECT_ROOT??process.cwd()}function Pr(e=de()){let t=Pe(e),n=bt(e,t),r=process.env.SCIP_QUERY_INDEX_DB??(Kf(n.dbPath)?n.dbPath:V0(e,"index.db"));return{projectRoot:e,config:t,paths:n,dbPath:r}}function Nr(e){return Pr(e).dbPath}function q0(){let{projectRoot:e,config:t,paths:n,dbPath:r}=Pr();Kf(r)||(console.error("error: No index.db found. Run: scip-query reindex"),process.exit(1));let i={dbPath:r,indexPath:process.env.SCIP_QUERY_INDEX_SCIP??n.indexPath,projectRoot:e,entryRoots:t.entryRoots,semantic:t.semantic,suppressions:t.suppressions,declaredCouplings:t.declaredCouplings,locality:t.locality},o=Zt(e);return new Lr(i,o)}function Je(e){let t=q0();try{return e(t)}finally{t.close()}}function ll(e,t){return t.concat([e])}function $n(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(0)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(1)} GB`}function Xf(e){switch(e.state){case"idle":return"Watching (idle)";case"waiting":{let t=Math.round((e.reindexAt-Date.now())/1e3);return`${e.changedFiles} file(s) changed, reindexing in ${t}s...`}case"indexing":return`Reindexing... (${Math.round((Date.now()-e.startedAt)/1e3)}s)`;case"cooldown":return`Cooldown (${Math.round((e.until-Date.now())/1e3)}s)${e.dirty?" \u2014 changes pending":""}`;default:return U0(e)}}function U0(e){throw new Error(`Unhandled watcher status: ${JSON.stringify(e)}`)}import{spawnSync as t4}from"child_process";function Qf(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function Oe(e){return e+1}function Re(e,t){return`${Oe(e)}-${Oe(t)}`}function Se(e,t,n){return`${e}:${Re(t,n)}`}function hs(e,t=180){let n=e.replace(/\s+/g," ").trim();return n.length>t?`${n.slice(0,t-3)}...`:n}var P={empty(e){console.log(e)},list(e,t){for(let n of e)console.log(t(n))},groupedByFile(e,t,n=r=>r.relativePath){let r="";for(let i of e){let o=n(i);o!==r&&(r&&console.log(""),console.log(o),r=o),console.log(t(i))}},sectionedReport(e){let t=!0;for(let n of e)if(!(n.skipIfEmpty&&n.rows.length===0)){t||console.log(""),t=!1,n.title!==void 0&&console.log(`\u2550\u2550\u2550 ${n.title} \u2550\u2550\u2550`),n.explanation!==void 0&&console.log(n.explanation);for(let r of n.rows)console.log(r)}},table(e,t,n){console.log(` ${e.join(" ")}`);let r=n??e.map(i=>i.length);console.log(` ${r.map(i=>"\u2500".repeat(i)).join(" ")}`);for(let i of t)console.log(i)}};var J0=G0(import.meta.url),{version:ys}=rF(),Ti="__health-phase",bs="__diff-impact-batch",K0=10,X0=4,Q0=8,Y0=75e3,Z0=5e3,Yf=2500,eF=4,tF=10,nF=10*1024*1024,Zf=new Set(["react-component-duplicates","react-hook-candidates","react-large-component-pressure"]),eg=new Set(["vue-component-duplicates","vue-composable-candidates","vue-large-view-pressure"]);function rF(){for(let e of["../package.json","../../package.json"])try{return J0(e)}catch{}return{version:"0.0.0"}}function Er(e){console.log(`Heuristic ${e}: review before acting; these are candidates, not exact compiler facts.
720
+ `)}function iF(e){let t=$e(e);return t.symbols>=Y0||t.documents>=Z0}function Ss(e,t,n,r={}){return iF(e)?n?(r.quiet||console.error(`Large index detected; ${t} is running the unbounded semantic pass because --full was supplied.`),{semantic:!0}):(r.quiet||console.error(`Large index detected; ${t} will scan the highest-priority ${Yf} candidates with semantic enrichment disabled. Run "scip-query ${t} --full" for the unbounded semantic pass.`),{scanLimit:Yf,semantic:!1}):{semantic:!0}}async function xs(e){let t=Je(s=>oF(s,e)),n=new Map,r=wr.filter(s=>sF(s,t)?!0:(n.set(s,cF(s)),!1)),i=aF(r);return(await tg(i,dF(i.length),s=>lF(s,e))).flat().forEach(s=>n.set(s.phase,s)),Kc(wr.map(s=>n.get(s)))}function oF(e,t){return to(e,{scope:t.scope})}function sF(e,t){return Zf.has(e)?t.react:eg.has(e)?t.vue:!0}function aF(e){let t=[Zf,eg],n=new Set,r=[];for(let i of e){if(n.has(i))continue;let o=t.find(a=>a.has(i));if(!o){n.add(i),r.push([i]);continue}let s=e.filter(a=>o.has(a));s.forEach(a=>n.add(a)),r.push(s)}return r}function cF(e){switch(e){case"react-component-duplicates":return{phase:e,reactComponentDuplicates:{count:0,loc:0,files:[]}};case"react-hook-candidates":return{phase:e,reactHookCandidates:{count:0,loc:0,files:[]}};case"react-large-component-pressure":return{phase:e,reactLargeComponentPressure:{count:0,loc:0,files:[]}};case"vue-component-duplicates":return{phase:e,vueComponentDuplicates:{count:0,loc:0,files:[]}};case"vue-composable-candidates":return{phase:e,vueComposableCandidates:{count:0,loc:0,files:[]}};case"vue-large-view-pressure":return{phase:e,vueLargeViewPressure:{count:0,loc:0,files:[]}};default:throw new Error(`Health phase "${e}" cannot be synthesized.`)}}function lF(e,t){if(e.length===1)return uF(e[0],t).then(o=>[o]);let n=e.join(","),r=process.argv[1]??dl(import.meta.url),i=[n];return t.scope&&i.push("--scope",t.scope),t.full&&i.push("--full"),ml({cliPath:r,command:Ti,args:i,label:`Health phases "${n}"`})}function uF(e,t){let n=process.argv[1]??dl(import.meta.url),r=[e];return t.scope&&r.push("--scope",t.scope),t.full&&r.push("--full"),ml({cliPath:n,command:Ti,args:r,label:`Health phase "${e}"`})}function ml(e){return new Promise((t,n)=>{let r=e.maxBuffer??nF,i=W0(process.execPath,[...process.execArgv,e.cliPath,e.command,...e.args??[]],{cwd:process.cwd(),env:e.env??process.env,stdio:["ignore","pipe","pipe"]}),o=[],s=[],a=0,c=0,l=!1,u=d=>{l||(l=!0,i.kill(),n(d))};i.stdout.on("data",d=>{if(a+=d.length,a>r){u(new Error(`${e.label} exceeded stdout buffer limit (${r} bytes).`));return}o.push(d)}),i.stderr.on("data",d=>{if(c+=d.length,c>r){u(new Error(`${e.label} exceeded stderr buffer limit (${r} bytes).`));return}s.push(d)}),i.on("error",u),i.on("close",d=>{if(l)return;l=!0;let m=Buffer.concat(s).toString("utf8").trim();if(d!==0){n(new Error(`${e.label} failed${m?`:
721
+ ${m}`:""}`));return}try{t(JSON.parse(Buffer.concat(o).toString("utf8")))}catch(f){n(new Error(`${e.label} returned invalid JSON: ${f instanceof Error?f.message:f}`))}})})}async function tg(e,t,n){let r=new Array(e.length),i=0;async function o(){for(;i<e.length;){let s=i++;r[s]=await n(e[s])}}return await Promise.all(Array.from({length:Math.min(t,e.length)},()=>o())),r}var dF=ig({envKey:"SCIP_QUERY_HEALTH_CONCURRENCY",defaultMinimum:eF,defaultMaximum:tF});function ng(e,t){if(t){console.log(JSON.stringify(e,null,2));return}if(console.log(`
688
722
  Codebase Health Score: ${e.score}/100`),console.log(` Risk: ${e.riskScore}/100 (validated predictors: graph facts + change graph)`),console.log(` Hygiene: ${e.hygieneScore}/100 (tidiness candidates)
689
- `),console.log(` ${e.overview.documents} files | ${e.overview.symbols} symbols | ${hi(e.overview.indexSizeBytes)}
690
- `),e.warnings&&e.warnings.length>0){console.log(" Warnings:");for(let i of e.warnings)console.log(` ${i}`);console.log("")}console.log(" Findings:");let n=e.findings;if(n.deadSymbols>0&&console.log(` Dead code: ${n.deadSymbols} symbols (${n.deadLoc} LOC)`),n.isolatedSymbols>0&&console.log(` Isolated symbols: ${n.isolatedSymbols} (${n.isolatedLoc} LOC)`),n.cycles>0&&console.log(` Circular deps: ${n.cycles}`),n.similarPairs>0&&console.log(` Similar pairs: ${n.similarPairs}`),n.reactComponentDuplicatePairs>0&&console.log(` React components: ${n.reactComponentDuplicatePairs} duplicate pair(s)`),n.reactHookCandidatePairs>0&&console.log(` React hook reuse: ${Vc(n.reactHookCandidatePairs,n.reactHookCandidateScoreCount)} candidate pair(s)`),n.reactLargeComponentPressureFiles>0&&console.log(` React large comps: ${n.reactLargeComponentPressureFiles} component(s)`),n.vueComponentDuplicatePairs>0&&console.log(` Vue components: ${n.vueComponentDuplicatePairs} duplicate pair(s)`),n.vueComposableCandidatePairs>0&&console.log(` Vue composables: ${Vc(n.vueComposableCandidatePairs,n.vueComposableCandidateScoreCount)} candidate pair(s)`),n.vueLargeViewPressureFiles>0&&console.log(` Vue large views: ${n.vueLargeViewPressureFiles} file(s)`),n.extractionCandidates>0&&console.log(` Extract candidates: ${n.extractionCandidates}`),n.wrappers>0&&console.log(` Wrapper functions: ${Vc(n.wrappers,n.wrapperScoreCount)}`),n.passthroughs>0&&console.log(` Passthroughs: ${n.passthroughs}`),n.staleTypes>0&&console.log(` Stale abstractions: ${n.staleTypes}`),n.driftedFiles>0&&console.log(` Pattern drift: ${n.driftedFiles} files`),n.complexityHotspotCount>0&&console.log(` Complexity hotspots: ${n.complexityHotspotCount}`),e.actions.length>0){console.log(`
691
- Prioritized Actions (highest impact + lowest effort first):`);for(let i=0;i<e.actions.length;i++){let r=e.actions[i],o=r.locRecoverable>0?` (~${r.locRecoverable} LOC recoverable)`:"";console.log(` ${i+1}. [${r.effort} effort / ${r.impact} impact] ${r.description}${o}`)}}if(e.topComplexity.length>0){console.log(`
692
- Top Complexity Hotspots:`);for(let i of e.topComplexity)console.log(` ${i.score.toFixed(1).padStart(6)} ${i.symbol}`)}if(E_(e),N_(e),e.scoreBreakdown.length>0){console.log(`
693
- Score Breakdown (100 minus the following):`);for(let i of e.scoreBreakdown)console.log(` -${String(i.points).padStart(2)} ${i.axis}: ${i.detail}`)}e.actions.length===0&&console.log(`
694
- No issues found. Codebase is clean.`)}function Vc(e,t){return Math.abs(e-t)<.01?String(e):`${e} (${P_(t)} score-weighted)`}function P_(e){return Number.isInteger(e)?String(e):e.toFixed(2).replace(/0+$/,"").replace(/\.$/,"")}function N_(e){if(e.pressure.length!==0){console.log(`
695
- Maintenance Pressure:`);for(let t of e.pressure)console.log(` ${t.category}: ${t.count} / ${t.threshold} threshold (${t.ratio}x, -${t.extraPenalty} ${t.kind})`)}}function E_(e){let t=e.axes;if(console.log(`
696
- Axes:`),console.log(` Deletable: ${t.deletable.loc} LOC across ${t.deletable.symbols} symbols`),t.changeAmplification){let i=t.changeAmplification;console.log(` Change amplification: ${i.medianFilesPerCommit} files/commit median, ${i.p90FilesPerCommit} p90 (${i.commitsAnalyzed} commits)`)}if(t.hiddenCoupling&&t.hiddenCoupling.pairCount>0){console.log(` Hidden coupling: ${t.hiddenCoupling.pairCount} co-changing pair(s) without a dependency edge`);for(let i of t.hiddenCoupling.top.slice(0,3))console.log(` ${i.fileA} <-> ${i.fileB} (${i.together}x together, ${Math.round(i.confidence*100)}%)`)}if(t.churnWeightedComplexity&&t.churnWeightedComplexity.length>0){let i=t.churnWeightedComplexity[0];i.weighted>0&&console.log(` Churn x complexity: hottest is ${i.symbol} (${i.changes} changes, weighted ${i.weighted})`)}let n=t.evidenceQuality;if(console.log(` Evidence quality: ${n.graphFindings} graph-fact finding(s), ${n.heuristicFindings} heuristic finding(s), ${n.userSuppressed} user-suppressed`),e.validation&&e.validation.flaggedFiles>0){let i=e.validation,r=i.ratio===null?"n/a":`${i.ratio}x`;console.log(` Validation: flagged files fix-density ${i.flaggedFixDensity} vs baseline ${i.baselineFixDensity} (${r})`)}}function vf(e){return mt(t=>{let n=lt(t,{base:e.base});if(n.note)return ci(t,{base:e.base});if(n.changedFiles.length===0)return ci(t,{base:e.base});let i=[];for(let r of bf(n.changedFiles,k_))i.push(T_(r,e));return Eo(n.changedFiles,i)})}function T_(e,t){let n=process.argv[1]??Sf(import.meta.url),i=[];return t.base&&i.push("--base",t.base),Hc({cliPath:n,command:Yo,args:i,env:{...process.env,SCIP_QUERY_DIFF_IMPACT_FILES:JSON.stringify(e)},label:"Diff-impact batch"})}function Rf(e){console.log(`Changed files: ${e.summary.totalChangedFiles}`),console.log(`Changed symbols: ${e.summary.totalChangedSymbols}`),console.log(`Affected consumer files: ${e.summary.totalAffectedFiles}`),e.summary.note&&console.log(`Note: ${e.summary.note}`),console.log(""),e.changedSymbols.length>0&&(console.log("Changed symbols:"),P.list(e.changedSymbols,t=>` ${t.file} ${t.shortName} (fan-in: ${t.fanIn})`)),e.affectedConsumers.length>0&&(console.log(`
697
- Affected consumer files:`),P.list(e.affectedConsumers,t=>` ${t.file} (${t.consumedSymbols} symbol(s))`))}var es=Bc,v=(e=>parseInt(e,10)),ts=(e=>{let t=parseInt(e,10);if(!Number.isFinite(t)||t<1)throw new Error(`Expected a positive integer, got ${e}`);return t}),tt=parseFloat,Uc=parseInt;function f(e,t,n,...i){return i.length>0?{flags:e,description:t,parser:n,defaultValue:i[0]}:{flags:e,description:t,parser:n}}function Wc(){return f("--json","Output as JSON for programmatic consumption")}function _(e=[]){return e.some(t=>t.flags==="--json")?e:[...e,Wc()]}function w(e,t=[]){return{category:e,examples:t}}import{execFileSync as q0}from"child_process";import{existsSync as vr,mkdirSync as U0,readFileSync as W0,writeFileSync as ig}from"fs";import{homedir as G0}from"os";import{dirname as z0,join as Ci}from"path";import{existsSync as Ef,readFileSync as e0}from"fs";import{execFileSync as __}from"child_process";import{existsSync as $_,readdirSync as wf}from"fs";import{extname as Lf,join as Df}from"path";var F_=new Set([".git",".hg",".svn",".idea",".vscode","node_modules","vendor","dist","build","target","bin","obj",".dart_tool",".gradle",".next",".venv","venv","__pycache__"]),A_=[{language:"typescript",files:["tsconfig.json","tsconfig.base.json"],extensions:[".ts",".tsx",".mts",".cts"]},{language:"rust",files:["Cargo.toml"],extensions:[".rs"]},{language:"go",files:["go.mod"],extensions:[".go"]},{language:"java",files:["pom.xml","build.gradle","build.gradle.kts"],extensions:[".java"]},{language:"kotlin",files:["build.gradle.kts"],extensions:[".kt",".kts"]},{language:"scala",files:["build.sbt"],extensions:[".scala"]},{language:"python",files:["pyproject.toml","setup.py","setup.cfg","Pipfile"],extensions:[".py",".pyi"]},{language:"ruby",files:["Gemfile"],extensions:[".rb"]},{language:"cpp",files:["compile_commands.json","CMakeLists.txt","Makefile"],extensions:[".cc",".cpp",".cxx",".hpp",".hh",".hxx"]},{language:"c",files:["compile_commands.json","CMakeLists.txt","Makefile"],extensions:[".c",".h"]},{language:"csharp",globs:["*.csproj","*.sln"],extensions:[".cs"]},{language:"vb",globs:["*.vbproj"],extensions:[".vb"]},{language:"dart",files:["pubspec.yaml"],extensions:[".dart"]},{language:"php",files:["composer.json"],extensions:[".php"]},{language:"javascript",files:["package.json"],extensions:[".js",".jsx",".mjs",".cjs"]}];function Dt(e){let t=[],n=M_(e),i=H_(e);for(let r of A_){if(O_(e,r.files)){t.push(r.language);continue}if(j_(n,r.globs)){t.push(r.language);continue}q_(i,r.extensions)&&t.push(r.language)}return t.includes("typescript")&&kf(t,"javascript"),t.includes("cpp")&&!i.has(".c")&&kf(t,"c"),t}function M_(e){try{return wf(e)}catch{return[]}}function O_(e,t){return t?.length?t.some(n=>$_(Df(e,n))):!1}function j_(e,t){return t?.length?e.some(n=>t.some(i=>B_(n,i))):!1}function B_(e,t){if(t==="*")return!0;if(!t.includes("*"))return e===t;let[n,i]=t.split("*");return e.startsWith(n??"")&&e.endsWith(i??"")}function H_(e){let t=V_(e);if(t)return t;let n=new Set,i=[e];for(;i.length>0;){let r=i.pop();if(!r)continue;let o;try{o=wf(r,{withFileTypes:!0})}catch{continue}for(let s of o){if(s.name.startsWith(".")&&!s.name.endsWith("proj")&&!s.name.endsWith("sln")&&s.isDirectory())continue;let a=Df(r,s.name);if(s.isDirectory()){F_.has(s.name)||i.push(a);continue}let c=Lf(s.name).toLowerCase();c&&n.add(c)}}return n}function V_(e){try{let t=__("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}),n=new Set;for(let i of t.split(`
698
- `)){if(!i)continue;let r=Lf(i).toLowerCase();r&&n.add(r)}return n}catch{return null}}function q_(e,t){return t?.length?t.some(n=>e.has(n)):!1}function kf(e,t){let n=e.indexOf(t);n!==-1&&e.splice(n,1)}import{execFileSync as U_}from"child_process";import{createHash as W_}from"crypto";import{readdirSync as G_,readFileSync as z_}from"fs";import{join as Pf}from"path";function If(e){return(J_(e)??Q_(e)).filter(t=>t&&!Nf(t)).sort()}function In(e,t={}){return(t.language?If(e).filter(i=>K_(i,t.language,t.markerFiles)):If(e)).map(i=>{let r=Pf(e,i);try{let o=z_(r);return{path:i,size:o.byteLength,hash:W_("sha256").update(o).digest("hex")}}catch{return{path:i,size:-1,hash:"unreadable"}}})}function K_(e,t,n){let i=e.split("/").at(-1)??e;if(n?.includes(e)||n?.includes(i)||Y_.has(i))return!0;let r=e.includes(".")?`.${e.split(".").at(-1).toLowerCase()}`:"";return(Z_[t]??[]).includes(r)}function J_(e){try{return U_("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:50*1024*1024,stdio:["ignore","pipe","ignore"]}).split(`
699
- `).filter(Boolean)}catch{return null}}function Q_(e){let t=[],n=[""];for(;n.length>0;){let i=n.pop(),r=i?Pf(e,i):e,o;try{o=G_(r,{withFileTypes:!0})}catch{continue}for(let s of o){let a=i?`${i}/${s.name}`:s.name;if(s.isDirectory()){Nf(a)||n.push(a);continue}t.push(a)}}return t}function Nf(e){return e.split("/").some(n=>X_.has(n))||e.endsWith(".db")||e.endsWith(".db-wal")||e.endsWith(".db-shm")||e.endsWith(".scip")}var X_=new Set([".git","node_modules",".scipquery-cache",".stryker-tmp","dist","build","coverage",".next",".nuxt","target"]),Y_=new Set(["package.json","package-lock.json","pnpm-lock.yaml","yarn.lock","bun.lockb","tsconfig.json","tsconfig.base.json","pyproject.toml","setup.py","setup.cfg","Cargo.toml","Cargo.lock","go.mod","go.sum","pom.xml","build.gradle","build.gradle.kts","build.sbt","compile_commands.json","CMakeLists.txt","Makefile","Gemfile","Gemfile.lock","composer.json","composer.lock","pubspec.yaml","pubspec.lock"]),Z_={typescript:[".ts",".tsx",".mts",".cts"],javascript:[".js",".jsx",".mjs",".cjs"],java:[".java"],scala:[".scala"],kotlin:[".kt",".kts"],rust:[".rs"],python:[".py",".pyi"],ruby:[".rb"],go:[".go"],cpp:[".cc",".cpp",".cxx",".hpp",".hh",".hxx"],c:[".c",".h"],csharp:[".cs"],vb:[".vb"],dart:[".dart"],php:[".php"]};function yi(e,t,n){let i=new Date().toISOString();if(!Ef(n.dbPath))return{state:"missing",checkedAt:i,metaPath:n.metaPath,reason:"No SQLite index database exists.",remedy:"Run: scip-query reindex"};if(!Ef(n.metaPath))return{state:"unknown",checkedAt:i,metaPath:n.metaPath,reason:"No reindex metadata file exists next to the SQLite index.",remedy:"Run: scip-query reindex"};try{let r=JSON.parse(e0(n.metaPath,"utf-8")),o=t.languages??Dt(e),s=t0(e,o,t),a=Array.isArray(r.indexedLanguages)?[...r.indexedLanguages].sort():[],c=(r.version===2||r.version===3)&&r.status==="complete"&&JSON.stringify(r.fingerprint)===JSON.stringify(s)&&JSON.stringify(a)===JSON.stringify(s.languages);return{state:c?"fresh":"stale",checkedAt:i,metaPath:n.metaPath,updatedAt:r.updatedAt,reason:c?"Index metadata fingerprint matches current source files.":"Index metadata fingerprint differs from current source files.",remedy:c?void 0:"Run: scip-query reindex"}}catch(r){return{state:"unknown",checkedAt:i,metaPath:n.metaPath,reason:`Could not read reindex metadata: ${r instanceof Error?r.message:String(r)}`,remedy:"Run: scip-query reindex"}}}function t0(e,t,n){return{version:1,languages:[...t].sort(),pnpmWorkspaces:n.indexer?.typescript?.pnpmWorkspaces===!0,files:In(e)}}import{execFileSync as $0}from"child_process";import{existsSync as Tf,readdirSync as n0}from"fs";import{join as Gc}from"path";var i0={typescript:{language:"typescript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,pnpmWorkspaces:t,indexerBinary:n})=>{let i=["index","--infer-tsconfig","--output",e,"--no-progress-bar"];return t&&i.splice(1,0,"--pnpm-workspaces"),{binary:n,args:i}},markerFiles:["tsconfig.json"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","@sourcegraph/scip-typescript"]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},javascript:{language:"javascript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,indexerBinary:t})=>({binary:t,args:["index","--infer-tsconfig","--output",e,"--no-progress-bar"]}),markerFiles:["package.json"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","@sourcegraph/scip-typescript"]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},java:{language:"java",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["pom.xml","build.gradle"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},scala:{language:"scala",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["build.sbt"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},kotlin:{language:"kotlin",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["build.gradle.kts"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},rust:{language:"rust",indexerBinary:"rust-analyzer",checkCommand:"rust-analyzer --version",indexArgs:({outputPath:e})=>({binary:"rust-analyzer",args:["scip",".","--output",e]}),markerFiles:["Cargo.toml"],installMethods:[{label:"rustup",prerequisite:"rustup",binary:"rustup",args:["component","add","rust-analyzer"]}],installUrl:"https://github.com/rust-lang/rust-analyzer"},python:{language:"python",indexerBinary:"scip-python-plus",binaryAliases:["scip-python"],checkCommand:"scip-python-plus --version",indexArgs:({outputPath:e,indexerBinary:t})=>({binary:t,args:["index","--output",e,"--project-name","project"]}),markerFiles:["pyproject.toml","setup.py"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","scip-python-plus"]}],installUrl:"https://github.com/PlunderStruck/scip-python",bundledNpmPackage:"scip-python-plus"},ruby:{language:"ruby",indexerBinary:"scip-ruby",checkCommand:"scip-ruby --version",indexArgs:({indexerBinary:e})=>({binary:e,args:["--dir","."]}),defaultOutputPath:"index.scip",markerFiles:["Gemfile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-ruby/releases"},go:{language:"go",indexerBinary:"scip-go",checkCommand:"scip-go --version",indexArgs:({outputPath:e})=>({binary:"scip-go",args:["--output",e]}),markerFiles:["go.mod"],installMethods:[{label:"go install",prerequisite:"go",binary:"go",args:["install","github.com/sourcegraph/scip-go@latest"]}],installUrl:"https://github.com/sourcegraph/scip-go"},cpp:{language:"cpp",indexerBinary:"scip-clang",checkCommand:"scip-clang --version",indexArgs:({outputPath:e})=>({binary:"scip-clang",args:["--compdb-path","compile_commands.json","--index-output-path",e]}),markerFiles:["CMakeLists.txt","Makefile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-clang/releases"},c:{language:"c",indexerBinary:"scip-clang",checkCommand:"scip-clang --version",indexArgs:({outputPath:e})=>({binary:"scip-clang",args:["--compdb-path","compile_commands.json","--index-output-path",e]}),markerFiles:["CMakeLists.txt","Makefile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-clang/releases"},csharp:{language:"csharp",indexerBinary:"scip-dotnet",checkCommand:"scip-dotnet --version",indexArgs:({projectRoot:e,outputPath:t})=>({binary:"scip-dotnet",args:["index",_f(e,[".sln",".csproj"])??e,"--output",t,"--working-directory",e]}),markerFiles:["*.csproj","*.sln"],installMethods:[{label:"dotnet",prerequisite:"dotnet",binary:"dotnet",args:["tool","install","--global","scip-dotnet"]}],installUrl:"https://github.com/sourcegraph/scip-dotnet/releases"},vb:{language:"vb",indexerBinary:"scip-dotnet",checkCommand:"scip-dotnet --version",indexArgs:({projectRoot:e,outputPath:t})=>({binary:"scip-dotnet",args:["index",_f(e,[".sln",".vbproj"])??e,"--output",t,"--working-directory",e]}),markerFiles:["*.vbproj","*.sln"],installMethods:[{label:"dotnet",prerequisite:"dotnet",binary:"dotnet",args:["tool","install","--global","scip-dotnet"]}],installUrl:"https://github.com/sourcegraph/scip-dotnet/releases"},dart:{language:"dart",indexerBinary:"scip-dart",checkCommand:"scip-dart --version",indexArgs:({indexerBinary:e,outputPath:t})=>({binary:e,args:["--output",t]}),markerFiles:["pubspec.yaml"],installMethods:[{label:"dart pub",prerequisite:"dart",binary:"dart",args:["pub","global","activate","scip_dart"]}],installUrl:"https://github.com/Workiva/scip-dart/releases"},php:{language:"php",indexerBinary:"scip-php",projectLocalBinaries:["vendor/davidrjenni/scip-php/bin/scip-php","vendor/bin/scip-php"],checkCommand:"scip-php --version",indexArgs:({projectRoot:e,indexerBinary:t})=>{let n=Gc(e,"vendor","bin","scip-php"),i=Gc(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",Tf(i)?i:Tf(n)?n:t]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function Pn(e){return i0[e]}function _f(e,t){let n;try{n=n0(e)}catch{return null}for(let i of t)for(let r of n)if(r.endsWith(i))return Gc(e,r);return null}import{execFileSync as Kc}from"child_process";import{existsSync as zc,readFileSync as a0}from"fs";import{createRequire as c0}from"module";import{platform as l0}from"os";import{dirname as $f,join as ns}from"path";import{execFileSync as r0}from"child_process";import{platform as o0}from"os";var s0=o0()==="win32";function pt(e){let t=s0?"where":"which";try{return r0(t,[e],{stdio:"pipe"}),!0}catch{return!1}}var u0=c0(import.meta.url);function Jc(e){return[e.indexerBinary,...e.binaryAliases??[]]}function is(e){let t=Jc(e);return t.length===1?t[0]:t.join(" or ")}function Si(e){for(let t of Jc(e))if(pt(t))return t;return m0(e)}function Ff(e){return Si(e)!==null||d0(e)}function d0(e){return Af(e)!==null}function m0(e){let t=Af(e);if(!t)return null;let i=JSON.parse(a0(t,"utf8")).bin;if(!i)return null;if(typeof i=="string")return ns($f(t),i);for(let r of Jc(e)){let o=i[r];if(o)return ns($f(t),o)}return null}function Af(e){if(!e.bundledNpmPackage)return null;try{return u0.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function Qc(e,t){for(let n of e.projectLocalBinaries??[]){let i=ns(t,n);if(zc(i))return i}return null}function p0(e,t){return Qc(e,t)??Si(e)}function Mf(e,t=process.env,n=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||Xc(n,t))return t;let i=Of(n,t);return i?{...t,DOTNET_ROOT:i}:t}function rs(e,t){let n=is(e),i=t?p0(e,t):Si(e);if(!i)return{language:e.language,binaryLabel:n,installed:!1,runnable:!1,resolvedBinary:null,installUrl:e.installUrl};if(e.indexerBinary!=="scip-dotnet")return{language:e.language,binaryLabel:n,installed:!0,runnable:!0,resolvedBinary:i};let r=f0(i);return{language:e.language,binaryLabel:n,installed:!0,runnable:r.runnable,resolvedBinary:i,installUrl:e.installUrl,note:r.note}}function os(e,t){let n=e.installMethods,i=is(e);if(!n?.length)return t(`No auto-install method available for ${i}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1;for(let r of n)if(pt(r.prerequisite)){t(`Installing ${i} via ${r.label}...`);try{Kc(r.binary,r.args,{stdio:"inherit",timeout:3e5,env:process.env});let o=Si(e);if(o){let s=o===e.indexerBinary?"":` (using ${o})`;return t(`Successfully installed ${i} via ${r.label}${s}`),!0}t(`${r.label} command completed but ${i} was not found on PATH`)}catch(o){let s=o instanceof Error?o.message:String(o);t(`${r.label} install failed: ${s}`)}}return t(`Could not auto-install ${i}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1}function f0(e){if(Xc(e,process.env))return{runnable:!0};let t=Of(e,process.env);if(t)return{runnable:!0,note:`using .NET 9 runtime from ${t}`};let n=jf(process.env);return{runnable:!1,note:n.length>0?`.NET 9 runtime still unavailable after checking ${n.join(", ")}`:"binary is present, but scip-dotnet still needs a .NET 9 runtime"}}function Of(e,t){for(let n of jf(t))if(Xc(e,{...t,DOTNET_ROOT:n}))return n;return null}function jf(e){let t=[],n=e.DOTNET_ROOT;if(n&&zc(n)&&t.push(n),l0()==="darwin"&&pt("brew"))try{let i=Kc("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),r=ns(i,"libexec");zc(r)&&!t.includes(r)&&t.push(r)}catch{}return t}function Xc(e,t){try{return Kc(e,["--version"],{stdio:"pipe",env:t}),!0}catch{return!1}}import{createRequire as g0}from"module";var h0=g0(import.meta.url);function Bf(e,t=[]){let n=b0(),i=la(e,t),r=i[0];return n?i.length===0?{available:!1,dependencyAvailable:n,reason:"no tsconfig found"}:{available:!0,dependencyAvailable:n,tsconfigPath:r,tsconfigPaths:i}:{available:!1,dependencyAvailable:n,tsconfigPath:r,tsconfigPaths:i,reason:"ts-morph is not installed"}}function b0(){try{return h0.resolve("ts-morph"),!0}catch{return!1}}import{execFileSync as xi,spawnSync as Uf}from"child_process";import{existsSync as It,mkdtempSync as Wf,readFileSync as y0,readdirSync as S0,rmSync as Gf,symlinkSync as x0,writeFileSync as C0}from"fs";import{tmpdir as zf}from"os";import{join as Ge}from"path";var v0=3e5,R0=12;function Yc(e,t,n={}){let i=Zc(e);if(i.length===0)return{checkers:[],uncoveredFiles:[],baselineErrors:0,dirtyOverlap:[],batches:[]};let r=k0(t,i),o=n.timeoutMs??v0,s=D0(e,t),a=Wf(Ge(zf(),"scip-cleanup-verify-")),c=[],l=new Set;try{xi("git",["-C",e,"worktree","add","--detach","--force",a,"HEAD"],{stdio:"ignore"}),I0(e,a);for(let u of i)for(let d of qf(u,a,o).errorKeys)l.add(d);for(let u of t.batches){Jf(a,u);let d=[];for(let m of i){let p=qf(m,a,o);d.push(...p.rawErrors.filter(h=>!l.has(Kf(h))))}if(d.length===0)c.push({depth:u.depth,status:"verified"});else{c.push({depth:u.depth,status:"failed",errors:d.slice(0,R0)});break}}}finally{try{xi("git",["-C",e,"worktree","remove","--force",a],{stdio:"ignore"})}catch{Gf(a,{recursive:!0,force:!0})}}return{checkers:i.map(u=>u.label),uncoveredFiles:r,baselineErrors:l.size,dirtyOverlap:s,batches:c}}function k0(e,t){let n=new Set(t.flatMap(r=>r.coversExtensions));return[...new Set(e.batches.flatMap(r=>r.entries.map(o=>o.file)))].filter(r=>{let o=r.slice(r.lastIndexOf("."));return!n.has(o)}).sort()}function Kf(e){return e.replace(/\(\d+,\d+\)|:\d+(?::\d+)?/g,"").trim()}var Hf=[".ts",".tsx",".mts",".cts",".js",".jsx",".vue"];function Zc(e){let t=[];if(It(Ge(e,"tsconfig.json"))){let n=Ge(e,"node_modules",".bin","tsc");t.push(It(n)?{label:"tsc --noEmit",binary:n,args:["--noEmit"],coversExtensions:Hf}:{label:"npx tsc --noEmit",binary:"npx",args:["tsc","--noEmit"],coversExtensions:Hf})}if(It(Ge(e,"go.mod"))&&t.push({label:"go build ./...",binary:"go",args:["build","./..."],coversExtensions:[".go"]}),["pyproject.toml","setup.py","requirements.txt"].some(n=>It(Ge(e,n)))){let n=w0();n&&t.push(n)}for(let n of L0(e))t.push({label:`cargo check --quiet --manifest-path ${n}`,binary:"cargo",args:["check","--quiet","--manifest-path",n],coversExtensions:[".rs"],env:{...process.env,CARGO_TARGET_DIR:Ge(e,n,"..","target")}});return t}function w0(){return Vf("ruff")?{label:"ruff check --select E9,F821,F822",binary:"ruff",args:["check","--quiet","--select","E9,F821,F822","."],coversExtensions:[".py"]}:Vf("python3")?{label:"python3 -m compileall (syntax only)",binary:"python3",args:["-m","compileall","-q","."],coversExtensions:[".py"]}:null}function Vf(e){try{return Uf(e,["--version"],{stdio:"ignore",timeout:1e4}).status===0}catch{return!1}}function L0(e){let t=[];if(It(Ge(e,"Cargo.toml")))return t.push("Cargo.toml"),t;let n;try{n=S0(e)}catch{return t}for(let i of n)i==="node_modules"||i.startsWith(".")||It(Ge(e,i,"Cargo.toml"))&&t.push(`${i}/Cargo.toml`);return t}function D0(e,t){let n;try{n=xi("git",["-C",e,"status","--porcelain"],{encoding:"utf-8"})}catch{return[]}let i=new Set(n.split(`
700
- `).map(o=>o.slice(3).trim()).filter(o=>o!==""));return[...new Set(t.batches.flatMap(o=>o.entries.map(s=>s.file)))].filter(o=>i.has(o)).sort()}function I0(e,t){for(let n of["node_modules"]){let i=Ge(e,n),r=Ge(t,n);if(It(i)&&!It(r))try{x0(i,r,"junction")}catch{}}}function Jf(e,t){let n=new Map;for(let i of t.entries){let r=n.get(i.file)??[];r.push({start:i.startLine,end:i.endLine}),n.set(i.file,r)}for(let[i,r]of n){let o=Ge(e,i);It(o)&&C0(o,P0(y0(o,"utf-8"),r,{rust:i.endsWith(".rs")}))}}function el(e,t){for(let n of t)Jf(e,n)}function Qf(e,t){let n=Wf(Ge(zf(),"scip-cleanup-patch-"));try{return xi("git",["-C",e,"worktree","add","--detach","--force",n,"HEAD"],{stdio:"ignore"}),el(n,t),xi("git",["-C",n,"diff","--binary"],{encoding:"utf-8",maxBuffer:32*1024*1024})}finally{try{xi("git",["-C",e,"worktree","remove","--force",n],{stdio:"ignore"})}catch{Gf(n,{recursive:!0,force:!0})}}}function tl(e,t={}){if(t.all)return[...e.batches];if(t.batch!==void 0){let n=e.batches.find(i=>i.depth===t.batch);return n?[n]:[]}return[...e.batches]}function nl(e,t,n={}){let i=[];e.checkers.length===0&&i.push("No project checker was detected, so no deletion patch is compiler-verified."),e.uncoveredFiles.length>0&&i.push(`No detected checker covers: ${e.uncoveredFiles.join(", ")}.`),!n.allowDirty&&e.dirtyOverlap.length>0&&i.push(`Plan files are dirty in the working tree: ${e.dirtyOverlap.join(", ")}.`);let r=new Set(e.batches.filter(o=>o.status==="verified").map(o=>o.depth));for(let o of t)r.has(o.depth)||i.push(`Batch ${o.depth} is not compiler-verified.`);return i}function P0(e,t,n={}){let i=e.split(`
701
- `),r=(n.rust===!0?N0(e):rn(e)).split(`
702
- `),o=new Set;for(let s of t){let a=E0(i,s.start),c=_0(r,a,Math.min(s.end,i.length-1));for(let l=a;l<=c&&l<i.length;l++)o.add(l)}return i.filter((s,a)=>!o.has(a)).join(`
703
- `)}function N0(e){return e.replace(/\/\/.*$/gm,t=>t.replace(/[^\r\n]/g," ")).replace(/\/\*[\s\S]*?\*\//g,t=>t.replace(/[^\r\n]/g," ")).replace(/"(?:\\.|[^"\\\r\n])*"/g,t=>t.replace(/[^\r\n]/g," "))}function E0(e,t){let n=t;for(;n>0;){let i=(e[n-1]??"").trim();if(/^(?:\/\/\/|\/\/!|#\[|#!\[|\/\*\*|\*|\*\/|@\w)/.test(i))n-=1;else break}return n}var T0=200;function _0(e,t,n){let i=0;for(let r=t;r<e.length;r++){for(let o of e[r]??"")o==="("||o==="["||o==="{"?i+=1:(o===")"||o==="]"||o==="}")&&(i-=1);if(r>=n&&i<=0)return r;if(r-n>T0)break}return n}function qf(e,t,n){let i=Uf(e.binary,e.args,{cwd:t,encoding:"utf-8",timeout:n,env:e.env??process.env,maxBuffer:33554432});if(i.status===0)return{ok:!0,rawErrors:[],errorKeys:new Set};let o=`${i.stdout??""}
704
- ${i.stderr??""}`.split(`
705
- `).map(s=>s.trim()).filter(s=>/\berror\b/i.test(s));return i.error&&o.length===0&&o.push(String(i.error)),{ok:!1,rawErrors:o,errorKeys:new Set(o.map(Kf))}}var Xf={typescript:[".ts",".tsx",".mts",".cts"],javascript:[".js",".jsx",".vue"],java:[".java"],scala:[".scala"],kotlin:[".kt",".kts"],rust:[".rs"],python:[".py",".pyi"],ruby:[".rb"],go:[".go"],cpp:[".cpp",".cc",".cxx",".hpp",".hh",".hxx"],c:[".c",".h"],csharp:[".cs"],vb:[".vb"],dart:[".dart"],php:[".php"]},F0={typescript:{status:"available",reason:"AST/source fallback covers TypeScript imports, references, and source-backed evidence."},javascript:{status:"available",reason:"AST/source fallback covers JavaScript, JSX, and Vue script evidence."},java:{status:"available",reason:"AST-dispatched source fallback covers Java imports."},scala:{status:"available",reason:"AST-dispatched source fallback covers Scala imports."},kotlin:{status:"available",reason:"AST-dispatched source fallback covers Kotlin imports."},rust:{status:"available",reason:"AST/source fallback covers Rust imports and exports."},python:{status:"available",reason:"AST/source fallback covers Python imports."},ruby:{status:"available",reason:"AST/source fallback covers Ruby imports."},go:{status:"unavailable",reason:"No Go source-fallback adapter is registered; Go relies on SCIP graph facts."},cpp:{status:"available",reason:"AST/source fallback covers C++ includes."},c:{status:"available",reason:"AST/source fallback covers C includes."},csharp:{status:"available",reason:"AST-dispatched source fallback covers C# imports."},vb:{status:"available",reason:"AST-dispatched source fallback covers Visual Basic imports."},dart:{status:"partial",reason:"Dart source fallback is regex-only for imports and exports."},php:{status:"available",reason:"AST/source fallback covers PHP imports."}};function ft(e,t){let n=t.languages??Dt(e),i=n.map(s=>{let a=rs(Pn(s),e);return{...a,language:s,resolvedBinary:a.resolvedBinary??void 0}}),r=n.includes("typescript")?{language:"typescript",...Bf(e,t.semantic?.typescript?.tsconfigs)}:void 0,o=Zc(e).map(s=>({label:s.label,coversExtensions:s.coversExtensions}));return{languages:n,indexers:i,semantic:r,checkers:o,gitAvailable:j0(e)}}function Nn(e){let t=e.indexers.filter(r=>r.runnable).length,n=e.languages.length===0||t===0?"unavailable":t===e.indexers.length?"available":"partial",i=e.semantic?e.semantic.available?"available":"partial":"unavailable";return{languages:e.languages,matrix:e.languages.map(r=>A0(e,r)),capabilities:[{id:"indexing",label:"SCIP indexing",status:n,evidence:"graph-fact",reason:n==="available"?"All detected/configured language indexers are runnable.":`${t}/${e.indexers.length} detected/configured language indexers are runnable.`},{id:"semantic-typescript",label:"TypeScript semantic provider",status:i,evidence:"semantic",reason:e.semantic?e.semantic.available?"ts-morph can load the configured TypeScript project.":e.semantic.reason??"TypeScript semantic checks will fall back to SCIP/source evidence.":"TypeScript is not detected/configured for this project."},{id:"heuristic-detectors",label:"Heuristic cleanup detectors",status:n==="unavailable"?"unavailable":"available",evidence:"heuristic",reason:n==="unavailable"?"Heuristic detectors need an indexed code graph.":"Similarity, migration, wrapper, stale-abstraction, and doc-drift detectors can run over the index."},{id:"cleanup-verification",label:"Compiler cleanup verification",status:e.checkers.length>0?"available":"unavailable",evidence:"compiler",reason:e.checkers.length>0?e.checkers.map(r=>r.label).join(", "):"No project checker was detected for cleanup-plan --verify."},{id:"diff-gate",label:"Git diff gate",status:e.gitAvailable&&n!=="unavailable"?"available":"unavailable",evidence:"git",reason:e.gitAvailable?"Git diff data is available for changed-file gates.":"Git is unavailable or the project root is not a git worktree."}]}}function A0(e,t){let n=e.indexers.find(a=>a.language===t),i=n?.runnable?"available":"unavailable",r=F0[t],o=t==="typescript"?M0(e):{id:"semantic",label:"Semantic provider",status:"unavailable",evidence:"semantic",reason:`No semantic provider is registered for ${t}; commands use graph and source evidence instead.`},s=O0(e,t);return{language:t,indexing:{id:"indexing",label:"SCIP indexing",status:i,evidence:"graph-fact",reason:n?.runnable?`${n.binaryLabel} is runnable${n.resolvedBinary?` at ${n.resolvedBinary}`:""}.`:n?.note??`${t} indexing is not runnable in this project.`},sourceFacts:{id:"source-facts",label:"Source fallback",status:i==="unavailable"?"unavailable":r.status,evidence:"heuristic",reason:i==="unavailable"?"Source fallback needs indexed documents before it can attach evidence.":r.reason},semantic:o,detectors:{id:"detectors",label:"Cleanup detectors",status:i==="unavailable"?"unavailable":"available",evidence:"heuristic",reason:i==="unavailable"?"Cleanup detectors need an indexed graph for this language.":"Graph-backed cleanup detectors can analyze this language; source and semantic precision depends on the rows above."},cleanupVerification:{id:"cleanup-verification",label:"Cleanup verification",status:s.length>0?"available":"unavailable",evidence:"compiler",reason:s.length>0?s.map(a=>a.label).join(", "):`No detected checker covers ${Xf[t].join(", ")} files.`}}}function M0(e){return e.semantic?{id:"semantic",label:"Semantic provider",status:e.semantic.available?"available":"partial",evidence:"semantic",reason:e.semantic.available?"ts-morph can load the configured TypeScript project.":e.semantic.reason??"TypeScript semantic checks fall back to SCIP/source evidence."}:{id:"semantic",label:"Semantic provider",status:"unavailable",evidence:"semantic",reason:"TypeScript is not detected/configured for this project."}}function O0(e,t){let n=new Set(Xf[t]);return e.checkers.filter(i=>i.coversExtensions.some(r=>n.has(r)))}function j0(e){try{return $0("git",["rev-parse","--is-inside-work-tree"],{cwd:e,stdio:"ignore",timeout:1e4}),!0}catch{return!1}}import{chmodSync as B0,existsSync as ss,readFileSync as as,writeFileSync as eg}from"fs";import{join as Sr}from"path";var yr="<!-- scip-query:agent-setup:begin -->",il="<!-- scip-query:agent-setup:end -->",Yf="# scip-query:agent-setup";function xr(){if(process.stdin.isTTY)return"";try{return as(0,"utf-8")}catch{return""}}function cs(e){if(!e.trim())return!1;try{return JSON.parse(e).stop_hook_active===!0}catch{return!1}}function Cr(e){let t=e.rootCauseGroups?.length??e.findings.length,n=[`scip-query diff-gate found ${e.findings.length} issue(s) in ${t} root-cause group(s) in this diff \u2014 fix or knowingly accept them before finishing:`],i=e.rootCauseGroups?.filter(r=>r.count>1)??[];for(let r of i)n.push(`- group [${r.check}] ${r.count} finding(s): ${r.message}`),n.push(` -> ${r.remediation}`);for(let r of e.findings)n.push(`- [${r.check}] ${r.message}`),n.push(` -> ${r.remediation}`);return n.join(`
706
- `)}function ls(e,t={}){let n={written:[],unchanged:[],skipped:[]};return H0(e,n),t.gitHook&&V0(e,n),n}function H0(e,t){let n=[yr,"## scip-query","","This repo is indexed by scip-query (compiler-resolved code intelligence).","","- Unsure how to explore, plan, verify, or clean up here: invoke the `scip-query` skill \u2014 it routes to the right specialist skill.","- For non-trivial implementation requests: plan first (`concrete-plan` skill, anchored by `scip-query plan-context <target>`), then implement.","- After the change, run the check matching what you did: extracted a helper -> `scip-query incomplete-migration`; new helper -> `scip-query recent-duplicates`; new params -> `scip-query unused-params`; new wrapper -> `scip-query wrapper-candidates`; schema/config change -> `scip-query co-change <file>`; deleted code -> `scip-query cleanup-plan --verify`.","- Before declaring the work done: `scip-query reindex && scip-query diff-gate` \u2014 fix findings or state why each is accepted.",il].join(`
707
- `);Zf(e,"AGENTS.md",n,t);let i=ss(Sr(e,"CLAUDE.md"))?as(Sr(e,"CLAUDE.md"),"utf-8"):"";if(i.includes("@AGENTS.md")&&!i.includes(yr)){t.unchanged.push("CLAUDE.md");return}let r=[yr,"@AGENTS.md",il].join(`
708
- `);Zf(e,"CLAUDE.md",r,t)}function Zf(e,t,n,i){let r=Sr(e,t),o=ss(r)?as(r,"utf-8"):"",s;if(o.includes(yr)){let a=new RegExp(`${yr}[\\s\\S]*?${il}`);s=o.replace(a,n)}else s=o.length>0?`${o.replace(/\n*$/,`
709
-
710
- `)}${n}
711
- `:`${n}
712
- `;s===o?i.unchanged.push(t):(eg(r,s),i.written.push(t))}function V0(e,t){let n=Sr(e,".git","hooks");if(!ss(n)){t.skipped.push({target:".git/hooks/pre-commit",reason:"no .git/hooks directory (not a git repository?)"});return}let i=Sr(n,"pre-commit"),r=["#!/bin/sh",Yf,"scip-query diff-gate || {",' echo "scip-query diff-gate failed \u2014 fix findings or commit with --no-verify to knowingly accept." >&2'," exit 1","}",""].join(`
713
- `);if(ss(i)){let o=as(i,"utf-8");if(o.includes(Yf)){if(o===r){t.unchanged.push(".git/hooks/pre-commit");return}}else{t.skipped.push({target:".git/hooks/pre-commit",reason:"a pre-commit hook already exists \u2014 add `scip-query diff-gate` to it manually"});return}}eg(i,r),B0(i,493),t.written.push(".git/hooks/pre-commit")}var rg="SCIP_QUERY_SKIP_HOOK_INSTALL",rl="SCIP_QUERY_STOP_HOOK_MODE",K0="scip-query hook-",J0="scip-query diff-gate --hook";function us(e,t={}){let n=og(),i=t.env??process.env;return X0(i)?(n.skipped.push({target:"project agent hooks",reason:`${rg}=1`}),n):(tg({provider:"codex",rootDir:Ci(e,".codex"),configPath:Ci(e,".codex","hooks.json"),label:".codex/hooks.json",createRoot:!0,result:n}),tg({provider:"claude",rootDir:Ci(e,".claude"),configPath:Ci(e,".claude","settings.json"),label:".claude/settings.json",createRoot:!0,result:n}),t.removeLegacyUserHooks!==!1&&Q0({homeDir:t.homeDir,result:n}),n)}function Q0(e={}){let t=e.result??og(),n=e.homeDir??G0();return ng({configPath:Ci(n,".codex","hooks.json"),label:"Codex/hooks.json",result:t}),ng({configPath:Ci(n,".claude","settings.json"),label:"Claude/settings.json",result:t}),t}function og(){return{installed:[],updated:[],unchanged:[],removed:[],skipped:[]}}function X0(e=process.env){let t=e[rg];return t==="1"||t?.toLowerCase()==="true"||t?.toLowerCase()==="yes"}function Y0(e=process.env){let t=e[rl]?.toLowerCase();return t==="block"||t==="blocking"||t==="1"||t==="true"||t==="yes"?"block":t==="feedback"||t==="continue"?"feedback":"warn"}function tg(e){if(!e.createRoot&&!vr(e.rootDir))return;let t=sg(e.configPath,e.label,e.result);if(!t)return;let n=Z0(t,e.provider);if(JSON.stringify(n)===JSON.stringify(t)){e.result.unchanged.push(e.label);return}let i=vr(e.configPath);U0(z0(e.configPath),{recursive:!0}),ig(e.configPath,`${JSON.stringify(n,null,2)}
714
- `),e.result[i?"updated":"installed"].push(e.label)}function ng(e){if(!vr(e.configPath))return;let t=sg(e.configPath,e.label,e.result);if(!t)return;let n=t.hooks&&typeof t.hooks=="object"&&!Array.isArray(t.hooks)?t.hooks:{},i={...n},r=!1;for(let s of["SessionStart","UserPromptSubmit","Stop"]){let a=Array.isArray(n[s])?n[s]:[],c=ag(a);(c.length!==a.length||JSON.stringify(c)!==JSON.stringify(a))&&(r=!0,c.length>0?i[s]=c:delete i[s])}if(!r)return;let o={...t};Object.keys(i).length>0?o.hooks=i:delete o.hooks,ig(e.configPath,`${JSON.stringify(o,null,2)}
715
- `),e.result.removed.push(e.label)}function sg(e,t,n){if(!vr(e))return{};try{let i=JSON.parse(W0(e,"utf-8"));if(!i||typeof i!="object"||Array.isArray(i)){n.skipped.push({target:t,reason:"existing hook config is not a JSON object"});return}return i}catch(i){n.skipped.push({target:t,reason:`could not parse existing hook config: ${i instanceof Error?i.message:String(i)}`});return}}function Z0(e,t){let n=e.hooks&&typeof e.hooks=="object"&&!Array.isArray(e.hooks)?e.hooks:{},i={...e,hooks:{...n}};for(let r of["SessionStart","UserPromptSubmit","Stop"]){let o=Array.isArray(n[r])?n[r]:[];i.hooks[r]=[...ag(o),t$(t,r)]}return i}function ag(e){return e.map(t=>({...t,hooks:Array.isArray(t.hooks)?t.hooks.filter(n=>!e$(n)):[]})).filter(t=>t.hooks.length>0)}function e$(e){if(!e||typeof e!="object")return!1;let t=e.command;return typeof t=="string"&&(t.startsWith(K0)||t===J0)}function t$(e,t){return t==="SessionStart"?{matcher:"startup|resume|clear|compact",hooks:[{type:"command",command:"scip-query hook-context",timeout:5,statusMessage:"Loading scip-query context"}]}:t==="UserPromptSubmit"?{hooks:[{type:"command",command:"scip-query hook-context",timeout:5,statusMessage:"Routing scip-query skill"}]}:{hooks:[{type:"command",command:"scip-query hook-stop",timeout:30,statusMessage:"Running scip-query diff gate"}]}}function cg(){let e=r$(xr());e&&console.log(JSON.stringify(e))}function lg(){let e=xr();if(cs(e))return;let t=ug(e),n=dg(t);n&&l$(n,i=>{let r=dr(i,{minTogether:6,skip:[]});r.findings.length!==0&&console.log(JSON.stringify(n$(r,Y0())))})}function n$(e,t="warn"){let n=Cr(e),i=i$(e);return t==="block"?{decision:"block",reason:n}:t==="feedback"?{hookSpecificOutput:{hookEventName:"Stop",additionalContext:`${i}
716
-
717
- This is non-error Stop hook feedback. Fix true findings, or explain why a finding is intentionally accepted before finishing.`}}:{systemMessage:`${i}
718
-
719
- Stop hook allowed this turn to finish. Review these findings when relevant. Set ${rl}=feedback to ask the agent to continue without a hook error, or ${rl}=block to enforce the gate.`}}function i$(e){return Cr(e).replace(" \u2014 fix or knowingly accept them before finishing:"," \u2014 review these findings when relevant:")}function r$(e){let t=ug(e),n=a$(t);if(n!=="SessionStart"&&n!=="UserPromptSubmit")return;let i=dg(t);if(!i)return;let r=n==="SessionStart"?o$(i.projectRoot,i.config,i.paths):s$(String(t.prompt??""));if(r.trim())return{hookSpecificOutput:{hookEventName:n,additionalContext:r}}}function o$(e,t,n){let i=yi(e,t,n),r=ft(e,t),s=Nn(r).capabilities.filter(c=>c.status!=="available").map(c=>c.label),a=r.languages.length>0?r.languages.join(", "):"none detected";return[`scip-query is available in this repository. Index state: ${i.state} (${i.reason})`,`Detected languages: ${a}.`,s.length>0?`Unavailable or partial capabilities: ${s.join(", ")}.`:"Core capabilities are available.","Use the scip-query router skill when exploring, planning, verifying, debugging, diagramming, or cleaning up code.","For non-trivial edits, plan with concrete-plan anchored by `scip-query plan-context <target>`, then verify with scip-verify."].join(`
720
- `)}function s$(e){let t=e.toLowerCase(),n=[];return En(t,["debug","bug","regression","failing","fails","error","wrong"])&&n.push("Debug or bug request: use scip-debug. For issue-quality triage, use scip-triage-issue."),En(t,["explain","how does","walk me through","trace","understand"])&&n.push("Exploration request: use scip-explore before answering behavioral questions."),En(t,["diagram","visualize","visualise","flow map","architecture map"])&&n.push("Diagram request: use scip-diagram and back every node and edge with scip-query evidence."),En(t,["implement","build","change","refactor","fix","add ","update "])&&n.push("Implementation request: plan first with concrete-plan and `scip-query plan-context <target>`, then verify with scip-verify."),En(t,["review","maintainability","architecture","boundary"])&&n.push("Review request: use scip-maintainability, scip-api-impact, or scip-verify depending on whether this is architecture, API impact, or post-change verification."),En(t,["setup","adopt","install","bootstrap"])&&n.push("Setup request: use scip-adoption or scip-query-setup; keep CI setup out of the default path."),En(t,["health","score","dossier","cleanup","dead code","duplicate","debloat","perfect code","as high as","maximize","maximise"])&&n.push("Health or cleanup request: use scip-health-audit before editing; use scip-health-improve when the user wants the score raised as high as reasonably possible."),n.length===0?"":["scip-query routing reminder:",...n].join(`
721
- `)}function En(e,t){return t.some(n=>e.includes(n))}function ug(e){if(!e.trim())return{};try{let t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return{}}}function a$(e){let t=e.hook_event_name??e.hookEventName;return typeof t=="string"?t:void 0}function dg(e){let t=typeof e.cwd=="string"?e.cwd:process.cwd(),n=c$(t);if(n)try{let i=et(n),r=Wt(n,i);return vr(r.dbPath)?{projectRoot:n,config:i,paths:r}:void 0}catch{return}}function c$(e){try{return q0("git",["-C",e,"rev-parse","--show-toplevel"],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch{return}}function l$(e,t){let n={dbPath:e.paths.dbPath,indexPath:e.paths.indexPath,projectRoot:e.projectRoot,entryRoots:e.config.entryRoots,semantic:e.config.semantic,suppressions:e.config.suppressions,declaredCouplings:e.config.declaredCouplings,locality:e.config.locality},i=new pi(n,Ut(e.projectRoot));try{return t(i)}finally{i.close()}}import{existsSync as al,mkdirSync as g$,symlinkSync as h$,readlinkSync as b$,unlinkSync as y$}from"fs";import{join as wr,dirname as Sg,resolve as cl}from"path";import{homedir as ll,platform as S$}from"os";import{fileURLToPath as x$}from"url";import{execFileSync as mg}from"child_process";import{existsSync as fg,readFileSync as u$}from"fs";import{platform as Rr,arch as gg}from"os";import{dirname as pg,join as ds}from"path";import{fileURLToPath as d$}from"url";var hg="v0.8.1",ol="https://github.com/scip-code/scip",m$={win32:{x64:ds("vendor","scip","win32-x64","scip.exe"),arm64:ds("vendor","scip","win32-arm64","scip.exe")}};function p$(){let e=pg(d$(import.meta.url));for(;;){let t=ds(e,"package.json");if(fg(t))try{if(JSON.parse(u$(t,"utf-8")).name==="scip-query")return e}catch{}let n=pg(e);if(n===e)return null;e=n}}function bg(){let e=m$[Rr()]?.[gg()];if(!e)return null;let t=p$();if(!t)return null;let n=ds(t,e);return fg(n)?n:null}function ms(){return pt("scip")?"scip":bg()}function kr(){return ms()!==null}function f$(){let e=Rr(),t=gg(),n,i,r;switch(e){case"darwin":n="darwin",r="tar.gz";break;case"linux":n="linux",r="tar.gz";break;default:return null}switch(t){case"arm64":i="arm64";break;case"x64":i="amd64";break;default:return null}let o=`scip-${n}-${i}.${r}`;return{url:`${ol}/releases/download/${hg}/${o}`,filename:o}}function sl(){let e=f$();console.log("\nThe `scip` CLI is required but not found on PATH.\n"),Rr()==="darwin"?(console.log("Install via Homebrew:"),console.log(` brew install sourcegraph/scip/scip
722
- `),console.log("Or download manually:")):Rr()==="win32"?(console.log("Windows installs should include a managed scip.exe in the scip-query package."),console.log("Reinstall scip-query, or build the managed binary from source with:"),console.log(` npm run build:scip-windows
723
+ `),console.log(` ${e.overview.documents} files | ${e.overview.symbols} symbols | ${$n(e.overview.indexSizeBytes)}
724
+ `),e.warnings&&e.warnings.length>0){console.log(" Warnings:");for(let r of e.warnings)console.log(` ${r}`);console.log("")}console.log(" Findings:");let n=e.findings;if(n.deadSymbols>0&&console.log(` Dead code: ${n.deadSymbols} symbols (${n.deadLoc} LOC)`),n.isolatedSymbols>0&&console.log(` Isolated symbols: ${n.isolatedSymbols} (${n.isolatedLoc} LOC)`),n.cycles>0&&console.log(` Circular deps: ${n.cycles}`),n.similarPairs>0&&console.log(` Similar pairs: ${n.similarPairs}`),n.reactComponentDuplicatePairs>0&&console.log(` React components: ${n.reactComponentDuplicatePairs} duplicate pair(s)`),n.reactHookCandidatePairs>0&&console.log(` React hook reuse: ${ul(n.reactHookCandidatePairs,n.reactHookCandidateScoreCount)} candidate pair(s)`),n.reactLargeComponentPressureFiles>0&&console.log(` React large comps: ${n.reactLargeComponentPressureFiles} component(s)`),n.vueComponentDuplicatePairs>0&&console.log(` Vue components: ${n.vueComponentDuplicatePairs} duplicate pair(s)`),n.vueComposableCandidatePairs>0&&console.log(` Vue composables: ${ul(n.vueComposableCandidatePairs,n.vueComposableCandidateScoreCount)} candidate pair(s)`),n.vueLargeViewPressureFiles>0&&console.log(` Vue large views: ${n.vueLargeViewPressureFiles} file(s)`),n.extractionCandidates>0&&console.log(` Extract candidates: ${n.extractionCandidates}`),n.wrappers>0&&console.log(` Wrapper functions: ${ul(n.wrappers,n.wrapperScoreCount)}`),n.passthroughs>0&&console.log(` Passthroughs: ${n.passthroughs}`),n.staleTypes>0&&console.log(` Stale abstractions: ${n.staleTypes}`),n.driftedFiles>0&&console.log(` Pattern drift: ${n.driftedFiles} files`),n.complexityHotspotCount>0&&console.log(` Complexity hotspots: ${n.complexityHotspotCount}`),e.actions.length>0){console.log(`
725
+ Prioritized Actions (highest impact + lowest effort first):`);for(let r=0;r<e.actions.length;r++){let i=e.actions[r],o=i.locRecoverable>0?` (~${i.locRecoverable} LOC recoverable)`:"";console.log(` ${r+1}. [${i.effort} effort / ${i.impact} impact] ${i.description}${o}`)}}if(e.topComplexity.length>0){console.log(`
726
+ Top Complexity Hotspots:`);for(let r of e.topComplexity)console.log(` ${r.score.toFixed(1).padStart(6)} ${r.symbol}`)}if(fF(e),pF(e),e.scoreBreakdown.length>0){console.log(`
727
+ Score Breakdown (100 minus the following):`);for(let r of e.scoreBreakdown)console.log(` -${String(r.points).padStart(2)} ${r.axis}: ${r.detail}`)}e.actions.length===0&&console.log(`
728
+ No issues found. Codebase is clean.`)}function ul(e,t){return Math.abs(e-t)<.01?String(e):`${e} (${mF(t)} score-weighted)`}function mF(e){return Number.isInteger(e)?String(e):e.toFixed(2).replace(/0+$/,"").replace(/\.$/,"")}function pF(e){if(e.pressure.length!==0){console.log(`
729
+ Maintenance Pressure:`);for(let t of e.pressure)console.log(` ${t.category}: ${t.count} / ${t.threshold} threshold (${t.ratio}x, -${t.extraPenalty} ${t.kind})`)}}function fF(e){let t=e.axes;if(console.log(`
730
+ Axes:`),console.log(` Deletable: ${t.deletable.loc} LOC across ${t.deletable.symbols} symbols`),t.changeAmplification){let r=t.changeAmplification;console.log(` Change amplification: ${r.medianFilesPerCommit} files/commit median, ${r.p90FilesPerCommit} p90 (${r.commitsAnalyzed} commits)`)}if(t.hiddenCoupling&&t.hiddenCoupling.pairCount>0){console.log(` Hidden coupling: ${t.hiddenCoupling.pairCount} co-changing pair(s) without a dependency edge`);for(let r of t.hiddenCoupling.top.slice(0,3))console.log(` ${r.fileA} <-> ${r.fileB} (${r.together}x together, ${Math.round(r.confidence*100)}%)`)}if(t.churnWeightedComplexity&&t.churnWeightedComplexity.length>0){let r=t.churnWeightedComplexity[0];r.weighted>0&&console.log(` Churn x complexity: hottest is ${r.symbol} (${r.changes} changes, weighted ${r.weighted})`)}let n=t.evidenceQuality;if(console.log(` Evidence quality: ${n.graphFindings} graph-fact finding(s), ${n.heuristicFindings} heuristic finding(s), ${n.userSuppressed} user-suppressed`),e.validation&&e.validation.flaggedFiles>0){let r=e.validation,i=r.ratio===null?"n/a":`${r.ratio}x`;console.log(` Validation: flagged files fix-density ${r.flaggedFixDensity} vs baseline ${r.baselineFixDensity} (${i})`)}}async function rg(e){let t=Je(i=>{let o=gt(i,{base:e.base});return o.note?{kind:"complete",result:xr(i,{base:e.base})}:o.changedFiles.length===0?{kind:"complete",result:xr(i,{base:e.base})}:{kind:"batched",plan:o}});if(t.kind==="complete")return t.result;let n=Qf(t.plan.changedFiles,K0),r=await tg(n,gF(n.length),i=>bF(i,e));return Qo(t.plan.changedFiles,r)}var gF=ig({envKey:"SCIP_QUERY_DIFF_IMPACT_CONCURRENCY",defaultMinimum:X0,defaultMaximum:Q0});function ig(e){return(t,n=process.env,r=z0)=>hF(t,n,r,e)}function hF(e,t,n,r){let i=t[r.envKey],o=yF(n,r),s=i?parseInt(i,10):o;return!Number.isFinite(s)||s<1?Math.min(o,e):Math.min(s,e)}function yF(e,t){let n=e(),r=Number.isFinite(n)?Math.max(t.defaultMinimum,n-1):0;return Math.min(t.defaultMaximum,Math.max(t.defaultMinimum,r))}function bF(e,t){let n=process.argv[1]??dl(import.meta.url),r=[];return t.base&&r.push("--base",t.base),ml({cliPath:n,command:bs,args:r,env:{...process.env,SCIP_QUERY_DIFF_IMPACT_FILES:JSON.stringify(e)},label:"Diff-impact batch"})}function og(e){console.log(`Changed files: ${e.summary.totalChangedFiles}`),console.log(`Changed symbols: ${e.summary.totalChangedSymbols}`),console.log(`Affected consumer files: ${e.summary.totalAffectedFiles}`),e.summary.note&&console.log(`Note: ${e.summary.note}`),console.log(""),e.changedSymbols.length>0&&(console.log("Changed symbols:"),P.list(e.changedSymbols,t=>` ${t.file} ${t.shortName} (fan-in: ${t.fanIn})`)),e.affectedConsumers.length>0&&(console.log(`
731
+ Affected consumer files:`),P.list(e.affectedConsumers,t=>` ${t.file} (${t.consumedSymbols} symbol(s))`))}var _i=ll,v=(e=>parseInt(e,10)),Fi=(e=>{let t=parseInt(e,10);if(!Number.isFinite(t)||t<1)throw new Error(`Expected a positive integer, got ${e}`);return t}),st=parseFloat,Cs=parseInt;function p(e,t,n,...r){return r.length>0?{flags:e,description:t,parser:n,defaultValue:r[0]}:{flags:e,description:t,parser:n}}function pl(){return p("--json","Output as JSON for programmatic consumption")}function _(e=[]){return e.some(t=>t.flags==="--json")?e:[...e,pl()]}function w(e,t=[]){return{category:e,examples:t}}import{execFileSync as uj}from"child_process";import{existsSync as qi,mkdirSync as dj,readFileSync as mj,writeFileSync as _h}from"fs";import{homedir as pj}from"os";import{dirname as fj,join as $r}from"path";import{execFileSync as nM}from"child_process";import{closeSync as rM,copyFileSync as iM,existsSync as Es,mkdirSync as Fl,mkdtempSync as oM,openSync as sM,readFileSync as Ts,renameSync as Mi,rmSync as ji,writeFileSync as sh}from"fs";import{basename as Ns,dirname as at,extname as aM,join as xt}from"path";import{execFileSync as sg}from"child_process";import{existsSync as cg,readFileSync as vF}from"fs";import{platform as $i,arch as lg}from"os";import{dirname as ag,join as vs}from"path";import{fileURLToPath as RF}from"url";import{execFileSync as SF}from"child_process";import{platform as xF}from"os";var CF=xF()==="win32";function St(e){let t=CF?"where":"which";try{return SF(t,[e],{stdio:"pipe"}),!0}catch{return!1}}var ug="v0.8.1",fl="https://github.com/scip-code/scip",kF={win32:{x64:vs("vendor","scip","win32-x64","scip.exe"),arm64:vs("vendor","scip","win32-arm64","scip.exe")}};function wF(){let e=ag(RF(import.meta.url));for(;;){let t=vs(e,"package.json");if(cg(t))try{if(JSON.parse(vF(t,"utf-8")).name==="scip-query")return e}catch{}let n=ag(e);if(n===e)return null;e=n}}function dg(){let e=kF[$i()]?.[lg()];if(!e)return null;let t=wF();if(!t)return null;let n=vs(t,e);return cg(n)?n:null}function Rs(){return St("scip")?"scip":dg()}function Ai(){return Rs()!==null}function LF(){let e=$i(),t=lg(),n,r,i;switch(e){case"darwin":n="darwin",i="tar.gz";break;case"linux":n="linux",i="tar.gz";break;default:return null}switch(t){case"arm64":r="arm64";break;case"x64":r="amd64";break;default:return null}let o=`scip-${n}-${r}.${i}`;return{url:`${fl}/releases/download/${ug}/${o}`,filename:o}}function gl(){let e=LF();console.log("\nThe `scip` CLI is required but not found on PATH.\n"),$i()==="darwin"?(console.log("Install via Homebrew:"),console.log(` brew install sourcegraph/scip/scip
732
+ `),console.log("Or download manually:")):$i()==="win32"?(console.log("Windows installs should include a managed scip.exe in the scip-query package."),console.log("Reinstall scip-query, or build the managed binary from source with:"),console.log(` npm run build:scip-windows
723
733
  `),console.log("Upstream release page:")):console.log("Download from:"),console.log(e?` ${e.url}
724
- `:` ${ol}/releases/tag/${hg}
725
- `),console.log("After installing, ensure `scip` is on your PATH and run `scip-query reindex`.")}function yg(e){let t=bg();if(t)return e(`Using bundled scip CLI at ${t}`),!0;if(Rr()==="darwin"&&pt("brew")){e("Installing scip CLI via Homebrew...");try{if(mg("brew",["install","sourcegraph/scip/scip"],{stdio:"inherit",timeout:3e5,env:process.env}),pt("scip"))return e("Successfully installed scip CLI via Homebrew"),!0}catch(n){let i=n instanceof Error?n.message:String(n);e(`Homebrew install failed: ${i}`)}}if(pt("go")){e("Installing scip CLI via go install...");try{if(mg("go",["install","github.com/sourcegraph/scip/cmd/scip@latest"],{stdio:"inherit",timeout:3e5,env:process.env}),pt("scip"))return e("Successfully installed scip CLI via go install"),!0}catch(n){let i=n instanceof Error?n.message:String(n);e(`go install failed: ${i}`)}}return e("Could not auto-install scip CLI."),e(`Install manually from: ${ol}/releases`),!1}var C$=S$()==="win32",ul=["scip-query","scip-query-setup","scip-adoption","scip-health-audit","scip-health-improve","scip-api-impact","concrete-plan","scip-ai-cleanup","scip-debug","scip-explore","scip-triage-issue","scip-diagram","scip-debloat","scip-doc-reconcile","scip-directory-architecture","scip-maintainability","scip-react-maintainability","scip-vue-maintainability","scip-verify","scip-language-playbook"];function ps(e={}){let t=e.quiet?()=>{}:console.log,n=x$(import.meta.url),i=cl(Sg(n),"..","skills"),r=[wr(ll(),".claude","skills"),wr(ll(),".codex","skills"),wr(ll(),".agents","skills")],o={installed:[],skipped:[],alreadyLinked:[]};for(let s of r){let a=Sg(s);if(!al(a))continue;g$(s,{recursive:!0});let c=v$(s);for(let l of ul){let u=wr(i,l),d=wr(s,l);if(!al(u)){o.skipped.push(`${c}/${l}`);continue}if(al(d)){try{let m=b$(d);if(cl(m)===cl(u)){o.alreadyLinked.push(`${c}/${l}`),t(` ok: ${l} \u2192 ${c} (already linked)`);continue}}catch{o.skipped.push(`${c}/${l}`),t(` skip: ${l} \u2192 ${c} (exists, not a symlink)`);continue}y$(d)}h$(u,d,C$?"junction":"dir"),o.installed.push(`${c}/${l}`),t(` done: ${l} \u2192 ${c}`)}}return o}function v$(e){return e.includes(".codex")?"Codex":e.includes(".agents")?"Agents":"Claude"}import{existsSync as CM}from"fs";import{execFileSync as sA}from"child_process";import{closeSync as aA,copyFileSync as cA,existsSync as bs,mkdirSync as Cl,mkdtempSync as lA,openSync as uA,readFileSync as Kg,renameSync as vl,rmSync as Rl,writeFileSync as Jg}from"fs";import{basename as hs,dirname as Pt,extname as dA,join as gt}from"path";import R$ from"better-sqlite3";import{execFileSync as k$}from"child_process";import{existsSync as w$,readdirSync as L$,readFileSync as D$}from"fs";import{extname as fs,join as xg}from"path";function Gt(e){let t=new Set((e.extensions??au).map(o=>o.toLowerCase()));if(t.size===0)return{scanned:0,inserted:0,existing:0};if(!w$(e.dbPath))throw new Error(`SCIP SQLite database not found at ${e.dbPath}`);let n=Ut(e.projectRoot),i=I$(e.projectRoot,t).filter(o=>!n.isIgnored(o)),r=new R$(e.dbPath);try{let o=N$(r,i),s=r.prepare(`INSERT OR IGNORE INTO documents (language, relative_path, position_encoding, text)
726
- VALUES (?, ?, NULL, ?)`),c=r.transaction(u=>{let d=0;for(let m of u){if(o.has(m))continue;let p=D$(xg(e.projectRoot,m),"utf-8"),h=s.run(E$(m),m,p);d+=Number(h.changes)}return d})(i),l={scanned:i.length,inserted:c,existing:i.length-c};return e.onStatus?.(`Augmented SQLite documents with ${c} auxiliary source file${c===1?"":"s"} (${l.existing} already present).`),l}finally{r.close()}}function I$(e,t){let n=P$(e,t);if(n)return n;let i=[],r=o=>{let s=o?xg(e,o):e,a;try{a=L$(s,{withFileTypes:!0})}catch{return}for(let c of a){if(Vs.has(c.name))continue;let l=o?`${o}/${c.name}`:c.name;if(c.isDirectory()){r(l);continue}t.has(fs(c.name).toLowerCase())&&i.push(l)}};return r(""),i.sort()}function P$(e,t){try{return k$("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}).split(`
727
- `).filter(i=>i&&t.has(fs(i).toLowerCase())).sort()}catch{return null}}function N$(e,t){let n=new Set,i=500;for(let r=0;r<t.length;r+=i){let o=t.slice(r,r+i),s=e.prepare(`SELECT relative_path FROM documents WHERE relative_path IN (${o.map(()=>"?").join(",")})`).all(...o);for(let a of s)n.add(a.relative_path)}return n}function E$(e){return fs(e).toLowerCase()===".vue"?"vue":fs(e).replace(/^\./,"").toLowerCase()||"source"}import{readFileSync as T$,writeFileSync as _$}from"fs";import{create as dl}from"@bufbuild/protobuf";import{deserializeSCIP as $$,serializeSCIP as F$,DocumentSchema as A$,IndexSchema as M$,SymbolInformationSchema as O$}from"@c4312/scip";function j$(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let t=B$(e),n=H$(e.flatMap(r=>r.documents??[])),i=vg(e.flatMap(r=>r.externalSymbols??[]));return dl(M$,{metadata:t,documents:n,externalSymbols:i})}function Cg(e,t){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let n=e.map(r=>$$(T$(r))),i=j$(n);return _$(t,Buffer.from(F$(i))),{documentCount:i.documents.length,externalSymbolCount:i.externalSymbols.length,inputCount:e.length}}function B$(e){let t=e[0]?.metadata;if(!t)return;let n=t.projectRoot;for(let i of e.slice(1)){let r=i.metadata?.projectRoot;if(n&&r&&r!==n)throw new Error(`Cannot merge SCIP indexes with different project roots: ${n} vs ${r}`)}return t}function H$(e){let t=new Map;for(let n of e){let i=t.get(n.relativePath);if(!i){t.set(n.relativePath,n);continue}t.set(n.relativePath,dl(A$,{language:i.language||n.language,relativePath:i.relativePath||n.relativePath,occurrences:[...i.occurrences,...n.occurrences],symbols:vg([...i.symbols,...n.symbols]),text:q$(i.text,n.text),positionEncoding:i.positionEncoding||n.positionEncoding}))}return[...t.values()]}function vg(e){let t=new Map;for(let n of e){let i=t.get(n.symbol);if(!i){t.set(n.symbol,n);continue}t.set(n.symbol,dl(O$,{symbol:i.symbol,documentation:U$([...i.documentation,...n.documentation]),relationships:V$([...i.relationships,...n.relationships]),kind:i.kind||n.kind,displayName:i.displayName||n.displayName,enclosingSymbol:i.enclosingSymbol||n.enclosingSymbol,signatureDocumentation:i.signatureDocumentation??n.signatureDocumentation}))}return[...t.values()]}function V$(e){let t=new Set,n=[];for(let i of e){let r=[i.symbol,i.isReference?"1":"0",i.isImplementation?"1":"0",i.isTypeDefinition?"1":"0",i.isDefinition?"1":"0"].join("|");t.has(r)||(t.add(r),n.push(i))}return n}function q$(e,t){return e?t?e.length>=t.length?e:t:e:t}function U$(e){return[...new Set(e)]}import{readFileSync as W$,writeFileSync as G$}from"fs";import{create as Rg}from"@bufbuild/protobuf";import{deserializeSCIP as z$,DocumentSchema as K$,IndexSchema as J$,serializeSCIP as Q$,SymbolRole as X$}from"@c4312/scip";function kg(e){let t;try{t=z$(W$(e))}catch{return{removedDefinitionOccurrences:0,touchedDocuments:0}}let n=Y$(t);return n.removedDefinitionOccurrences>0&&G$(e,Buffer.from(Q$(n.index))),{removedDefinitionOccurrences:n.removedDefinitionOccurrences,touchedDocuments:n.touchedDocuments}}function Y$(e){let t=new Set;for(let o of e.documents)for(let s of o.symbols)s.symbol&&t.add(s.symbol);for(let o of e.externalSymbols)o.symbol&&t.add(o.symbol);let n=0,i=0,r=[];for(let o of e.documents){let s=o.occurrences.filter(a=>(a.symbolRoles&X$.Definition)===0||t.has(a.symbol)?!0:(n+=1,!1));if(s.length===o.occurrences.length){r.push(o);continue}i+=1,r.push(Rg(K$,{language:o.language,relativePath:o.relativePath,occurrences:s,symbols:o.symbols,text:o.text,positionEncoding:o.positionEncoding}))}return{index:n===0?e:Rg(J$,{metadata:e.metadata,documents:r,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:n,touchedDocuments:i}}import{execFile as Z$}from"child_process";import{existsSync as gs,renameSync as pl,rmSync as fl}from"fs";import{cpus as eF}from"os";import{join as wg}from"path";function tF(e,t,n){if(!e.defaultOutputPath)return;let i=wg(t,e.defaultOutputPath);n!==i&&gs(i)&&pl(i,n)}function nF(e,t,n){if(!e.defaultOutputPath)return null;let i=wg(t,e.defaultOutputPath);if(i===n)return null;let r=`${n}.default-output-backup`;return fl(r,{force:!0}),gs(i)?(pl(i,r),{defaultOutputPath:i,backupPath:r}):{defaultOutputPath:i,backupPath:null}}function iF(e){e&&(fl(e.defaultOutputPath,{force:!0}),e.backupPath&&gs(e.backupPath)&&pl(e.backupPath,e.defaultOutputPath))}function rF(e,t){if(e<=1)return 1;let n=Number(process.env.SCIP_QUERY_INDEXER_CONCURRENCY??0),i=Number.isFinite(t)&&t&&t>0?t:Number.isFinite(n)&&n>0?n:Math.min(2,Math.max(1,eF().length-1));return Math.max(1,Math.min(e,Math.floor(i)))}async function Lg(e,t,n,i){let r=e.filter(l=>l.config.defaultOutputPath),o=e.filter(l=>!l.config.defaultOutputPath),s=[],a=rF(o.length,i),c=await sF(o,a,l=>ml(l,t,n));if(a>1){let l=new Map;for(let u of c.filter(d=>d.skipped)){let d=o.find(m=>m.language===u.language);d&&(n(`Retrying ${d.language} indexer serially after parallel failure...`),l.set(d.language,await ml(d,t,n)))}s.push(...c.map(u=>l.get(u.language)??u))}else s.push(...c);for(let l of r)s.push(await ml(l,t,n));return s.sort((l,u)=>e.findIndex(d=>d.language===l.language)-e.findIndex(d=>d.language===u.language))}async function ml(e,t,n){n(`Indexing ${e.language} with ${e.resolvedBinary}...`),fl(e.scipPath,{force:!0});let i=nF(e.config,t,e.scipPath);try{await oF(e.binary,e.args,{cwd:t,env:e.env,maxBuffer:50*1024*1024}),tF(e.config,t,e.scipPath)}catch(r){let o=r instanceof Error?r.message:String(r),s=`${e.resolvedBinary} indexer failed: ${o.split(`
728
- `)[0]}`;return n(`Skipping ${e.language}: ${s}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:s}}}finally{iF(i)}if(!gs(e.scipPath)){let r=`${e.resolvedBinary} indexer completed but did not produce ${e.scipPath}`;return n(`Skipping ${e.language}: ${r}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:r}}}return{language:e.language,scipPath:e.scipPath}}function oF(e,t,n){return new Promise((i,r)=>{Z$(e,[...t],n,o=>{o?r(o):i()})})}async function sF(e,t,n){if(e.length===0)return[];let i=new Array(e.length),r=0,o=Math.max(1,Math.min(e.length,t)),s=Array.from({length:o},async()=>{for(;r<e.length;){let a=r++;i[a]=await n(e[a])}});return await Promise.all(s),i}import BF from"better-sqlite3";import{existsSync as HF,readFileSync as VF,writeFileSync as qF}from"fs";import{dirname as UF,join as WF,resolve as GF}from"path";import{readFileSync as aF,rmSync as cF,statSync as lF,mkdtempSync as uF}from"fs";import{cpus as dF,tmpdir as mF}from"os";import{join as gl}from"path";import{Worker as pF}from"worker_threads";function Dg(e){return e.length>=8&&Pg(e.length)>1}function Ig(e){let t=Pg(e.vueFiles.length),n=gF(e.vueFiles),i=bF(n,t),r=new URL("./augment-vue-worker.js",import.meta.url),o=uF(gl(mF(),"scip-query-vue-workers-")),s=new SharedArrayBuffer(4),a=new Int32Array(s),c=fF(),l=Date.now();try{for(let d=0;d<i.length;d++)new pF(r,{workerData:{projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,tasks:i[d],resultPath:gl(o,`${d}.json`),sharedBuffer:s}});for(;Atomics.load(a,0)<i.length;){if(Date.now()-l>c)throw new Error(`Vue reference workers timed out after ${(c/1e3).toFixed(0)}s`);Atomics.wait(a,0,Atomics.load(a,0),100)}let u=i.map((d,m)=>{let p=JSON.parse(aF(gl(o,`${m}.json`),"utf-8"));if(!p.ok)throw new Error(`Vue reference worker failed: ${p.error}`);return p.result});return{occurrences:u.flatMap(d=>d.occurrences),skippedReferences:u.reduce((d,m)=>d+m.skippedReferences,0)}}finally{cF(o,{recursive:!0,force:!0})}}function Pg(e){let t=Number(process.env.SCIP_QUERY_AUGMENT_VUE_WORKERS??0),n=Number.isFinite(t)&&t>0?t:Math.min(8,Math.max(1,dF().length-1));return Math.max(1,Math.min(e,n))}function fF(){let e=Number(process.env.SCIP_QUERY_AUGMENT_VUE_WORKER_TIMEOUT_MS??0);return Number.isFinite(e)&&e>0?e:3e5}function gF(e){let t=hF(),n=[];for(let i of e){let r=Ng(i),o=Math.max(1,Math.ceil(r/t));for(let s=0;s<o;s++)n.push({fileName:i,startOffset:Math.floor(r*s/o),endOffset:s===o-1?Number.POSITIVE_INFINITY:Math.floor(r*(s+1)/o),countFileSkip:s===0})}return n}function hF(){return Number.POSITIVE_INFINITY}function bF(e,t){let n=Array.from({length:t},()=>({tasks:[],weight:0})),i=e.map(r=>({task:r,weight:yF(r)})).sort((r,o)=>o.weight-r.weight);for(let r of i){let o=n.reduce((s,a)=>a.weight<s.weight?a:s);o.tasks.push(r.task),o.weight+=r.weight}return n.map(r=>r.tasks).filter(r=>r.length>0)}function yF(e){return Number.isFinite(e.endOffset)?Math.max(1,e.endOffset-e.startOffset):Math.max(1,Ng(e.fileName)-e.startOffset)}function Ng(e){try{return lF(e).size}catch{return 1}}import{createRequire as SF}from"module";import{existsSync as xF,readFileSync as bl}from"fs";import{dirname as Eg,extname as CF,join as Tg,relative as vF,resolve as RF}from"path";import{pathToFileURL as kF}from"url";function wF(e){e.transaction(()=>{e.prepare(`
734
+ `:` ${fl}/releases/tag/${ug}
735
+ `),console.log("After installing, ensure `scip` is on your PATH and run `scip-query reindex`.")}function mg(e){let t=dg();if(t)return e(`Using bundled scip CLI at ${t}`),!0;if($i()==="darwin"&&St("brew")){e("Installing scip CLI via Homebrew...");try{if(sg("brew",["install","sourcegraph/scip/scip"],{stdio:"inherit",timeout:3e5,env:process.env}),St("scip"))return e("Successfully installed scip CLI via Homebrew"),!0}catch(n){let r=n instanceof Error?n.message:String(n);e(`Homebrew install failed: ${r}`)}}if(St("go")){e("Installing scip CLI via go install...");try{if(sg("go",["install","github.com/sourcegraph/scip/cmd/scip@latest"],{stdio:"inherit",timeout:3e5,env:process.env}),St("scip"))return e("Successfully installed scip CLI via go install"),!0}catch(n){let r=n instanceof Error?n.message:String(n);e(`go install failed: ${r}`)}}return e("Could not auto-install scip CLI."),e(`Install manually from: ${fl}/releases`),!1}import IF from"better-sqlite3";import{execFileSync as DF}from"child_process";import{existsSync as PF,readdirSync as NF,readFileSync as EF}from"fs";import{extname as ks,join as pg}from"path";function en(e){let t=new Set((e.extensions??Au).map(o=>o.toLowerCase()));if(t.size===0)return{scanned:0,inserted:0,existing:0};if(!PF(e.dbPath))throw new Error(`SCIP SQLite database not found at ${e.dbPath}`);let n=Zt(e.projectRoot),r=TF(e.projectRoot,t).filter(o=>!n.isIgnored(o)),i=new IF(e.dbPath);try{let o=FF(i,r),s=i.prepare(`INSERT OR IGNORE INTO documents (language, relative_path, position_encoding, text)
736
+ VALUES (?, ?, NULL, ?)`),c=i.transaction(u=>{let d=0;for(let m of u){if(o.has(m))continue;let f=EF(pg(e.projectRoot,m),"utf-8"),h=s.run($F(m),m,f);d+=Number(h.changes)}return d})(r),l={scanned:r.length,inserted:c,existing:r.length-c};return e.onStatus?.(`Augmented SQLite documents with ${c} auxiliary source file${c===1?"":"s"} (${l.existing} already present).`),l}finally{i.close()}}function TF(e,t){let n=_F(e,t);if(n)return n;let r=[],i=o=>{let s=o?pg(e,o):e,a;try{a=NF(s,{withFileTypes:!0})}catch{return}for(let c of a){if(ca.has(c.name))continue;let l=o?`${o}/${c.name}`:c.name;if(c.isDirectory()){i(l);continue}t.has(ks(c.name).toLowerCase())&&r.push(l)}};return i(""),r.sort()}function _F(e,t){try{return DF("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}).split(`
737
+ `).filter(r=>r&&t.has(ks(r).toLowerCase())).sort()}catch{return null}}function FF(e,t){let n=new Set,r=500;for(let i=0;i<t.length;i+=r){let o=t.slice(i,i+r),s=e.prepare(`SELECT relative_path FROM documents WHERE relative_path IN (${o.map(()=>"?").join(",")})`).all(...o);for(let a of s)n.add(a.relative_path)}return n}function $F(e){return ks(e).toLowerCase()===".vue"?"vue":ks(e).replace(/^\./,"").toLowerCase()||"source"}import{execFileSync as AF}from"child_process";import{existsSync as MF,readdirSync as gg}from"fs";import{extname as hg,join as yg}from"path";var jF=new Set([".git",".hg",".svn",".idea",".vscode","node_modules","vendor","dist","build","target","bin","obj",".dart_tool",".gradle",".next",".venv","venv","__pycache__"]),OF=[{language:"typescript",files:["tsconfig.json","tsconfig.base.json"],extensions:[".ts",".tsx",".mts",".cts"]},{language:"rust",files:["Cargo.toml"],extensions:[".rs"]},{language:"go",files:["go.mod"],extensions:[".go"]},{language:"java",files:["pom.xml","build.gradle","build.gradle.kts"],extensions:[".java"]},{language:"kotlin",files:["build.gradle.kts"],extensions:[".kt",".kts"]},{language:"scala",files:["build.sbt"],extensions:[".scala"]},{language:"python",files:["pyproject.toml","setup.py","setup.cfg","Pipfile"],extensions:[".py",".pyi"]},{language:"ruby",files:["Gemfile"],extensions:[".rb"]},{language:"cpp",files:["compile_commands.json","CMakeLists.txt","Makefile"],extensions:[".cc",".cpp",".cxx",".hpp",".hh",".hxx"]},{language:"c",files:["compile_commands.json","CMakeLists.txt","Makefile"],extensions:[".c",".h"]},{language:"csharp",globs:["*.csproj","*.sln"],extensions:[".cs"]},{language:"vb",globs:["*.vbproj"],extensions:[".vb"]},{language:"dart",files:["pubspec.yaml"],extensions:[".dart"]},{language:"php",files:["composer.json"],extensions:[".php"]},{language:"javascript",files:["package.json"],extensions:[".js",".jsx",".mjs",".cjs"]}];function Tt(e){let t=[],n=BF(e),r=UF(e);for(let i of OF){if(HF(e,i.files)){t.push(i.language);continue}if(VF(n,i.globs)){t.push(i.language);continue}GF(r,i.extensions)&&t.push(i.language)}return t.includes("typescript")&&fg(t,"javascript"),t.includes("cpp")&&!r.has(".c")&&fg(t,"c"),t}function BF(e){try{return gg(e)}catch{return[]}}function HF(e,t){return t?.length?t.some(n=>MF(yg(e,n))):!1}function VF(e,t){return t?.length?e.some(n=>t.some(r=>qF(n,r))):!1}function qF(e,t){if(t==="*")return!0;if(!t.includes("*"))return e===t;let[n,r]=t.split("*");return e.startsWith(n??"")&&e.endsWith(r??"")}function UF(e){let t=WF(e);if(t)return t;let n=new Set,r=[e];for(;r.length>0;){let i=r.pop();if(!i)continue;let o;try{o=gg(i,{withFileTypes:!0})}catch{continue}for(let s of o){if(s.name.startsWith(".")&&!s.name.endsWith("proj")&&!s.name.endsWith("sln")&&s.isDirectory())continue;let a=yg(i,s.name);if(s.isDirectory()){jF.has(s.name)||r.push(a);continue}let c=hg(s.name).toLowerCase();c&&n.add(c)}}return n}function WF(e){try{let t=AF("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}),n=new Set;for(let r of t.split(`
738
+ `)){if(!r)continue;let i=hg(r).toLowerCase();i&&n.add(i)}return n}catch{return null}}function GF(e,t){return t?.length?t.some(n=>e.has(n)):!1}function fg(e,t){let n=e.indexOf(t);n!==-1&&e.splice(n,1)}import{existsSync as bg,readdirSync as zF}from"fs";import{join as hl}from"path";var JF={typescript:{language:"typescript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,pnpmWorkspaces:t,indexerBinary:n,projectPath:r})=>{let i=r?["index","--output",e,"--no-progress-bar",r]:["index","--infer-tsconfig","--output",e,"--no-progress-bar"];return t&&!r&&i.splice(1,0,"--pnpm-workspaces"),{binary:n,args:i}},markerFiles:["tsconfig.json"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","@sourcegraph/scip-typescript"]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},javascript:{language:"javascript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,indexerBinary:t})=>({binary:t,args:["index","--infer-tsconfig","--output",e,"--no-progress-bar"]}),markerFiles:["package.json"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","@sourcegraph/scip-typescript"]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},java:{language:"java",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["pom.xml","build.gradle"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},scala:{language:"scala",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["build.sbt"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},kotlin:{language:"kotlin",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["build.gradle.kts"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},rust:{language:"rust",indexerBinary:"rust-analyzer",checkCommand:"rust-analyzer --version",indexArgs:({outputPath:e})=>({binary:"rust-analyzer",args:["scip",".","--output",e]}),markerFiles:["Cargo.toml"],installMethods:[{label:"rustup",prerequisite:"rustup",binary:"rustup",args:["component","add","rust-analyzer"]}],installUrl:"https://github.com/rust-lang/rust-analyzer"},python:{language:"python",indexerBinary:"scip-python-plus",binaryAliases:["scip-python"],checkCommand:"scip-python-plus --version",indexArgs:({outputPath:e,indexerBinary:t})=>({binary:t,args:["index","--output",e,"--project-name","project"]}),markerFiles:["pyproject.toml","setup.py"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","scip-python-plus"]}],installUrl:"https://github.com/PlunderStruck/scip-python",bundledNpmPackage:"scip-python-plus"},ruby:{language:"ruby",indexerBinary:"scip-ruby",checkCommand:"scip-ruby --version",indexArgs:({indexerBinary:e})=>({binary:e,args:["--dir","."]}),defaultOutputPath:"index.scip",markerFiles:["Gemfile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-ruby/releases"},go:{language:"go",indexerBinary:"scip-go",checkCommand:"scip-go --version",indexArgs:({outputPath:e})=>({binary:"scip-go",args:["--output",e]}),markerFiles:["go.mod"],installMethods:[{label:"go install",prerequisite:"go",binary:"go",args:["install","github.com/sourcegraph/scip-go@latest"]}],installUrl:"https://github.com/sourcegraph/scip-go"},cpp:{language:"cpp",indexerBinary:"scip-clang",checkCommand:"scip-clang --version",indexArgs:({outputPath:e})=>({binary:"scip-clang",args:["--compdb-path","compile_commands.json","--index-output-path",e]}),markerFiles:["CMakeLists.txt","Makefile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-clang/releases"},c:{language:"c",indexerBinary:"scip-clang",checkCommand:"scip-clang --version",indexArgs:({outputPath:e})=>({binary:"scip-clang",args:["--compdb-path","compile_commands.json","--index-output-path",e]}),markerFiles:["CMakeLists.txt","Makefile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-clang/releases"},csharp:{language:"csharp",indexerBinary:"scip-dotnet",checkCommand:"scip-dotnet --version",indexArgs:({projectRoot:e,outputPath:t})=>({binary:"scip-dotnet",args:["index",Sg(e,[".sln",".csproj"])??e,"--output",t,"--working-directory",e]}),markerFiles:["*.csproj","*.sln"],installMethods:[{label:"dotnet",prerequisite:"dotnet",binary:"dotnet",args:["tool","install","--global","scip-dotnet"]}],installUrl:"https://github.com/sourcegraph/scip-dotnet/releases"},vb:{language:"vb",indexerBinary:"scip-dotnet",checkCommand:"scip-dotnet --version",indexArgs:({projectRoot:e,outputPath:t})=>({binary:"scip-dotnet",args:["index",Sg(e,[".sln",".vbproj"])??e,"--output",t,"--working-directory",e]}),markerFiles:["*.vbproj","*.sln"],installMethods:[{label:"dotnet",prerequisite:"dotnet",binary:"dotnet",args:["tool","install","--global","scip-dotnet"]}],installUrl:"https://github.com/sourcegraph/scip-dotnet/releases"},dart:{language:"dart",indexerBinary:"scip-dart",checkCommand:"scip-dart --version",indexArgs:({indexerBinary:e,outputPath:t})=>({binary:e,args:["--output",t]}),markerFiles:["pubspec.yaml"],installMethods:[{label:"dart pub",prerequisite:"dart",binary:"dart",args:["pub","global","activate","scip_dart"]}],installUrl:"https://github.com/Workiva/scip-dart/releases"},php:{language:"php",indexerBinary:"scip-php",projectLocalBinaries:["vendor/davidrjenni/scip-php/bin/scip-php","vendor/bin/scip-php"],checkCommand:"scip-php --version",indexArgs:({projectRoot:e,indexerBinary:t})=>{let n=hl(e,"vendor","bin","scip-php"),r=hl(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",bg(r)?r:bg(n)?n:t]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function An(e){return JF[e]}function Sg(e,t){let n;try{n=zF(e)}catch{return null}for(let r of t)for(let i of n)if(i.endsWith(r))return hl(e,i);return null}import{readFileSync as KF,writeFileSync as XF}from"fs";import{create as yl}from"@bufbuild/protobuf";import{deserializeSCIP as QF,serializeSCIP as YF,DocumentSchema as ZF,IndexSchema as e$,SymbolInformationSchema as t$}from"@c4312/scip";function n$(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let t=r$(e),n=i$(e.flatMap(i=>i.documents??[])),r=xg(e.flatMap(i=>i.externalSymbols??[]));return yl(e$,{metadata:t,documents:n,externalSymbols:r})}function bl(e,t){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let n=e.map(i=>QF(KF(i))),r=n$(n);return XF(t,Buffer.from(YF(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function r$(e){let t=e[0]?.metadata;if(!t)return;let n=t.projectRoot;for(let r of e.slice(1)){let i=r.metadata?.projectRoot;if(n&&i&&i!==n)throw new Error(`Cannot merge SCIP indexes with different project roots: ${n} vs ${i}`)}return t}function i$(e){let t=new Map;for(let n of e){let r=t.get(n.relativePath);if(!r){t.set(n.relativePath,n);continue}t.set(n.relativePath,yl(ZF,{language:r.language||n.language,relativePath:r.relativePath||n.relativePath,occurrences:o$([...r.occurrences,...n.occurrences]),symbols:xg([...r.symbols,...n.symbols]),text:a$(r.text,n.text),positionEncoding:r.positionEncoding||n.positionEncoding}))}return[...t.values()]}function o$(e){let t=new Set,n=[];for(let r of e){let i=JSON.stringify(r);t.has(i)||(t.add(i),n.push(r))}return n}function xg(e){let t=new Map;for(let n of e){let r=t.get(n.symbol);if(!r){t.set(n.symbol,n);continue}t.set(n.symbol,yl(t$,{symbol:r.symbol,documentation:c$([...r.documentation,...n.documentation]),relationships:s$([...r.relationships,...n.relationships]),kind:r.kind||n.kind,displayName:r.displayName||n.displayName,enclosingSymbol:r.enclosingSymbol||n.enclosingSymbol,signatureDocumentation:r.signatureDocumentation??n.signatureDocumentation}))}return[...t.values()]}function s$(e){let t=new Set,n=[];for(let r of e){let i=[r.symbol,r.isReference?"1":"0",r.isImplementation?"1":"0",r.isTypeDefinition?"1":"0",r.isDefinition?"1":"0"].join("|");t.has(i)||(t.add(i),n.push(r))}return n}function a$(e,t){return e?t?e.length>=t.length?e:t:e:t}function c$(e){return[...new Set(e)]}import{execFileSync as l$}from"child_process";import{createHash as u$}from"crypto";import{readdirSync as d$,readFileSync as m$}from"fs";import{join as vg}from"path";function Cg(e){return(f$(e)??g$(e)).filter(t=>t&&!Rg(t)).sort()}function Mn(e,t={}){return(t.language?Cg(e).filter(r=>p$(r,t.language,t.markerFiles)):Cg(e)).map(r=>{let i=vg(e,r);try{let o=m$(i);return{path:r,size:o.byteLength,hash:u$("sha256").update(o).digest("hex")}}catch{return{path:r,size:-1,hash:"unreadable"}}})}function p$(e,t,n){let r=e.split("/").at(-1)??e;if(n?.includes(e)||n?.includes(r)||y$.has(r))return!0;let i=e.includes(".")?`.${e.split(".").at(-1).toLowerCase()}`:"";return(b$[t]??[]).includes(i)}function f$(e){try{return l$("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:50*1024*1024,stdio:["ignore","pipe","ignore"]}).split(`
739
+ `).filter(Boolean)}catch{return null}}function g$(e){let t=[],n=[""];for(;n.length>0;){let r=n.pop(),i=r?vg(e,r):e,o;try{o=d$(i,{withFileTypes:!0})}catch{continue}for(let s of o){let a=r?`${r}/${s.name}`:s.name;if(s.isDirectory()){Rg(a)||n.push(a);continue}t.push(a)}}return t}function Rg(e){return e.split("/").some(n=>h$.has(n))||e.endsWith(".db")||e.endsWith(".db-wal")||e.endsWith(".db-shm")||e.endsWith(".scip")}var h$=new Set([".git","node_modules",".scipquery-cache",".stryker-tmp","dist","build","coverage",".next",".nuxt","target"]),y$=new Set(["package.json","package-lock.json","pnpm-lock.yaml","yarn.lock","bun.lockb","tsconfig.json","tsconfig.base.json","pyproject.toml","setup.py","setup.cfg","Cargo.toml","Cargo.lock","go.mod","go.sum","pom.xml","build.gradle","build.gradle.kts","build.sbt","compile_commands.json","CMakeLists.txt","Makefile","Gemfile","Gemfile.lock","composer.json","composer.lock","pubspec.yaml","pubspec.lock"]),b$={typescript:[".ts",".tsx",".mts",".cts"],javascript:[".js",".jsx",".mjs",".cjs"],java:[".java"],scala:[".scala"],kotlin:[".kt",".kts"],rust:[".rs"],python:[".py",".pyi"],ruby:[".rb"],go:[".go"],cpp:[".cc",".cpp",".cxx",".hpp",".hh",".hxx"],c:[".c",".h"],csharp:[".cs"],vb:[".vb"],dart:[".dart"],php:[".php"]};import{readFileSync as S$,writeFileSync as x$}from"fs";import{create as kg}from"@bufbuild/protobuf";import{deserializeSCIP as C$,DocumentSchema as v$,IndexSchema as R$,serializeSCIP as k$,SymbolRole as w$}from"@c4312/scip";function wg(e){let t;try{t=C$(S$(e))}catch{return{removedDefinitionOccurrences:0,touchedDocuments:0}}let n=L$(t);return n.removedDefinitionOccurrences>0&&x$(e,Buffer.from(k$(n.index))),{removedDefinitionOccurrences:n.removedDefinitionOccurrences,touchedDocuments:n.touchedDocuments}}function L$(e){let t=new Set;for(let o of e.documents)for(let s of o.symbols)s.symbol&&t.add(s.symbol);for(let o of e.externalSymbols)o.symbol&&t.add(o.symbol);let n=0,r=0,i=[];for(let o of e.documents){let s=o.occurrences.filter(a=>(a.symbolRoles&w$.Definition)===0||t.has(a.symbol)?!0:(n+=1,!1));if(s.length===o.occurrences.length){i.push(o);continue}r+=1,i.push(kg(v$,{language:o.language,relativePath:o.relativePath,occurrences:s,symbols:o.symbols,text:o.text,positionEncoding:o.positionEncoding}))}return{index:n===0?e:kg(R$,{metadata:e.metadata,documents:i,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:n,touchedDocuments:r}}import{existsSync as I$,readFileSync as D$,readdirSync as P$,statSync as N$}from"fs";import me from"path";var E$=new Set([".cache",".git",".next",".nuxt",".turbo",".nx","build","coverage","dist","node_modules","tmp","vendor"]);function Lg(e,t=[]){let n=me.resolve(e),r=T$(n),i=t.flatMap(c=>_$(n,c)),o=$$([...r,...i]),s=A$(n,o)?[n,...o]:o,a=s.length>0?s:[n];return[...new Set(a.map(c=>j$(n,c)))].sort((c,l)=>c.localeCompare(l))}function T$(e){let t=[],n=[e];for(;n.length>0;){let r=n.pop(),i;try{i=P$(r,{withFileTypes:!0})}catch{continue}for(let o of i){let s=me.join(r,o.name);if(o.isDirectory()){!E$.has(o.name)&&!o.name.startsWith(".")&&n.push(s);continue}o.isFile()&&F$(s)&&t.push(me.dirname(s))}}return t}function _$(e,t){let n=t.trim();if(!n)return[];let r=me.resolve(e,n);if(!B$(e,r))return[];try{let i=N$(r);if(i.isDirectory())return[r];if(i.isFile()&&Ig(me.basename(r)))return[me.dirname(r)]}catch{return[]}return[]}function F$(e){if(!Ig(me.basename(e)))return!1;let t=Dg(e);return t?me.basename(e)==="tsconfig.json"||"include"in t||"files"in t||"references"in t:!1}function Ig(e){return e.startsWith("tsconfig")&&e.endsWith(".json")}function $$(e){let t=[...new Set(e.map(n=>me.resolve(n)))].sort((n,r)=>n.localeCompare(r));return t.length<=1?t:t.filter(n=>!t.some(r=>r!==n&&O$(n,r)))}function A$(e,t){if(t.length===0||t.some(r=>me.resolve(r)===e))return!1;let n=me.join(e,"tsconfig.json");return I$(n)&&M$(n)}function M$(e){let n=Dg(e)?.include;return Array.isArray(n)?n.some(r=>typeof r=="string"&&r.trim()!==""&&!r.startsWith("!")&&(r.includes("/")||r.includes("**")||!me.extname(r))):!1}function Dg(e){try{let t=JSON.parse(D$(e,"utf-8"));return t&&typeof t=="object"&&!Array.isArray(t)?t:null}catch{return null}}function j$(e,t){let n=me.relative(e,t);return n?n.split(me.sep).join("/"):"."}function O$(e,t){let n=me.relative(e,t);return!!n&&!n.startsWith("..")&&!me.isAbsolute(n)}function B$(e,t){let n=me.relative(e,t);return!n.startsWith("..")&&!me.isAbsolute(n)}import{execFile as H$}from"child_process";import{existsSync as ws,renameSync as xl,rmSync as Cl}from"fs";import{cpus as V$}from"os";import{join as Pg}from"path";function q$(e,t,n){if(!e.defaultOutputPath)return;let r=Pg(t,e.defaultOutputPath);n!==r&&ws(r)&&xl(r,n)}function U$(e,t,n){if(!e.defaultOutputPath)return null;let r=Pg(t,e.defaultOutputPath);if(r===n)return null;let i=`${n}.default-output-backup`;return Cl(i,{force:!0}),ws(r)?(xl(r,i),{defaultOutputPath:r,backupPath:i}):{defaultOutputPath:r,backupPath:null}}function W$(e){e&&(Cl(e.defaultOutputPath,{force:!0}),e.backupPath&&ws(e.backupPath)&&xl(e.backupPath,e.defaultOutputPath))}function G$(e,t){if(e<=1)return 1;let n=Number(process.env.SCIP_QUERY_INDEXER_CONCURRENCY??0),r=Number.isFinite(t)&&t&&t>0?t:Number.isFinite(n)&&n>0?n:Math.min(8,Math.max(1,V$().length));return Math.max(1,Math.min(e,Math.floor(r)))}async function Ng(e,t,n,r){let i=e.filter(l=>l.config.defaultOutputPath),o=e.filter(l=>!l.config.defaultOutputPath),s=[],a=G$(o.length,r),c=await J$(o,a,l=>Sl(l,t,n));if(a>1){let l=new Map;for(let u of c.filter(d=>d.skipped)){let d=o.find(m=>m.id===u.id);d&&(n(`Retrying ${d.label} indexer serially after parallel failure...`),l.set(d.id,await Sl(d,t,n)))}s.push(...c.map(u=>l.get(u.id)??u))}else s.push(...c);for(let l of i)s.push(await Sl(l,t,n));return s.sort((l,u)=>e.findIndex(d=>d.id===l.id)-e.findIndex(d=>d.id===u.id))}async function Sl(e,t,n){n(`Indexing ${e.label} with ${e.resolvedBinary}...`),Cl(e.scipPath,{force:!0});let r=U$(e.config,t,e.scipPath);try{await z$(e.binary,e.args,{cwd:t,env:e.env,maxBuffer:50*1024*1024}),q$(e.config,t,e.scipPath)}catch(i){let o=i instanceof Error?i.message:String(i),s=`${e.resolvedBinary} indexer failed: ${o.split(`
740
+ `)[0]}`,a=e.label===e.language?s:`${e.label}: ${s}`;return n(`Skipping ${e.label}: ${s}`),{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,skipped:{language:e.language,reason:a}}}finally{W$(r)}if(!ws(e.scipPath)){let i=`${e.resolvedBinary} indexer completed but did not produce ${e.scipPath}`,o=e.label===e.language?i:`${e.label}: ${i}`;return n(`Skipping ${e.label}: ${i}`),{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,skipped:{language:e.language,reason:o}}}return{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath}}function z$(e,t,n){return new Promise((r,i)=>{H$(e,[...t],n,o=>{o?i(o):r()})})}async function J$(e,t,n){if(e.length===0)return[];let r=new Array(e.length),i=0,o=Math.max(1,Math.min(e.length,t)),s=Array.from({length:o},async()=>{for(;i<e.length;){let a=i++;r[a]=await n(e[a])}});return await Promise.all(s),r}import{execFileSync as Rl}from"child_process";import{existsSync as vl,readFileSync as K$}from"fs";import{createRequire as X$}from"module";import{platform as Q$}from"os";import{dirname as Eg,join as Ls}from"path";var Y$=X$(import.meta.url);function kl(e){return[e.indexerBinary,...e.binaryAliases??[]]}function Is(e){let t=kl(e);return t.length===1?t[0]:t.join(" or ")}function Tr(e){for(let t of kl(e))if(St(t))return t;return eA(e)}function Tg(e){return Tr(e)!==null||Z$(e)}function Z$(e){return _g(e)!==null}function eA(e){let t=_g(e);if(!t)return null;let r=JSON.parse(K$(t,"utf8")).bin;if(!r)return null;if(typeof r=="string")return Ls(Eg(t),r);for(let i of kl(e)){let o=r[i];if(o)return Ls(Eg(t),o)}return null}function _g(e){if(!e.bundledNpmPackage)return null;try{return Y$.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function wl(e,t){for(let n of e.projectLocalBinaries??[]){let r=Ls(t,n);if(vl(r))return r}return null}function tA(e,t){return wl(e,t)??Tr(e)}function Fg(e,t=process.env,n=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||Ll(n,t))return t;let r=$g(n,t);return r?{...t,DOTNET_ROOT:r}:t}function Ds(e,t){let n=Is(e),r=t?tA(e,t):Tr(e);if(!r)return{language:e.language,binaryLabel:n,installed:!1,runnable:!1,resolvedBinary:null,installUrl:e.installUrl};if(e.indexerBinary!=="scip-dotnet")return{language:e.language,binaryLabel:n,installed:!0,runnable:!0,resolvedBinary:r};let i=nA(r);return{language:e.language,binaryLabel:n,installed:!0,runnable:i.runnable,resolvedBinary:r,installUrl:e.installUrl,note:i.note}}function Ps(e,t){let n=e.installMethods,r=Is(e);if(!n?.length)return t(`No auto-install method available for ${r}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1;for(let i of n)if(St(i.prerequisite)){t(`Installing ${r} via ${i.label}...`);try{Rl(i.binary,i.args,{stdio:"inherit",timeout:3e5,env:process.env});let o=Tr(e);if(o){let s=o===e.indexerBinary?"":` (using ${o})`;return t(`Successfully installed ${r} via ${i.label}${s}`),!0}t(`${i.label} command completed but ${r} was not found on PATH`)}catch(o){let s=o instanceof Error?o.message:String(o);t(`${i.label} install failed: ${s}`)}}return t(`Could not auto-install ${r}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1}function nA(e){if(Ll(e,process.env))return{runnable:!0};let t=$g(e,process.env);if(t)return{runnable:!0,note:`using .NET 9 runtime from ${t}`};let n=Ag(process.env);return{runnable:!1,note:n.length>0?`.NET 9 runtime still unavailable after checking ${n.join(", ")}`:"binary is present, but scip-dotnet still needs a .NET 9 runtime"}}function $g(e,t){for(let n of Ag(t))if(Ll(e,{...t,DOTNET_ROOT:n}))return n;return null}function Ag(e){let t=[],n=e.DOTNET_ROOT;if(n&&vl(n)&&t.push(n),Q$()==="darwin"&&St("brew"))try{let r=Rl("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),i=Ls(r,"libexec");vl(i)&&!t.includes(i)&&t.push(i)}catch{}return t}function Ll(e,t){try{return Rl(e,["--version"],{stdio:"pipe",env:t}),!0}catch{return!1}}import AA from"better-sqlite3";import{existsSync as MA,readFileSync as jA,writeFileSync as OA}from"fs";import{dirname as BA,join as HA,resolve as VA}from"path";import{readFileSync as rA,rmSync as iA,statSync as oA,mkdtempSync as sA}from"fs";import{cpus as aA,tmpdir as cA}from"os";import{join as Il}from"path";import{Worker as lA}from"worker_threads";function Mg(e){return e.length>=8&&Og(e.length)>1}function jg(e){let t=Og(e.vueFiles.length),n=dA(e.vueFiles),r=pA(n,t),i=new URL("./augment-vue-worker.js",import.meta.url),o=sA(Il(cA(),"scip-query-vue-workers-")),s=new SharedArrayBuffer(4),a=new Int32Array(s),c=uA(),l=Date.now();try{for(let d=0;d<r.length;d++)new lA(i,{workerData:{projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,tasks:r[d],resultPath:Il(o,`${d}.json`),sharedBuffer:s}});for(;Atomics.load(a,0)<r.length;){if(Date.now()-l>c)throw new Error(`Vue reference workers timed out after ${(c/1e3).toFixed(0)}s`);Atomics.wait(a,0,Atomics.load(a,0),100)}let u=r.map((d,m)=>{let f=JSON.parse(rA(Il(o,`${m}.json`),"utf-8"));if(!f.ok)throw new Error(`Vue reference worker failed: ${f.error}`);return f.result});return{occurrences:u.flatMap(d=>d.occurrences),skippedReferences:u.reduce((d,m)=>d+m.skippedReferences,0)}}finally{iA(o,{recursive:!0,force:!0})}}function Og(e){let t=Number(process.env.SCIP_QUERY_AUGMENT_VUE_WORKERS??0),n=Number.isFinite(t)&&t>0?t:Math.min(8,Math.max(1,aA().length-1));return Math.max(1,Math.min(e,n))}function uA(){let e=Number(process.env.SCIP_QUERY_AUGMENT_VUE_WORKER_TIMEOUT_MS??0);return Number.isFinite(e)&&e>0?e:3e5}function dA(e){let t=mA(),n=[];for(let r of e){let i=Bg(r),o=Math.max(1,Math.ceil(i/t));for(let s=0;s<o;s++)n.push({fileName:r,startOffset:Math.floor(i*s/o),endOffset:s===o-1?Number.POSITIVE_INFINITY:Math.floor(i*(s+1)/o),countFileSkip:s===0})}return n}function mA(){return Number.POSITIVE_INFINITY}function pA(e,t){let n=Array.from({length:t},()=>({tasks:[],weight:0})),r=e.map(i=>({task:i,weight:fA(i)})).sort((i,o)=>o.weight-i.weight);for(let i of r){let o=n.reduce((s,a)=>a.weight<s.weight?a:s);o.tasks.push(i.task),o.weight+=i.weight}return n.map(i=>i.tasks).filter(i=>i.length>0)}function fA(e){return Number.isFinite(e.endOffset)?Math.max(1,e.endOffset-e.startOffset):Math.max(1,Bg(e.fileName)-e.startOffset)}function Bg(e){try{return oA(e).size}catch{return 1}}import{createRequire as gA}from"module";import{existsSync as hA,readFileSync as Pl}from"fs";import{dirname as Hg,extname as yA,join as Vg,relative as bA,resolve as SA}from"path";import{pathToFileURL as xA}from"url";function CA(e){e.transaction(()=>{e.prepare(`
729
741
  DELETE FROM mentions
730
742
  WHERE chunk_id IN (
731
743
  SELECT c.id
@@ -740,12 +752,12 @@ Stop hook allowed this turn to finish. Review these findings when relevant. Set
740
752
  FROM documents
741
753
  WHERE language = 'vue' OR relative_path LIKE '%.vue'
742
754
  )
743
- `).run()})()}function _g(e,t){return e.prepare(`
755
+ `).run()})()}function qg(e,t){return e.prepare(`
744
756
  SELECT relative_path AS relativePath
745
757
  FROM documents
746
758
  WHERE language = 'vue' OR relative_path LIKE '%.vue'
747
759
  ORDER BY relative_path
748
- `).all().map(i=>RF(t,i.relativePath))}function $g(e,t){let{vueCore:n,ts:i,volarTs:r}=LF(e),{parsed:o,vueOptions:s}=DF(n,i,t),a=Eg(t),c=n.createVueLanguagePlugin(i,o.options,s,p=>p),l=IF(n,i,c),u=PF(a,o),{languageServiceHost:d}=r.createLanguageServiceHost(i,i.sys,l,p=>p,u),m=i.createLanguageService(d);return{ts:i,language:l,languageService:m,fileNames:o.fileNames,configDir:a}}function LF(e){let t=SF(kF(Tg(e,"package.json")).href);return{vueCore:hl(t,"@vue/language-core",e),ts:hl(t,"typescript",e),volarTs:hl(t,"@volar/typescript",e)}}function DF(e,t,n){let i=t.readConfigFile(n,t.sys.readFile);if(i.error||!i.config)throw new Error(`Failed to read ${n}`);let o=e.createParsedCommandLine(t,t.sys,n).vueOptions;return typeof e.createGlobalTypesWriter=="function"&&(o.globalTypesPath=e.createGlobalTypesWriter(o,t.sys.writeFile)),{parsed:t.parseJsonConfigFileContent(i.config,t.sys,Eg(n),void 0,n,void 0,e.getAllExtensions(o).map(s=>({extension:s.slice(1),isMixedContent:!0,scriptKind:t.ScriptKind.Deferred}))),vueOptions:o}}function IF(e,t,n){let i={},r=e.createLanguage([n],new Map,o=>{if(!xF(o))return;let s=bl(o,"utf-8");i.current?.scripts.set(o,t.ScriptSnapshot.fromString(s),n.getLanguageId(o)??FF(o))});return i.current=r,r}function PF(e,t){return{getCurrentDirectory:()=>e,getCompilationSettings:()=>t.options,getScriptFileNames:()=>t.fileNames,getProjectReferences:()=>t.projectReferences,getProjectVersion:()=>"0"}}function hl(e,t,n){try{return e(t)}catch(i){throw(typeof i=="object"&&i!==null&&"code"in i?i.code:null)==="MODULE_NOT_FOUND"?new Error(`Vue augmentation requires ${t} to be installed in ${n}. Install Vue/Volar dependencies for that project, then rerun augment-vue.`,{cause:i}):i}}function Fg(e,t,n){let i=NF(e);return r=>{let o=Tn(t,r.fileName),s=n.get(r.fileName);if(!s)return null;let a=n.positionAt(s,r.textSpan.start),c=i.get(o);if(!c)return null;let l=c.containingByLine.get(a.line);return l!==void 0?l:EF(c.starts,a.line,2)}}function NF(e){let t=e.prepare(`
760
+ `).all().map(r=>SA(t,r.relativePath))}function Ug(e,t){let{vueCore:n,ts:r,volarTs:i}=vA(e),{parsed:o,vueOptions:s}=RA(n,r,t),a=Hg(t),c=n.createVueLanguagePlugin(r,o.options,s,f=>f),l=kA(n,r,c),u=wA(a,o),{languageServiceHost:d}=i.createLanguageServiceHost(r,r.sys,l,f=>f,u),m=r.createLanguageService(d);return{ts:r,language:l,languageService:m,fileNames:o.fileNames,configDir:a}}function vA(e){let t=gA(xA(Vg(e,"package.json")).href);return{vueCore:Dl(t,"@vue/language-core",e),ts:Dl(t,"typescript",e),volarTs:Dl(t,"@volar/typescript",e)}}function RA(e,t,n){let r=t.readConfigFile(n,t.sys.readFile);if(r.error||!r.config)throw new Error(`Failed to read ${n}`);let o=e.createParsedCommandLine(t,t.sys,n).vueOptions;return typeof e.createGlobalTypesWriter=="function"&&(o.globalTypesPath=e.createGlobalTypesWriter(o,t.sys.writeFile)),{parsed:t.parseJsonConfigFileContent(r.config,t.sys,Hg(n),void 0,n,void 0,e.getAllExtensions(o).map(s=>({extension:s.slice(1),isMixedContent:!0,scriptKind:t.ScriptKind.Deferred}))),vueOptions:o}}function kA(e,t,n){let r={},i=e.createLanguage([n],new Map,o=>{if(!hA(o))return;let s=Pl(o,"utf-8");r.current?.scripts.set(o,t.ScriptSnapshot.fromString(s),n.getLanguageId(o)??EA(o))});return r.current=i,i}function wA(e,t){return{getCurrentDirectory:()=>e,getCompilationSettings:()=>t.options,getScriptFileNames:()=>t.fileNames,getProjectReferences:()=>t.projectReferences,getProjectVersion:()=>"0"}}function Dl(e,t,n){try{return e(t)}catch(r){throw(typeof r=="object"&&r!==null&&"code"in r?r.code:null)==="MODULE_NOT_FOUND"?new Error(`Vue augmentation requires ${t} to be installed in ${n}. Install Vue/Volar dependencies for that project, then rerun augment-vue.`,{cause:r}):r}}function Wg(e,t,n){let r=LA(e);return i=>{let o=jn(t,i.fileName),s=n.get(i.fileName);if(!s)return null;let a=n.positionAt(s,i.textSpan.start),c=r.get(o);if(!c)return null;let l=c.containingByLine.get(a.line);return l!==void 0?l:IA(c.starts,a.line,2)}}function LA(e){let t=e.prepare(`
749
761
  SELECT
750
762
  d.relative_path AS relativePath,
751
763
  der.start_line AS startLine,
@@ -754,23 +766,23 @@ Stop hook allowed this turn to finish. Review these findings when relevant. Set
754
766
  FROM defn_enclosing_ranges der
755
767
  JOIN documents d ON d.id = der.document_id
756
768
  ORDER BY d.relative_path, (der.end_line - der.start_line) DESC
757
- `).all(),n=new Map;for(let i of t){let r=n.get(i.relativePath);r||(r={containingByLine:new Map,starts:[]},n.set(i.relativePath,r)),r.starts.push({line:i.startLine,symbolId:i.symbolId});for(let o=i.startLine;o<=i.endLine;o++)r.containingByLine.set(o,i.symbolId)}for(let i of n.values())i.starts.sort((r,o)=>r.line-o.line);return n}function EF(e,t,n){let i=0,r=e.length-1;for(;i<=r;){let s=Math.floor((i+r)/2);e[s].line<t?i=s+1:r=s-1}let o=null;for(let s of[r,i]){let a=e[s];if(!a)continue;let c=Math.abs(a.line-t);c>n||(!o||c<o.distance)&&(o={distance:c,symbolId:a.symbolId})}return o?.symbolId??null}function Ag(e,t,n){let i=OF(t),r=e.prepare("SELECT id FROM global_symbols WHERE symbol = ?"),o=e.prepare(`
769
+ `).all(),n=new Map;for(let r of t){let i=n.get(r.relativePath);i||(i={containingByLine:new Map,starts:[]},n.set(r.relativePath,i)),i.starts.push({line:r.startLine,symbolId:r.symbolId});for(let o=r.startLine;o<=r.endLine;o++)i.containingByLine.set(o,r.symbolId)}for(let r of n.values())r.starts.sort((i,o)=>i.line-o.line);return n}function IA(e,t,n){let r=0,i=e.length-1;for(;r<=i;){let s=Math.floor((r+i)/2);e[s].line<t?r=s+1:i=s-1}let o=null;for(let s of[i,r]){let a=e[s];if(!a)continue;let c=Math.abs(a.line-t);c>n||(!o||c<o.distance)&&(o={distance:c,symbolId:a.symbolId})}return o?.symbolId??null}function Gg(e,t,n){let r=FA(t),i=e.prepare("SELECT id FROM global_symbols WHERE symbol = ?"),o=e.prepare(`
758
770
  INSERT OR IGNORE INTO global_symbols (symbol, display_name, kind, documentation)
759
771
  VALUES (?, ?, ?, ?)
760
- `),s=0,a=new Map;return e.transaction(()=>{for(let l of n){let u=Tn(t,l),d=Wg(i.name,i.version,u);o.run(d,"default",7,`Vue component|${u}`);let m=jF(r,i,t,l);m&&(s++,a.set(l,m))}})(),{get(l){return a.get(l)??null},syntheticSymbols:s}}function Mg(e,t,n,i,r){return e.transaction(()=>(wF(e),TF(e,t,n,i),_F(e,r)))()}function TF(e,t,n,i){let r=e.prepare("SELECT id FROM documents WHERE relative_path = ?"),o=e.prepare(`
772
+ `),s=0,a=new Map;return e.transaction(()=>{for(let l of n){let u=jn(t,l),d=th(r.name,r.version,u);o.run(d,"default",7,`Vue component|${u}`);let m=$A(i,r,t,l);m&&(s++,a.set(l,m))}})(),{get(l){return a.get(l)??null},syntheticSymbols:s}}function zg(e,t,n,r,i){return e.transaction(()=>(CA(e),DA(e,t,n,r),PA(e,i)))()}function DA(e,t,n,r){let i=e.prepare("SELECT id FROM documents WHERE relative_path = ?"),o=e.prepare(`
761
773
  INSERT INTO chunks (document_id, chunk_index, start_line, end_line, occurrences)
762
774
  VALUES (?, ?, ?, ?, X'00')
763
775
  `),s=e.prepare(`
764
776
  INSERT OR IGNORE INTO mentions (chunk_id, symbol_id, role)
765
777
  VALUES (?, ?, 1)
766
- `);for(let a of n){let c=i.get(a);if(!c)continue;let l=Tn(t,a),u=r.get(l);if(!u)continue;let d=o.run(u.id,-1,0,0);s.run(Number(d.lastInsertRowid),c)}}function Og(e,t,n,i,r){if(e.fileName.endsWith(".vue")){let o=i.language.scripts.get(e.fileName),s=o?.generated?.languagePlugin.typescript?.getServiceScript(o.generated.root)?.code;if(o&&s){let a=i.language.maps.get(s,o);if(yl(a,e.textSpan.start)!==null)return n.get(e.fileName)}return e.fileName.startsWith(r)?n.get(e.fileName):null}return t(e)}function jg(e){let t=new Set,n=[];for(let i of e){let r=Bg(i);t.has(r)||(t.add(r),n.push(i))}return n}function Bg(e){return[e.sourceFile,e.sourceLine,e.sourceStartChar,e.sourceEndChar,e.symbolId].join(":")}function _F(e,t){let n=MF(e,[...new Set(t.map(c=>c.sourceFile))]),i=e.prepare(`
778
+ `);for(let a of n){let c=r.get(a);if(!c)continue;let l=jn(t,a),u=i.get(l);if(!u)continue;let d=o.run(u.id,-1,0,0);s.run(Number(d.lastInsertRowid),c)}}function Jg(e,t,n,r,i){if(e.fileName.endsWith(".vue")){let o=r.language.scripts.get(e.fileName),s=o?.generated?.languagePlugin.typescript?.getServiceScript(o.generated.root)?.code;if(o&&s){let a=r.language.maps.get(s,o);if(Nl(a,e.textSpan.start)!==null)return n.get(e.fileName)}return e.fileName.startsWith(i)?n.get(e.fileName):null}return t(e)}function Kg(e){let t=new Set,n=[];for(let r of e){let i=Xg(r);t.has(i)||(t.add(i),n.push(r))}return n}function Xg(e){return[e.sourceFile,e.sourceLine,e.sourceStartChar,e.sourceEndChar,e.symbolId].join(":")}function PA(e,t){let n=_A(e,[...new Set(t.map(c=>c.sourceFile))]),r=e.prepare(`
767
779
  INSERT INTO chunks (document_id, chunk_index, start_line, end_line, occurrences)
768
780
  VALUES (?, ?, ?, ?, X'00')
769
- `),r=e.prepare(`
781
+ `),i=e.prepare(`
770
782
  INSERT OR IGNORE INTO mentions (chunk_id, symbol_id, role)
771
783
  VALUES (?, ?, 0)
772
- `),o=new Set,s=0,a=0;for(let c of t){let l=Bg(c);if(o.has(l))continue;o.add(l);let u=n.get(c.sourceFile);if(!u)continue;let d=i.run(u,a++,c.sourceLine,c.sourceLine),m=r.run(Number(d.lastInsertRowid),c.symbolId);s+=Number(m.changes)}return s}function*Hg(e){let t=/\b[A-Za-z_$][A-Za-z0-9_$]*\b/g,n=new Set(["script","setup","template","style","lang","scoped","true","false","null","undefined","const","let","var","import","from","export","return","if","else","for","while","function","class","type","interface","as","await","async"]),i;for(;i=t.exec(e);){let r=i[0];n.has(r)||(yield{text:r,start:i.index,end:i.index+r.length})}}function Vg(e,t){for(let[n]of e.toGeneratedLocation(t,i=>!!i.navigation))return n;return null}function yl(e,t){let n=e;for(let[i]of n.toSourceLocation(t,r=>!!r.navigation))return i;return null}function $F(e,t){let n=0,i=e.lineStarts.length-1;for(;n<=i;){let o=Math.floor((n+i)/2);e.lineStarts[o]<=t?n=o+1:i=o-1}let r=Math.max(0,i);return{line:r,character:t-e.lineStarts[r]}}function qg(e,t){return Tn(e,t).startsWith("node_modules/")}function Tn(e,t){return vF(e,t).replaceAll("\\","/")}function FF(e){switch(CF(e)){case".vue":return"vue";case".tsx":return"typescriptreact";case".ts":case".mts":case".cts":return"typescript";case".jsx":return"javascriptreact";case".js":case".mjs":case".cjs":return"javascript";case".json":return"json";default:return"typescript"}}function Ug(){let e=new Map;return{get(t){if(e.has(t))return e.get(t)??null;try{let n=bl(t,"utf-8"),i={text:n,lineStarts:AF(n)};return e.set(t,i),i}catch{return e.set(t,null),null}},positionAt:$F}}function AF(e){let t=[0];for(let n=0;n<e.length;n++)e.charCodeAt(n)===10&&t.push(n+1);return t}function MF(e,t){let n=new Map,i=500;for(let r=0;r<t.length;r+=i){let o=t.slice(r,r+i),s=e.prepare(`SELECT id, relative_path AS relativePath FROM documents WHERE relative_path IN (${o.map(()=>"?").join(",")})`).all(...o);for(let a of s)n.set(a.relativePath,a.id)}return n}function OF(e){try{let t=JSON.parse(bl(Tg(e,"package.json"),"utf-8"));return{name:t.name??"workspace",version:t.version??"0.0.0"}}catch{return{name:"workspace",version:"0.0.0"}}}function jF(e,t,n,i){let r=Tn(n,i),o=Wg(t.name,t.version,r);return e.get(o)?.id??null}function Wg(e,t,n){let i=n.split("/").map(r=>`\`${r.replaceAll("`","")}\``).join("/");return`scip-vue npm ${e} ${t} ${i}/default.`}function Sl(e){Gt({projectRoot:e.projectRoot,dbPath:e.dbPath});let t=GF(e.projectRoot,e.tsconfig);if(!HF(t))throw new Error(`Vue tsconfig not found at ${t}`);let n=new BF(e.dbPath);try{let i=_g(n,e.projectRoot),r=WF(UF(e.dbPath),"augment-vue-meta.json"),o=Gg(n,e.projectRoot,e.tsconfig),s=zF(r,o,e.onStatus);if(s)return s;let a=KF({db:n,projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,configPath:t,vueFiles:i,onStatus:e.onStatus});return XF(r,Gg(n,e.projectRoot,e.tsconfig),a),a}finally{n.close()}}function zF(e,t,n){let i=QF(e,t);return i&&n?.(`Vue references unchanged; reused ${i.resolvedReferences} cached resolved references.`),i}function KF(e){let t=Ag(e.db,e.projectRoot,e.vueFiles),n=JF(e,t),i=jg(n.occurrences),r=Mg(e.db,e.projectRoot,e.vueFiles,t,i),o={vueFiles:e.vueFiles.length,resolvedReferences:i.length,insertedMentions:r,skippedReferences:n.skippedReferences,syntheticSymbols:t.syntheticSymbols};return e.onStatus?.(`Resolved ${o.resolvedReferences} Vue references with Volar; inserted ${o.insertedMentions} mentions.`),o}function JF(e,t){if(Dg(e.vueFiles))return Ig({projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,vueFiles:e.vueFiles});let n=YF({db:e.db,projectRoot:e.projectRoot,configPath:e.configPath,vueSymbolLookup:t});return ZF({...n,vueFiles:n.context.fileNames.filter(i=>i.endsWith(".vue"))})}function QF(e,t){try{let n=JSON.parse(VF(e,"utf-8"));return JSON.stringify(n.fingerprint)===JSON.stringify(t)?n.result:null}catch{return null}}function XF(e,t,n){qF(e,JSON.stringify({updatedAt:new Date().toISOString(),fingerprint:t,result:n},null,2)+`
773
- `)}function Gg(e,t,n){let i=e.prepare(`
784
+ `),o=new Set,s=0,a=0;for(let c of t){let l=Xg(c);if(o.has(l))continue;o.add(l);let u=n.get(c.sourceFile);if(!u)continue;let d=r.run(u,a++,c.sourceLine,c.sourceLine),m=i.run(Number(d.lastInsertRowid),c.symbolId);s+=Number(m.changes)}return s}function*Qg(e){let t=/\b[A-Za-z_$][A-Za-z0-9_$]*\b/g,n=new Set(["script","setup","template","style","lang","scoped","true","false","null","undefined","const","let","var","import","from","export","return","if","else","for","while","function","class","type","interface","as","await","async"]),r;for(;r=t.exec(e);){let i=r[0];n.has(i)||(yield{text:i,start:r.index,end:r.index+i.length})}}function Yg(e,t){for(let[n]of e.toGeneratedLocation(t,r=>!!r.navigation))return n;return null}function Nl(e,t){let n=e;for(let[r]of n.toSourceLocation(t,i=>!!i.navigation))return r;return null}function NA(e,t){let n=0,r=e.lineStarts.length-1;for(;n<=r;){let o=Math.floor((n+r)/2);e.lineStarts[o]<=t?n=o+1:r=o-1}let i=Math.max(0,r);return{line:i,character:t-e.lineStarts[i]}}function Zg(e,t){return jn(e,t).startsWith("node_modules/")}function jn(e,t){return bA(e,t).replaceAll("\\","/")}function EA(e){switch(yA(e)){case".vue":return"vue";case".tsx":return"typescriptreact";case".ts":case".mts":case".cts":return"typescript";case".jsx":return"javascriptreact";case".js":case".mjs":case".cjs":return"javascript";case".json":return"json";default:return"typescript"}}function eh(){let e=new Map;return{get(t){if(e.has(t))return e.get(t)??null;try{let n=Pl(t,"utf-8"),r={text:n,lineStarts:TA(n)};return e.set(t,r),r}catch{return e.set(t,null),null}},positionAt:NA}}function TA(e){let t=[0];for(let n=0;n<e.length;n++)e.charCodeAt(n)===10&&t.push(n+1);return t}function _A(e,t){let n=new Map,r=500;for(let i=0;i<t.length;i+=r){let o=t.slice(i,i+r),s=e.prepare(`SELECT id, relative_path AS relativePath FROM documents WHERE relative_path IN (${o.map(()=>"?").join(",")})`).all(...o);for(let a of s)n.set(a.relativePath,a.id)}return n}function FA(e){try{let t=JSON.parse(Pl(Vg(e,"package.json"),"utf-8"));return{name:t.name??"workspace",version:t.version??"0.0.0"}}catch{return{name:"workspace",version:"0.0.0"}}}function $A(e,t,n,r){let i=jn(n,r),o=th(t.name,t.version,i);return e.get(o)?.id??null}function th(e,t,n){let r=n.split("/").map(i=>`\`${i.replaceAll("`","")}\``).join("/");return`scip-vue npm ${e} ${t} ${r}/default.`}function El(e){en({projectRoot:e.projectRoot,dbPath:e.dbPath});let t=VA(e.projectRoot,e.tsconfig);if(!MA(t))throw new Error(`Vue tsconfig not found at ${t}`);let n=new AA(e.dbPath);try{let r=qg(n,e.projectRoot),i=HA(BA(e.dbPath),"augment-vue-meta.json"),o=nh(n,e.projectRoot,e.tsconfig),s=qA(i,o,e.onStatus);if(s)return s;let a=UA({db:n,projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,configPath:t,vueFiles:r,onStatus:e.onStatus});return zA(i,nh(n,e.projectRoot,e.tsconfig),a),a}finally{n.close()}}function qA(e,t,n){let r=GA(e,t);return r&&n?.(`Vue references unchanged; reused ${r.resolvedReferences} cached resolved references.`),r}function UA(e){let t=Gg(e.db,e.projectRoot,e.vueFiles),n=WA(e,t),r=Kg(n.occurrences),i=zg(e.db,e.projectRoot,e.vueFiles,t,r),o={vueFiles:e.vueFiles.length,resolvedReferences:r.length,insertedMentions:i,skippedReferences:n.skippedReferences,syntheticSymbols:t.syntheticSymbols};return e.onStatus?.(`Resolved ${o.resolvedReferences} Vue references with Volar; inserted ${o.insertedMentions} mentions.`),o}function WA(e,t){if(Mg(e.vueFiles))return jg({projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,vueFiles:e.vueFiles});let n=JA({db:e.db,projectRoot:e.projectRoot,configPath:e.configPath,vueSymbolLookup:t});return KA({...n,vueFiles:n.context.fileNames.filter(r=>r.endsWith(".vue"))})}function GA(e,t){try{let n=JSON.parse(jA(e,"utf-8"));return JSON.stringify(n.fingerprint)===JSON.stringify(t)?n.result:null}catch{return null}}function zA(e,t,n){OA(e,JSON.stringify({updatedAt:new Date().toISOString(),fingerprint:t,result:n},null,2)+`
785
+ `)}function nh(e,t,n){let r=e.prepare(`
774
786
  SELECT
775
787
  (SELECT COUNT(*) FROM documents) AS documents,
776
788
  (SELECT COUNT(*) FROM global_symbols) AS symbols,
@@ -779,17 +791,40 @@ Stop hook allowed this turn to finish. Review these findings when relevant. Set
779
791
  (SELECT COUNT(*) FROM defn_enclosing_ranges) AS ranges,
780
792
  (SELECT MAX(id) FROM chunks) AS maxChunkId,
781
793
  (SELECT MAX(id) FROM global_symbols) AS maxSymbolId
782
- `).get();return{version:2,tsconfig:n,files:In(t),db:i}}function YF(e){let t=Ug();return{projectRoot:e.projectRoot,context:$g(e.projectRoot,e.configPath),symbolLookup:Fg(e.db,e.projectRoot,t),vueSymbolLookup:e.vueSymbolLookup,sourceReader:t}}function ZF(e){let t=[],n=0,i=e.tasks??e.vueFiles.map(r=>({fileName:r,startOffset:0,endOffset:Number.POSITIVE_INFINITY,countFileSkip:!0}));for(let r of i){let o=eA(e,r);t.push(...o.occurrences),n+=o.skippedReferences}return{occurrences:t,skippedReferences:n}}function eA(e,t){let n=e.context.language.scripts.get(t.fileName),i=n?.generated?.languagePlugin.typescript?.getServiceScript(n.generated.root)?.code;if(!n||!i)return{occurrences:[],skippedReferences:t.countFileSkip?1:0};let r=e.sourceReader.get(t.fileName);if(!r)return{occurrences:[],skippedReferences:t.countFileSkip?1:0};let o=e.context.language.maps.get(i,n),s=Tn(e.projectRoot,t.fileName),a=[...Hg(r.text)],c={tokens:a.filter(l=>l.start>=t.startOffset&&l.start<t.endOffset),tokenByStart:new Map(a.map(l=>[l.start,l])),tokenTextCounts:iA(a),processedStarts:new Set};return tA({...e,fileName:t.fileName,sourceInfo:r,sourceFile:s,map:o,tokenContext:c})}function tA(e){let t=[],n=0;for(let i of e.tokenContext.tokens){if(e.tokenContext.processedStarts.has(i.start))continue;let r=Vg(e.map,i.start);if(r===null)continue;let s=(e.context.languageService.getDefinitionAtPosition(e.fileName,r+1)??[]).find(c=>!qg(e.projectRoot,c.fileName));if(!s){n++;continue}let a=Og(s,e.symbolLookup,e.vueSymbolLookup,e.context,e.projectRoot);if(a===null){n++;continue}zg(t,e.sourceReader,e.sourceInfo,e.sourceFile,i,a),e.tokenContext.processedStarts.add(i.start),nA(t,e,i,r,a)}return{occurrences:t,skippedReferences:n}}function nA(e,t,n,i,r){if(!((t.tokenContext.tokenTextCounts.get(n.text)??0)<=1))for(let o of rA(t.context.languageService,t.fileName,i+1,t.map,n,t.tokenContext.tokenByStart)){if(t.tokenContext.processedStarts.has(o))continue;let s=t.tokenContext.tokenByStart.get(o);s&&(zg(e,t.sourceReader,t.sourceInfo,t.sourceFile,s,r),t.tokenContext.processedStarts.add(o))}}function zg(e,t,n,i,r,o){let s=t.positionAt(n,r.start);e.push({sourceFile:i,sourceLine:s.line,sourceStartChar:s.character,sourceEndChar:s.character+r.text.length,symbolId:o})}function iA(e){let t=new Map;for(let n of e)t.set(n.text,(t.get(n.text)??0)+1);return t}function rA(e,t,n,i,r,o){let s=e.getDocumentHighlights?.(t,n,[t])??[],a=[];for(let c of s)if(c.fileName===t)for(let l of c.highlightSpans){let u=oA(i,l.textSpan.start,o,r.text);u!==null&&a.push(u)}return a}function oA(e,t,n,i){let r=n.get(t);if(r?.text===i)return r.start;let o=yl(e,t);if(o===null)return null;let s=n.get(o);return s?.text===i?s.start:null}async function ys(e){let{projectRoot:t,maxHeapMb:n=8192,onStatus:i=console.log,skipAutoInstall:r=!1}=e,o=mA(e),s=Date.now();Cl(Pt(o.outputScip),{recursive:!0}),Cl(Pt(o.outputDb),{recursive:!0});let a=e.languages??Dt(t);if(a.length===0)throw new Error("No supported languages detected in this project. Looked for: tsconfig.json, Cargo.toml, go.mod, pyproject.toml, etc.");i(`Detected languages: ${a.join(", ")}`);let c=NA(t,a,{pnpmWorkspaces:e.pnpmWorkspaces}),l=IA(gt(Pt(o.outputDb),"index.lock")),u=null;try{let d=pA({opts:e,paths:o,languages:a,fingerprint:c,start:s,onStatus:i});if(d)return d;xA(r,i);let m=fA(o);return u=m.runDir,await gA({opts:e,languages:a,projectRoot:t,paths:o,tempPaths:m,fingerprint:c,start:s,maxHeapMb:n,skipAutoInstall:r,onStatus:i})}finally{u&&Rl(u,{recursive:!0,force:!0}),l()}}function mA(e){let t=e.outputScip??gt(e.projectRoot,"index.scip"),n=e.outputDb??gt(e.projectRoot,"index.db");return{outputScip:t,outputDb:n,metaPath:gt(Pt(n),"meta.json")}}function pA(e){if(e.opts.skipIfUnchanged===!1||!bs(e.paths.outputScip)||!bs(e.paths.outputDb)||!EA(e.paths.metaPath,e.fingerprint))return null;Gt({projectRoot:e.opts.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus});let t=Date.now()-e.start;return e.onStatus(`Index unchanged; reused existing SQLite index in ${(t/1e3).toFixed(1)}s`),{languages:e.languages,indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:t,reused:!0,skipped:[]}}function fA(e){let t=lA(gt(Pt(e.outputDb),"reindex-"));return{runDir:t,tempOutputScip:gt(t,hs(e.outputScip)),tempOutputDb:gt(t,hs(e.outputDb)),tempMetaPath:gt(t,hs(e.metaPath))}}async function gA(e){let t={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},{indexedOutputs:n,skippedLanguages:i,reusedLanguages:r}=await hA(e,t);r.length>0&&e.onStatus(`Reused ${r.length} cached language shard(s): ${r.join(", ")}`),bA(e,t,n,i);let o=Date.now()-e.start;return e.onStatus(`Done in ${(o/1e3).toFixed(1)}s`),{languages:n.map(s=>s.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:o,reused:!1,skipped:i}}async function hA(e,t){let n=yA(e),i=new Set(n.map(l=>l.language));for(let l of i)e.onStatus(`Reusing cached ${l} SCIP shard (language inputs unchanged).`);let{preparedRuns:r,skippedLanguages:o}=CA({languages:e.languages.filter(l=>!i.has(l)),tempOutputScip:e.tempPaths.tempOutputScip,projectRoot:e.projectRoot,env:t,skipAutoInstall:e.skipAutoInstall,pnpmWorkspaces:e.opts.pnpmWorkspaces,onStatus:e.onStatus}),s=await Lg(r,e.projectRoot,e.onStatus,e.opts.indexerConcurrency),{indexedOutputs:a}=RA(s,o),c=[...n,...a];return kA(c,o,e.languages,e.opts.allowPartial,e.onStatus),{indexedOutputs:c,skippedLanguages:o,reusedLanguages:[...i]}}function bA(e,t,n,i){SA(e.paths.outputDb,n),wA(n,e.tempPaths.tempOutputScip,e.onStatus),LA(e.tempPaths.tempOutputScip,e.tempPaths.tempOutputDb,t,e.onStatus),Gt({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),TA(e.tempPaths.tempMetaPath,{version:3,status:i.length===0?"complete":"partial",updatedAt:new Date().toISOString(),fingerprint:e.fingerprint,languageFingerprints:Qg(e.projectRoot,e.languages,{pnpmWorkspaces:e.opts.pnpmWorkspaces}),requestedLanguages:e.languages,indexedLanguages:n.map(r=>r.language),skipped:[...i]}),PA({tempOutputScip:e.tempPaths.tempOutputScip,tempOutputDb:e.tempPaths.tempOutputDb,tempMetaPath:e.tempPaths.tempMetaPath,outputScip:e.paths.outputScip,outputDb:e.paths.outputDb,metaPath:e.paths.metaPath})}function yA(e){let t;try{t=JSON.parse(Kg(e.paths.metaPath,"utf-8"))}catch{return[]}if(t.version!==3||!t.languageFingerprints)return[];let n=[],i=Qg(e.projectRoot,e.languages,{pnpmWorkspaces:e.opts.pnpmWorkspaces});for(let r of e.languages){let o=Xg(e.paths.outputDb,r);bs(o)&&vi(t.languageFingerprints[r])===vi(i[r])&&n.push({language:r,scipPath:o})}return n}function SA(e,t){for(let n of t){let i=Xg(e,n.language);Cl(Pt(i),{recursive:!0}),n.scipPath!==i&&cA(n.scipPath,i)}}function xA(e,t){if(!ms()){if(e)throw new Error(`The scip CLI is required but not found on PATH.
783
- Install from: https://github.com/sourcegraph/scip/releases`);if(t("scip CLI not found on PATH. Attempting auto-install..."),!yg(t))throw new Error(`The scip CLI is required but could not be installed.
784
- Install manually from: https://github.com/sourcegraph/scip/releases`)}}function CA(e){let t=[],n=[],i=e.languages.map((r,o)=>({language:r,scipPath:e.languages.length>1?DA(e.tempOutputScip,r,o):e.tempOutputScip}));for(let{language:r,scipPath:o}of i){let s=vA({...e,language:r,scipPath:o});"skipped"in s?n.push(s.skipped):t.push(s.prepared)}return{preparedRuns:t,skippedLanguages:n}}function vA(e){let t=Pn(e.language),n=is(t),i=Qc(t,e.projectRoot);if(!i&&!Ff(t)){if(e.skipAutoInstall){let a=`${n} not found on PATH (auto-install disabled). ${t.installUrl??""}`.trim();return e.onStatus(`Skipping ${e.language}: ${a}`),{skipped:{language:e.language,reason:a}}}if(e.onStatus(`${n} not found. Attempting auto-install...`),!os(t,e.onStatus)){let a=`${n} could not be auto-installed. ${t.installUrl?`Install manually from ${t.installUrl}`:`Install ${n} and put it on PATH.`}`;return e.onStatus(`Skipping ${e.language}: ${a}`),{skipped:{language:e.language,reason:a}}}}let r=i??Si(t);if(!r){let a=`${n} was not found after installation checks.`;return e.onStatus(`Skipping ${e.language}: ${a}`),{skipped:{language:e.language,reason:a}}}let{binary:o,args:s}=t.indexArgs({projectRoot:e.projectRoot,outputPath:e.scipPath,pnpmWorkspaces:e.pnpmWorkspaces,indexerBinary:r});return{prepared:{language:e.language,scipPath:e.scipPath,config:t,resolvedBinary:r,binary:o,args:s,env:Mf(t,e.env,r)}}}function RA(e,t){let n=[];for(let i of e)i.skipped?t.push(i.skipped):n.push({language:i.language,scipPath:i.scipPath});return{indexedOutputs:n}}function kA(e,t,n,i,r){if(e.length===0){let o=t.map(s=>` - ${s.language}: ${s.reason}`).join(`
794
+ `).get();return{version:2,tsconfig:n,files:Mn(t),db:r}}function JA(e){let t=eh();return{projectRoot:e.projectRoot,context:Ug(e.projectRoot,e.configPath),symbolLookup:Wg(e.db,e.projectRoot,t),vueSymbolLookup:e.vueSymbolLookup,sourceReader:t}}function KA(e){let t=[],n=0,r=e.tasks??e.vueFiles.map(i=>({fileName:i,startOffset:0,endOffset:Number.POSITIVE_INFINITY,countFileSkip:!0}));for(let i of r){let o=XA(e,i);t.push(...o.occurrences),n+=o.skippedReferences}return{occurrences:t,skippedReferences:n}}function XA(e,t){let n=e.context.language.scripts.get(t.fileName),r=n?.generated?.languagePlugin.typescript?.getServiceScript(n.generated.root)?.code;if(!n||!r)return{occurrences:[],skippedReferences:t.countFileSkip?1:0};let i=e.sourceReader.get(t.fileName);if(!i)return{occurrences:[],skippedReferences:t.countFileSkip?1:0};let o=e.context.language.maps.get(r,n),s=jn(e.projectRoot,t.fileName),a=[...Qg(i.text)],c={tokens:a.filter(l=>l.start>=t.startOffset&&l.start<t.endOffset),tokenByStart:new Map(a.map(l=>[l.start,l])),tokenTextCounts:ZA(a),processedStarts:new Set};return QA({...e,fileName:t.fileName,sourceInfo:i,sourceFile:s,map:o,tokenContext:c})}function QA(e){let t=[],n=0;for(let r of e.tokenContext.tokens){if(e.tokenContext.processedStarts.has(r.start))continue;let i=Yg(e.map,r.start);if(i===null)continue;let s=(e.context.languageService.getDefinitionAtPosition(e.fileName,i+1)??[]).find(c=>!Zg(e.projectRoot,c.fileName));if(!s){n++;continue}let a=Jg(s,e.symbolLookup,e.vueSymbolLookup,e.context,e.projectRoot);if(a===null){n++;continue}rh(t,e.sourceReader,e.sourceInfo,e.sourceFile,r,a),e.tokenContext.processedStarts.add(r.start),YA(t,e,r,i,a)}return{occurrences:t,skippedReferences:n}}function YA(e,t,n,r,i){if(!((t.tokenContext.tokenTextCounts.get(n.text)??0)<=1))for(let o of eM(t.context.languageService,t.fileName,r+1,t.map,n,t.tokenContext.tokenByStart)){if(t.tokenContext.processedStarts.has(o))continue;let s=t.tokenContext.tokenByStart.get(o);s&&(rh(e,t.sourceReader,t.sourceInfo,t.sourceFile,s,i),t.tokenContext.processedStarts.add(o))}}function rh(e,t,n,r,i,o){let s=t.positionAt(n,i.start);e.push({sourceFile:r,sourceLine:s.line,sourceStartChar:s.character,sourceEndChar:s.character+i.text.length,symbolId:o})}function ZA(e){let t=new Map;for(let n of e)t.set(n.text,(t.get(n.text)??0)+1);return t}function eM(e,t,n,r,i,o){let s=e.getDocumentHighlights?.(t,n,[t])??[],a=[];for(let c of s)if(c.fileName===t)for(let l of c.highlightSpans){let u=tM(r,l.textSpan.start,o,i.text);u!==null&&a.push(u)}return a}function tM(e,t,n,r){let i=n.get(t);if(i?.text===r)return i.start;let o=Nl(e,t);if(o===null)return null;let s=n.get(o);return s?.text===r?s.start:null}async function tn(e){let{projectRoot:t,maxHeapMb:n=8192,onStatus:r=console.log,skipAutoInstall:i=!1}=e,o=cM(e),s=Date.now();Fl(at(o.outputScip),{recursive:!0}),Fl(at(o.outputDb),{recursive:!0});let a=e.languages??Tt(t);if(a.length===0)throw new Error("No supported languages detected in this project. Looked for: tsconfig.json, Cargo.toml, go.mod, pyproject.toml, etc.");r(`Detected languages: ${a.join(", ")}`);let c=EM(t,a,{pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:e.typescriptProjects}),l=await RM(xt(at(o.outputDb),"index.lock"),{projectRoot:t,trigger:e.trigger,onStatus:r}),u=null;try{let d=lM({opts:e,paths:o,languages:a,fingerprint:c,start:s,onStatus:r});if(d)return d;hM(i,r);let m=uM(o);return u=m.runDir,await dM({opts:e,languages:a,projectRoot:t,paths:o,tempPaths:m,fingerprint:c,start:s,maxHeapMb:n,skipAutoInstall:i,onStatus:r})}catch(d){throw fh(o.metaPath,Al({trigger:e.trigger,result:"failed",start:s,error:d instanceof Error?d.message:String(d)})),d}finally{u&&ji(u,{recursive:!0,force:!0}),l()}}function cM(e){let t=e.outputScip??xt(e.projectRoot,"index.scip"),n=e.outputDb??xt(e.projectRoot,"index.db");return{outputScip:t,outputDb:n,metaPath:xt(at(n),"meta.json")}}function lM(e){if(e.opts.skipIfUnchanged===!1||!Es(e.paths.outputScip)||!Es(e.paths.outputDb)||!TM(e.paths.metaPath,e.fingerprint))return null;en({projectRoot:e.opts.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus});let t=Date.now()-e.start,n=Al({trigger:e.opts.trigger,result:"reused",start:e.start,languages:e.languages,skipped:[]});return fh(e.paths.metaPath,n),e.onStatus(`Index unchanged; reused existing SQLite index in ${(t/1e3).toFixed(1)}s`),{languages:e.languages,indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:t,reused:!0,skipped:[],lastRefresh:n}}function uM(e){let t=oM(xt(at(e.outputDb),"reindex-"));return{runDir:t,tempOutputScip:xt(t,Ns(e.outputScip)),tempOutputDb:xt(t,Ns(e.outputDb)),tempMetaPath:xt(t,Ns(e.metaPath))}}async function dM(e){let t={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},{indexedOutputs:n,skippedLanguages:r,reusedLanguages:i}=await mM(e,t);i.length>0&&e.onStatus(`Reused ${i.length} cached language shard(s): ${i.join(", ")}`);let o=pM(e,t,n,r),s=o.durationMs;return e.onStatus(`Done in ${(s/1e3).toFixed(1)}s`),{languages:n.map(a=>a.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:s,reused:!1,skipped:r,lastRefresh:o}}async function mM(e,t){let n=fM(e),r=new Set(n.map(l=>l.language));for(let l of r)e.onStatus(`Reusing cached ${l} SCIP shard (language inputs unchanged).`);let{preparedRuns:i,skippedLanguages:o}=yM({languages:e.languages.filter(l=>!r.has(l)),tempOutputScip:e.tempPaths.tempOutputScip,projectRoot:e.projectRoot,env:t,skipAutoInstall:e.skipAutoInstall,pnpmWorkspaces:e.opts.pnpmWorkspaces,typescriptProjectMode:e.opts.typescriptProjectMode,typescriptProjects:e.opts.typescriptProjects,onStatus:e.onStatus}),s=await Ng(i,e.projectRoot,e.onStatus,e.opts.indexerConcurrency),{indexedOutputs:a}=SM(s,o),c=[...n,...a];return xM(c,o,e.languages,e.opts.allowPartial,e.onStatus),{indexedOutputs:c,skippedLanguages:o,reusedLanguages:[...r]}}function pM(e,t,n,r){gM(e.paths.outputDb,n),CM(n,e.tempPaths.tempOutputScip,e.onStatus),vM(e.tempPaths.tempOutputScip,e.tempPaths.tempOutputDb,t,e.onStatus),en({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus});let i=Al({trigger:e.opts.trigger,result:"rebuilt",start:e.start,languages:n.map(o=>o.language),skipped:[...r]});return ph(e.tempPaths.tempMetaPath,{version:3,status:r.length===0?"complete":"partial",updatedAt:new Date().toISOString(),fingerprint:e.fingerprint,languageFingerprints:lh(e.projectRoot,e.languages,{pnpmWorkspaces:e.opts.pnpmWorkspaces,typescriptProjectMode:e.opts.typescriptProjectMode,typescriptProjects:e.opts.typescriptProjects}),requestedLanguages:e.languages,indexedLanguages:n.map(o=>o.language),skipped:[...r],lastRefresh:i}),NM({tempOutputScip:e.tempPaths.tempOutputScip,tempOutputDb:e.tempPaths.tempOutputDb,tempMetaPath:e.tempPaths.tempMetaPath,outputScip:e.paths.outputScip,outputDb:e.paths.outputDb,metaPath:e.paths.metaPath}),i}function fM(e){let t;try{t=JSON.parse(Ts(e.paths.metaPath,"utf-8"))}catch{return[]}if(t.version!==3||!t.languageFingerprints)return[];let n=[],r=lh(e.projectRoot,e.languages,{pnpmWorkspaces:e.opts.pnpmWorkspaces,typescriptProjectMode:e.opts.typescriptProjectMode,typescriptProjects:e.opts.typescriptProjects});for(let i of e.languages){let o=mh(e.paths.outputDb,i);Es(o)&&_r(t.languageFingerprints[i])===_r(r[i])&&n.push({language:i,scipPath:o})}return n}function gM(e,t){for(let n of t){let r=mh(e,n.language);Fl(at(r),{recursive:!0}),n.scipPath!==r&&iM(n.scipPath,r)}}function hM(e,t){if(!Rs()){if(e)throw new Error(`The scip CLI is required but not found on PATH.
795
+ Install from: https://github.com/sourcegraph/scip/releases`);if(t("scip CLI not found on PATH. Attempting auto-install..."),!mg(t))throw new Error(`The scip CLI is required but could not be installed.
796
+ Install manually from: https://github.com/sourcegraph/scip/releases`)}}function yM(e){let t=[],n=[],r=e.languages.map((i,o)=>({language:i,scipPath:e.languages.length>1?ch(e.tempOutputScip,i,o):e.tempOutputScip}));for(let{language:i,scipPath:o}of r){let s=bM({...e,language:i,scipPath:o});for(let a of s)"skipped"in a?ah(n,a.skipped):t.push(a.prepared)}return{preparedRuns:t,skippedLanguages:n}}function bM(e){if(e.language!=="typescript"||e.typescriptProjectMode!=="workspace")return[Tl({...e,id:e.language,label:e.language,outputScipPath:e.scipPath})];let t=Lg(e.projectRoot,e.typescriptProjects);return t.length===0?[Tl({...e,id:e.language,label:e.language,outputScipPath:e.scipPath})]:(e.onStatus(`Indexing TypeScript workspace as ${t.length} project shard(s).`),t.map((n,r)=>Tl({...e,id:`typescript:${n}`,label:`typescript (${n})`,scipPath:ch(e.tempOutputScip,"typescript-project",r),outputScipPath:e.scipPath,pnpmWorkspaces:!1,projectPath:n})))}function Tl(e){let t=An(e.language),n=Is(t),r=wl(t,e.projectRoot);if(!r&&!Tg(t)){if(e.skipAutoInstall){let a=`${n} not found on PATH (auto-install disabled). ${t.installUrl??""}`.trim();return e.onStatus(`Skipping ${e.language}: ${a}`),{skipped:{language:e.language,reason:a}}}if(e.onStatus(`${n} not found. Attempting auto-install...`),!Ps(t,e.onStatus)){let a=`${n} could not be auto-installed. ${t.installUrl?`Install manually from ${t.installUrl}`:`Install ${n} and put it on PATH.`}`;return e.onStatus(`Skipping ${e.language}: ${a}`),{skipped:{language:e.language,reason:a}}}}let i=r??Tr(t);if(!i){let a=`${n} was not found after installation checks.`;return e.onStatus(`Skipping ${e.language}: ${a}`),{skipped:{language:e.language,reason:a}}}let{binary:o,args:s}=t.indexArgs({projectRoot:e.projectRoot,outputPath:e.scipPath,pnpmWorkspaces:e.pnpmWorkspaces,indexerBinary:i,projectPath:e.projectPath});return{prepared:{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,config:t,resolvedBinary:i,binary:o,args:s,env:Fg(t,e.env,i)}}}function SM(e,t){let n=new Map;for(let i of e)if(i.skipped)ah(t,i.skipped);else{let o=`${i.language}\0${i.outputScipPath}`,s=n.get(o)??{language:i.language,outputScipPath:i.outputScipPath,scipPaths:[]};s.scipPaths.push(i.scipPath),n.set(o,s)}let r=[];for(let i of n.values())if(i.scipPaths.length>1)bl(i.scipPaths,i.outputScipPath),r.push({language:i.language,scipPath:i.outputScipPath});else{let o=i.scipPaths[0];o!==i.outputScipPath&&Mi(o,i.outputScipPath),r.push({language:i.language,scipPath:i.outputScipPath})}return{indexedOutputs:r}}function ah(e,t){let n=e.find(r=>r.language===t.language);if(!n){e.push(t);return}n.reason.includes(t.reason)||(n.reason=`${n.reason}; ${t.reason}`)}function xM(e,t,n,r,i){if(e.length===0){let o=t.map(s=>` - ${s.language}: ${s.reason}`).join(`
785
797
  `);throw new Error(`No language indexers ran successfully. Install at least one indexer for the languages in this project.
786
- `+o)}if(t.length!==0&&(r(`Indexed ${e.length} of ${n.length} languages; skipped ${t.map(o=>o.language).join(", ")}.`),!i))throw new Error(`Failed to index all required languages; preserving the previous index. Pass --allow-partial to intentionally write an incomplete index.
798
+ `+o)}if(t.length!==0&&(i(`Indexed ${e.length} language output(s); skipped or incomplete: ${t.map(o=>o.language).join(", ")}.`),!r))throw new Error(`Failed to index all required languages; preserving the previous index. Pass --allow-partial to intentionally write an incomplete index.
787
799
  `+t.map(o=>` - ${o.language}: ${o.reason}`).join(`
788
- `))}function wA(e,t,n){e.length>1?(n(`Merging ${e.length} language indexes...`),Cg(e.map(i=>i.scipPath),t)):e[0].scipPath!==t&&vl(e[0].scipPath,t)}function LA(e,t,n,i){if(i("Converting to SQLite..."),!bs(e))throw new Error(`SCIP index not found at ${e} after indexing`);try{let r=kg(e);r.removedDefinitionOccurrences>0&&i(`Sanitized ${r.removedDefinitionOccurrences} invalid definition occurrences across ${r.touchedDocuments} documents before SQLite conversion.`);let o=ms();if(!o)throw new Error("scip CLI is not available");sA(o,["expt-convert","--output",t,e],{env:n,stdio:"pipe",maxBuffer:50*1024*1024})}catch(r){let o=r instanceof Error?r.message:String(r);throw new Error(`Failed to convert SCIP index to SQLite: ${o}`,{cause:r})}}function DA(e,t,n){let i=dA(e)||".scip",r=hs(e,i);return gt(Pt(e),`${r}.${n+1}.${t}${i}`)}function IA(e){let t;try{t=uA(e,"wx")}catch(n){throw(typeof n=="object"&&n&&"code"in n?n.code:void 0)==="EEXIST"?new Error(`Another scip-query reindex is already running for ${Pt(e)}.`,{cause:n}):n}return Jg(t,JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()})+`
789
- `),()=>{try{aA(t)}finally{Rl(e,{force:!0})}}}function PA(e){xl(e.tempOutputScip,e.outputScip),xl(e.tempOutputDb,e.outputDb),xl(e.tempMetaPath,e.metaPath)}function xl(e,t){Rl(`${t}.tmp-replace`,{force:!0}),vl(e,`${t}.tmp-replace`),vl(`${t}.tmp-replace`,t)}function NA(e,t,n){return{version:1,languages:[...t].sort(),pnpmWorkspaces:n.pnpmWorkspaces===!0,files:In(e)}}function Qg(e,t,n){return Object.fromEntries(t.map(i=>{let r=Pn(i).markerFiles;return[i,{version:1,languages:[i],pnpmWorkspaces:i==="typescript"&&n.pnpmWorkspaces===!0,files:In(e,{language:i,markerFiles:r})}]}))}function Xg(e,t){return gt(Pt(e),"language-indexes",`${t}.scip`)}function EA(e,t){try{let n=JSON.parse(Kg(e,"utf-8"));return(n.version===2||n.version===3)&&n.status==="complete"&&vi(n.fingerprint)===vi(t)&&vi([...n.indexedLanguages??[]].sort())===vi(t.languages)}catch{return!1}}function TA(e,t){Jg(e,`${JSON.stringify(t,null,2)}
790
- `)}function vi(e){return JSON.stringify(e)}import{watch as _A}from"fs";import{existsSync as Yg,renameSync as Zg}from"fs";import{join as $A,relative as FA}from"path";import{fork as AA}from"child_process";import MA from"ignore";var Ss=class{projectRoot;watchConfig;indexPaths;languages;pnpmWorkspaces;onStatus;onReindexComplete;onError;status={state:"idle"};debounceTimer=null;cooldownTimer=null;dirty=!1;changedFiles=0;reindexInFlight=!1;lastReindexEnd=0;fsWatchers=[];gitignoreFilter;extraIgnore;stopped=!1;constructor(t){this.projectRoot=t.projectRoot,this.watchConfig=mf(t.config),this.indexPaths=Wt(t.projectRoot,t.config),this.languages=t.languages,this.pnpmWorkspaces=t.config.indexer?.typescript?.pnpmWorkspaces??!1,this.onStatus=t.onStatus??(()=>{}),this.onReindexComplete=t.onReindexComplete??(()=>{}),this.onError=t.onError??(n=>console.error(n.message)),this.gitignoreFilter=Ut(t.projectRoot),this.extraIgnore=MA(),this.watchConfig.ignore.length>0&&this.extraIgnore.add(this.watchConfig.ignore)}start(){this.stopped=!1,this.setStatus({state:"idle"});try{let t=_A(this.projectRoot,{recursive:!0},(n,i)=>{i&&!this.stopped&&this.handleFileChange(i)});this.fsWatchers.push(t)}catch{this.onError(new Error("Failed to start file watcher. On Linux, you may need to increase inotify limits: sysctl -w fs.inotify.max_user_watches=524288"))}}stop(){this.stopped=!0;for(let t of this.fsWatchers)t.close();this.fsWatchers=[],this.clearDebounceTimer(),this.clearCooldownTimer(),this.setStatus({state:"idle"})}handleFileChange(t){let n=FA(this.projectRoot,$A(this.projectRoot,t));if(this.gitignoreFilter.isIgnored(n)||this.extraIgnore.ignores(n)||t.endsWith("index.db")||t.endsWith("index.scip")||t.endsWith("index.db.tmp")||t.endsWith(".scipquery.json"))return;if(this.changedFiles++,this.reindexInFlight){this.dirty=!0,this.setStatus({state:"indexing",startedAt:this.status.startedAt});return}if(this.status.state==="cooldown"){this.dirty=!0,this.setStatus({state:"cooldown",until:this.status.until,dirty:!0});return}this.clearDebounceTimer();let i=Date.now()+this.watchConfig.debounceMs;this.setStatus({state:"waiting",changedFiles:this.changedFiles,reindexAt:i}),this.debounceTimer=setTimeout(()=>{this.debounceTimer=null,this.triggerReindex()},this.watchConfig.debounceMs)}triggerReindex(){if(this.reindexInFlight||this.stopped)return;let t=Date.now()-this.lastReindexEnd;if(this.lastReindexEnd>0&&t<this.watchConfig.cooldownMs){let i=this.watchConfig.cooldownMs-t;this.dirty=!0;let r=Date.now()+i;this.setStatus({state:"cooldown",until:r,dirty:!0}),this.cooldownTimer=setTimeout(()=>{this.cooldownTimer=null,this.dirty&&!this.stopped&&(this.dirty=!1,this.triggerReindex())},i);return}this.reindexInFlight=!0,this.dirty=!1,this.changedFiles=0;let n=Date.now();this.setStatus({state:"indexing",startedAt:n}),this.runReindex().then(i=>{if(this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onReindexComplete(i),this.dirty&&!this.stopped){let r=Date.now()+this.watchConfig.cooldownMs;this.setStatus({state:"cooldown",until:r,dirty:!0}),this.cooldownTimer=setTimeout(()=>{this.cooldownTimer=null,this.dirty&&!this.stopped?(this.dirty=!1,this.triggerReindex()):this.setStatus({state:"idle"})},this.watchConfig.cooldownMs)}else this.setStatus({state:"idle"})}).catch(i=>{this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onError(i instanceof Error?i:new Error(String(i))),this.setStatus({state:"idle"})})}runReindex(){return new Promise((t,n)=>{let i=Date.now(),r=this.indexPaths.dbPath+".tmp",o=OA(this.indexPaths.indexPath),s=AA(new URL("./reindex-worker.js",import.meta.url).pathname,[],{env:{...process.env,SCIP_REINDEX_PROJECT_ROOT:this.projectRoot,SCIP_REINDEX_OUTPUT_SCIP:o,SCIP_REINDEX_OUTPUT_DB:r,SCIP_REINDEX_LANGUAGES:this.languages?.join(",")??"",SCIP_REINDEX_PNPM_WORKSPACES:this.pnpmWorkspaces?"1":""},stdio:"pipe"});s.on("exit",a=>{if(a===0)try{Yg(r)&&Zg(r,this.indexPaths.dbPath),Yg(o)&&Zg(o,this.indexPaths.indexPath),t(Date.now()-i)}catch(c){n(new Error(`Atomic swap failed: ${c}`))}else n(new Error(`Reindex worker exited with code ${a}`))}),s.on("error",n)})}setStatus(t){this.status=t,this.onStatus(t)}clearDebounceTimer(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}clearCooldownTimer(){this.cooldownTimer&&(clearTimeout(this.cooldownTimer),this.cooldownTimer=null)}};function OA(e){return e.endsWith(".scip")?e.slice(0,-5)+".tmp.scip":e+".tmp.scip"}import{existsSync as QA}from"fs";import{existsSync as jA,mkdirSync as BA,readFileSync as HA,writeFileSync as VA}from"fs";import{dirname as qA,join as eh}from"path";function nh(e){let t={markdownPath:eh(e.projectRoot,"docs","scip-query","health-dossier.md"),jsonPath:eh(e.projectRoot,"docs","scip-query","health-dossier.json"),status:"written",written:[],unchanged:[]},n={...e,healthDossier:t};try{return th(t.markdownPath,UA(n),t),th(t.jsonPath,`${JSON.stringify(n,null,2)}
791
- `,t),t}catch(i){return{...t,status:"failed",error:i instanceof Error?i.message:String(i)}}}function UA(e){return`${["# scip-query Health Dossier","",`Generated: ${new Date().toISOString()}`,`Project: ${e.projectRoot}`,`Setup verdict: ${e.verdict}`,`Health score: ${KA(e)}`,"","## Items That Need Attention","",...WA(e),"","## Blocked Or Unavailable Checks","",...GA(e),"","## Setup Smoke Tests","",...e.smokeTests.map(n=>`- ${n.status.toUpperCase()} \`${n.command}\`: ${n.evidence}`),"","## Setup Steps","",...e.steps.map(n=>`- ${n.status.toUpperCase()} ${n.label}${n.message?`: ${n.message}`:""}`),"","## Indexer Remediation","",...zA(e),"","## JSON","",`Machine-readable report: \`${JA(e)}\``,""].join(`
792
- `)}`}function WA(e){return e.health.issuesNeedAttention.length===0?["No prioritized health actions were reported."]:e.health.issuesNeedAttention.map(t=>`- ${t.category}: ${t.description} (${t.count}; impact ${t.impact}, effort ${t.effort}, evidence ${t.evidence}; confirmation ${t.confirmationStatus}; safe to start ${t.safeForAgentToStart?"yes":"no"}). ${t.recommendedNextStep}`)}function GA(e){let t=[...e.smokeTests.filter(n=>n.status!=="pass").map(n=>`- ${n.status.toUpperCase()} \`${n.command}\`: ${n.evidence}`),...e.indexerRemediation.filter(n=>!n.after.runnable).map(n=>`- BLOCKED ${n.language}: ${n.recovery??`Install ${n.binaryLabel}.`}`)];return t.length>0?t:["No blocked or unavailable setup checks were reported."]}function zA(e){return e.indexerRemediation.length===0?["All detected indexers were already runnable."]:e.indexerRemediation.map(t=>{let n=t.after.runnable?"READY":"BLOCKED",i=t.attempted?"install attempted":"no automatic install attempted";return`- ${n} ${t.language}: ${t.binaryLabel} (${i})`})}function KA(e){return e.health.score===null?`unavailable (${e.health.unavailableReason??"not checked"})`:`${e.health.score} (risk ${e.health.riskScore}, hygiene ${e.health.hygieneScore})`}function JA(e){return e.healthDossier?.jsonPath.replace(`${e.projectRoot}/`,"")??"docs/scip-query/health-dossier.json"}function th(e,t,n){if(BA(qA(e),{recursive:!0}),(jA(e)?HA(e,"utf-8"):null)===t){n.unchanged.push(e);return}VA(e,t),n.written.push(e)}async function ah(e={}){let t=[],{projectRoot:n,config:i,paths:r,dbPath:o}=gi(),s=kr();Q(t,{id:"scip-cli",label:"scip CLI",status:s?"ok":"warn",message:s?"scip CLI is available.":"scip CLI is not available; reindex may attempt install."});let a=ps({quiet:!0});Q(t,{id:"skills",label:"Agent skills",status:a.skipped.length>0?"warn":"ok",message:`${a.installed.length} installed, ${a.alreadyLinked.length} already linked, ${a.skipped.length} skipped.`,details:a.skipped.map(k=>`Skipped ${k}`)});let c=fi(i,{projectRoot:n}),l=c.filter(k=>k.level==="error");Q(t,{id:"config",label:"Project config",status:l.length>0?"failed":c.length>0?"warn":"ok",message:c.length===0?"Config OK.":`${c.length} diagnostic(s), ${l.length} error(s).`,details:c.map(k=>`${k.level.toUpperCase()} ${k.path}: ${k.message}`)});let u=ft(n,i);Q(t,{id:"readiness",label:"Indexer readiness",status:u.languages.length===0?"failed":u.indexers.some(k=>!k.runnable)?"warn":"ok",message:u.languages.length===0?"No supported project languages detected.":`Detected languages: ${u.languages.join(", ")}`,details:u.indexers.map(k=>`${k.runnable?"OK":k.installed?"WARN":"MISSING"} ${k.language}: ${k.binaryLabel}${k.note?` - ${k.note}`:""}`)});let d=oM(n,u,t),m=ft(n,i),p=null;if(m.languages.length===0||l.length>0)Q(t,{id:"reindex",label:"Index refresh",status:"skipped",message:m.languages.length===0?"Skipped because no supported languages were detected.":"Skipped because config validation has errors."});else{let k=[];try{p=await ys({projectRoot:n,languages:m.languages,outputScip:r.indexPath,outputDb:r.dbPath,pnpmWorkspaces:i.indexer?.typescript?.pnpmWorkspaces,skipIfUnchanged:!0,allowPartial:!0,onStatus:A=>k.push(A)}),Q(t,{id:"reindex",label:"Index refresh",status:p.skipped.length>0?"warn":"ok",message:`${p.reused?"Reused":"Indexed"} ${p.languages.join(", ")} in ${(p.durationMs/1e3).toFixed(1)}s.`,details:[...k,...p.skipped.map(A=>`Skipped ${A.language}: ${A.reason}`)]})}catch(A){Q(t,{id:"reindex",label:"Index refresh",status:"failed",message:xs(A),details:k})}}let h=ft(n,i),g=Nn(h),b=yi(n,i,r);Q(t,{id:"capabilities",label:"Capability matrix",status:uM(g),message:dM(g)});let S=aM(r.dbPath,t),x=null;try{x=us(n),Q(t,{id:"project-hooks",label:"Project agent hooks",status:x.skipped.length>0?"warn":"ok",message:`${x.installed.length} installed, ${x.updated.length} updated, ${x.unchanged.length} already configured, ${x.removed.length} legacy user hook config(s) cleaned up, ${x.skipped.length} skipped.`,details:[...x.removed.map(k=>`Removed legacy user-level ${k}`),...x.skipped.map(k=>`Skipped ${k.target}: ${k.reason}`)]})}catch(k){Q(t,{id:"project-hooks",label:"Project agent hooks",status:"failed",message:xs(k)})}let I=null;try{I=ls(n,{gitHook:e.gitHook}),Q(t,{id:"agent-guidance",label:"Project agent guidance",status:I.skipped.length>0?"warn":"ok",message:`${I.written.length} written, ${I.unchanged.length} already wired, ${I.skipped.length} skipped.`,details:I.skipped.map(k=>`Skipped ${k.target}: ${k.reason}`)})}catch(k){Q(t,{id:"agent-guidance",label:"Project agent guidance",status:"failed",message:xs(k)})}let L=XA({reindexResult:p,readiness:h,capabilities:g,freshness:b,health:S,hooksResult:x,agentResult:I,steps:t});Q(t,{id:"smoke-tests",label:"Setup smoke tests",status:YA(L),message:ZA(L),details:L.map(k=>`${k.command}: ${k.status} - ${k.evidence}`)});let C={projectRoot:n,dbPath:o,configuredDbPath:r.dbPath,scipCliInstalled:s,languages:h.languages,steps:t,skills:a,initialReadiness:u,indexerRemediation:d,readiness:h,capabilities:g,freshness:b,reindex:p,health:S,smokeTests:L,healthDossier:null,hooks:x,setupAgent:I,filesWritten:I?.written??[],verdict:sh(t,h)},D=nh(C);return C.healthDossier=D,C.filesWritten=[...C.filesWritten,...D.written],Q(t,{id:"health-dossier",label:"Health dossier",status:D.status==="failed"?"failed":"ok",message:D.status==="failed"?D.error:`${D.written.length} written, ${D.unchanged.length} unchanged.`,details:[D.markdownPath,D.jsonPath]}),C.verdict=sh(t,h),C}function ch(e){if(console.log("scip-query setup"),console.log(`Project: ${e.projectRoot}`),console.log(`Verdict: ${e.verdict}`),console.log(`Health score: ${mM(e.health)}`),console.log(""),e.health.issuesNeedAttention.length===0)console.log("Items that need attention: none reported by the health pass.");else{console.log("Items that need attention:");for(let t of e.health.issuesNeedAttention)console.log(` - ${t.category}: ${t.description} (${t.count}; impact ${t.impact}, effort ${t.effort})`)}if(e.health.unavailableReason&&console.log(`Health pass: ${e.health.unavailableReason}`),e.health.warnings.length>0){console.log("Health warnings:");for(let t of e.health.warnings)console.log(` - ${t}`)}e.healthDossier&&console.log(`Health dossier: ${e.healthDossier.markdownPath}`),console.log(""),console.log("Setup steps:");for(let t of e.steps)console.log(` ${t.status.toUpperCase()} ${t.label}${t.message?` - ${t.message}`:""}`);console.log(""),console.log("Smoke tests:");for(let t of e.smokeTests)console.log(` ${t.status.toUpperCase()} ${t.command} - ${t.evidence}`);if(e.indexerRemediation.length>0){console.log(""),console.log("Indexer remediation:");for(let t of e.indexerRemediation){let n=t.after.runnable?"ready":"blocked",i=t.attempted?"attempted install":"manual action required";console.log(` - ${t.language}: ${n} (${i})`),t.recovery&&console.log(` ${t.recovery}`)}}}function XA(e){let t=e.steps.find(r=>r.id==="reindex"),n=e.steps.find(r=>r.id==="project-hooks"),i=e.steps.find(r=>r.id==="agent-guidance");return[{id:"reindex",command:"scip-query reindex",status:e.reindexResult?"pass":t?.status==="failed"?"fail":"unavailable",evidence:e.reindexResult?`${e.reindexResult.languages.join(", ")} indexed${e.reindexResult.reused?" from cache":""}.`:t?.message??"No reindex result was produced."},{id:"status",command:"scip-query status",status:e.freshness.state==="missing"?"fail":"pass",evidence:`Index freshness is ${e.freshness.state}: ${e.freshness.reason}`},{id:"config-validate",command:"scip-query config-validate",status:eM(e.steps),evidence:tM(e.steps)},{id:"capabilities",command:"scip-query capabilities",status:e.capabilities.matrix.length>0?"pass":"unavailable",evidence:e.capabilities.matrix.length>0?`${e.capabilities.matrix.length} language capability row(s) available.`:"No detected languages produced capability rows."},{id:"capability-matrix",command:"scip-query capability-matrix --json",status:e.capabilities.matrix.length>0?"pass":"unavailable",evidence:e.capabilities.matrix.length>0?nM(e.capabilities):"No detected languages produced capability rows."},{id:"health",command:"scip-query health",status:e.health.score===null?"unavailable":"pass",evidence:e.health.score===null?e.health.unavailableReason??"Health report was not available.":`Health score ${e.health.score}.`},{id:"diff-impact",command:"scip-query diff-impact --json",status:ih(e.readiness,e.freshness),evidence:rh(e.readiness,e.freshness)},{id:"diff-gate",command:"scip-query diff-gate --json",status:ih(e.readiness,e.freshness),evidence:rh(e.readiness,e.freshness)},{id:"cleanup-verification",command:"scip-query cleanup-plan --verify",status:iM(e.capabilities),evidence:rM(e.capabilities)},{id:"setup-hooks",command:"scip-query setup-hooks",status:e.hooksResult?"pass":n?.status==="failed"?"fail":"unavailable",evidence:e.hooksResult?`${e.hooksResult.installed.length} installed, ${e.hooksResult.updated.length} updated, ${e.hooksResult.unchanged.length} already configured.`:n?.message??"Project agent hooks were not configured."},{id:"setup-agent",command:"scip-query setup-agent",status:e.agentResult?"pass":i?.status==="failed"?"fail":"unavailable",evidence:e.agentResult?`${e.agentResult.written.length} written, ${e.agentResult.unchanged.length} already wired, ${e.agentResult.skipped.length} skipped.`:i?.message??"Project agent guidance was not written."}]}function YA(e){return e.some(t=>t.status==="fail")?"failed":e.some(t=>t.status==="unavailable")?"warn":"ok"}function ZA(e){let t=e.filter(r=>r.status==="pass").length,n=e.filter(r=>r.status==="unavailable").length,i=e.filter(r=>r.status==="fail").length;return`${t} passed, ${n} unavailable, ${i} failed.`}function eM(e){return e.find(n=>n.id==="config")?.status==="failed"?"fail":"pass"}function tM(e){return e.find(n=>n.id==="config")?.message??"Config diagnostics were not produced."}function nM(e){let t=e.matrix.filter(n=>[n.indexing,n.sourceFacts,n.semantic,n.cleanupVerification].some(i=>i.status==="unavailable")).length;return`${e.matrix.length} language row(s), ${t} with unavailable capability cells.`}function ih(e,t){return e.gitAvailable?t.state==="missing"?"fail":"pass":"unavailable"}function rh(e,t){return e.gitAvailable?`Git is available and index freshness is ${t.state}: ${t.reason}`:"Git is not available for this project."}function iM(e){let t=e.matrix.map(n=>n.cleanupVerification.status);return t.some(n=>n==="available")||t.some(n=>n==="partial")?"pass":"unavailable"}function rM(e){if(e.matrix.length===0)return"No detected languages produced capability rows.";let t=e.matrix.filter(r=>r.cleanupVerification.status==="available").length,n=e.matrix.filter(r=>r.cleanupVerification.status==="partial").length,i=e.matrix.filter(r=>r.cleanupVerification.status==="unavailable").length;return`${t} available, ${n} partial, ${i} unavailable cleanup-verification row(s).`}function oM(e,t,n){let i=[];if(t.languages.length===0)return Q(n,{id:"indexer-remediation",label:"Indexer remediation",status:"skipped",message:"Skipped because no supported languages were detected."}),i;for(let s of t.indexers){if(s.runnable)continue;let a=Pn(s.language),c=[],l=!s.installed&&!!a.installMethods?.length,u=!1;l?u=os(a,m=>c.push(m)):s.installed?c.push(s.note??`${s.binaryLabel} is installed but is not runnable.`):a.installMethods?.length||c.push(`No auto-install method is configured for ${s.binaryLabel}.`);let d=sM(rs(a,e));i.push({language:s.language,binaryLabel:s.binaryLabel,attempted:l,installed:u,before:s,after:d,messages:c,recovery:d.runnable?void 0:d.note??d.installUrl??`Install ${s.binaryLabel} and put it on PATH.`})}if(i.length===0)return Q(n,{id:"indexer-remediation",label:"Indexer remediation",status:"ok",message:"All detected indexers are runnable."}),i;let r=i.filter(s=>!s.after.runnable),o=i.filter(s=>s.attempted);return Q(n,{id:"indexer-remediation",label:"Indexer remediation",status:r.length>0?"warn":"ok",message:r.length===0?`${o.length} install attempt(s); all detected indexers are runnable.`:`${o.length} install attempt(s); ${r.length} indexer(s) still blocked.`,details:i.flatMap(s=>[`${s.language}: ${s.after.runnable?"ready":"blocked"}`,...s.messages])}),i}function sM(e){return{...e,resolvedBinary:e.resolvedBinary??void 0}}function aM(e,t){if(!QA(e)){let n="Skipped because no SQLite index database exists yet.";return Q(t,{id:"health",label:"Health audit",status:"skipped",message:n}),oh(n)}try{let n=Zo({full:!0,json:!0});return Q(t,{id:"health",label:"Health audit",status:"ok",message:`Health score ${n.score}. ${n.actions.length} prioritized action(s).`}),cM(n)}catch(n){let i=xs(n);return Q(t,{id:"health",label:"Health audit",status:"failed",message:i}),oh(i)}}function cM(e){return{score:e.score,riskScore:e.riskScore,hygieneScore:e.hygieneScore,issuesNeedAttention:e.actions.map(lM),warnings:e.warnings??[]}}function lM(e){return{category:e.category,description:e.description,count:e.count,impact:e.impact,effort:e.effort,evidence:e.evidence,locRecoverable:e.locRecoverable,confirmationStatus:"unconfirmed",safeForAgentToStart:!1,recommendedNextStep:"Run scip-health-audit to confirm this signal; use scip-health-improve when the user wants confirmed issues fixed autonomously."}}function oh(e){return{score:null,riskScore:null,hygieneScore:null,issuesNeedAttention:[],warnings:[],unavailableReason:e}}function sh(e,t){return e.some(n=>n.status==="failed")?"blocked":t.indexers.some(n=>!n.runnable)||e.some(n=>n.status==="warn"||n.status==="skipped")?"partial":"ready"}function uM(e){let t=e.matrix.flatMap(n=>[n.indexing.status,n.sourceFacts.status,n.semantic.status,n.cleanupVerification.status]);return t.some(n=>n==="unavailable")||t.some(n=>n==="partial")?"warn":"ok"}function dM(e){return e.matrix.length===0?"No language capability rows.":`${e.matrix.filter(n=>n.indexing.status==="available").length}/${e.matrix.length} language(s) have available indexing.`}function mM(e){return e.score===null?`unavailable (${e.unavailableReason??"not checked"})`:`${e.score} (risk ${e.riskScore}, hygiene ${e.hygieneScore})`}function Q(e,t){e.push({...t,details:t.details?.filter(n=>n.trim()!=="")})}function xs(e){return e instanceof Error?e.message:String(e)}import{existsSync as pM,mkdirSync as fM,writeFileSync as gM}from"fs";import{dirname as hM,join as bM}from"path";function lh(e,t={}){let n=bM(e,".github","workflows","scip-query.yml"),i=yM();return pM(n)&&!t.force?{path:n,written:!1,skipped:!0,content:i,reason:"Workflow already exists. Re-run with --force to overwrite."}:(t.dryRun||(fM(hM(n),{recursive:!0}),gM(n,i)),{path:n,written:!t.dryRun,skipped:!1,content:i})}function yM(){return`name: scip-query
800
+ `))}function CM(e,t,n){e.length>1?(n(`Merging ${e.length} language indexes...`),bl(e.map(r=>r.scipPath),t)):e[0].scipPath!==t&&Mi(e[0].scipPath,t)}function vM(e,t,n,r){if(r("Converting to SQLite..."),!Es(e))throw new Error(`SCIP index not found at ${e} after indexing`);try{let i=wg(e);i.removedDefinitionOccurrences>0&&r(`Sanitized ${i.removedDefinitionOccurrences} invalid definition occurrences across ${i.touchedDocuments} documents before SQLite conversion.`);let o=Rs();if(!o)throw new Error("scip CLI is not available");nM(o,["expt-convert","--output",t,e],{env:n,stdio:"pipe",maxBuffer:50*1024*1024})}catch(i){let o=i instanceof Error?i.message:String(i);throw new Error(`Failed to convert SCIP index to SQLite: ${o}`,{cause:i})}}function ch(e,t,n){let r=aM(e)||".scip",i=Ns(e,r);return xt(at(e),`${i}.${n+1}.${t}${r}`)}async function RM(e,t){for(let n=0;n<2;n++){let r=kM(e,t);if(r)return r;let i=wM(e);if(i&&LM(t.trigger,i)){t.onStatus(`Manual reindex preempting watcher refresh started at ${i.startedAt}.`),await DM(i.pid),ji(e,{force:!0});continue}if(i&&!$l(i.pid)){ji(e,{force:!0});continue}throw new Error(`Another scip-query reindex is already running for ${at(e)}.`)}throw new Error(`Could not acquire scip-query reindex lock for ${at(e)}.`)}function kM(e,t){let n;try{n=sM(e,"wx")}catch(i){if((typeof i=="object"&&i&&"code"in i?i.code:void 0)==="EEXIST")return null;throw i}let r={version:1,pid:process.pid,projectRoot:t.projectRoot,startedAt:new Date().toISOString(),trigger:t.trigger};return sh(n,JSON.stringify(r)+`
801
+ `),()=>{try{rM(n)}finally{ji(e,{force:!0})}}}function wM(e){try{let t=JSON.parse(Ts(e,"utf-8"));return typeof t.pid!="number"||!Number.isInteger(t.pid)||t.pid<=0?null:{version:1,pid:t.pid,projectRoot:typeof t.projectRoot=="string"?t.projectRoot:at(e),startedAt:typeof t.startedAt=="string"?t.startedAt:"unknown",trigger:t.trigger}}catch{return null}}function LM(e,t){return e?.kind==="manual-cli"&&IM(t?.trigger)}function IM(e){return e?.kind==="watch-source"||e?.kind==="watch-git-head"||e?.kind==="watch-git-index"||e?.kind==="watch-git-state"}async function DM(e){ih(e,"SIGTERM"),!await oh(e,2e3)&&(ih(e,"SIGKILL"),await oh(e,1e3))}function ih(e,t){try{process.kill(-e,t)}catch{try{process.kill(e,t)}catch{}}}async function oh(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!$l(e))return!0;await PM(50)}return!$l(e)}function $l(e){try{return process.kill(e,0),!0}catch{return!1}}function PM(e){return new Promise(t=>setTimeout(t,e))}function NM(e){_l(e.tempOutputScip,e.outputScip),_l(e.tempOutputDb,e.outputDb),_l(e.tempMetaPath,e.metaPath)}function _l(e,t){ji(`${t}.tmp-replace`,{force:!0}),Mi(e,`${t}.tmp-replace`),Mi(`${t}.tmp-replace`,t)}function EM(e,t,n){return{version:2,languages:[...t].sort(),pnpmWorkspaces:dh(n),typescriptProjectMode:n.typescriptProjectMode??"single",typescriptProjects:uh(n.typescriptProjects),files:Mn(e)}}function lh(e,t,n){return Object.fromEntries(t.map(r=>{let i=An(r).markerFiles,o=r==="typescript"?{typescriptProjectMode:n.typescriptProjectMode??"single",typescriptProjects:uh(n.typescriptProjects)}:{typescriptProjectMode:"single",typescriptProjects:[]};return[r,{version:2,languages:[r],pnpmWorkspaces:r==="typescript"&&dh(n),...o,files:Mn(e,{language:r,markerFiles:i})}]}))}function uh(e){return[...new Set((e??[]).map(t=>t.trim()).filter(Boolean))].sort((t,n)=>t.localeCompare(n))}function dh(e){return e.typescriptProjectMode!=="workspace"&&e.pnpmWorkspaces===!0}function mh(e,t){return xt(at(e),"language-indexes",`${t}.scip`)}function TM(e,t){try{let n=JSON.parse(Ts(e,"utf-8"));return(n.version===2||n.version===3)&&n.status==="complete"&&_r(n.fingerprint)===_r(t)&&_r([...n.indexedLanguages??[]].sort())===_r(t.languages)}catch{return!1}}function ph(e,t){let n=`${e}.tmp-${process.pid}-${Date.now()}`;sh(n,`${JSON.stringify(t,null,2)}
802
+ `),Mi(n,e)}function fh(e,t){try{let n=JSON.parse(Ts(e,"utf-8"));if(n.version!==2&&n.version!==3)return;ph(e,{...n,lastRefresh:t})}catch{}}function Al(e){return{trigger:e.trigger??{kind:"unknown"},result:e.result,startedAt:new Date(e.start).toISOString(),completedAt:new Date().toISOString(),durationMs:Date.now()-e.start,indexedLanguages:e.languages?[...e.languages]:void 0,skipped:e.skipped?[...e.skipped]:void 0,error:e.error}}function _r(e){return JSON.stringify(e)}import{existsSync as gh,readFileSync as _M}from"fs";function On(e,t,n){let r=new Date().toISOString();if(!gh(n.dbPath))return{state:"missing",checkedAt:r,metaPath:n.metaPath,reason:"No SQLite index database exists.",remedy:"Run: scip-query reindex"};if(!gh(n.metaPath))return{state:"unknown",checkedAt:r,metaPath:n.metaPath,reason:"No reindex metadata file exists next to the SQLite index.",remedy:"Run: scip-query reindex"};try{let i=JSON.parse(_M(n.metaPath,"utf-8")),o=t.languages??Tt(e),s=FM(e,o,t),a=Array.isArray(i.indexedLanguages)?[...i.indexedLanguages].sort():[],c=(i.version===2||i.version===3)&&i.status==="complete"&&JSON.stringify(i.fingerprint)===JSON.stringify(s)&&JSON.stringify(a)===JSON.stringify(s.languages);return{state:c?"fresh":"stale",checkedAt:r,metaPath:n.metaPath,updatedAt:i.updatedAt,lastRefresh:i.lastRefresh,reason:c?"Index metadata fingerprint matches current source files.":"Index metadata fingerprint differs from current source files.",remedy:c?void 0:"Run: scip-query reindex"}}catch(i){return{state:"unknown",checkedAt:r,metaPath:n.metaPath,reason:`Could not read reindex metadata: ${i instanceof Error?i.message:String(i)}`,remedy:"Run: scip-query reindex"}}}function FM(e,t,n){return{version:2,languages:[...t].sort(),pnpmWorkspaces:n.indexer?.typescript?.projectMode!=="workspace"&&n.indexer?.typescript?.pnpmWorkspaces===!0,typescriptProjectMode:n.indexer?.typescript?.projectMode??"single",typescriptProjects:$M(n.indexer?.typescript?.projects),files:Mn(e)}}function $M(e){return[...new Set((e??[]).map(t=>t.trim()).filter(Boolean))].sort((t,n)=>t.localeCompare(n))}import{execFileSync as tj}from"child_process";import{createRequire as AM}from"module";var MM=AM(import.meta.url);function hh(e,t=[]){let n=jM(),r=Pa(e,t),i=r[0];return n?r.length===0?{available:!1,dependencyAvailable:n,reason:"no tsconfig found"}:{available:!0,dependencyAvailable:n,tsconfigPath:i,tsconfigPaths:r}:{available:!1,dependencyAvailable:n,tsconfigPath:i,tsconfigPaths:r,reason:"ts-morph is not installed"}}function jM(){try{return MM.resolve("ts-morph"),!0}catch{return!1}}import{execFileSync as Fr,spawnSync as xh}from"child_process";import{existsSync as _t,mkdtempSync as Ch,readFileSync as OM,readdirSync as BM,rmSync as vh,symlinkSync as HM,writeFileSync as VM}from"fs";import{tmpdir as Rh}from"os";import{join as Ke}from"path";var qM=3e5,UM=12;function Ml(e,t,n={}){let r=jl(e);if(r.length===0)return{checkers:[],uncoveredFiles:[],baselineErrors:0,dirtyOverlap:[],batches:[]};let i=WM(t,r),o=n.timeoutMs??qM,s=JM(e,t),a=Ch(Ke(Rh(),"scip-cleanup-verify-")),c=[],l=new Set;try{Fr("git",["-C",e,"worktree","add","--detach","--force",a,"HEAD"],{stdio:"ignore"}),KM(e,a);for(let u of r)for(let d of Sh(u,a,o).errorKeys)l.add(d);for(let u of t.batches){wh(a,u);let d=[];for(let m of r){let f=Sh(m,a,o);d.push(...f.rawErrors.filter(h=>!l.has(kh(h))))}if(d.length===0)c.push({depth:u.depth,status:"verified"});else{c.push({depth:u.depth,status:"failed",errors:d.slice(0,UM)});break}}}finally{try{Fr("git",["-C",e,"worktree","remove","--force",a],{stdio:"ignore"})}catch{vh(a,{recursive:!0,force:!0})}}return{checkers:r.map(u=>u.label),uncoveredFiles:i,baselineErrors:l.size,dirtyOverlap:s,batches:c}}function WM(e,t){let n=new Set(t.flatMap(i=>i.coversExtensions));return[...new Set(e.batches.flatMap(i=>i.entries.map(o=>o.file)))].filter(i=>{let o=i.slice(i.lastIndexOf("."));return!n.has(o)}).sort()}function kh(e){return e.replace(/\(\d+,\d+\)|:\d+(?::\d+)?/g,"").trim()}var yh=[".ts",".tsx",".mts",".cts",".js",".jsx",".vue"];function jl(e){let t=[];if(_t(Ke(e,"tsconfig.json"))){let n=Ke(e,"node_modules",".bin","tsc");t.push(_t(n)?{label:"tsc --noEmit",binary:n,args:["--noEmit"],coversExtensions:yh}:{label:"npx tsc --noEmit",binary:"npx",args:["tsc","--noEmit"],coversExtensions:yh})}if(_t(Ke(e,"go.mod"))&&t.push({label:"go build ./...",binary:"go",args:["build","./..."],coversExtensions:[".go"]}),["pyproject.toml","setup.py","requirements.txt"].some(n=>_t(Ke(e,n)))){let n=GM();n&&t.push(n)}for(let n of zM(e))t.push({label:`cargo check --quiet --manifest-path ${n}`,binary:"cargo",args:["check","--quiet","--manifest-path",n],coversExtensions:[".rs"],env:{...process.env,CARGO_TARGET_DIR:Ke(e,n,"..","target")}});return t}function GM(){return bh("ruff")?{label:"ruff check --select E9,F821,F822",binary:"ruff",args:["check","--quiet","--select","E9,F821,F822","."],coversExtensions:[".py"]}:bh("python3")?{label:"python3 -m compileall (syntax only)",binary:"python3",args:["-m","compileall","-q","."],coversExtensions:[".py"]}:null}function bh(e){try{return xh(e,["--version"],{stdio:"ignore",timeout:1e4}).status===0}catch{return!1}}function zM(e){let t=[];if(_t(Ke(e,"Cargo.toml")))return t.push("Cargo.toml"),t;let n;try{n=BM(e)}catch{return t}for(let r of n)r==="node_modules"||r.startsWith(".")||_t(Ke(e,r,"Cargo.toml"))&&t.push(`${r}/Cargo.toml`);return t}function JM(e,t){let n;try{n=Fr("git",["-C",e,"status","--porcelain"],{encoding:"utf-8"})}catch{return[]}let r=new Set(n.split(`
803
+ `).map(o=>o.slice(3).trim()).filter(o=>o!==""));return[...new Set(t.batches.flatMap(o=>o.entries.map(s=>s.file)))].filter(o=>r.has(o)).sort()}function KM(e,t){for(let n of["node_modules"]){let r=Ke(e,n),i=Ke(t,n);if(_t(r)&&!_t(i))try{HM(r,i,"junction")}catch{}}}function wh(e,t){let n=new Map;for(let r of t.entries){let i=n.get(r.file)??[];i.push({start:r.startLine,end:r.endLine}),n.set(r.file,i)}for(let[r,i]of n){let o=Ke(e,r);_t(o)&&VM(o,XM(OM(o,"utf-8"),i,{rust:r.endsWith(".rs")}))}}function Ol(e,t){for(let n of t)wh(e,n)}function Lh(e,t){let n=Ch(Ke(Rh(),"scip-cleanup-patch-"));try{return Fr("git",["-C",e,"worktree","add","--detach","--force",n,"HEAD"],{stdio:"ignore"}),Ol(n,t),Fr("git",["-C",n,"diff","--binary"],{encoding:"utf-8",maxBuffer:32*1024*1024})}finally{try{Fr("git",["-C",e,"worktree","remove","--force",n],{stdio:"ignore"})}catch{vh(n,{recursive:!0,force:!0})}}}function Bl(e,t={}){if(t.all)return[...e.batches];if(t.batch!==void 0){let n=e.batches.find(r=>r.depth===t.batch);return n?[n]:[]}return[...e.batches]}function Hl(e,t,n={}){let r=[];e.checkers.length===0&&r.push("No project checker was detected, so no deletion patch is compiler-verified."),e.uncoveredFiles.length>0&&r.push(`No detected checker covers: ${e.uncoveredFiles.join(", ")}.`),!n.allowDirty&&e.dirtyOverlap.length>0&&r.push(`Plan files are dirty in the working tree: ${e.dirtyOverlap.join(", ")}.`);let i=new Set(e.batches.filter(o=>o.status==="verified").map(o=>o.depth));for(let o of t)i.has(o.depth)||r.push(`Batch ${o.depth} is not compiler-verified.`);return r}function XM(e,t,n={}){let r=e.split(`
804
+ `),i=(n.rust===!0?QM(e):mn(e)).split(`
805
+ `),o=new Set;for(let s of t){let a=YM(r,s.start),c=ej(i,a,Math.min(s.end,r.length-1));for(let l=a;l<=c&&l<r.length;l++)o.add(l)}return r.filter((s,a)=>!o.has(a)).join(`
806
+ `)}function QM(e){return e.replace(/\/\/.*$/gm,t=>t.replace(/[^\r\n]/g," ")).replace(/\/\*[\s\S]*?\*\//g,t=>t.replace(/[^\r\n]/g," ")).replace(/"(?:\\.|[^"\\\r\n])*"/g,t=>t.replace(/[^\r\n]/g," "))}function YM(e,t){let n=t;for(;n>0;){let r=(e[n-1]??"").trim();if(/^(?:\/\/\/|\/\/!|#\[|#!\[|\/\*\*|\*|\*\/|@\w)/.test(r))n-=1;else break}return n}var ZM=200;function ej(e,t,n){let r=0;for(let i=t;i<e.length;i++){for(let o of e[i]??"")o==="("||o==="["||o==="{"?r+=1:(o===")"||o==="]"||o==="}")&&(r-=1);if(i>=n&&r<=0)return i;if(i-n>ZM)break}return n}function Sh(e,t,n){let r=xh(e.binary,e.args,{cwd:t,encoding:"utf-8",timeout:n,env:e.env??process.env,maxBuffer:33554432});if(r.status===0)return{ok:!0,rawErrors:[],errorKeys:new Set};let o=`${r.stdout??""}
807
+ ${r.stderr??""}`.split(`
808
+ `).map(s=>s.trim()).filter(s=>/\berror\b/i.test(s));return r.error&&o.length===0&&o.push(String(r.error)),{ok:!1,rawErrors:o,errorKeys:new Set(o.map(kh))}}var Ih={typescript:[".ts",".tsx",".mts",".cts"],javascript:[".js",".jsx",".vue"],java:[".java"],scala:[".scala"],kotlin:[".kt",".kts"],rust:[".rs"],python:[".py",".pyi"],ruby:[".rb"],go:[".go"],cpp:[".cpp",".cc",".cxx",".hpp",".hh",".hxx"],c:[".c",".h"],csharp:[".cs"],vb:[".vb"],dart:[".dart"],php:[".php"]},nj={typescript:{status:"available",reason:"AST/source fallback covers TypeScript imports, references, and source-backed evidence."},javascript:{status:"available",reason:"AST/source fallback covers JavaScript, JSX, and Vue script evidence."},java:{status:"available",reason:"AST-dispatched source fallback covers Java imports."},scala:{status:"available",reason:"AST-dispatched source fallback covers Scala imports."},kotlin:{status:"available",reason:"AST-dispatched source fallback covers Kotlin imports."},rust:{status:"available",reason:"AST/source fallback covers Rust imports and exports."},python:{status:"available",reason:"AST/source fallback covers Python imports."},ruby:{status:"available",reason:"AST/source fallback covers Ruby imports."},go:{status:"unavailable",reason:"No Go source-fallback adapter is registered; Go relies on SCIP graph facts."},cpp:{status:"available",reason:"AST/source fallback covers C++ includes."},c:{status:"available",reason:"AST/source fallback covers C includes."},csharp:{status:"available",reason:"AST-dispatched source fallback covers C# imports."},vb:{status:"available",reason:"AST-dispatched source fallback covers Visual Basic imports."},dart:{status:"partial",reason:"Dart source fallback is regex-only for imports and exports."},php:{status:"available",reason:"AST/source fallback covers PHP imports."}};function Ct(e,t){let n=t.languages??Tt(e),r=n.map(s=>{let a=Ds(An(s),e);return{...a,language:s,resolvedBinary:a.resolvedBinary??void 0}}),i=n.includes("typescript")?{language:"typescript",...hh(e,t.semantic?.typescript?.tsconfigs)}:void 0,o=jl(e).map(s=>({label:s.label,coversExtensions:s.coversExtensions}));return{languages:n,indexers:r,semantic:i,checkers:o,gitAvailable:sj(e)}}function Bn(e){let t=e.indexers.filter(i=>i.runnable).length,n=e.languages.length===0||t===0?"unavailable":t===e.indexers.length?"available":"partial",r=e.semantic?e.semantic.available?"available":"partial":"unavailable";return{languages:e.languages,matrix:e.languages.map(i=>rj(e,i)),capabilities:[{id:"indexing",label:"SCIP indexing",status:n,evidence:"graph-fact",reason:n==="available"?"All detected/configured language indexers are runnable.":`${t}/${e.indexers.length} detected/configured language indexers are runnable.`},{id:"semantic-typescript",label:"TypeScript semantic provider",status:r,evidence:"semantic",reason:e.semantic?e.semantic.available?"ts-morph can load the configured TypeScript project.":e.semantic.reason??"TypeScript semantic checks will fall back to SCIP/source evidence.":"TypeScript is not detected/configured for this project."},{id:"heuristic-detectors",label:"Heuristic cleanup detectors",status:n==="unavailable"?"unavailable":"available",evidence:"heuristic",reason:n==="unavailable"?"Heuristic detectors need an indexed code graph.":"Similarity, migration, wrapper, stale-abstraction, and doc-drift detectors can run over the index."},{id:"cleanup-verification",label:"Compiler cleanup verification",status:e.checkers.length>0?"available":"unavailable",evidence:"compiler",reason:e.checkers.length>0?e.checkers.map(i=>i.label).join(", "):"No project checker was detected for cleanup-plan --verify."},{id:"diff-gate",label:"Git diff gate",status:e.gitAvailable&&n!=="unavailable"?"available":"unavailable",evidence:"git",reason:e.gitAvailable?"Git diff data is available for changed-file gates.":"Git is unavailable or the project root is not a git worktree."}]}}function rj(e,t){let n=e.indexers.find(a=>a.language===t),r=n?.runnable?"available":"unavailable",i=nj[t],o=t==="typescript"?ij(e):{id:"semantic",label:"Semantic provider",status:"unavailable",evidence:"semantic",reason:`No semantic provider is registered for ${t}; commands use graph and source evidence instead.`},s=oj(e,t);return{language:t,indexing:{id:"indexing",label:"SCIP indexing",status:r,evidence:"graph-fact",reason:n?.runnable?`${n.binaryLabel} is runnable${n.resolvedBinary?` at ${n.resolvedBinary}`:""}.`:n?.note??`${t} indexing is not runnable in this project.`},sourceFacts:{id:"source-facts",label:"Source fallback",status:r==="unavailable"?"unavailable":i.status,evidence:"heuristic",reason:r==="unavailable"?"Source fallback needs indexed documents before it can attach evidence.":i.reason},semantic:o,detectors:{id:"detectors",label:"Cleanup detectors",status:r==="unavailable"?"unavailable":"available",evidence:"heuristic",reason:r==="unavailable"?"Cleanup detectors need an indexed graph for this language.":"Graph-backed cleanup detectors can analyze this language; source and semantic precision depends on the rows above."},cleanupVerification:{id:"cleanup-verification",label:"Cleanup verification",status:s.length>0?"available":"unavailable",evidence:"compiler",reason:s.length>0?s.map(a=>a.label).join(", "):`No detected checker covers ${Ih[t].join(", ")} files.`}}}function ij(e){return e.semantic?{id:"semantic",label:"Semantic provider",status:e.semantic.available?"available":"partial",evidence:"semantic",reason:e.semantic.available?"ts-morph can load the configured TypeScript project.":e.semantic.reason??"TypeScript semantic checks fall back to SCIP/source evidence."}:{id:"semantic",label:"Semantic provider",status:"unavailable",evidence:"semantic",reason:"TypeScript is not detected/configured for this project."}}function oj(e,t){let n=new Set(Ih[t]);return e.checkers.filter(r=>r.coversExtensions.some(i=>n.has(i)))}function sj(e){try{return tj("git",["rev-parse","--is-inside-work-tree"],{cwd:e,stdio:"ignore",timeout:1e4}),!0}catch{return!1}}import{chmodSync as aj,existsSync as _s,readFileSync as Fs,writeFileSync as Nh}from"fs";import{join as Bi}from"path";var Oi="<!-- scip-query:agent-setup:begin -->",Vl="<!-- scip-query:agent-setup:end -->",Dh="# scip-query:agent-setup";function Hi(){if(process.stdin.isTTY)return"";try{return Fs(0,"utf-8")}catch{return""}}function $s(e){if(!e.trim())return!1;try{return JSON.parse(e).stop_hook_active===!0}catch{return!1}}function Vi(e){let t=e.rootCauseGroups?.length??e.findings.length,n=[`scip-query diff-gate found ${e.findings.length} issue(s) in ${t} root-cause group(s) in this diff \u2014 fix or knowingly accept them before finishing:`],r=e.rootCauseGroups?.filter(i=>i.count>1)??[];for(let i of r)n.push(`- group [${i.check}] ${i.count} finding(s): ${i.message}`),n.push(` -> ${i.remediation}`);for(let i of e.findings)n.push(`- [${i.check}] ${i.message}`),n.push(` -> ${i.remediation}`);return n.join(`
809
+ `)}function As(e,t={}){let n={written:[],unchanged:[],skipped:[]};return cj(e,n),t.gitHook&&lj(e,n),n}function cj(e,t){let n=[Oi,"## scip-query","","This repo is indexed by scip-query (compiler-resolved code intelligence).","","- Unsure how to explore, plan, verify, or clean up here: invoke the `scip-query` skill \u2014 it routes to the right specialist skill.","- For non-trivial implementation requests: plan first (`concrete-plan` skill, anchored by `scip-query plan-context <target>`), then implement.","- After the change, run the check matching what you did: extracted a helper -> `scip-query incomplete-migration`; new helper -> `scip-query recent-duplicates`; new params -> `scip-query unused-params`; new wrapper -> `scip-query wrapper-candidates`; schema/config change -> `scip-query co-change <file>`; deleted code -> `scip-query cleanup-plan --verify`.","- Before declaring the work done: `scip-query reindex && scip-query diff-gate` \u2014 fix findings or state why each is accepted.",Vl].join(`
810
+ `);Ph(e,"AGENTS.md",n,t);let r=_s(Bi(e,"CLAUDE.md"))?Fs(Bi(e,"CLAUDE.md"),"utf-8"):"";if(r.includes("@AGENTS.md")&&!r.includes(Oi)){t.unchanged.push("CLAUDE.md");return}let i=[Oi,"@AGENTS.md",Vl].join(`
811
+ `);Ph(e,"CLAUDE.md",i,t)}function Ph(e,t,n,r){let i=Bi(e,t),o=_s(i)?Fs(i,"utf-8"):"",s;if(o.includes(Oi)){let a=new RegExp(`${Oi}[\\s\\S]*?${Vl}`);s=o.replace(a,n)}else s=o.length>0?`${o.replace(/\n*$/,`
812
+
813
+ `)}${n}
814
+ `:`${n}
815
+ `;s===o?r.unchanged.push(t):(Nh(i,s),r.written.push(t))}function lj(e,t){let n=Bi(e,".git","hooks");if(!_s(n)){t.skipped.push({target:".git/hooks/pre-commit",reason:"no .git/hooks directory (not a git repository?)"});return}let r=Bi(n,"pre-commit"),i=["#!/bin/sh",Dh,"scip-query diff-gate || {",' echo "scip-query diff-gate failed \u2014 fix findings or commit with --no-verify to knowingly accept." >&2'," exit 1","}",""].join(`
816
+ `);if(_s(r)){let o=Fs(r,"utf-8");if(o.includes(Dh)){if(o===i){t.unchanged.push(".git/hooks/pre-commit");return}}else{t.skipped.push({target:".git/hooks/pre-commit",reason:"a pre-commit hook already exists \u2014 add `scip-query diff-gate` to it manually"});return}}Nh(r,i),aj(r,493),t.written.push(".git/hooks/pre-commit")}var Fh="SCIP_QUERY_SKIP_HOOK_INSTALL",ql="SCIP_QUERY_STOP_HOOK_MODE",gj="scip-query hook-",hj="scip-query diff-gate --hook";function Ms(e,t={}){let n=$h(),r=t.env??process.env;return bj(r)?(n.skipped.push({target:"project agent hooks",reason:`${Fh}=1`}),n):(Eh({provider:"codex",rootDir:$r(e,".codex"),configPath:$r(e,".codex","hooks.json"),label:".codex/hooks.json",createRoot:!0,result:n}),Eh({provider:"claude",rootDir:$r(e,".claude"),configPath:$r(e,".claude","settings.json"),label:".claude/settings.json",createRoot:!0,result:n}),t.removeLegacyUserHooks!==!1&&yj({homeDir:t.homeDir,result:n}),n)}function yj(e={}){let t=e.result??$h(),n=e.homeDir??pj();return Th({configPath:$r(n,".codex","hooks.json"),label:"Codex/hooks.json",result:t}),Th({configPath:$r(n,".claude","settings.json"),label:"Claude/settings.json",result:t}),t}function $h(){return{installed:[],updated:[],unchanged:[],removed:[],skipped:[]}}function bj(e=process.env){let t=e[Fh];return t==="1"||t?.toLowerCase()==="true"||t?.toLowerCase()==="yes"}function Sj(e=process.env){let t=e[ql]?.toLowerCase();return t==="block"||t==="blocking"||t==="1"||t==="true"||t==="yes"?"block":t==="feedback"||t==="continue"?"feedback":"warn"}function Eh(e){if(!e.createRoot&&!qi(e.rootDir))return;let t=Ah(e.configPath,e.label,e.result);if(!t)return;let n=xj(t,e.provider);if(JSON.stringify(n)===JSON.stringify(t)){e.result.unchanged.push(e.label);return}let r=qi(e.configPath);dj(fj(e.configPath),{recursive:!0}),_h(e.configPath,`${JSON.stringify(n,null,2)}
817
+ `),e.result[r?"updated":"installed"].push(e.label)}function Th(e){if(!qi(e.configPath))return;let t=Ah(e.configPath,e.label,e.result);if(!t)return;let n=t.hooks&&typeof t.hooks=="object"&&!Array.isArray(t.hooks)?t.hooks:{},r={...n},i=!1;for(let s of["SessionStart","UserPromptSubmit","Stop"]){let a=Array.isArray(n[s])?n[s]:[],c=Mh(a);(c.length!==a.length||JSON.stringify(c)!==JSON.stringify(a))&&(i=!0,c.length>0?r[s]=c:delete r[s])}if(!i)return;let o={...t};Object.keys(r).length>0?o.hooks=r:delete o.hooks,_h(e.configPath,`${JSON.stringify(o,null,2)}
818
+ `),e.result.removed.push(e.label)}function Ah(e,t,n){if(!qi(e))return{};try{let r=JSON.parse(mj(e,"utf-8"));if(!r||typeof r!="object"||Array.isArray(r)){n.skipped.push({target:t,reason:"existing hook config is not a JSON object"});return}return r}catch(r){n.skipped.push({target:t,reason:`could not parse existing hook config: ${r instanceof Error?r.message:String(r)}`});return}}function xj(e,t){let n=e.hooks&&typeof e.hooks=="object"&&!Array.isArray(e.hooks)?e.hooks:{},r={...e,hooks:{...n}};for(let i of["SessionStart","UserPromptSubmit","Stop"]){let o=Array.isArray(n[i])?n[i]:[];r.hooks[i]=[...Mh(o),vj(t,i)]}return r}function Mh(e){return e.map(t=>({...t,hooks:Array.isArray(t.hooks)?t.hooks.filter(n=>!Cj(n)):[]})).filter(t=>t.hooks.length>0)}function Cj(e){if(!e||typeof e!="object")return!1;let t=e.command;return typeof t=="string"&&(t.startsWith(gj)||t===hj)}function vj(e,t){return t==="SessionStart"?{matcher:"startup|resume|clear|compact",hooks:[{type:"command",command:"scip-query hook-context",timeout:60,statusMessage:"Refreshing scip-query context"}]}:t==="UserPromptSubmit"?{hooks:[{type:"command",command:"scip-query hook-context",timeout:60,statusMessage:"Checking scip-query freshness"}]}:{hooks:[{type:"command",command:"scip-query hook-stop",timeout:30,statusMessage:"Running scip-query diff gate"}]}}async function jh(){let e=await wj(Hi());e&&console.log(JSON.stringify(e))}function Oh(){let e=Hi();if($s(e))return;let t=Bh(e),n=Hh(t);!n||!qi(n.paths.dbPath)||Ej(n,r=>{let i=wi(r,{minTogether:6,skip:[]});i.findings.length!==0&&console.log(JSON.stringify(Rj(i,Sj())))})}function Rj(e,t="warn"){let n=Vi(e),r=kj(e);return t==="block"?{decision:"block",reason:n}:t==="feedback"?{hookSpecificOutput:{hookEventName:"Stop",additionalContext:`${r}
819
+
820
+ This is non-error Stop hook feedback. Fix true findings, or explain why a finding is intentionally accepted before finishing.`}}:{systemMessage:`${r}
821
+
822
+ Stop hook allowed this turn to finish. Review these findings when relevant. Set ${ql}=feedback to ask the agent to continue without a hook error, or ${ql}=block to enforce the gate.`}}function kj(e){return Vi(e).replace(" \u2014 fix or knowingly accept them before finishing:"," \u2014 review these findings when relevant:")}async function wj(e){let t=Bh(e),n=Pj(t);if(n!=="SessionStart"&&n!=="UserPromptSubmit")return;let r=Hh(t);if(!r)return;let i=await Lj(r),o=n==="SessionStart"?Ij(r.projectRoot,r.config,r.paths):Dj(String(t.prompt??"")),s=[i,o].filter(a=>!!a?.trim()).join(`
823
+ `);if(s.trim())return{hookSpecificOutput:{hookEventName:n,additionalContext:s}}}async function Lj(e){if(Dr(e.config).autoRefresh===!1)return;let n=On(e.projectRoot,e.config,e.paths);if(n.state!=="fresh")try{let r=await tn({projectRoot:e.projectRoot,languages:e.config.languages,outputScip:e.paths.indexPath,outputDb:e.paths.dbPath,pnpmWorkspaces:e.config.indexer?.typescript?.pnpmWorkspaces,typescriptProjectMode:e.config.indexer?.typescript?.projectMode,typescriptProjects:e.config.indexer?.typescript?.projects,skipIfUnchanged:!0,allowPartial:!0,indexerConcurrency:e.config.indexerConcurrency,trigger:{kind:"manual-cli",detail:"agent hook auto-refresh"},onStatus:()=>{}});return`scip-query auto-refresh: ${r.reused?"reused":"indexed"} ${r.languages.join(", ")} because the index was ${n.state}.`}catch(r){let i=r instanceof Error?r.message:String(r);return`scip-query auto-refresh skipped: index is ${n.state}, but refresh failed: ${i}`}}function Ij(e,t,n){let r=On(e,t,n),i=Ct(e,t),s=Bn(i).capabilities.filter(c=>c.status!=="available").map(c=>c.label),a=i.languages.length>0?i.languages.join(", "):"none detected";return[`scip-query is available in this repository. Index state: ${r.state} (${r.reason})`,r.lastRefresh?`Last refresh: ${r.lastRefresh.result} by ${r.lastRefresh.trigger.kind} at ${r.lastRefresh.completedAt}.`:void 0,`Detected languages: ${a}.`,s.length>0?`Unavailable or partial capabilities: ${s.join(", ")}.`:"Core capabilities are available.","Use the scip-query router skill when exploring, planning, verifying, debugging, diagramming, or cleaning up code.","For non-trivial edits, plan with concrete-plan anchored by `scip-query plan-context <target>`, then verify with scip-verify."].filter(c=>c!==void 0).join(`
824
+ `)}function Dj(e){let t=e.toLowerCase(),n=[];return Hn(t,["debug","bug","regression","failing","fails","error","wrong"])&&n.push("Debug or bug request: use scip-debug. For issue-quality triage, use scip-triage-issue."),Hn(t,["explain","how does","walk me through","trace","understand"])&&n.push("Exploration request: use scip-explore before answering behavioral questions."),Hn(t,["diagram","visualize","visualise","flow map","architecture map"])&&n.push("Diagram request: use scip-diagram and back every node and edge with scip-query evidence."),Hn(t,["implement","build","change","refactor","fix","add ","update "])&&n.push("Implementation request: plan first with concrete-plan and `scip-query plan-context <target>`, then verify with scip-verify."),Hn(t,["review","maintainability","architecture","boundary"])&&n.push("Review request: use scip-maintainability, scip-api-impact, or scip-verify depending on whether this is architecture, API impact, or post-change verification."),Hn(t,["setup","adopt","install","bootstrap"])&&n.push("Setup request: use scip-adoption or scip-query-setup; keep CI setup out of the default path."),Hn(t,["health","score","dossier","cleanup","dead code","duplicate","debloat","perfect code","as high as","maximize","maximise"])&&n.push("Health or cleanup request: use scip-health-audit before editing; use scip-health-improve when the user wants the score raised as high as reasonably possible."),n.length===0?"":["scip-query routing reminder:",...n].join(`
825
+ `)}function Hn(e,t){return t.some(n=>e.includes(n))}function Bh(e){if(!e.trim())return{};try{let t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return{}}}function Pj(e){let t=e.hook_event_name??e.hookEventName;return typeof t=="string"?t:void 0}function Hh(e){let t=typeof e.cwd=="string"?e.cwd:process.cwd(),n=Nj(t);if(n)try{let r=Pe(n),i=bt(n,r);return{projectRoot:n,config:r,paths:i}}catch{return}}function Nj(e){try{return uj("git",["-C",e,"rev-parse","--show-toplevel"],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch{return}}function Ej(e,t){let n={dbPath:e.paths.dbPath,indexPath:e.paths.indexPath,projectRoot:e.projectRoot,entryRoots:e.config.entryRoots,semantic:e.config.semantic,suppressions:e.config.suppressions,declaredCouplings:e.config.declaredCouplings,locality:e.config.locality},r=new Lr(n,Zt(e.projectRoot));try{return t(r)}finally{r.close()}}import{existsSync as Ul,mkdirSync as Tj,symlinkSync as _j,readlinkSync as Fj,unlinkSync as $j}from"fs";import{join as Ui,dirname as Vh,resolve as Wl}from"path";import{homedir as Gl,platform as Aj}from"os";import{fileURLToPath as Mj}from"url";var jj=Aj()==="win32",zl=["scip-query","scip-query-setup","scip-adoption","scip-health-audit","scip-health-improve","scip-hyper-optimization","scip-api-impact","concrete-plan","scip-ai-cleanup","scip-debug","scip-explore","scip-triage-issue","scip-diagram","scip-debloat","scip-doc-reconcile","scip-directory-architecture","scip-maintainability","scip-react-maintainability","scip-vue-maintainability","scip-verify","scip-language-playbook"];function js(e={}){let t=e.quiet?()=>{}:console.log,n=Mj(import.meta.url),r=Wl(Vh(n),"..","skills"),i=[Ui(Gl(),".claude","skills"),Ui(Gl(),".codex","skills"),Ui(Gl(),".agents","skills")],o={installed:[],skipped:[],alreadyLinked:[]};for(let s of i){let a=Vh(s);if(!Ul(a))continue;Tj(s,{recursive:!0});let c=Oj(s);for(let l of zl){let u=Ui(r,l),d=Ui(s,l);if(!Ul(u)){o.skipped.push(`${c}/${l}`);continue}if(Ul(d)){try{let m=Fj(d);if(Wl(m)===Wl(u)){o.alreadyLinked.push(`${c}/${l}`),t(` ok: ${l} \u2192 ${c} (already linked)`);continue}}catch{o.skipped.push(`${c}/${l}`),t(` skip: ${l} \u2192 ${c} (exists, not a symlink)`);continue}$j(d)}_j(u,d,jj?"junction":"dir"),o.installed.push(`${c}/${l}`),t(` done: ${l} \u2192 ${c}`)}}return o}function Oj(e){return e.includes(".codex")?"Codex":e.includes(".agents")?"Agents":"Claude"}import{spawnSync as cy}from"child_process";import{existsSync as Mr,renameSync as sy,rmSync as NO}from"fs";import{dirname as EO,extname as TO}from"path";import{execFileSync as Bj,fork as Hj}from"child_process";import{statSync as Vj,watch as qj}from"fs";import{join as Uj,relative as Wj}from"path";import Gj from"ignore";var Os=class{projectRoot;config;watchConfig;languages;pnpmWorkspaces;typescriptProjectMode;typescriptProjects;indexerConcurrency;onStatus;onReindexComplete;onError;status={state:"idle"};debounceTimer=null;cooldownTimer=null;dirty=!1;changedFiles=0;pendingTrigger=null;reindexInFlight=!1;lastReindexEnd=0;fsWatchers=[];gitPollTimer=null;lastGitState=null;gitignoreFilter;extraIgnore;stopped=!1;constructor(t){this.projectRoot=t.projectRoot,this.config=t.config,this.watchConfig=Dr(t.config),this.languages=t.languages,this.pnpmWorkspaces=t.config.indexer?.typescript?.pnpmWorkspaces??!1,this.typescriptProjectMode=t.config.indexer?.typescript?.projectMode,this.typescriptProjects=t.config.indexer?.typescript?.projects,this.indexerConcurrency=t.config.indexerConcurrency,this.onStatus=t.onStatus??(()=>{}),this.onReindexComplete=t.onReindexComplete??(()=>{}),this.onError=t.onError??(n=>console.error(n.message)),this.gitignoreFilter=Zt(t.projectRoot),this.extraIgnore=Gj(),this.watchConfig.ignore.length>0&&this.extraIgnore.add(this.watchConfig.ignore)}start(){this.stopped=!1,this.setStatus({state:"idle"}),this.startGitStatePolling();try{let t=qj(this.projectRoot,{recursive:!0},(n,r)=>{r&&!this.stopped&&this.handleFileChange(r)});this.fsWatchers.push(t)}catch{this.onError(new Error("Failed to start file watcher. On Linux, you may need to increase inotify limits: sysctl -w fs.inotify.max_user_watches=524288"))}}stop(){this.stopped=!0;for(let t of this.fsWatchers)t.close();this.fsWatchers=[],this.clearDebounceTimer(),this.clearCooldownTimer(),this.clearGitPollTimer(),this.setStatus({state:"idle"})}handleFileChange(t){let n=Wj(this.projectRoot,Uj(this.projectRoot,t));n===".git"||n.startsWith(".git/")||this.gitignoreFilter.isIgnored(n)||this.extraIgnore.ignores(n)||t.endsWith("index.db")||t.endsWith("index.scip")||t.endsWith("index.db.tmp")||this.scheduleReindex({kind:"watch-source",detail:n})}scheduleReindex(t){if(this.pendingTrigger=zj(this.pendingTrigger,t),this.changedFiles++,this.reindexInFlight){this.dirty=!0,this.setStatus({state:"indexing",startedAt:this.status.startedAt});return}if(this.status.state==="cooldown"){this.dirty=!0,this.setStatus({state:"cooldown",until:this.status.until,dirty:!0});return}this.clearDebounceTimer();let n=Date.now()+this.watchConfig.debounceMs;this.setStatus({state:"waiting",changedFiles:this.changedFiles,reindexAt:n}),this.debounceTimer=setTimeout(()=>{this.debounceTimer=null,this.triggerReindex()},this.watchConfig.debounceMs)}triggerReindex(){if(this.reindexInFlight||this.stopped)return;let t=Date.now()-this.lastReindexEnd;if(this.lastReindexEnd>0&&t<this.watchConfig.cooldownMs){let i=this.watchConfig.cooldownMs-t;this.dirty=!0;let o=Date.now()+i;this.setStatus({state:"cooldown",until:o,dirty:!0}),this.cooldownTimer=setTimeout(()=>{this.cooldownTimer=null,this.dirty&&!this.stopped&&(this.dirty=!1,this.triggerReindex())},i);return}this.reindexInFlight=!0,this.dirty=!1,this.changedFiles=0;let n=this.pendingTrigger??{kind:"watch-source"};this.pendingTrigger=null;let r=Date.now();this.setStatus({state:"indexing",startedAt:r}),this.runReindex(n).then(i=>{if(this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onReindexComplete(i),this.dirty&&!this.stopped){let o=Date.now()+this.watchConfig.cooldownMs;this.setStatus({state:"cooldown",until:o,dirty:!0}),this.cooldownTimer=setTimeout(()=>{this.cooldownTimer=null,this.dirty&&!this.stopped?(this.dirty=!1,this.triggerReindex()):this.setStatus({state:"idle"})},this.watchConfig.cooldownMs)}else this.setStatus({state:"idle"})}).catch(i=>{this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onError(i instanceof Error?i:new Error(String(i))),this.setStatus({state:"idle"})})}runReindex(t){return new Promise((n,r)=>{let i=Date.now(),o=Pe(this.projectRoot),s=Object.keys(o).length>0?o:this.config,a=bt(this.projectRoot,s),c=s.indexer?.typescript,l=Hj(new URL("./reindex-worker.js",import.meta.url).pathname,[],{detached:!0,env:{...process.env,SCIP_REINDEX_PROJECT_ROOT:this.projectRoot,SCIP_REINDEX_OUTPUT_SCIP:a.indexPath,SCIP_REINDEX_OUTPUT_DB:a.dbPath,SCIP_REINDEX_LANGUAGES:(s.languages??this.languages)?.join(",")??"",SCIP_REINDEX_INDEXER_CONCURRENCY:String(s.indexerConcurrency??this.indexerConcurrency??""),SCIP_REINDEX_PNPM_WORKSPACES:c?.pnpmWorkspaces??this.pnpmWorkspaces?"1":"",SCIP_REINDEX_TYPESCRIPT_CONFIG:JSON.stringify({projectMode:c?.projectMode??this.typescriptProjectMode,projects:c?.projects??this.typescriptProjects??[]}),SCIP_REINDEX_TRIGGER_KIND:t.kind,SCIP_REINDEX_TRIGGER_DETAIL:t.detail??""},stdio:"pipe"});l.on("exit",u=>{u===0?n(Date.now()-i):r(new Error(`Reindex worker exited with code ${u}`))}),l.on("error",r)})}setStatus(t){this.status=t,this.onStatus(t)}clearDebounceTimer(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}clearCooldownTimer(){this.cooldownTimer&&(clearTimeout(this.cooldownTimer),this.cooldownTimer=null)}startGitStatePolling(){this.lastGitState=this.readGitState(),this.lastGitState&&(this.gitPollTimer=setInterval(()=>this.pollGitState(),this.watchConfig.gitPollMs),this.gitPollTimer.unref?.())}pollGitState(){let t=this.lastGitState,n=this.readGitState();if(!t||!n||this.stopped){this.lastGitState=n;return}this.lastGitState=n;let r=t.head!==n.head,i=t.indexPath!==n.indexPath||t.indexMtimeMs!==n.indexMtimeMs||t.indexSize!==n.indexSize;r&&i?this.scheduleReindex({kind:"watch-git-state",detail:"HEAD and index changed"}):r?this.scheduleReindex({kind:"watch-git-head",detail:"HEAD changed"}):i&&this.scheduleReindex({kind:"watch-git-index",detail:n.indexPath??"index changed"})}readGitState(){let t=qh(this.projectRoot,["rev-parse","--git-path","index"]);if(!t)return null;let n={head:qh(this.projectRoot,["rev-parse","--verify","HEAD"]),indexPath:t};try{let r=Vj(t);n.indexMtimeMs=r.mtimeMs,n.indexSize=r.size}catch{n.indexMtimeMs=void 0,n.indexSize=void 0}return n}clearGitPollTimer(){this.gitPollTimer&&(clearInterval(this.gitPollTimer),this.gitPollTimer=null)}};function qh(e,t){try{return Bj("git",["-C",e,...t],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch{return}}function zj(e,t){return e?e.kind===t.kind?e.detail===t.detail?e:{kind:e.kind,detail:"multiple changes"}:{kind:"watch-git-state",detail:`${e.kind}, ${t.kind}`}:t}import{existsSync as oO}from"fs";import{existsSync as Jj,mkdirSync as Kj,readFileSync as Xj,writeFileSync as Qj}from"fs";import{dirname as Yj,join as Uh}from"path";function Gh(e){let t={markdownPath:Uh(e.projectRoot,"docs","scip-query","health-dossier.md"),jsonPath:Uh(e.projectRoot,"docs","scip-query","health-dossier.json"),status:"written",written:[],unchanged:[]},n={...e,healthDossier:t};try{return Wh(t.markdownPath,Zj(n),t),Wh(t.jsonPath,`${JSON.stringify(n,null,2)}
826
+ `,t),t}catch(r){return{...t,status:"failed",error:r instanceof Error?r.message:String(r)}}}function Zj(e){return`${["# scip-query Health Dossier","",`Generated: ${new Date().toISOString()}`,`Project: ${e.projectRoot}`,`Setup verdict: ${e.verdict}`,`Health score: ${rO(e)}`,"","## Items That Need Attention","",...eO(e),"","## Blocked Or Unavailable Checks","",...tO(e),"","## Setup Smoke Tests","",...e.smokeTests.map(n=>`- ${n.status.toUpperCase()} \`${n.command}\`: ${n.evidence}`),"","## Setup Steps","",...e.steps.map(n=>`- ${n.status.toUpperCase()} ${n.label}${n.message?`: ${n.message}`:""}`),"","## Indexer Remediation","",...nO(e),"","## JSON","",`Machine-readable report: \`${iO(e)}\``,""].join(`
827
+ `)}`}function eO(e){return e.health.issuesNeedAttention.length===0?["No prioritized health actions were reported."]:e.health.issuesNeedAttention.map(t=>`- ${t.category}: ${t.description} (${t.count}; impact ${t.impact}, effort ${t.effort}, evidence ${t.evidence}; confirmation ${t.confirmationStatus}; safe to start ${t.safeForAgentToStart?"yes":"no"}). ${t.recommendedNextStep}`)}function tO(e){let t=[...e.smokeTests.filter(n=>n.status!=="pass").map(n=>`- ${n.status.toUpperCase()} \`${n.command}\`: ${n.evidence}`),...e.indexerRemediation.filter(n=>!n.after.runnable).map(n=>`- BLOCKED ${n.language}: ${n.recovery??`Install ${n.binaryLabel}.`}`)];return t.length>0?t:["No blocked or unavailable setup checks were reported."]}function nO(e){return e.indexerRemediation.length===0?["All detected indexers were already runnable."]:e.indexerRemediation.map(t=>{let n=t.after.runnable?"READY":"BLOCKED",r=t.attempted?"install attempted":"no automatic install attempted";return`- ${n} ${t.language}: ${t.binaryLabel} (${r})`})}function rO(e){return e.health.score===null?`unavailable (${e.health.unavailableReason??"not checked"})`:`${e.health.score} (risk ${e.health.riskScore}, hygiene ${e.health.hygieneScore})`}function iO(e){return e.healthDossier?.jsonPath.replace(`${e.projectRoot}/`,"")??"docs/scip-query/health-dossier.json"}function Wh(e,t,n){if(Kj(Yj(e),{recursive:!0}),(Jj(e)?Xj(e,"utf-8"):null)===t){n.unchanged.push(e);return}Qj(e,t),n.written.push(e)}async function Qh(e={}){let t=[],{projectRoot:n,config:r,paths:i,dbPath:o}=Pr(),s=Ai();X(t,{id:"scip-cli",label:"scip CLI",status:s?"ok":"warn",message:s?"scip CLI is available.":"scip CLI is not available; reindex may attempt install."});let a=js({quiet:!0});X(t,{id:"skills",label:"Agent skills",status:a.skipped.length>0?"warn":"ok",message:`${a.installed.length} installed, ${a.alreadyLinked.length} already linked, ${a.skipped.length} skipped.`,details:a.skipped.map(L=>`Skipped ${L}`)});let c=Ir(r,{projectRoot:n}),l=c.filter(L=>L.level==="error");X(t,{id:"config",label:"Project config",status:l.length>0?"failed":c.length>0?"warn":"ok",message:c.length===0?"Config OK.":`${c.length} diagnostic(s), ${l.length} error(s).`,details:c.map(L=>`${L.level.toUpperCase()} ${L.path}: ${L.message}`)});let u=Dr(r);X(t,{id:"watch-refresh",label:"Watch refresh policy",status:u.autoRefresh===!1?"skipped":"ok",message:u.autoRefresh===!1?"Project hooks report freshness but do not auto-refresh stale indexes.":`Project hooks auto-refresh stale indexes; live watch defaults are ${u.debounceMs}ms debounce, ${u.cooldownMs}ms cooldown, and ${u.gitPollMs}ms Git polling.`});let d=Ct(n,r);X(t,{id:"readiness",label:"Indexer readiness",status:d.languages.length===0?"failed":d.indexers.some(L=>!L.runnable)?"warn":"ok",message:d.languages.length===0?"No supported project languages detected.":`Detected languages: ${d.languages.join(", ")}`,details:d.indexers.map(L=>`${L.runnable?"OK":L.installed?"WARN":"MISSING"} ${L.language}: ${L.binaryLabel}${L.note?` - ${L.note}`:""}`)});let m=fO(n,d,t),f=Ct(n,r),h=null;if(f.languages.length===0||l.length>0)X(t,{id:"reindex",label:"Index refresh",status:"skipped",message:f.languages.length===0?"Skipped because no supported languages were detected.":"Skipped because config validation has errors."});else{let L=[];try{h=await tn({projectRoot:n,languages:f.languages,outputScip:i.indexPath,outputDb:i.dbPath,pnpmWorkspaces:r.indexer?.typescript?.pnpmWorkspaces,typescriptProjectMode:r.indexer?.typescript?.projectMode,typescriptProjects:r.indexer?.typescript?.projects,skipIfUnchanged:!0,allowPartial:!0,indexerConcurrency:r.indexerConcurrency,trigger:{kind:"setup",detail:"scip-query setup"},onStatus:G=>L.push(G)}),X(t,{id:"reindex",label:"Index refresh",status:h.skipped.length>0?"warn":"ok",message:`${h.reused?"Reused":"Indexed"} ${h.languages.join(", ")} in ${(h.durationMs/1e3).toFixed(1)}s.`,details:[...L,...h.skipped.map(G=>`Skipped ${G.language}: ${G.reason}`)]})}catch(G){X(t,{id:"reindex",label:"Index refresh",status:"failed",message:Bs(G),details:L})}}let g=Ct(n,r),y=Bn(g),S=On(n,r,i);X(t,{id:"capabilities",label:"Capability matrix",status:SO(y),message:xO(y)});let C=await hO(i.dbPath,t),k=null;try{k=Ms(n),X(t,{id:"project-hooks",label:"Project agent hooks",status:k.skipped.length>0?"warn":"ok",message:`${k.installed.length} installed, ${k.updated.length} updated, ${k.unchanged.length} already configured, ${k.removed.length} legacy user hook config(s) cleaned up, ${k.skipped.length} skipped.`,details:[...k.removed.map(L=>`Removed legacy user-level ${L}`),...k.skipped.map(L=>`Skipped ${L.target}: ${L.reason}`)]})}catch(L){X(t,{id:"project-hooks",label:"Project agent hooks",status:"failed",message:Bs(L)})}let D=null;try{D=As(n,{gitHook:e.gitHook}),X(t,{id:"agent-guidance",label:"Project agent guidance",status:D.skipped.length>0?"warn":"ok",message:`${D.written.length} written, ${D.unchanged.length} already wired, ${D.skipped.length} skipped.`,details:D.skipped.map(L=>`Skipped ${L.target}: ${L.reason}`)})}catch(L){X(t,{id:"agent-guidance",label:"Project agent guidance",status:"failed",message:Bs(L)})}let x=sO({reindexResult:h,readiness:g,capabilities:y,freshness:S,health:C,hooksResult:k,agentResult:D,steps:t});X(t,{id:"smoke-tests",label:"Setup smoke tests",status:aO(x),message:cO(x),details:x.map(L=>`${L.command}: ${L.status} - ${L.evidence}`)});let I={projectRoot:n,dbPath:o,configuredDbPath:i.dbPath,scipCliInstalled:s,languages:g.languages,steps:t,skills:a,initialReadiness:d,indexerRemediation:m,readiness:g,capabilities:y,freshness:S,reindex:h,health:C,smokeTests:x,healthDossier:null,hooks:k,setupAgent:D,filesWritten:D?.written??[],verdict:Xh(t,g)},M=Gh(I);return I.healthDossier=M,I.filesWritten=[...I.filesWritten,...M.written],X(t,{id:"health-dossier",label:"Health dossier",status:M.status==="failed"?"failed":"ok",message:M.status==="failed"?M.error:`${M.written.length} written, ${M.unchanged.length} unchanged.`,details:[M.markdownPath,M.jsonPath]}),I.verdict=Xh(t,g),I}function Yh(e){if(console.log("scip-query setup"),console.log(`Project: ${e.projectRoot}`),console.log(`Verdict: ${e.verdict}`),console.log(`Health score: ${CO(e.health)}`),console.log(""),e.health.issuesNeedAttention.length===0)console.log("Items that need attention: none reported by the health pass.");else{console.log("Items that need attention:");for(let t of e.health.issuesNeedAttention)console.log(` - ${t.category}: ${t.description} (${t.count}; impact ${t.impact}, effort ${t.effort})`)}if(e.health.unavailableReason&&console.log(`Health pass: ${e.health.unavailableReason}`),e.health.warnings.length>0){console.log("Health warnings:");for(let t of e.health.warnings)console.log(` - ${t}`)}e.healthDossier&&console.log(`Health dossier: ${e.healthDossier.markdownPath}`),console.log(""),console.log("Setup steps:");for(let t of e.steps)console.log(` ${t.status.toUpperCase()} ${t.label}${t.message?` - ${t.message}`:""}`);console.log(""),console.log("Smoke tests:");for(let t of e.smokeTests)console.log(` ${t.status.toUpperCase()} ${t.command} - ${t.evidence}`);if(e.indexerRemediation.length>0){console.log(""),console.log("Indexer remediation:");for(let t of e.indexerRemediation){let n=t.after.runnable?"ready":"blocked",r=t.attempted?"attempted install":"manual action required";console.log(` - ${t.language}: ${n} (${r})`),t.recovery&&console.log(` ${t.recovery}`)}}}function sO(e){let t=e.steps.find(o=>o.id==="reindex"),n=e.steps.find(o=>o.id==="project-hooks"),r=e.steps.find(o=>o.id==="agent-guidance"),i=e.steps.find(o=>o.id==="watch-refresh");return[{id:"reindex",command:"scip-query reindex",status:e.reindexResult?"pass":t?.status==="failed"?"fail":"unavailable",evidence:e.reindexResult?`${e.reindexResult.languages.join(", ")} indexed${e.reindexResult.reused?" from cache":""}.`:t?.message??"No reindex result was produced."},{id:"status",command:"scip-query status",status:e.freshness.state==="missing"?"fail":"pass",evidence:`Index freshness is ${e.freshness.state}: ${e.freshness.reason}`},{id:"config-validate",command:"scip-query config-validate",status:lO(e.steps),evidence:uO(e.steps)},{id:"capabilities",command:"scip-query capabilities",status:e.capabilities.matrix.length>0?"pass":"unavailable",evidence:e.capabilities.matrix.length>0?`${e.capabilities.matrix.length} language capability row(s) available.`:"No detected languages produced capability rows."},{id:"capability-matrix",command:"scip-query capability-matrix --json",status:e.capabilities.matrix.length>0?"pass":"unavailable",evidence:e.capabilities.matrix.length>0?dO(e.capabilities):"No detected languages produced capability rows."},{id:"health",command:"scip-query health",status:e.health.score===null?"unavailable":"pass",evidence:e.health.score===null?e.health.unavailableReason??"Health report was not available.":`Health score ${e.health.score}.`},{id:"diff-impact",command:"scip-query diff-impact --json",status:zh(e.readiness,e.freshness),evidence:Jh(e.readiness,e.freshness)},{id:"diff-gate",command:"scip-query diff-gate --json",status:zh(e.readiness,e.freshness),evidence:Jh(e.readiness,e.freshness)},{id:"cleanup-verification",command:"scip-query cleanup-plan --verify",status:mO(e.capabilities),evidence:pO(e.capabilities)},{id:"setup-hooks",command:"scip-query setup-hooks",status:e.hooksResult?"pass":n?.status==="failed"?"fail":"unavailable",evidence:e.hooksResult?`${e.hooksResult.installed.length} installed, ${e.hooksResult.updated.length} updated, ${e.hooksResult.unchanged.length} already configured.`:n?.message??"Project agent hooks were not configured."},{id:"watch-refresh",command:`printf %s '{"hook_event_name":"SessionStart"}' | scip-query hook-context`,status:i?.status==="ok"?"pass":"unavailable",evidence:i?.message??"Watch refresh policy was not evaluated."},{id:"setup-agent",command:"scip-query setup-agent",status:e.agentResult?"pass":r?.status==="failed"?"fail":"unavailable",evidence:e.agentResult?`${e.agentResult.written.length} written, ${e.agentResult.unchanged.length} already wired, ${e.agentResult.skipped.length} skipped.`:r?.message??"Project agent guidance was not written."}]}function aO(e){return e.some(t=>t.status==="fail")?"failed":e.some(t=>t.status==="unavailable")?"warn":"ok"}function cO(e){let t=e.filter(i=>i.status==="pass").length,n=e.filter(i=>i.status==="unavailable").length,r=e.filter(i=>i.status==="fail").length;return`${t} passed, ${n} unavailable, ${r} failed.`}function lO(e){return e.find(n=>n.id==="config")?.status==="failed"?"fail":"pass"}function uO(e){return e.find(n=>n.id==="config")?.message??"Config diagnostics were not produced."}function dO(e){let t=e.matrix.filter(n=>[n.indexing,n.sourceFacts,n.semantic,n.cleanupVerification].some(r=>r.status==="unavailable")).length;return`${e.matrix.length} language row(s), ${t} with unavailable capability cells.`}function zh(e,t){return e.gitAvailable?t.state==="missing"?"fail":"pass":"unavailable"}function Jh(e,t){if(!e.gitAvailable)return"Git is not available for this project.";let n=t.lastRefresh?` Last refresh: ${t.lastRefresh.result} by ${t.lastRefresh.trigger.kind} at ${t.lastRefresh.completedAt}.`:"";return`Git is available and index freshness is ${t.state}: ${t.reason}${n}`}function mO(e){let t=e.matrix.map(n=>n.cleanupVerification.status);return t.some(n=>n==="available")||t.some(n=>n==="partial")?"pass":"unavailable"}function pO(e){if(e.matrix.length===0)return"No detected languages produced capability rows.";let t=e.matrix.filter(i=>i.cleanupVerification.status==="available").length,n=e.matrix.filter(i=>i.cleanupVerification.status==="partial").length,r=e.matrix.filter(i=>i.cleanupVerification.status==="unavailable").length;return`${t} available, ${n} partial, ${r} unavailable cleanup-verification row(s).`}function fO(e,t,n){let r=[];if(t.languages.length===0)return X(n,{id:"indexer-remediation",label:"Indexer remediation",status:"skipped",message:"Skipped because no supported languages were detected."}),r;for(let s of t.indexers){if(s.runnable)continue;let a=An(s.language),c=[],l=!s.installed&&!!a.installMethods?.length,u=!1;l?u=Ps(a,m=>c.push(m)):s.installed?c.push(s.note??`${s.binaryLabel} is installed but is not runnable.`):a.installMethods?.length||c.push(`No auto-install method is configured for ${s.binaryLabel}.`);let d=gO(Ds(a,e));r.push({language:s.language,binaryLabel:s.binaryLabel,attempted:l,installed:u,before:s,after:d,messages:c,recovery:d.runnable?void 0:d.note??d.installUrl??`Install ${s.binaryLabel} and put it on PATH.`})}if(r.length===0)return X(n,{id:"indexer-remediation",label:"Indexer remediation",status:"ok",message:"All detected indexers are runnable."}),r;let i=r.filter(s=>!s.after.runnable),o=r.filter(s=>s.attempted);return X(n,{id:"indexer-remediation",label:"Indexer remediation",status:i.length>0?"warn":"ok",message:i.length===0?`${o.length} install attempt(s); all detected indexers are runnable.`:`${o.length} install attempt(s); ${i.length} indexer(s) still blocked.`,details:r.flatMap(s=>[`${s.language}: ${s.after.runnable?"ready":"blocked"}`,...s.messages])}),r}function gO(e){return{...e,resolvedBinary:e.resolvedBinary??void 0}}async function hO(e,t){if(!oO(e)){let n="Skipped because no SQLite index database exists yet.";return X(t,{id:"health",label:"Health audit",status:"skipped",message:n}),Kh(n)}try{let n=await xs({full:!0,json:!0});return X(t,{id:"health",label:"Health audit",status:"ok",message:`Health score ${n.score}. ${n.actions.length} prioritized action(s).`}),yO(n)}catch(n){let r=Bs(n);return X(t,{id:"health",label:"Health audit",status:"failed",message:r}),Kh(r)}}function yO(e){return{score:e.score,riskScore:e.riskScore,hygieneScore:e.hygieneScore,issuesNeedAttention:e.actions.map(bO),warnings:e.warnings??[]}}function bO(e){return{category:e.category,description:e.description,count:e.count,impact:e.impact,effort:e.effort,evidence:e.evidence,locRecoverable:e.locRecoverable,confirmationStatus:"unconfirmed",safeForAgentToStart:!1,recommendedNextStep:"Run scip-health-audit to confirm this signal; use scip-health-improve when the user wants confirmed issues fixed autonomously."}}function Kh(e){return{score:null,riskScore:null,hygieneScore:null,issuesNeedAttention:[],warnings:[],unavailableReason:e}}function Xh(e,t){return e.some(n=>n.status==="failed")?"blocked":t.indexers.some(n=>!n.runnable)||e.some(n=>n.status==="warn"||n.status==="skipped")?"partial":"ready"}function SO(e){let t=e.matrix.flatMap(n=>[n.indexing.status,n.sourceFacts.status,n.semantic.status,n.cleanupVerification.status]);return t.some(n=>n==="unavailable")||t.some(n=>n==="partial")?"warn":"ok"}function xO(e){return e.matrix.length===0?"No language capability rows.":`${e.matrix.filter(n=>n.indexing.status==="available").length}/${e.matrix.length} language(s) have available indexing.`}function CO(e){return e.score===null?`unavailable (${e.unavailableReason??"not checked"})`:`${e.score} (risk ${e.riskScore}, hygiene ${e.hygieneScore})`}function X(e,t){e.push({...t,details:t.details?.filter(n=>n.trim()!=="")})}function Bs(e){return e instanceof Error?e.message:String(e)}import{existsSync as vO,mkdirSync as RO,writeFileSync as kO}from"fs";import{dirname as wO,join as LO}from"path";function Zh(e,t={}){let n=LO(e,".github","workflows","scip-query.yml"),r=IO();return vO(n)&&!t.force?{path:n,written:!1,skipped:!0,content:r,reason:"Workflow already exists. Re-run with --force to overwrite."}:(t.dryRun||(RO(wO(n),{recursive:!0}),kO(n,r)),{path:n,written:!t.dryRun,skipped:!1,content:r})}function IO(){return`name: scip-query
793
828
 
794
829
  on:
795
830
  pull_request:
@@ -807,45 +842,47 @@ jobs:
807
842
  - run: npm ci
808
843
  - run: npx scip-query reindex
809
844
  - run: npx scip-query diff-gate --base "origin/\${{ github.base_ref }}"
810
- `}var uh=Symbol("option-value-source");function z(e){return(...t)=>{let{args:n,opts:i}=xM(t);mt(r=>e({db:r,args:n,opts:i}))}}function X(e,t){return z(n=>{let i=xf(n.db,e,R(n.opts,"full"),{quiet:R(n.opts,"json")});t({...n,budget:i})})}function dh(e){return z(t=>Ri(t,e,{kind:"list"}))}function mh(e){return z(t=>Ri(t,e,{kind:"table",headers:e.headers,dashWidths:e.dashWidths}))}function ph(e){return z(t=>Ri(t,e,{kind:"grouped",key:e.key}))}function _n(e){return z(t=>wl(t,e))}function fh(e){return _n({commandName:e.commandName,query:e.query,emptyMessage:e.emptyMessage,heuristicLabel:e.heuristicLabel,before:e.before,render:(t,n)=>P.sectionedReport(e.sections(t,n)),toJson:e.toJson,after:e.after})}function ze(e,t){return X(e,n=>wl(n,{...t,commandName:t.commandName??e}))}function gh(e,t){return ze(e,{commandName:t.commandName??e,query:t.query,emptyMessage:t.emptyMessage,heuristicLabel:t.heuristicLabel,before:t.before,render:(n,i)=>P.sectionedReport(t.sections(n,i)),toJson:t.toJson,after:t.after})}function Nt(e,t){return X(e,n=>Ri(n,{...t,commandName:e},{kind:"list"}))}function Cs(e,t){return X(e,n=>Ri(n,{...t,commandName:e},{kind:"table",headers:t.headers,dashWidths:t.dashWidths}))}function vs(e,t){return X(e,n=>Ri(n,{...t,commandName:e},{kind:"grouped",key:t.key}))}function H(e,t){return String(e[t])}function le(e,t){let n=e[t];return typeof n=="string"?n:void 0}function E(e,t){let n=e[t];return typeof n=="string"?n:void 0}function Ee(e,t){let n=e[t];return typeof n=="number"?n:void 0}function R(e,t){return!!e[t]}function hh(e,t){let n=e[t];return Array.isArray(n)&&n.every(i=>typeof i=="string")?n:[]}function N(e,t,n){return Ee(e,t)??n}function O(e,t,n){let i=Ee(e,t),r=i!==void 0&&kl(e,t)!=="default";if(R(e,"full")){if(r)throw new Error("--full cannot be combined with --limit. Use --full for all findings, or --limit N for a capped report.");return Number.POSITIVE_INFINITY}return i??n}function kl(e,t){return e[uh]?.(t)}function Ri(e,t,n){wl(e,{commandName:t.commandName,query:t.query,emptyMessage:(i,r)=>i.length===0&&t.emptyMessage?t.emptyMessage(r):void 0,heuristicLabel:t.heuristicLabel,render:(i,r)=>{n.kind==="list"?P.list(i,o=>t.format(o,r)):n.kind==="table"?P.table(n.headers,i.map(o=>t.format(o,r)),n.dashWidths):P.groupedByFile(i,o=>t.format(o,r),n.key?o=>n.key(o,r):void 0)},toJson:t.toJson,after:t.after})}function wl(e,t){let n=t.query(e);if(R(e.opts,"json")){F(t.commandName,e.args,e.opts,t.toJson?t.toJson(n,e):n);return}let i=t.emptyMessage?.(n,e);if(i){P.empty(i);return}t.heuristicLabel&&bi(t.heuristicLabel),t.before?.(n,e),t.render(n,e),t.after?.(n,e)}function F(e,t,n,i){console.log(JSON.stringify({command:e,args:SM(t),options:n,result:i},null,2))}function SM(e){return e.filter(t=>typeof t=="string"||typeof t=="number"||typeof t=="boolean")}function xM(e){if(e.length===0)return{args:[],opts:{}};let t=e[e.length-1];return{args:e.slice(0,-1),opts:ue(t)}}function ue(e){if(!e||typeof e!="object")return{};let t=e;if(typeof t.opts=="function"){let n=t.opts();return!n||typeof n!="object"?{}:(typeof t.getOptionValueSource=="function"&&Object.defineProperty(n,uh,{value:i=>t.getOptionValueSource(i),enumerable:!1}),n)}return e}var vM=new Set(["typescript","javascript","java","scala","kotlin","rust","python","ruby","go","cpp","c","csharp","vb","dart","php"]);function RM(e){return e.filter(t=>vM.has(t))}async function bh(e){let t=ue(e),n=be(),i=et(n),r=Wt(n,i);try{let o=RM(hh(t,"language")),s=await ys({projectRoot:n,languages:o.length>0?o:i.languages,outputScip:r.indexPath,outputDb:r.dbPath,pnpmWorkspaces:R(t,"pnpmWorkspaces")||i.indexer?.typescript?.pnpmWorkspaces,skipIfUnchanged:!R(t,"force"),allowPartial:R(t,"allowPartial"),indexerConcurrency:Ee(t,"indexerConcurrency")});console.log(`${s.reused?"Reused":"Indexed"} ${s.languages.join(", ")} in ${(s.durationMs/1e3).toFixed(1)}s`)}catch(o){console.error(`error: ${o instanceof Error?o.message:o}`),process.exit(1)}}function yh(){let e=be(),t=jc(e);try{let n=Gt({projectRoot:e,dbPath:t,onStatus:i=>console.log(i)});console.log(`Scanned ${n.scanned} auxiliary source files; inserted ${n.inserted}.`)}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}function Sh(e){let t=ue(e),n=be(),i=jc(n);try{let r=Sl({projectRoot:n,dbPath:i,tsconfig:E(t,"project")??"frontend/tsconfig.scip.json",onStatus:o=>console.log(o)});console.log(`Vue files: ${r.vueFiles}; resolved references: ${r.resolvedReferences}; inserted mentions: ${r.insertedMentions}.`)}catch(r){console.error(`error: ${r instanceof Error?r.message:r}`),process.exit(1)}}function xh(e){let t=ue(e);mt(n=>{let i=JSON.parse(process.env.SCIP_QUERY_DIFF_IMPACT_FILES??"[]"),r=lt(n,{base:E(t,"base")}),o=No(n,i,r.changedFiles,r.changedRanges);console.log(JSON.stringify(o))})}function Ch(e){let t=ue(e);try{let n=vf({base:E(t,"base")});if(R(t,"json")){F("diff-impact",[],t,n);return}Rf(n)}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}function vh(e,t){let n=ue(t);mt(i=>{hr.includes(e)||(console.error(`error: Unknown health phase: ${e}`),process.exit(1));let r=wc(i,e,{scope:E(n,"scope"),full:R(n,"full")});console.log(JSON.stringify(r))})}function Rh(e){let t=ue(e);if(R(t,"writeBaseline")||R(t,"baseline")){kM(t);return}try{let n=Zo({scope:E(t,"scope"),full:!0,json:R(t,"json")});if(R(t,"json")){F("health",[],t,n);return}Cf(n,!1)}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}function kM(e){let t=E(e,"scope");mt(n=>{if(R(e,"writeBaseline")){let r=Sc(n,{scope:t});console.log(`Baseline written to ${r.path} (${r.findingCount} finding(s)).`);return}let i=cr(n,{scope:t});if(i.fixedFindings.length>0&&console.log(`${i.fixedFindings.length} finding(s) fixed since baseline. Re-run --write-baseline to ratchet down.`),i.newFindings.length===0){console.log(`OK: no new findings vs baseline (${i.baselineCount} baselined, ${i.current.length} current).`);return}console.log(`FAIL: ${i.newFindings.length} new finding(s) vs ${i.baselinePath}:`);for(let r of i.newFindings)console.log(` + ${r}`);process.exitCode=1})}function kh(){let e=ps(),t=e.installed.length+e.alreadyLinked.length;console.log(`
811
- ${e.installed.length} installed, ${e.alreadyLinked.length} already linked, ${e.skipped.length} skipped.`),t>0&&console.log("Skills will be available in your next Claude Code / Codex session.")}function wh(e){let t=ue(e),n=be(),i=us(n);if(R(t,"json")){F("setup-hooks",[],t,i);return}for(let o of i.installed)console.log(` done: ${o}`);for(let o of i.updated)console.log(` update: ${o}`);for(let o of i.unchanged)console.log(` ok: ${o} (already configured)`);for(let o of i.removed)console.log(` remove: legacy user-level ${o}`);for(let o of i.skipped)console.log(` skip: ${o.target} \u2014 ${o.reason}`);i.installed.length+i.updated.length+i.unchanged.length>0?(console.log(`
845
+ `}var ey=Symbol("option-value-source");function K(e){return(...t)=>{let{args:n,opts:r}=PO(t);Je(i=>e({db:i,args:n,opts:r}))}}function Q(e,t){return K(n=>{let r=Ss(n.db,e,R(n.opts,"full"),{quiet:R(n.opts,"json")});t({...n,budget:r})})}function ty(e){return K(t=>Ar(t,e,{kind:"list"}))}function ny(e){return K(t=>Ar(t,e,{kind:"table",headers:e.headers,dashWidths:e.dashWidths}))}function ry(e){return K(t=>Ar(t,e,{kind:"grouped",key:e.key}))}function Vn(e){return K(t=>Xl(t,e))}function iy(e){return Vn({commandName:e.commandName,query:e.query,emptyMessage:e.emptyMessage,heuristicLabel:e.heuristicLabel,before:e.before,render:(t,n)=>P.sectionedReport(e.sections(t,n)),toJson:e.toJson,after:e.after})}function Xe(e,t){return Q(e,n=>Xl(n,{...t,commandName:t.commandName??e}))}function oy(e,t){return Xe(e,{commandName:t.commandName??e,query:t.query,emptyMessage:t.emptyMessage,heuristicLabel:t.heuristicLabel,before:t.before,render:(n,r)=>P.sectionedReport(t.sections(n,r)),toJson:t.toJson,after:t.after})}function Ft(e,t){return Q(e,n=>Ar(n,{...t,commandName:e},{kind:"list"}))}function Hs(e,t){return Q(e,n=>Ar(n,{...t,commandName:e},{kind:"table",headers:t.headers,dashWidths:t.dashWidths}))}function Vs(e,t){return Q(e,n=>Ar(n,{...t,commandName:e},{kind:"grouped",key:t.key}))}function H(e,t){return String(e[t])}function pe(e,t){let n=e[t];return typeof n=="string"?n:void 0}function E(e,t){let n=e[t];return typeof n=="string"?n:void 0}function ke(e,t){let n=e[t];return typeof n=="number"?n:void 0}function R(e,t){return!!e[t]}function Jl(e,t){let n=e[t];return Array.isArray(n)&&n.every(r=>typeof r=="string")?n:[]}function N(e,t,n){return ke(e,t)??n}function O(e,t,n){let r=ke(e,t),i=r!==void 0&&Kl(e,t)!=="default";if(R(e,"full")){if(i)throw new Error("--full cannot be combined with --limit. Use --full for all findings, or --limit N for a capped report.");return Number.POSITIVE_INFINITY}return r??n}function Kl(e,t){return e[ey]?.(t)}function Ar(e,t,n){Xl(e,{commandName:t.commandName,query:t.query,emptyMessage:(r,i)=>r.length===0&&t.emptyMessage?t.emptyMessage(i):void 0,heuristicLabel:t.heuristicLabel,render:(r,i)=>{n.kind==="list"?P.list(r,o=>t.format(o,i)):n.kind==="table"?P.table(n.headers,r.map(o=>t.format(o,i)),n.dashWidths):P.groupedByFile(r,o=>t.format(o,i),n.key?o=>n.key(o,i):void 0)},toJson:t.toJson,after:t.after})}function Xl(e,t){let n=t.query(e);if(R(e.opts,"json")){A(t.commandName,e.args,e.opts,t.toJson?t.toJson(n,e):n);return}let r=t.emptyMessage?.(n,e);if(r){P.empty(r);return}t.heuristicLabel&&Er(t.heuristicLabel),t.before?.(n,e),t.render(n,e),t.after?.(n,e)}function A(e,t,n,r){console.log(JSON.stringify({command:e,args:DO(t),options:n,result:r},null,2))}function DO(e){return e.filter(t=>typeof t=="string"||typeof t=="number"||typeof t=="boolean")}function PO(e){if(e.length===0)return{args:[],opts:{}};let t=e[e.length-1];return{args:e.slice(0,-1),opts:se(t)}}function se(e){if(!e||typeof e!="object")return{};let t=e;if(typeof t.opts=="function"){let n=t.opts();return!n||typeof n!="object"?{}:(typeof t.getOptionValueSource=="function"&&Object.defineProperty(n,ey,{value:r=>t.getOptionValueSource(r),enumerable:!1}),n)}return e}var _O=new Set(["typescript","javascript","java","scala","kotlin","rust","python","ruby","go","cpp","c","csharp","vb","dart","php"]),FO=18e4,ly=100*1024*1024,$O=new Set(aa),AO=[["status","--json"],["status","--capabilities"],["capabilities","--json"],["capability-matrix","--json"],["stats"],["kind-counts"],["diff-impact","--json"],["diff-gate","--json"]],MO=[["health","--json"],["dead","--json","--full"],["isolated","--json","--full"],["similar","--json","--full"],["similar-files","--json","--full"],["recent-duplicates","--json","--full"],["doc-drift","--json","--full"],["unused-params","--json","--full"],["wrapper-candidates","--json","--full"],["passthrough-candidates","--json","--full"],["stale-abstractions","--json","--full"],["incomplete-migration","--json","--full"],["cleanup-plan","--verify","--json"],["complexity-hotspots","--json","--full"]];function jO(e){return e.filter(t=>_O.has(t))}async function uy(e){let t=se(e),n=de(),r=Pe(n),i=bt(n,r);try{let o=jO(Jl(t,"language")),s=await tn({projectRoot:n,languages:o.length>0?o:r.languages,outputScip:i.indexPath,outputDb:i.dbPath,pnpmWorkspaces:R(t,"pnpmWorkspaces")||r.indexer?.typescript?.pnpmWorkspaces,typescriptProjectMode:r.indexer?.typescript?.projectMode,typescriptProjects:r.indexer?.typescript?.projects,skipIfUnchanged:!R(t,"force"),allowPartial:R(t,"allowPartial"),indexerConcurrency:ke(t,"indexerConcurrency")??r.indexerConcurrency,trigger:{kind:"manual-cli",detail:"scip-query reindex"}});console.log(`${s.reused?"Reused":"Indexed"} ${s.languages.join(", ")} in ${(s.durationMs/1e3).toFixed(1)}s`)}catch(o){console.error(`error: ${o instanceof Error?o.message:o}`),process.exit(1)}}function dy(){let e=de(),t=Nr(e);try{let n=en({projectRoot:e,dbPath:t,onStatus:r=>console.log(r)});console.log(`Scanned ${n.scanned} auxiliary source files; inserted ${n.inserted}.`)}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}function my(e){let t=se(e),n=de(),r=Nr(n);try{let i=El({projectRoot:n,dbPath:r,tsconfig:E(t,"project")??"frontend/tsconfig.scip.json",onStatus:o=>console.log(o)});console.log(`Vue files: ${i.vueFiles}; resolved references: ${i.resolvedReferences}; inserted mentions: ${i.insertedMentions}.`)}catch(i){console.error(`error: ${i instanceof Error?i.message:i}`),process.exit(1)}}function py(e){let t=se(e);Je(n=>{let r=JSON.parse(process.env.SCIP_QUERY_DIFF_IMPACT_FILES??"[]"),i=gt(n,{base:E(t,"base")}),o=Xo(n,r,i.changedFiles,i.changedRanges);console.log(JSON.stringify(o))})}async function fy(e){let t=se(e);try{let n=await rg({base:E(t,"base")});if(R(t,"json")){A("diff-impact",[],t,n);return}og(n)}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}function gy(e,t){let n=se(t),r=String(e).split(",").filter(i=>i.length>0);Je(i=>{let o=[];for(let c of r)wr.includes(c)||(console.error(`error: Unknown health phase: ${c}`),process.exit(1)),o.push(c);let s={scope:E(n,"scope"),full:R(n,"full")},a=o.length===1?zc(i,o[0],s):Jc(i,o,s);console.log(JSON.stringify(a))})}async function hy(e){let t=se(e);if(R(t,"writeBaseline")||R(t,"baseline")){GO(t);return}try{let n=await xs({scope:E(t,"scope"),full:!0,json:R(t,"json")});if(R(t,"json")){A("health",[],t,n);return}ng(n,!1)}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}async function yy(e){let t=se(e),n=de(),r=ke(t,"timeoutMs")??FO,i={projectRoot:n,...UO(n),index:Ql(Mr(Nr(n))),commands:[]};R(t,"coldIndex")&&(i.coldIndex=await OO(n),i.warmIndex=await BO(n),i.index=Ql(Mr(Nr(n))));for(let o of HO(t))i.commands.push(qO(n,o,r));if(R(t,"json")){A("bench",[],t,i);return}WO(i)}async function OO(e){let t=Pe(e),n=bt(e,t),r=EO(n.dbPath),i=`${r}.bench-backup-${Date.now()}`,o=!1;Mr(r)&&(sy(r,i),o=!0);try{let s=await by(()=>tn({projectRoot:e,languages:t.languages,outputScip:n.indexPath,outputDb:n.dbPath,pnpmWorkspaces:t.indexer?.typescript?.pnpmWorkspaces,typescriptProjectMode:t.indexer?.typescript?.projectMode,typescriptProjects:t.indexer?.typescript?.projects,skipIfUnchanged:!0,allowPartial:!0,indexerConcurrency:t.indexerConcurrency,trigger:{kind:"manual-cli",detail:"scip-query bench --cold-index"},onStatus:()=>{}}));return o&&NO(i,{recursive:!0,force:!0}),{durationMs:s.durationMs,result:s.value.reused?"reused":"rebuilt",languages:s.value.languages,...Sy(e)}}catch(s){throw o&&!Mr(r)&&sy(i,r),s}}async function BO(e){let t=Pe(e),n=bt(e,t),r=await by(()=>tn({projectRoot:e,languages:t.languages,outputScip:n.indexPath,outputDb:n.dbPath,pnpmWorkspaces:t.indexer?.typescript?.pnpmWorkspaces,typescriptProjectMode:t.indexer?.typescript?.projectMode,typescriptProjects:t.indexer?.typescript?.projects,skipIfUnchanged:!0,allowPartial:!0,indexerConcurrency:t.indexerConcurrency,trigger:{kind:"manual-cli",detail:"scip-query bench warm index"},onStatus:()=>{}}));return{durationMs:r.durationMs,result:r.value.reused?"reused":"rebuilt",languages:r.value.languages,...Sy(e)}}async function by(e){let t=performance.now(),n=await e();return{durationMs:Math.round(performance.now()-t),value:n}}function Sy(e){return Mr(Nr(e))?Je(t=>{let n=$e(t);return{files:n.documents,symbols:n.symbols}}):{}}function HO(e){let t=Jl(e,"command");return t.length>0?t.map(VO).filter(n=>n.length>0):[...AO.map(n=>[...n]),...R(e,"includeHeavy")?MO.map(n=>[...n]):[]]}function VO(e){return e.trim().split(/\s+/).filter(Boolean).filter((t,n)=>!(n===0&&t==="scip-query"))}function qO(e,t,n){let r=performance.now(),i=cy(process.execPath,[...process.execArgv,process.argv[1]??"",...t],{cwd:e,encoding:"buffer",maxBuffer:ly,timeout:n}),o=Math.round(performance.now()-r);return{command:`scip-query ${t.join(" ")}`,durationMs:o,exitCode:i.status,signal:i.signal,timedOut:i.error?.name==="ETIMEDOUT",stdoutBytes:i.stdout?.length??0,stderrBytes:i.stderr?.length??0}}function UO(e){let t=cy("git",["-C",e,"ls-files","-co","--exclude-standard"],{encoding:"utf8",maxBuffer:ly});if(t.status!==0)return{repoFiles:null,sourceFiles:null};let n=t.stdout.split(`
846
+ `).filter(Boolean);return{repoFiles:n.length,sourceFiles:n.filter(r=>$O.has(TO(r).toLowerCase())).length}}function WO(e){console.log("scip-query bench"),console.log(`Project: ${e.projectRoot}`),console.log(`Repo files: ${e.repoFiles??"unknown"}; source-like files: ${e.sourceFiles??"unknown"}`),e.index&&console.log(`Index: ${e.index.files} files, ${e.index.symbols} symbols, ${$n(e.index.indexSizeBytes)}`),e.coldIndex&&ay("Cold index",e.coldIndex),e.warmIndex&&ay("Warm index",e.warmIndex),console.log(`
847
+ Commands:`);for(let t of[...e.commands].sort((n,r)=>r.durationMs-n.durationMs)){let n=t.timedOut?"timeout":t.exitCode===0?"ok":`exit ${t.exitCode??t.signal??"unknown"}`;console.log(` ${String(t.durationMs).padStart(7)}ms ${n.padEnd(10)} ${String(t.stdoutBytes).padStart(8)}B out ${t.command}`)}}function ay(e,t){console.log(`${e}: ${t.durationMs}ms, ${t.result}, ${t.languages.join(", ")}${t.files?`, ${t.files} files`:""}${t.symbols?`, ${t.symbols} symbols`:""}`)}function GO(e){let t=E(e,"scope");Je(n=>{if(R(e,"writeBaseline")){let i=Hc(n,{scope:t});console.log(`Baseline written to ${i.path} (${i.findingCount} finding(s)).`);return}let r=vi(n,{scope:t});if(r.fixedFindings.length>0&&console.log(`${r.fixedFindings.length} finding(s) fixed since baseline. Re-run --write-baseline to ratchet down.`),r.newFindings.length===0){console.log(`OK: no new findings vs baseline (${r.baselineCount} baselined, ${r.current.length} current).`);return}console.log(`FAIL: ${r.newFindings.length} new finding(s) vs ${r.baselinePath}:`);for(let i of r.newFindings)console.log(` + ${i}`);process.exitCode=1})}function xy(){let e=js(),t=e.installed.length+e.alreadyLinked.length;console.log(`
848
+ ${e.installed.length} installed, ${e.alreadyLinked.length} already linked, ${e.skipped.length} skipped.`),t>0&&console.log("Skills will be available in your next Claude Code / Codex session.")}function Cy(e){let t=se(e),n=de(),r=Ms(n);if(R(t,"json")){A("setup-hooks",[],t,r);return}for(let o of r.installed)console.log(` done: ${o}`);for(let o of r.updated)console.log(` update: ${o}`);for(let o of r.unchanged)console.log(` ok: ${o} (already configured)`);for(let o of r.removed)console.log(` remove: legacy user-level ${o}`);for(let o of r.skipped)console.log(` skip: ${o.target} \u2014 ${o.reason}`);r.installed.length+r.updated.length+r.unchanged.length>0?(console.log(`
812
849
  Project-local scip-query hooks are configured for this repository.`),console.log("Review new or changed hooks in Codex/Claude Code with /hooks before they run.")):console.log(`
813
- No project-local hook config was written.`)}function Lh(){let e=!1;kr()?console.log("scip CLI: installed"):(sl(),e=!0);let t=be(),n=et(t),i=ft(t,n);if(i.languages.length===0){console.log(`
850
+ No project-local hook config was written.`)}function vy(){let e=!1;Ai()?console.log("scip CLI: installed"):(gl(),e=!0);let t=de(),n=Pe(t),r=Ct(t,n);if(r.languages.length===0){console.log(`
814
851
  No supported project languages detected in the current directory.`),process.exitCode=e?1:0;return}console.log(`
815
- Detected languages: ${i.languages.join(", ")}`),console.log(`
816
- Indexer readiness:`);for(let r of i.indexers){let o=r.runnable?" OK":r.installed?" WARN":" MISSING",s=r.resolvedBinary?` (${r.resolvedBinary})`:"";console.log(`${o} ${r.language}: ${r.binaryLabel}${s}`),r.note&&console.log(` ${r.note}`),!r.installed&&r.installUrl&&console.log(` install: ${r.installUrl}`),r.runnable||(e=!0)}if(i.semantic){let r=i.semantic,o=r.available?" OK":r.dependencyAvailable?" WARN":" MISSING",s=r.tsconfigPaths&&r.tsconfigPaths.length>1?` (${r.tsconfigPaths.length} tsconfigs)`:r.tsconfigPath?` (${r.tsconfigPath})`:"";console.log(`
817
- Semantic provider readiness:`),console.log(`${o} typescript: ts-morph${s}`),r.reason&&console.log(` ${r.reason}; semantic checks will fall back to SCIP/source evidence`)}process.exitCode=e?1:0}function Dh(e){Ph(e,"capabilities")}function Ih(e){Ph(e,"capability-matrix")}function Ph(e,t){let n=ue(e),i=be(),r=et(i),o=ft(i,r),s=Nn(o);if(R(n,"json")){F(t,[],n,s);return}Ll(s)}function Nh(){let e=be(),t=Dt(e),n=pf(e,t);console.log(`Config written to ${n}`),console.log(`Detected languages: ${t.join(", ")||"(none)"}`)}function Eh(e){let t=ue(e),n=be(),i=et(n),r=fi(i,{projectRoot:n});if(R(t,"json"))F("config-validate",[],t,{diagnostics:r});else if(r.length===0)console.log("Config OK.");else for(let o of r)console.log(`${o.level.toUpperCase()} ${o.path}: ${o.message}`);r.some(o=>o.level==="error")&&(process.exitCode=1)}function Th(e,t){let n=ue(t),i=E(n,"reason");if(!i||i.trim()===""){console.error("error: suppress requires --reason <text>."),process.exitCode=1;return}try{let r=ff(be(),{id:String(e),check:E(n,"check"),file:E(n,"file"),reason:i,expiresAt:E(n,"expiresAt")});if(R(n,"json")){F("suppress",[String(e)],n,r);return}console.log(`Suppression added to ${r.path} (${r.suppressionCount} total).`)}catch(r){console.error(`error: ${r instanceof Error?r.message:r}`),process.exitCode=1}}function _h(e){let t=ue(e),{report:n,hasIndexerProblems:i,hasErrors:r}=$h("doctor");R(t,"json")?F("doctor",[],t,n):wM(n,i),process.exitCode=r?1:0}function $h(e){let{projectRoot:t,config:n,paths:i,dbPath:r}=gi(),o=fi(n,{projectRoot:t}),s=ft(t,n),a=Nn(s),c=yi(t,n,i),l=s.indexers.some(d=>!d.runnable),u=o.some(d=>d.level==="error")||l||c.state==="missing"||c.state==="stale";return{report:{command:e,projectRoot:t,dbPath:r,configuredDbPath:i.dbPath,exists:CM(r),configDiagnostics:o,readiness:s,freshness:c,capabilities:a,ok:!u},hasIndexerProblems:l,hasErrors:u}}function Fh(e){let t=ue(e),n=be(),i=ls(n,{gitHook:R(t,"gitHook")});for(let r of i.written)console.log(` done: ${r}`);for(let r of i.unchanged)console.log(` ok: ${r} (already wired)`);for(let r of i.skipped)console.log(` skip: ${r.target} \u2014 ${r.reason}`);console.log(`
818
- Agents reading this project now know to route through the scip-query skills and gate their diffs.`),console.log("Keep the index fresh (`scip-query reindex` or `scip-query watch`) so the gate sees current code.")}async function Ah(e){let t=ue(e);try{let n=await ah({gitHook:R(t,"gitHook")});R(t,"json")?F("setup",[],t,n):ch(n),process.exitCode=n.verdict==="blocked"?1:0}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}function Mh(e){let t=ue(e),n=be(),i=lh(n,{force:R(t,"force"),dryRun:R(t,"dryRun")});if(R(t,"dryRun")){console.log(i.content);return}if(i.skipped){console.log(`skip: ${i.path} \u2014 ${i.reason}`);return}console.log(`done: ${i.path}`)}function Oh(e){let t=ue(e),n=be(),i=et(n),r=Ee(t,"debounce"),o=Ee(t,"cooldown");r&&((i.watch??={}).debounceMs=r),o&&((i.watch??={}).cooldownMs=o);let s=new Ss({projectRoot:n,config:i,languages:i.languages,onStatus:a=>{process.stdout.write(`\r\x1B[K${hf(a)}`)},onReindexComplete:a=>{console.log(`
819
- Reindex complete in ${(a/1e3).toFixed(1)}s`)},onError:a=>{console.error(`
820
- Watch error: ${a.message}`)}});console.log(`Watching ${n}`),console.log(`Debounce: ${i.watch?.debounceMs??3e4}ms | Cooldown: ${i.watch?.cooldownMs??6e4}ms`),console.log(`Press Ctrl+C to stop.
821
- `),s.start(),process.on("SIGINT",()=>{s.stop(),console.log(`
822
- Stopped.`),process.exit(0)})}function jh(e){let t=ue(e),{report:n}=$h("status");if(R(t,"json")){F("status",[],t,{...n,stats:DM(n.exists)});return}LM(n,{capabilities:R(t,"capabilities")})}function wM(e,t){console.log(`Doctor: ${e.ok?"OK":"needs attention"}`);for(let n of e.configDiagnostics)console.log(` ${n.level.toUpperCase()} ${n.path}: ${n.message}`);if(t)for(let n of e.readiness.indexers.filter(i=>!i.runnable))console.log(` MISSING ${n.language}: ${n.note??n.binaryLabel}`);console.log(` Freshness: ${e.freshness.state}${e.freshness.remedy?` (${e.freshness.remedy})`:""}`),Ll(e.capabilities)}function LM(e,t){if(console.log(`Project: ${e.projectRoot}`),console.log(`DB path: ${e.dbPath}`),e.dbPath!==e.configuredDbPath&&console.log(`Config: ${e.configuredDbPath} (fallback to project root index.db)`),e.readiness.semantic){let n=e.readiness.semantic.available?"available":"fallback",i=e.readiness.semantic.tsconfigPaths&&e.readiness.semantic.tsconfigPaths.length>1?` (${e.readiness.semantic.tsconfigPaths.length} tsconfigs)`:e.readiness.semantic.tsconfigPath?` (${e.readiness.semantic.tsconfigPath})`:"";console.log(`TS sem: ${n}${i}`),e.readiness.semantic.reason&&console.log(`TS note: ${e.readiness.semantic.reason}`)}console.log(`Exists: ${e.exists?"yes":"no"}`),console.log(`Fresh: ${e.freshness.state}${e.freshness.remedy?` (${e.freshness.remedy})`:""}`),IM(e.exists),t.capabilities&&(console.log(""),Ll(e.capabilities))}function DM(e){if(e)return mt(t=>{let n=Oe(t);return{symbols:n.symbols,files:n.documents,indexSizeBytes:n.indexSizeBytes,lastBuilt:n.lastBuilt?.toISOString()}})}function IM(e){e&&mt(t=>{let n=Oe(t);if(console.log(`Symbols: ${n.symbols}`),console.log(`Files: ${n.documents}`),console.log(`Size: ${hi(n.indexSizeBytes)}`),n.lastBuilt){let i=Math.round((Date.now()-n.lastBuilt.getTime())/1e3);console.log(`Built: ${i}s ago`)}})}function Ll(e){console.log(`Capabilities for: ${e.languages.join(", ")||"(no detected languages)"}`);for(let t of e.capabilities)console.log(` ${t.status.toUpperCase().padEnd(11)} ${t.label} [${t.evidence}]`),console.log(` ${t.reason}`);if(e.matrix.length!==0){console.log(`
823
- Language matrix:`);for(let t of e.matrix){console.log(` ${t.language}`);for(let n of[t.indexing,t.sourceFacts,t.semantic,t.detectors,t.cleanupVerification])console.log(` ${n.status.toUpperCase().padEnd(11)} ${n.label}`),console.log(` ${n.reason}`)}}}function Lr(e){return{...e,options:_(e.options)}}function ht({query:e,format:t,emptyMessage:n,heuristicLabel:i,after:r,...o}){let s=Lr(o);return{...s,renderShape:"list",handler:dh({commandName:s.id,query:e,format:t,emptyMessage:n,heuristicLabel:i,after:r})}}function Rs({query:e,format:t,emptyMessage:n,heuristicLabel:i,after:r,headers:o,dashWidths:s,...a}){let c=Lr(a);return{...c,renderShape:"table",handler:mh({commandName:c.id,query:e,format:t,emptyMessage:n,heuristicLabel:i,after:r,headers:o,dashWidths:s})}}function Bh({query:e,format:t,emptyMessage:n,heuristicLabel:i,after:r,key:o,...s}){let a=Lr(s);return{...a,renderShape:"grouped-by-file",handler:ph({commandName:a.id,query:e,format:t,emptyMessage:n,heuristicLabel:i,after:r,key:o})}}function Hh({query:e,emptyMessage:t,heuristicLabel:n,sections:i,before:r,after:o,...s}){let a=Lr(s);return{...a,renderShape:"sectioned-report",handler:fh({commandName:a.id,query:e,emptyMessage:t,heuristicLabel:n,before:r,sections:i,after:o})}}function ks({query:e,emptyMessage:t,heuristicLabel:n,sections:i,before:r,after:o,...s}){let a=Lr(s);return{...a,budget:a.budget??"semantic",renderShape:"sectioned-report",handler:gh(a.id,{commandName:a.id,query:e,emptyMessage:t,heuristicLabel:n,before:r,sections:i,after:o})}}function Dl(e,t,n,i){console.log(`\u2550\u2550\u2550 ${t} (${e.length}, ${i} LOC) \u2550\u2550\u2550`),console.log(n),console.log("");let r=new Map;for(let a of e){let c=r.get(a.relativePath)??[];c.push(a),r.set(a.relativePath,c)}let o=[...r.entries()].map(([a,c])=>({file:a,bucket:c,totalLoc:c.reduce((l,u)=>l+u.loc,0)})).sort((a,c)=>c.totalLoc-a.totalLoc||a.file.localeCompare(c.file)),s=!0;for(let{file:a,bucket:c}of o){s||console.log(""),s=!1,console.log(` ${a}`),c.sort((l,u)=>l.startLine-u.startLine);for(let l of c)console.log(` ${ve(l.startLine,l.endLine)} (${l.loc} LOC) ${l.shortName}`)}}var Vh=X("dead",({db:e,args:t,opts:n,budget:i})=>{let r={scope:le(t,0)||void 0,minLoc:N(n,"minLoc",1),includeTests:R(n,"includeTests"),skipBarrels:R(n,"skipBarrels"),includeMembers:R(n,"includeMembers"),scanLimit:i.scanLimit,semantic:i.semantic},o=Rt(e,r),s=o.symbols.filter(b=>b.kind==="dead-code"),a=o.symbols.filter(b=>b.kind!=="dead-code"),c=!R(n,"onlyInternal"),l=!R(n,"onlyDead"),u=c?s:[],d=l?a:[],m=u.reduce((b,S)=>b+S.loc,0),p=d.reduce((b,S)=>b+S.loc,0),h={total:u.length+d.length,deadCode:u.length,fileInternal:d.length,loc:m+p};if(R(n,"json")){F("dead",t,n,{...o,shown:{deadCode:u,fileInternal:d},shownCounts:h,totals:{total:o.counts.total,deadCode:o.counts.deadCode,fileInternal:o.counts.fileInternal,loc:o.counts.loc}});return}if(u.length===0&&d.length===0){P.empty("No matching dead-code symbols found.");return}u.length>0&&Dl(u,"DEAD CODE",` Zero references anywhere \u2014 no cross-file callers AND no same-file uses.
824
- Safe to delete.`,m),d.length>0&&(u.length>0&&console.log(""),Dl(d,"FILE-INTERNAL ONLY",` Used only within the same file (no cross-file callers). Could be a
852
+ Detected languages: ${r.languages.join(", ")}`),console.log(`
853
+ Indexer readiness:`);for(let i of r.indexers){let o=i.runnable?" OK":i.installed?" WARN":" MISSING",s=i.resolvedBinary?` (${i.resolvedBinary})`:"";console.log(`${o} ${i.language}: ${i.binaryLabel}${s}`),i.note&&console.log(` ${i.note}`),!i.installed&&i.installUrl&&console.log(` install: ${i.installUrl}`),i.runnable||(e=!0)}if(r.semantic){let i=r.semantic,o=i.available?" OK":i.dependencyAvailable?" WARN":" MISSING",s=i.tsconfigPaths&&i.tsconfigPaths.length>1?` (${i.tsconfigPaths.length} tsconfigs)`:i.tsconfigPath?` (${i.tsconfigPath})`:"";console.log(`
854
+ Semantic provider readiness:`),console.log(`${o} typescript: ts-morph${s}`),i.reason&&console.log(` ${i.reason}; semantic checks will fall back to SCIP/source evidence`)}process.exitCode=e?1:0}function Ry(e){wy(e,"capabilities")}function ky(e){wy(e,"capability-matrix")}function wy(e,t){let n=se(e),r=de(),i=Pe(r),o=Ct(r,i),s=Bn(o);if(R(n,"json")){A(t,[],n,s);return}Yl(s)}function Ly(){let e=de(),t=Tt(e),n=zf(e,t);console.log(`Config written to ${n}`),console.log(`Detected languages: ${t.join(", ")||"(none)"}`)}function Iy(e){let t=se(e),n=de(),r=Pe(n),i=Ir(r,{projectRoot:n});if(R(t,"json"))A("config-validate",[],t,{diagnostics:i});else if(i.length===0)console.log("Config OK.");else for(let o of i)console.log(`${o.level.toUpperCase()} ${o.path}: ${o.message}`);i.some(o=>o.level==="error")&&(process.exitCode=1)}function Dy(e,t){let n=se(t),r=E(n,"reason");if(!r||r.trim()===""){console.error("error: suppress requires --reason <text>."),process.exitCode=1;return}try{let i=Jf(de(),{id:String(e),check:E(n,"check"),file:E(n,"file"),reason:r,expiresAt:E(n,"expiresAt")});if(R(n,"json")){A("suppress",[String(e)],n,i);return}console.log(`Suppression added to ${i.path} (${i.suppressionCount} total).`)}catch(i){console.error(`error: ${i instanceof Error?i.message:i}`),process.exitCode=1}}function Py(e){let t=se(e),{report:n,hasIndexerProblems:r,hasErrors:i}=Ny("doctor");R(t,"json")?A("doctor",[],t,n):zO(n,r),process.exitCode=i?1:0}function Ny(e){let{projectRoot:t,config:n,paths:r,dbPath:i}=Pr(),o=Ir(n,{projectRoot:t}),s=Ct(t,n),a=Bn(s),c=On(t,n,r),l=s.indexers.some(d=>!d.runnable),u=o.some(d=>d.level==="error")||l||c.state==="missing"||c.state==="stale";return{report:{command:e,projectRoot:t,dbPath:i,configuredDbPath:r.dbPath,exists:Mr(i),configDiagnostics:o,readiness:s,freshness:c,capabilities:a,ok:!u},hasIndexerProblems:l,hasErrors:u}}function Ey(e){let t=se(e),n=de(),r=As(n,{gitHook:R(t,"gitHook")});for(let i of r.written)console.log(` done: ${i}`);for(let i of r.unchanged)console.log(` ok: ${i} (already wired)`);for(let i of r.skipped)console.log(` skip: ${i.target} \u2014 ${i.reason}`);console.log(`
855
+ Agents reading this project now know to route through the scip-query skills and gate their diffs.`),console.log("Keep the index fresh (`scip-query reindex` or `scip-query watch`) so the gate sees current code.")}async function Ty(e){let t=se(e);try{let n=await Qh({gitHook:R(t,"gitHook")});R(t,"json")?A("setup",[],t,n):Yh(n),process.exitCode=n.verdict==="blocked"?1:0}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}function _y(e){let t=se(e),n=de(),r=Zh(n,{force:R(t,"force"),dryRun:R(t,"dryRun")});if(R(t,"dryRun")){console.log(r.content);return}if(r.skipped){console.log(`skip: ${r.path} \u2014 ${r.reason}`);return}console.log(`done: ${r.path}`)}function Fy(e){let t=se(e),n=de(),r=Pe(n),i=ke(t,"debounce"),o=ke(t,"cooldown"),s=ke(t,"gitPoll");i&&((r.watch??={}).debounceMs=i),o&&((r.watch??={}).cooldownMs=o),s&&((r.watch??={}).gitPollMs=s);let a=new Os({projectRoot:n,config:r,languages:r.languages,onStatus:c=>{process.stdout.write(`\r\x1B[K${Xf(c)}`)},onReindexComplete:c=>{console.log(`
856
+ Reindex complete in ${(c/1e3).toFixed(1)}s`)},onError:c=>{console.error(`
857
+ Watch error: ${c.message}`)}});console.log(`Watching ${n}`),console.log(`Debounce: ${r.watch?.debounceMs??3e4}ms | Cooldown: ${r.watch?.cooldownMs??6e4}ms | Git poll: ${r.watch?.gitPollMs??2e3}ms`),console.log(`Press Ctrl+C to stop.
858
+ `),a.start(),process.on("SIGINT",()=>{a.stop(),console.log(`
859
+ Stopped.`),process.exit(0)})}function $y(e){let t=se(e),{report:n}=Ny("status");if(R(t,"json")){A("status",[],t,{...n,stats:Ql(n.exists)});return}JO(n,{capabilities:R(t,"capabilities")})}function zO(e,t){console.log(`Doctor: ${e.ok?"OK":"needs attention"}`);for(let n of e.configDiagnostics)console.log(` ${n.level.toUpperCase()} ${n.path}: ${n.message}`);if(t)for(let n of e.readiness.indexers.filter(r=>!r.runnable))console.log(` MISSING ${n.language}: ${n.note??n.binaryLabel}`);console.log(` Freshness: ${e.freshness.state}${e.freshness.remedy?` (${e.freshness.remedy})`:""}`),Yl(e.capabilities)}function JO(e,t){if(console.log(`Project: ${e.projectRoot}`),console.log(`DB path: ${e.dbPath}`),e.dbPath!==e.configuredDbPath&&console.log(`Config: ${e.configuredDbPath} (fallback to project root index.db)`),e.readiness.semantic){let n=e.readiness.semantic.available?"available":"fallback",r=e.readiness.semantic.tsconfigPaths&&e.readiness.semantic.tsconfigPaths.length>1?` (${e.readiness.semantic.tsconfigPaths.length} tsconfigs)`:e.readiness.semantic.tsconfigPath?` (${e.readiness.semantic.tsconfigPath})`:"";console.log(`TS sem: ${n}${r}`),e.readiness.semantic.reason&&console.log(`TS note: ${e.readiness.semantic.reason}`)}console.log(`Exists: ${e.exists?"yes":"no"}`),console.log(`Fresh: ${e.freshness.state}${e.freshness.remedy?` (${e.freshness.remedy})`:""}`),e.freshness.lastRefresh&&console.log(`Refresh: ${KO(e.freshness.lastRefresh)}`),XO(e.exists),t.capabilities&&(console.log(""),Yl(e.capabilities))}function KO(e){let t=(e.durationMs/1e3).toFixed(1),n=e.trigger.detail?` (${e.trigger.detail})`:"",r=e.error?`: ${e.error}`:"";return`${e.result} by ${e.trigger.kind}${n} in ${t}s at ${e.completedAt}${r}`}function Ql(e){if(e)return Je(t=>{let n=$e(t);return{symbols:n.symbols,files:n.documents,indexSizeBytes:n.indexSizeBytes,lastBuilt:n.lastBuilt?.toISOString()}})}function XO(e){e&&Je(t=>{let n=$e(t);if(console.log(`Symbols: ${n.symbols}`),console.log(`Files: ${n.documents}`),console.log(`Size: ${$n(n.indexSizeBytes)}`),n.lastBuilt){let r=Math.round((Date.now()-n.lastBuilt.getTime())/1e3);console.log(`Built: ${r}s ago`)}})}function Yl(e){console.log(`Capabilities for: ${e.languages.join(", ")||"(no detected languages)"}`);for(let t of e.capabilities)console.log(` ${t.status.toUpperCase().padEnd(11)} ${t.label} [${t.evidence}]`),console.log(` ${t.reason}`);if(e.matrix.length!==0){console.log(`
860
+ Language matrix:`);for(let t of e.matrix){console.log(` ${t.language}`);for(let n of[t.indexing,t.sourceFacts,t.semantic,t.detectors,t.cleanupVerification])console.log(` ${n.status.toUpperCase().padEnd(11)} ${n.label}`),console.log(` ${n.reason}`)}}}function Wi(e){return{...e,options:_(e.options)}}function vt({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,...o}){let s=Wi(o);return{...s,renderShape:"list",handler:ty({commandName:s.id,query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i})}}function qs({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,headers:o,dashWidths:s,...a}){let c=Wi(a);return{...c,renderShape:"table",handler:ny({commandName:c.id,query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,headers:o,dashWidths:s})}}function Ay({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,key:o,...s}){let a=Wi(s);return{...a,renderShape:"grouped-by-file",handler:ry({commandName:a.id,query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,key:o})}}function My({query:e,emptyMessage:t,heuristicLabel:n,sections:r,before:i,after:o,...s}){let a=Wi(s);return{...a,renderShape:"sectioned-report",handler:iy({commandName:a.id,query:e,emptyMessage:t,heuristicLabel:n,before:i,sections:r,after:o})}}function Us({query:e,emptyMessage:t,heuristicLabel:n,sections:r,before:i,after:o,...s}){let a=Wi(s);return{...a,budget:a.budget??"semantic",renderShape:"sectioned-report",handler:oy(a.id,{commandName:a.id,query:e,emptyMessage:t,heuristicLabel:n,before:i,sections:r,after:o})}}function Zl(e,t,n,r){console.log(`\u2550\u2550\u2550 ${t} (${e.length}, ${r} LOC) \u2550\u2550\u2550`),console.log(n),console.log("");let i=new Map;for(let a of e){let c=i.get(a.relativePath)??[];c.push(a),i.set(a.relativePath,c)}let o=[...i.entries()].map(([a,c])=>({file:a,bucket:c,totalLoc:c.reduce((l,u)=>l+u.loc,0)})).sort((a,c)=>c.totalLoc-a.totalLoc||a.file.localeCompare(c.file)),s=!0;for(let{file:a,bucket:c}of o){s||console.log(""),s=!1,console.log(` ${a}`),c.sort((l,u)=>l.startLine-u.startLine);for(let l of c)console.log(` ${Re(l.startLine,l.endLine)} (${l.loc} LOC) ${l.shortName}`)}}var jy=Q("dead",({db:e,args:t,opts:n,budget:r})=>{let i={scope:pe(t,0)||void 0,minLoc:N(n,"minLoc",1),includeTests:R(n,"includeTests"),skipBarrels:R(n,"skipBarrels"),includeMembers:R(n,"includeMembers"),scanLimit:r.scanLimit,semantic:r.semantic},o=Dt(e,i),s=o.symbols.filter(y=>y.kind==="dead-code"),a=o.symbols.filter(y=>y.kind!=="dead-code"),c=!R(n,"onlyInternal"),l=!R(n,"onlyDead"),u=c?s:[],d=l?a:[],m=u.reduce((y,S)=>y+S.loc,0),f=d.reduce((y,S)=>y+S.loc,0),h={total:u.length+d.length,deadCode:u.length,fileInternal:d.length,loc:m+f};if(R(n,"json")){A("dead",t,n,{...o,shown:{deadCode:u,fileInternal:d},shownCounts:h,totals:{total:o.counts.total,deadCode:o.counts.deadCode,fileInternal:o.counts.fileInternal,loc:o.counts.loc}});return}if(u.length===0&&d.length===0){P.empty("No matching dead-code symbols found.");return}u.length>0&&Zl(u,"DEAD CODE",` Zero references anywhere \u2014 no cross-file callers AND no same-file uses.
861
+ Safe to delete.`,m),d.length>0&&(u.length>0&&console.log(""),Zl(d,"FILE-INTERNAL ONLY",` Used only within the same file (no cross-file callers). Could be a
825
862
  single-use helper, an abstraction-in-progress, or a callback registered
826
863
  through a framework path that static analysis cannot trace (signal
827
864
  handlers, event listeners, dependency injection). NOT necessarily dead \u2014
828
- review case by case.`,p));let g=[];c&&g.push(`${u.length} dead code (${m} LOC)`),l&&g.push(`${d.length} file-internal (${p} LOC)`),console.log(`
829
- \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`),console.log(`Total: ${u.length+d.length} symbols \u2014 ${g.join(" + ")}`)}),qh=Nt("unused-imports",{query:({db:e,args:t,budget:n})=>La(e,H(t,0),{semantic:n.semantic}),format:e=>` ${e.shortName} in ${e.importedIn}`,emptyMessage:()=>"No unused imports found.",after:e=>console.log(`
830
- ${e.length} unused import(s)`)}),Uh=vs("isolated",{query:({db:e,opts:t,budget:n})=>pn(e,{scope:E(t,"scope"),minLoc:N(t,"minLoc",3),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${ve(e.startLine,e.endLine)} (${e.loc} LOC) ${e.shortName}`,emptyMessage:()=>"No isolated symbols found.",after:e=>console.log(`
831
- ${e.length} isolated symbol(s)`)}),Wh=X("extract-candidates",({db:e,args:t,opts:n,budget:i})=>{let r=yn(e,{scope:E(n,"scope"),minLoc:N(n,"minLoc",10),minCallees:N(n,"minCallees",6),limit:O(n,"limit",20),scanLimit:i.scanLimit,semantic:i.semantic});if(R(n,"json")){F("extract-candidates",t,n,r);return}if(r.length===0)return P.empty("No extraction candidates found.");bi("extraction candidates");for(let o of r){console.log(`
832
- ${ye(o.relativePath,o.startLine,o.endLine)} ${o.shortName} (${o.loc} LOC, ${o.totalCallees} callees)`),console.log(` Kind: ${o.extractionKind}; tier: ${o.actionTier}`),console.log(` Recommendation: ${o.recommendation}`);for(let s of o.evidenceReasons)console.log(` - ${s}`);for(let s=0;s<o.clusters.length;s++){let a=o.clusters[s];console.log(` Cluster ${s+1} (${Math.round(a.isolation*100)}% isolated, ${a.callees.length} callees):`);for(let c of a.callees)console.log(` ${c}`)}}console.log(`
833
- ${r.length} extraction candidate(s) found.`)}),Gh=X("locality-candidates",({db:e,args:t,opts:n,budget:i})=>{let r=Ya(e,{target:le(t,0)||void 0,scope:E(n,"scope"),minConsumers:N(n,"minConsumers",1),limit:O(n,"limit",20),scanLimit:i.scanLimit,semantic:i.semantic,architecturalBoundarySegments:e.config.locality?.architecturalBoundarySegments});if(R(n,"json")){F("locality-candidates",t,n,r);return}if(r.length===0)return P.empty("No locality candidates found.");bi("locality candidates");for(let o of r){let s=o.sourceUnit.kind==="symbol"&&o.sourceUnit.startLine!==void 0&&o.sourceUnit.endLine!==void 0?ye(o.sourceUnit.file,o.sourceUnit.startLine,o.sourceUnit.endLine):o.sourceUnit.file;if(console.log(`
865
+ review case by case.`,f));let g=[];c&&g.push(`${u.length} dead code (${m} LOC)`),l&&g.push(`${d.length} file-internal (${f} LOC)`),console.log(`
866
+ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`),console.log(`Total: ${u.length+d.length} symbols \u2014 ${g.join(" + ")}`)}),Oy=Ft("unused-imports",{query:({db:e,args:t,budget:n})=>za(e,H(t,0),{semantic:n.semantic}),format:e=>` ${e.shortName} in ${e.importedIn}`,emptyMessage:()=>"No unused imports found.",after:e=>console.log(`
867
+ ${e.length} unused import(s)`)}),By=Vs("isolated",{query:({db:e,opts:t,budget:n})=>xn(e,{scope:E(t,"scope"),minLoc:N(t,"minLoc",3),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${Re(e.startLine,e.endLine)} (${e.loc} LOC) ${e.shortName}`,emptyMessage:()=>"No isolated symbols found.",after:e=>console.log(`
868
+ ${e.length} isolated symbol(s)`)}),Hy=Q("extract-candidates",({db:e,args:t,opts:n,budget:r})=>{let i=wn(e,{scope:E(n,"scope"),minLoc:N(n,"minLoc",10),minCallees:N(n,"minCallees",6),limit:O(n,"limit",20),scanLimit:r.scanLimit,semantic:r.semantic});if(R(n,"json")){A("extract-candidates",t,n,i);return}if(i.length===0)return P.empty("No extraction candidates found.");Er("extraction candidates");for(let o of i){console.log(`
869
+ ${Se(o.relativePath,o.startLine,o.endLine)} ${o.shortName} (${o.loc} LOC, ${o.totalCallees} callees)`),console.log(` Kind: ${o.extractionKind}; tier: ${o.actionTier}`),console.log(` Recommendation: ${o.recommendation}`);for(let s of o.evidenceReasons)console.log(` - ${s}`);for(let s=0;s<o.clusters.length;s++){let a=o.clusters[s];console.log(` Cluster ${s+1} (${Math.round(a.isolation*100)}% isolated, ${a.callees.length} callees):`);for(let c of a.callees)console.log(` ${c}`)}}console.log(`
870
+ ${i.length} extraction candidate(s) found.`)}),Vy=Q("locality-candidates",({db:e,args:t,opts:n,budget:r})=>{let i=Sc(e,{target:pe(t,0)||void 0,scope:E(n,"scope"),minConsumers:N(n,"minConsumers",1),limit:O(n,"limit",20),scanLimit:r.scanLimit,semantic:r.semantic,architecturalBoundarySegments:e.config.locality?.architecturalBoundarySegments});if(R(n,"json")){A("locality-candidates",t,n,i);return}if(i.length===0)return P.empty("No locality candidates found.");Er("locality candidates");for(let o of i){let s=o.sourceUnit.kind==="symbol"&&o.sourceUnit.startLine!==void 0&&o.sourceUnit.endLine!==void 0?Se(o.sourceUnit.file,o.sourceUnit.startLine,o.sourceUnit.endLine):o.sourceUnit.file;if(console.log(`
834
871
  ${s} ${o.sourceUnit.shortName}`),console.log(` Current directory: ${o.currentDirectory}; tier: ${o.recommendedTier}; action: ${o.actionTier}`),console.log(` Consumer coverage: ${o.consumerCoverage}; consumers: ${o.consumerFiles.length}`),o.nearestCommonOwner&&console.log(` Nearest common owner: ${o.nearestCommonOwner}`),o.suggestedHome&&console.log(` Suggested home: ${o.suggestedHome}`),o.whyNoSuggestedHome&&console.log(` Suggested home withheld: ${o.whyNoSuggestedHome}`),o.boundaryMarkers.length>0&&console.log(` Boundary markers: ${o.boundaryMarkers.join("; ")}`),console.log(` Recommendation: ${o.recommendation}`),o.consumerFiles.length>0){for(let a of o.consumerFiles.slice(0,8))console.log(` - consumer: ${a}`);o.consumerFiles.length>8&&console.log(` - ... ${o.consumerFiles.length-8} more consumer(s)`)}for(let a of o.counterevidence)console.log(` - counterevidence: ${a}`)}console.log(`
835
- ${r.length} locality candidate(s) found.`)}),zh=Nt("wrapper-candidates",{query:({db:e,opts:t,budget:n})=>Ln(e,{scope:E(t,"scope"),maxLoc:N(t,"maxLoc",15),limit:O(t,"limit",30),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${ye(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.loc} LOC)
872
+ ${i.length} locality candidate(s) found.`)}),qy=Ft("wrapper-candidates",{query:({db:e,opts:t,budget:n})=>_n(e,{scope:E(t,"scope"),maxLoc:N(t,"maxLoc",15),limit:O(t,"limit",30),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${Se(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.loc} LOC)
836
873
  Only called by: ${e.singleCallerShort} (fan-in: ${e.callerFanIn}, tier: ${e.actionTier})`+(e.boundaryEvidence.length>0?`
837
874
  Boundary evidence: ${e.boundaryEvidence.join("; ")}`:""),emptyMessage:()=>"No wrapper candidates found.",heuristicLabel:"wrapper candidates",after:e=>console.log(`
838
- ${e.length} wrapper candidate(s).`)}),Kh=Nt("passthrough-candidates",{query:({db:e,opts:t,budget:n})=>kn(e,{scope:E(t,"scope"),maxLoc:N(t,"maxLoc",15),limit:O(t,"limit",30),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${ye(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.loc} LOC)
875
+ ${e.length} wrapper candidate(s).`)}),Uy=Ft("passthrough-candidates",{query:({db:e,opts:t,budget:n})=>En(e,{scope:E(t,"scope"),maxLoc:N(t,"maxLoc",15),limit:O(t,"limit",30),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${Se(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.loc} LOC)
839
876
  Forwards to: ${e.forwardsToShort} (${e.forwardsToFile}, tier: ${e.actionTier})
840
877
  Recommendation: ${e.recommendation}`+(e.boundaryEvidence.length>0?`
841
878
  Boundary evidence: ${e.boundaryEvidence.join("; ")}`:"")+(e.publicFacadeEvidence.length>0?`
842
879
  Public facade evidence: ${e.publicFacadeEvidence.join("; ")}`:""),emptyMessage:()=>"No passthrough candidates found.",heuristicLabel:"passthrough candidates",after:e=>console.log(`
843
- ${e.length} passthrough candidate(s).`)}),Jh=Nt("stale-abstractions",{query:({db:e,opts:t,budget:n})=>wn(e,{scope:E(t,"scope"),minLoc:N(t,"minLoc",3),limit:O(t,"limit",30),includeLowConfidence:R(t,"includeLowConfidence"),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>{let t=e.consumers===0?"unused":`${e.consumers} consumer`,n=e.barrelConsumers>0?`, +${e.barrelConsumers} barrel`:"";return` [${e.confidence}] ${ye(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.kind}, ${e.loc} LOC, ${t}${n})
880
+ ${e.length} passthrough candidate(s).`)}),Wy=Ft("stale-abstractions",{query:({db:e,opts:t,budget:n})=>Tn(e,{scope:E(t,"scope"),minLoc:N(t,"minLoc",3),limit:O(t,"limit",30),includeLowConfidence:R(t,"includeLowConfidence"),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>{let t=e.consumers===0?"unused":`${e.consumers} consumer`,n=e.barrelConsumers>0?`, +${e.barrelConsumers} barrel`:"";return` [${e.confidence}] ${Se(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.kind}, ${e.loc} LOC, ${t}${n})
844
881
  ${e.reason}
845
882
  Kind: ${e.stalenessKind}; tier: ${e.actionTier}
846
883
  Recommendation: ${e.recommendation}`},emptyMessage:()=>"No stale abstractions found.",heuristicLabel:"stale abstraction candidates",after:e=>console.log(`
847
- ${e.length} stale abstraction(s).`)}),Qh=Cs("complexity-hotspots",{headers:["score"," LOC","fan-in","fan-out","callees","symbol"],query:({db:e,opts:t,budget:n})=>fr(e,{scope:E(t,"scope"),minLoc:N(t,"minLoc",10),limit:O(t,"limit",20),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${e.score.toFixed(1).padStart(5)} ${String(e.loc).padStart(4)} ${String(e.fanIn).padStart(6)} ${String(e.fanOut).padStart(7)} ${String(e.calleeCount).padStart(7)} ${e.shortName}`,emptyMessage:()=>"No complexity hotspots found.",heuristicLabel:"complexity hotspot candidates",dashWidths:[5,4,6,7,7,6]}),Xh=ze("similar",{query:({db:e,args:t,opts:n,budget:i})=>{let r=le(t,0);return r?{mode:"target",rows:Zi(e,r,{minSimilarity:N(n,"minSimilarity",.4),limit:O(n,"limit",20),scanLimit:i.scanLimit,semantic:i.semantic})}:{mode:"all",rows:kt(e,{minSimilarity:N(n,"minSimilarity",.4),limit:O(n,"limit",20),scope:E(n,"scope"),minCallees:N(n,"minCallees",4),crossFileOnly:R(n,"crossFileOnly"),scanLimit:i.scanLimit,semantic:i.semantic})}},emptyMessage:e=>{if(!(e.rows.length>0))return e.mode==="target"?"No similar symbols found.":"No similar symbol pairs found."},heuristicLabel:"similarity candidates",render:e=>{if(e.mode==="target"){P.list(e.rows,t=>{let n=t.similarityBasis??"callees",i=n==="source-tokens"?"Shared source tokens":"Shared callees",r=n==="source-tokens"?"Only tokens in":"Only in",o=[`
848
- ${Math.round(t.similarity*100)}% similar:`,` A: ${t.shortNameA} (${t.fileA})`,` B: ${t.shortNameB} (${t.fileB})`,` Evidence class: ${t.evidenceClass} (tier: ${t.actionTier})`,` Recommendation: ${t.recommendation}`,` ${i}: ${t.sharedCallees.join(", ")}`];return t.evidenceClassReasons.length&&o.push(` Evidence reasons: ${t.evidenceClassReasons.join("; ")}`),t.uniqueToA.length&&o.push(` ${r} A: ${t.uniqueToA.join(", ")}`),t.uniqueToB.length&&o.push(` ${r} B: ${t.uniqueToB.join(", ")}`),o.join(`
884
+ ${e.length} stale abstraction(s).`)}),Gy=Hs("complexity-hotspots",{headers:["score"," LOC","fan-in","fan-out","callees","symbol"],query:({db:e,opts:t,budget:n})=>Di(e,{scope:E(t,"scope"),minLoc:N(t,"minLoc",10),limit:O(t,"limit",20),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${e.score.toFixed(1).padStart(5)} ${String(e.loc).padStart(4)} ${String(e.fanIn).padStart(6)} ${String(e.fanOut).padStart(7)} ${String(e.calleeCount).padStart(7)} ${e.shortName}`,emptyMessage:()=>"No complexity hotspots found.",heuristicLabel:"complexity hotspot candidates",dashWidths:[5,4,6,7,7,6]}),zy=Xe("similar",{query:({db:e,args:t,opts:n,budget:r})=>{let i=pe(t,0);return i?{mode:"target",rows:mi(e,i,{minSimilarity:N(n,"minSimilarity",.4),limit:O(n,"limit",20),scanLimit:r.scanLimit,semantic:r.semantic})}:{mode:"all",rows:Pt(e,{minSimilarity:N(n,"minSimilarity",.4),limit:O(n,"limit",20),scope:E(n,"scope"),minCallees:N(n,"minCallees",4),crossFileOnly:R(n,"crossFileOnly"),scanLimit:r.scanLimit,semantic:r.semantic})}},emptyMessage:e=>{if(!(e.rows.length>0))return e.mode==="target"?"No similar symbols found.":"No similar symbol pairs found."},heuristicLabel:"similarity candidates",render:e=>{if(e.mode==="target"){P.list(e.rows,t=>{let n=t.similarityBasis??"callees",r=n==="source-tokens"?"Shared source tokens":"Shared callees",i=n==="source-tokens"?"Only tokens in":"Only in",o=[`
885
+ ${Math.round(t.similarity*100)}% similar:`,` A: ${t.shortNameA} (${t.fileA})`,` B: ${t.shortNameB} (${t.fileB})`,` Evidence class: ${t.evidenceClass} (tier: ${t.actionTier})`,` Recommendation: ${t.recommendation}`,` ${r}: ${t.sharedCallees.join(", ")}`];return t.evidenceClassReasons.length&&o.push(` Evidence reasons: ${t.evidenceClassReasons.join("; ")}`),t.uniqueToA.length&&o.push(` ${i} A: ${t.uniqueToA.join(", ")}`),t.uniqueToB.length&&o.push(` ${i} B: ${t.uniqueToB.join(", ")}`),o.join(`
849
886
  `)});return}P.list(e.rows,t=>`
850
887
  ${Math.round(t.similarity*100)}% similar:
851
888
  A: ${t.shortNameA} (${t.fileA})
@@ -854,85 +891,85 @@ ${Math.round(t.similarity*100)}% similar:
854
891
  Recommendation: ${t.recommendation}
855
892
  `+(t.evidenceClassReasons.length?` Evidence reasons: ${t.evidenceClassReasons.join("; ")}
856
893
  `:"")+` Shared ${t.similarityBasis==="source-tokens"?"source tokens":"callees"}: ${t.sharedCallees.join(", ")}`),console.log(`
857
- ${e.rows.length} similar pair(s) found.`)}}),Yh=_n({commandName:"similar-files",query:({db:e,args:t,opts:n})=>Ga(e,{minSimilarity:N(n,"minSimilarity",.5),limit:O(n,"limit",20),scope:E(n,"scope"),minDeps:Ee(n,"minDeps"),filePattern:le(t,0)}),emptyMessage:e=>e.length===0?"No similar file pairs found.":void 0,heuristicLabel:"similar file candidates",render:e=>{P.list(e,t=>{let n=[`
894
+ ${e.rows.length} similar pair(s) found.`)}}),Jy=Vn({commandName:"similar-files",query:({db:e,args:t,opts:n})=>pc(e,{minSimilarity:N(n,"minSimilarity",.5),limit:O(n,"limit",20),scope:E(n,"scope"),minDeps:ke(n,"minDeps"),filePattern:pe(t,0)}),emptyMessage:e=>e.length===0?"No similar file pairs found.":void 0,heuristicLabel:"similar file candidates",render:e=>{P.list(e,t=>{let n=[`
858
895
  ${Math.round(t.similarity*100)}% similar:`,` ${t.fileA}`,` ${t.fileB}`,` Shared deps (${t.sharedDeps.length}): ${t.sharedDeps.join(", ")}`];return t.uniqueToA.length&&n.push(` Only in first: ${t.uniqueToA.join(", ")}`),t.uniqueToB.length&&n.push(` Only in second: ${t.uniqueToB.join(", ")}`),n.join(`
859
896
  `)}),console.log(`
860
- ${e.length} similar pair(s) found.`)}}),Zh=_n({commandName:"similar-chains",query:({db:e,opts:t})=>za(e,{minSimilarity:N(t,"minSimilarity",.5),limit:O(t,"limit",15),scope:E(t,"scope"),minChainLength:N(t,"minLength",3),maxChainLength:N(t,"maxLength",8)}),emptyMessage:e=>e.length===0?"No similar chains found.":void 0,heuristicLabel:"similar chain candidates",render:e=>{for(let t=0;t<e.length;t++){let n=e[t];console.log(`
861
- \u2500\u2500 Chain pair ${t+1} (${Math.round(n.similarity*100)}% similar, ${n.divergencePoints.length} divergence point(s)) \u2500\u2500`),console.log(` Chain A: ${n.chainA.join(" \u2192 ")}`),console.log(` Chain B: ${n.chainB.join(" \u2192 ")}`),n.commonPrefix.length&&console.log(` Common prefix: ${n.commonPrefix.join(" \u2192 ")}`),n.commonSuffix.length&&console.log(` Common suffix: ${n.commonSuffix.join(" \u2192 ")}`),console.log(" Divergence points (consolidation targets):");for(let i of n.divergencePoints)console.log(` [${i.index}] ${i.nodeA} \u2194 ${i.nodeB}`)}console.log(`
862
- ${e.length} similar chain pair(s) found.`)}}),eb=ze("drift",{query:({db:e,args:t,opts:n,budget:i})=>Rn(e,{scope:le(t,0),minDeviation:N(n,"minDeviation",5),semantic:i.semantic}),emptyMessage:e=>e.results.length===0?"No drift detected.":void 0,heuristicLabel:"drift candidates",render:e=>{console.log(""),P.groupedByFile(e.results,t=>{let n=t.kind==="unused-import"?"UNUSED":t.kind==="layer-violation"?"LAYER":"UNIQUE",i=t.policyBasis?`, policy: ${t.policyBasis}`:"",r=[` [${n}] ${t.description}`,` Tier: ${t.actionTier}${i}`,` Recommendation: ${t.recommendation}`,` Evidence: ${t.evidenceReasons.join("; ")}`];return t.detail&&r.push(` ${t.detail}`),r.join(`
897
+ ${e.length} similar pair(s) found.`)}}),Ky=Vn({commandName:"similar-chains",query:({db:e,opts:t})=>fc(e,{minSimilarity:N(t,"minSimilarity",.5),limit:O(t,"limit",15),scope:E(t,"scope"),minChainLength:N(t,"minLength",3),maxChainLength:N(t,"maxLength",8)}),emptyMessage:e=>e.length===0?"No similar chains found.":void 0,heuristicLabel:"similar chain candidates",render:e=>{for(let t=0;t<e.length;t++){let n=e[t];console.log(`
898
+ \u2500\u2500 Chain pair ${t+1} (${Math.round(n.similarity*100)}% similar, ${n.divergencePoints.length} divergence point(s)) \u2500\u2500`),console.log(` Chain A: ${n.chainA.join(" \u2192 ")}`),console.log(` Chain B: ${n.chainB.join(" \u2192 ")}`),n.commonPrefix.length&&console.log(` Common prefix: ${n.commonPrefix.join(" \u2192 ")}`),n.commonSuffix.length&&console.log(` Common suffix: ${n.commonSuffix.join(" \u2192 ")}`),console.log(" Divergence points (consolidation targets):");for(let r of n.divergencePoints)console.log(` [${r.index}] ${r.nodeA} \u2194 ${r.nodeB}`)}console.log(`
899
+ ${e.length} similar chain pair(s) found.`)}}),Xy=Xe("drift",{query:({db:e,args:t,opts:n,budget:r})=>Nn(e,{scope:pe(t,0),minDeviation:N(n,"minDeviation",5),semantic:r.semantic}),emptyMessage:e=>e.results.length===0?"No drift detected.":void 0,heuristicLabel:"drift candidates",render:e=>{console.log(""),P.groupedByFile(e.results,t=>{let n=t.kind==="unused-import"?"UNUSED":t.kind==="layer-violation"?"LAYER":"UNIQUE",r=t.policyBasis?`, policy: ${t.policyBasis}`:"",i=[` [${n}] ${t.description}`,` Tier: ${t.actionTier}${r}`,` Recommendation: ${t.recommendation}`,` Evidence: ${t.evidenceReasons.join("; ")}`];return t.detail&&i.push(` ${t.detail}`),i.join(`
863
900
  `)},t=>t.file),console.log(`
864
- ${e.unusedImports} unused import(s), ${e.layerViolations} layer violation(s), ${e.patternDeviations} pattern deviation(s)`)}}),tb=ze("convergence",{query:({db:e,args:t,budget:n})=>Pc(e,H(t,0),H(t,1),{semantic:n.semantic}),emptyMessage:e=>e?void 0:"One or both symbols not found.",render:e=>{if(e){console.log(`
901
+ ${e.unusedImports} unused import(s), ${e.layerViolations} layer violation(s), ${e.patternDeviations} pattern deviation(s)`)}}),Qy=Xe("convergence",{query:({db:e,args:t,budget:n})=>Yc(e,H(t,0),H(t,1),{semantic:n.semantic}),emptyMessage:e=>e?void 0:"One or both symbols not found.",render:e=>{if(e){console.log(`
865
902
  ${Math.round(e.similarity*100)}% callee overlap
866
903
  `),console.log(` A: ${e.symbolA.shortName} (${e.symbolA.file}, ${e.symbolA.loc} LOC)`),console.log(` B: ${e.symbolB.shortName} (${e.symbolB.file}, ${e.symbolB.loc} LOC)
867
904
  `),console.log(` Shared callees (${e.sharedCallees.length}):`);for(let t of e.sharedCallees)console.log(` ${t}`);if(e.uniqueToA.length>0){console.log(`
868
905
  Unique to A (${e.uniqueToA.length}):`);for(let t of e.uniqueToA)console.log(` ${t}`)}if(e.uniqueToB.length>0){console.log(`
869
906
  Unique to B (${e.uniqueToB.length}):`);for(let t of e.uniqueToB)console.log(` ${t}`)}console.log(`
870
- Strategy: ${e.consolidationStrategy}`)}}}),nb=Nt("similar-signatures",{query:({db:e,opts:t,budget:n})=>$c(e,{scope:E(t,"scope"),minLoc:N(t,"minLoc",3),limit:O(t,"limit",20),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>{let t=`
871
- Signature: ${e.signature} (${e.functions.length} functions)`,n=e.functions.map(i=>` ${ye(i.file,i.startLine,i.endLine)} ${i.shortName} (${i.loc} LOC)`).join(`
907
+ Strategy: ${e.consolidationStrategy}`)}}}),Yy=Ft("similar-signatures",{query:({db:e,opts:t,budget:n})=>rl(e,{scope:E(t,"scope"),minLoc:N(t,"minLoc",3),limit:O(t,"limit",20),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>{let t=`
908
+ Signature: ${e.signature} (${e.functions.length} functions)`,n=e.functions.map(r=>` ${Se(r.file,r.startLine,r.endLine)} ${r.shortName} (${r.loc} LOC)`).join(`
872
909
  `);return`${t}
873
910
  ${n}`},emptyMessage:()=>"No same-shape function groups found.",after:e=>console.log(`
874
- ${e.length} group(s) found.`)}),ib=X("cleanup-plan",({db:e,args:t,opts:n,budget:i})=>{let r=Lo(e,{scope:E(n,"scope"),minLoc:N(n,"minLoc",1),maxDepth:N(n,"maxDepth",5),scanLimit:i.scanLimit}),o=be(),s=R(n,"patch"),a=R(n,"json"),c=R(n,"verify")||s;if(s&&!R(n,"verify")){console.error("error: cleanup-plan --patch requires --verify."),process.exitCode=1;return}if(r.batches.length===0){if(a){F("cleanup-plan",t,n,r);return}return P.empty("Nothing deletable found \u2014 no graph-fact dead code to seed a cascade.")}let l=tl(r),u=c?Yc(o,r):void 0;if(a){F("cleanup-plan",t,n,{result:r,verification:u});return}if(s){let d=nl(u,l);if(d.length>0){for(let p of d)console.error(`error: ${p}`);process.exitCode=1;return}let m=Qf(o,l);if(m.trim()===""){console.error("error: verified cleanup plan produced an empty patch."),process.exitCode=1;return}console.error(`cleanup-plan --patch: ${l.length} compiler-verified batch(es), ${r.totalLoc} LOC.`),console.log(m);return}console.log(`Cleanup plan: ${r.totalSymbols} symbol(s), ${r.totalLoc} LOC across ${r.batches.length} batch(es).`),console.log(`Apply one batch at a time; run your typecheck between batches.
875
- `);for(let d of r.batches){let m=d.depth===0?`\u2500\u2500 Batch 0: deletable now (graph-fact, ${d.loc} LOC) \u2500\u2500`:`\u2500\u2500 Batch ${d.depth}: dead once batch ${d.depth-1} lands (cascade, ${d.loc} LOC) \u2500\u2500`;console.log(m);for(let p of d.entries)console.log(` ${p.file}:${p.startLine+1}-${p.endLine+1} ${p.shortName} (${p.loc} LOC)`);d.filesEmptied.length>0&&console.log(` -> empties: ${d.filesEmptied.join(", ")}`),console.log("")}if(r.blocked.length>0){console.log("Cascade blocked (references outside the removal set):");for(let d of r.blocked)console.log(` ${d.shortName} (${d.file}) blocked by ${d.blockingFiles.join(", ")}`)}if(u){if(console.log(`
876
- Verifying batches against the project checker (throwaway worktree at HEAD)...`),u.checkers.length===0){console.log(" No checker detected (need tsconfig.json or a Cargo.toml) \u2014 skipped.");return}for(let d of u.checkers)console.log(` Checker: ${d}`);u.uncoveredFiles.length>0&&console.log(` WARNING: no checker covers these plan files (entries there are NOT verified): ${u.uncoveredFiles.join(", ")}`),u.baselineErrors>0&&console.log(` Baseline has ${u.baselineErrors} pre-existing error(s) \u2014 verifying differentially (no NEW errors).`),u.dirtyOverlap.length>0&&console.log(` WARNING: plan files dirty in working tree (verification runs at HEAD): ${u.dirtyOverlap.join(", ")}`);for(let d of u.batches)if(d.status==="verified")console.log(` Batch ${d.depth}: COMPILER-VERIFIED`);else{console.log(` Batch ${d.depth}: FAILED \u2014 the errors below name references the static evidence missed:`);for(let m of d.errors??[])console.log(` ${m}`)}}}),rb=X("cleanup-apply",({db:e,opts:t,budget:n})=>{if(!R(t,"verified")){console.error("error: cleanup-apply requires --verified so deletions are checked before mutating files."),process.exitCode=1;return}let i=R(t,"all"),r=Ee(t,"batch");if(i===(r!==void 0)){console.error("error: choose exactly one of --all or --batch <n>."),process.exitCode=1;return}let o=Lo(e,{scope:E(t,"scope"),minLoc:N(t,"minLoc",1),maxDepth:N(t,"maxDepth",5),scanLimit:n.scanLimit});if(o.batches.length===0){P.empty("Nothing deletable found \u2014 no graph-fact dead code to seed a cascade.");return}let s=tl(o,{all:i,batch:r});if(s.length===0){console.error(`error: No cleanup batch ${r} exists.`),process.exitCode=1;return}let a=be(),c=Yc(a,o),l=nl(c,s,{allowDirty:R(t,"forceDirty")});if(l.length>0){for(let m of l)console.error(`error: ${m}`);process.exitCode=1;return}el(a,s);let u=s.reduce((m,p)=>m+p.entries.length,0),d=s.reduce((m,p)=>m+p.loc,0);console.log(`Applied ${s.length} compiler-verified cleanup batch(es): ${u} symbol(s), ${d} LOC.`)}),ob=X("recent-duplicates",({db:e,args:t,opts:n,budget:i})=>{let r=vc(e,{windowCommits:N(n,"window",100),minSimilarity:Ee(n,"minSimilarity"),limit:O(n,"limit",30),scope:E(n,"scope"),scanLimit:i.scanLimit,semantic:i.semantic});if(R(n,"json")){F("recent-duplicates",t,n,r);return}if(!r.available)return P.empty("No git history available (not a repository, or git missing).");if(r.findings.length===0)return P.empty(`No recent re-implementations found (window: last ${r.windowCommits} commits).`);console.log(`Recent re-implementations (window: last ${r.windowCommits} commits):
877
- `);let o=r.rootCauseGroups?.filter(s=>s.count>1)??[];if(o.length>0){console.log(`Root-cause groups (${o.length}):`);for(let s of o)console.log(` ${s.count} pair(s) ${s.kind.toUpperCase()} ${s.domain} ${Math.round(s.maxSimilarity*100)}% max`),s.establishedFile&&s.establishedSymbol&&console.log(` established: ${s.establishedFile} ${s.establishedSymbol}`),console.log(` files: ${s.relatedFiles.slice(0,6).join(", ")}`),console.log(` -> ${s.recommendation}`);console.log("")}for(let s of r.findings){let a=s.sharedEvidence.slice(0,16).join(", ");s.kind==="echo"?(console.log(` ${Math.round(s.similarity*100)}% ECHO ${s.domain} ${s.echoFile} ${s.echoSymbol} (added ${s.echoAgeCommits} commits ago)`),console.log(` duplicates established ${s.establishedFile} ${s.establishedSymbol}`)):(console.log(` ${Math.round(s.similarity*100)}% TWIN ${s.domain} ${s.echoFile} ${s.echoSymbol}`),console.log(` and ${s.establishedFile} ${s.establishedSymbol} (both new \u2014 consolidate before they diverge)`)),console.log(` basis: ${s.basis}`),a.length>0&&console.log(` shared: ${a}`)}console.log(`
878
- ${r.findings.length} finding(s). ECHO: prefer extending the established side and deleting the echo.`)}),sb=z(({db:e,args:t,opts:n})=>{let i=gc(e,{doc:t[0]===void 0?void 0:H(t,0),limit:O(n,"limit",20),minCoupling:N(n,"minCoupling",3)});if(R(n,"json")){F("doc-drift",t,n,i);return}if(!i.available)return P.empty("No git history available (not a repository, or git missing).");if(i.findings.length===0)return P.empty(`No drifting docs found across ${i.docsScanned} doc(s) \u2014 referenced and co-changed code has not moved since each doc last changed.`);console.log(`Docs whose referenced or co-changed code moved on without them (${i.docsScanned} docs scanned, ${i.commitsAnalyzed} commits analyzed):
879
- `);for(let r of i.findings){console.log(` staleness ${r.staleness} ${r.doc}`);for(let o of r.brokenReferences.slice(0,4))console.log(` BROKEN REFERENCE: cites ${o} \u2014 that file no longer exists`);for(let o of r.subjects.slice(0,4)){let s=o.evidence==="both"?`referenced by doc + coupled ${o.coChanges}x`:o.evidence==="reference"?"referenced by doc":`coupled ${o.coChanges}x historically`;console.log(` ${o.changesSinceDocUpdate} change(s) since doc update ${o.file} (${s}; ${o.actionTier}/${o.docIntent})`);let a=o.docIntentReasons[0];a&&console.log(` intent: ${a}`);let c=o.citationContexts?.[0];c&&console.log(` cited claim: ${Jo(c)}`)}}console.log(`
880
- Stale standards docs are worse than none \u2014 agents implement to a dead spec.`)}),ab=Nt("unused-params",{query:({db:e,opts:t,budget:n})=>ur(e,{scope:E(t,"scope"),limit:O(t,"limit",30),scanLimit:n.scanLimit}),format:e=>` ${ye(e.file,e.startLine,e.endLine)} ${e.shortName}
911
+ ${e.length} group(s) found.`)}),Zy=Q("cleanup-plan",({db:e,args:t,opts:n,budget:r})=>{let i=Go(e,{scope:E(n,"scope"),minLoc:N(n,"minLoc",1),maxDepth:N(n,"maxDepth",5),scanLimit:r.scanLimit}),o=de(),s=R(n,"patch"),a=R(n,"json"),c=R(n,"verify")||s;if(s&&!R(n,"verify")){console.error("error: cleanup-plan --patch requires --verify."),process.exitCode=1;return}if(i.batches.length===0){if(a){A("cleanup-plan",t,n,i);return}return P.empty("Nothing deletable found \u2014 no graph-fact dead code to seed a cascade.")}let l=Bl(i),u=c?Ml(o,i):void 0;if(a){A("cleanup-plan",t,n,{result:i,verification:u});return}if(s){let d=Hl(u,l);if(d.length>0){for(let f of d)console.error(`error: ${f}`);process.exitCode=1;return}let m=Lh(o,l);if(m.trim()===""){console.error("error: verified cleanup plan produced an empty patch."),process.exitCode=1;return}console.error(`cleanup-plan --patch: ${l.length} compiler-verified batch(es), ${i.totalLoc} LOC.`),console.log(m);return}console.log(`Cleanup plan: ${i.totalSymbols} symbol(s), ${i.totalLoc} LOC across ${i.batches.length} batch(es).`),console.log(`Apply one batch at a time; run your typecheck between batches.
912
+ `);for(let d of i.batches){let m=d.depth===0?`\u2500\u2500 Batch 0: deletable now (graph-fact, ${d.loc} LOC) \u2500\u2500`:`\u2500\u2500 Batch ${d.depth}: dead once batch ${d.depth-1} lands (cascade, ${d.loc} LOC) \u2500\u2500`;console.log(m);for(let f of d.entries)console.log(` ${f.file}:${f.startLine+1}-${f.endLine+1} ${f.shortName} (${f.loc} LOC)`);d.filesEmptied.length>0&&console.log(` -> empties: ${d.filesEmptied.join(", ")}`),console.log("")}if(i.blocked.length>0){console.log("Cascade blocked (references outside the removal set):");for(let d of i.blocked)console.log(` ${d.shortName} (${d.file}) blocked by ${d.blockingFiles.join(", ")}`)}if(u){if(console.log(`
913
+ Verifying batches against the project checker (throwaway worktree at HEAD)...`),u.checkers.length===0){console.log(" No checker detected (need tsconfig.json or a Cargo.toml) \u2014 skipped.");return}for(let d of u.checkers)console.log(` Checker: ${d}`);u.uncoveredFiles.length>0&&console.log(` WARNING: no checker covers these plan files (entries there are NOT verified): ${u.uncoveredFiles.join(", ")}`),u.baselineErrors>0&&console.log(` Baseline has ${u.baselineErrors} pre-existing error(s) \u2014 verifying differentially (no NEW errors).`),u.dirtyOverlap.length>0&&console.log(` WARNING: plan files dirty in working tree (verification runs at HEAD): ${u.dirtyOverlap.join(", ")}`);for(let d of u.batches)if(d.status==="verified")console.log(` Batch ${d.depth}: COMPILER-VERIFIED`);else{console.log(` Batch ${d.depth}: FAILED \u2014 the errors below name references the static evidence missed:`);for(let m of d.errors??[])console.log(` ${m}`)}}}),eb=Q("cleanup-apply",({db:e,opts:t,budget:n})=>{if(!R(t,"verified")){console.error("error: cleanup-apply requires --verified so deletions are checked before mutating files."),process.exitCode=1;return}let r=R(t,"all"),i=ke(t,"batch");if(r===(i!==void 0)){console.error("error: choose exactly one of --all or --batch <n>."),process.exitCode=1;return}let o=Go(e,{scope:E(t,"scope"),minLoc:N(t,"minLoc",1),maxDepth:N(t,"maxDepth",5),scanLimit:n.scanLimit});if(o.batches.length===0){P.empty("Nothing deletable found \u2014 no graph-fact dead code to seed a cascade.");return}let s=Bl(o,{all:r,batch:i});if(s.length===0){console.error(`error: No cleanup batch ${i} exists.`),process.exitCode=1;return}let a=de(),c=Ml(a,o),l=Hl(c,s,{allowDirty:R(t,"forceDirty")});if(l.length>0){for(let m of l)console.error(`error: ${m}`);process.exitCode=1;return}Ol(a,s);let u=s.reduce((m,f)=>m+f.entries.length,0),d=s.reduce((m,f)=>m+f.loc,0);console.log(`Applied ${s.length} compiler-verified cleanup batch(es): ${u} symbol(s), ${d} LOC.`)}),tb=Q("recent-duplicates",({db:e,args:t,opts:n,budget:r})=>{let i=Uc(e,{windowCommits:N(n,"window",100),minSimilarity:ke(n,"minSimilarity"),limit:O(n,"limit",30),scope:E(n,"scope"),scanLimit:r.scanLimit,semantic:r.semantic});if(R(n,"json")){A("recent-duplicates",t,n,i);return}if(!i.available)return P.empty("No git history available (not a repository, or git missing).");if(i.findings.length===0)return P.empty(`No recent re-implementations found (window: last ${i.windowCommits} commits).`);console.log(`Recent re-implementations (window: last ${i.windowCommits} commits):
914
+ `);let o=i.rootCauseGroups?.filter(s=>s.count>1)??[];if(o.length>0){console.log(`Root-cause groups (${o.length}):`);for(let s of o)console.log(` ${s.count} pair(s) ${s.kind.toUpperCase()} ${s.domain} ${Math.round(s.maxSimilarity*100)}% max`),s.establishedFile&&s.establishedSymbol&&console.log(` established: ${s.establishedFile} ${s.establishedSymbol}`),console.log(` files: ${s.relatedFiles.slice(0,6).join(", ")}`),console.log(` -> ${s.recommendation}`);console.log("")}for(let s of i.findings){let a=s.sharedEvidence.slice(0,16).join(", ");s.kind==="echo"?(console.log(` ${Math.round(s.similarity*100)}% ECHO ${s.domain} ${s.echoFile} ${s.echoSymbol} (added ${s.echoAgeCommits} commits ago)`),console.log(` duplicates established ${s.establishedFile} ${s.establishedSymbol}`)):(console.log(` ${Math.round(s.similarity*100)}% TWIN ${s.domain} ${s.echoFile} ${s.echoSymbol}`),console.log(` and ${s.establishedFile} ${s.establishedSymbol} (both new \u2014 consolidate before they diverge)`)),console.log(` basis: ${s.basis}`),a.length>0&&console.log(` shared: ${a}`)}console.log(`
915
+ ${i.findings.length} finding(s). ECHO: prefer extending the established side and deleting the echo.`)}),nb=K(({db:e,args:t,opts:n})=>{let r=Mc(e,{doc:t[0]===void 0?void 0:H(t,0),limit:O(n,"limit",20),minCoupling:N(n,"minCoupling",3)});if(R(n,"json")){A("doc-drift",t,n,r);return}if(!r.available)return P.empty("No git history available (not a repository, or git missing).");if(r.findings.length===0)return P.empty(`No drifting docs found across ${r.docsScanned} doc(s) \u2014 referenced and co-changed code has not moved since each doc last changed.`);console.log(`Docs whose referenced or co-changed code moved on without them (${r.docsScanned} docs scanned, ${r.commitsAnalyzed} commits analyzed):
916
+ `);for(let i of r.findings){console.log(` staleness ${i.staleness} ${i.doc}`);for(let o of i.brokenReferences.slice(0,4))console.log(` BROKEN REFERENCE: cites ${o} \u2014 that file no longer exists`);for(let o of i.subjects.slice(0,4)){let s=o.evidence==="both"?`referenced by doc + coupled ${o.coChanges}x`:o.evidence==="reference"?"referenced by doc":`coupled ${o.coChanges}x historically`;console.log(` ${o.changesSinceDocUpdate} change(s) since doc update ${o.file} (${s}; ${o.actionTier}/${o.docIntent})`);let a=o.docIntentReasons[0];a&&console.log(` intent: ${a}`);let c=o.citationContexts?.[0];c&&console.log(` cited claim: ${hs(c)}`)}}console.log(`
917
+ Stale standards docs are worse than none \u2014 agents implement to a dead spec.`)}),rb=Ft("unused-params",{query:({db:e,opts:t,budget:n})=>ki(e,{scope:E(t,"scope"),limit:O(t,"limit",30),scanLimit:n.scanLimit}),format:e=>` ${Se(e.file,e.startLine,e.endLine)} ${e.shortName}
881
918
  trailing unused: ${e.unusedTrailing.join(", ")} (${e.unusedTrailing.length} of ${e.paramCount} params \u2014 safe to drop)`,emptyMessage:()=>"No trailing unused parameters found.",heuristicLabel:"unused trailing parameter candidates",after:e=>console.log(`
882
- ${e.length} function(s) with trailing unused parameters.`)});var cb=ze("react-component-duplicates",{query:({db:e,args:t,opts:n,budget:i})=>fn(e,{minSimilarity:N(n,"minSimilarity",.62),minTokens:N(n,"minTokens",8),limit:O(n,"limit",20),scope:E(n,"scope"),scanLimit:i.scanLimit,filePattern:le(t,0)}),emptyMessage:e=>e.length===0?"No duplicated React component structures found.":void 0,heuristicLabel:"React component duplicate candidates",render:e=>{P.list(e,t=>{let n=[`
919
+ ${e.length} function(s) with trailing unused parameters.`)});var ib=Xe("react-component-duplicates",{query:({db:e,args:t,opts:n,budget:r})=>Cn(e,{minSimilarity:N(n,"minSimilarity",.62),minTokens:N(n,"minTokens",8),limit:O(n,"limit",20),scope:E(n,"scope"),scanLimit:r.scanLimit,filePattern:pe(t,0)}),emptyMessage:e=>e.length===0?"No duplicated React component structures found.":void 0,heuristicLabel:"React component duplicate candidates",render:e=>{P.list(e,t=>{let n=[`
883
920
  ${Math.round(t.similarity*100)}% similar React structure:`,` ${t.componentA} (${t.fileA})`,` ${t.componentB} (${t.fileB})`];return t.sharedComponents.length&&n.push(` Shared components: ${t.sharedComponents.join(", ")}`),t.sharedNativeTags.length&&n.push(` Shared native tags: ${t.sharedNativeTags.join(", ")}`),t.sharedProps.length&&n.push(` Shared props: ${t.sharedProps.join(", ")}`),t.sharedEvents.length&&n.push(` Shared events: ${t.sharedEvents.join(", ")}`),t.sharedBindings.length&&n.push(` Shared bindings: ${t.sharedBindings.slice(0,20).join(", ")}`),n.join(`
884
921
  `)}),console.log(`
885
- ${e.length} duplicated React component pair(s) found.`)}}),lb=ze("react-hook-candidates",{query:({db:e,args:t,opts:n,budget:i})=>gn(e,{minSimilarity:N(n,"minSimilarity",.45),minSharedBehaviors:N(n,"minSharedBehaviors",6),limit:O(n,"limit",20),scope:E(n,"scope"),scanLimit:i.scanLimit,filePattern:le(t,0)}),emptyMessage:e=>e.length===0?"No duplicated React hook behavior candidates found.":void 0,heuristicLabel:"React hook extraction candidates",render:e=>{P.list(e,t=>{let n=[`
922
+ ${e.length} duplicated React component pair(s) found.`)}}),ob=Xe("react-hook-candidates",{query:({db:e,args:t,opts:n,budget:r})=>vn(e,{minSimilarity:N(n,"minSimilarity",.45),minSharedBehaviors:N(n,"minSharedBehaviors",6),limit:O(n,"limit",20),scope:E(n,"scope"),scanLimit:r.scanLimit,filePattern:pe(t,0)}),emptyMessage:e=>e.length===0?"No duplicated React hook behavior candidates found.":void 0,heuristicLabel:"React hook extraction candidates",render:e=>{P.list(e,t=>{let n=[`
886
923
  ${Math.round(t.similarity*100)}% similar React behavior:`,` ${t.componentA} (${t.fileA})`,` ${t.componentB} (${t.fileB})`,` Evidence class: ${t.evidenceClass} (tier: ${t.actionTier})`,` Recommendation: ${t.recommendation}`,` ${t.reason}`];return t.evidenceClassReasons.length&&n.push(` Evidence reasons: ${t.evidenceClassReasons.join("; ")}`),t.sharedHooks.length&&n.push(` Shared hooks: ${t.sharedHooks.join(", ")}`),t.sharedReactHooks.length&&n.push(` Shared React hooks: ${t.sharedReactHooks.join(", ")}`),t.sharedEffects.length&&n.push(` Shared effects: ${t.sharedEffects.join(", ")}`),t.sharedState.length&&n.push(` Shared state: ${t.sharedState.join(", ")}`),t.sharedRequests.length&&n.push(` Shared requests: ${t.sharedRequests.join(", ")}`),t.sharedHandlers.length&&n.push(` Shared handlers: ${t.sharedHandlers.slice(0,12).join(", ")}`),t.sharedHandlerVerbs.length&&n.push(` Shared action verbs: ${t.sharedHandlerVerbs.slice(0,12).join(", ")}`),n.join(`
887
924
  `)}),console.log(`
888
- ${e.length} React hook candidate pair(s) found.`)}}),ub=ze("react-large-component-pressure",{query:({db:e,args:t,opts:n,budget:i})=>er(e,{minComponentLines:N(n,"minComponentLines",300),minFileLines:N(n,"minFileLines",800),minJsxTokens:N(n,"minJsxTokens",80),minBehaviorTokens:N(n,"minBehaviorTokens",40),limit:O(n,"limit",20),scope:E(n,"scope"),scanLimit:i.scanLimit,filePattern:le(t,0)}),emptyMessage:e=>e.length===0?"No large React component pressure found.":void 0,heuristicLabel:"large React component pressure candidates",render:e=>{P.list(e,t=>[`
925
+ ${e.length} React hook candidate pair(s) found.`)}}),sb=Xe("react-large-component-pressure",{query:({db:e,args:t,opts:n,budget:r})=>pi(e,{minComponentLines:N(n,"minComponentLines",300),minFileLines:N(n,"minFileLines",800),minJsxTokens:N(n,"minJsxTokens",80),minBehaviorTokens:N(n,"minBehaviorTokens",40),limit:O(n,"limit",20),scope:E(n,"scope"),scanLimit:r.scanLimit,filePattern:pe(t,0)}),emptyMessage:e=>e.length===0?"No large React component pressure found.":void 0,heuristicLabel:"large React component pressure candidates",render:e=>{P.list(e,t=>[`
889
926
  ${t.componentLines} component line(s): ${t.component} (${t.file})`,` Dominant pressure: ${t.dominantPressure} (context: ${t.contextKind})`,` Pressure kinds: ${t.pressureKinds.join(", ")}`,` File lines: ${t.fileLines}; JSX tokens: ${t.jsxTokens}; behavior tokens: ${t.behaviorTokens}`,` Recommendation: ${t.recommendationKind} - ${t.recommendation}`,` Reasons: ${t.reasons.join("; ")}`].join(`
890
927
  `)),console.log(`
891
- ${e.length} large React component(s) found.`)}}),db=ze("vue-component-duplicates",{query:({db:e,args:t,opts:n,budget:i})=>hn(e,{minSimilarity:N(n,"minSimilarity",.62),minTokens:N(n,"minTokens",8),limit:O(n,"limit",20),scope:E(n,"scope"),scanLimit:i.scanLimit,filePattern:le(t,0)}),emptyMessage:e=>e.length===0?"No duplicated Vue component structures found.":void 0,heuristicLabel:"Vue component duplicate candidates",render:e=>{P.list(e,t=>{let n=[`
928
+ ${e.length} large React component(s) found.`)}}),ab=Xe("vue-component-duplicates",{query:({db:e,args:t,opts:n,budget:r})=>Rn(e,{minSimilarity:N(n,"minSimilarity",.62),minTokens:N(n,"minTokens",8),limit:O(n,"limit",20),scope:E(n,"scope"),scanLimit:r.scanLimit,filePattern:pe(t,0)}),emptyMessage:e=>e.length===0?"No duplicated Vue component structures found.":void 0,heuristicLabel:"Vue component duplicate candidates",render:e=>{P.list(e,t=>{let n=[`
892
929
  ${Math.round(t.similarity*100)}% similar Vue structure:`,` ${t.fileA}`,` ${t.fileB}`];return t.sharedComponents.length&&n.push(` Shared components: ${t.sharedComponents.join(", ")}`),t.sharedProps.length&&n.push(` Shared props: ${t.sharedProps.join(", ")}`),t.sharedEvents.length&&n.push(` Shared events: ${t.sharedEvents.join(", ")}`),t.sharedDirectives.length&&n.push(` Shared directives: ${t.sharedDirectives.join(", ")}`),t.sharedSlots.length&&n.push(` Shared slots: ${t.sharedSlots.join(", ")}`),t.sharedIdentifiers.length&&n.push(` Shared identifiers: ${t.sharedIdentifiers.slice(0,20).join(", ")}`),n.join(`
893
930
  `)}),console.log(`
894
- ${e.length} duplicated Vue component pair(s) found.`)}}),mb=ze("vue-composable-candidates",{query:({db:e,args:t,opts:n,budget:i})=>bn(e,{minSimilarity:N(n,"minSimilarity",.45),minSharedBehaviors:N(n,"minSharedBehaviors",6),limit:O(n,"limit",20),scope:E(n,"scope"),scanLimit:i.scanLimit,filePattern:le(t,0)}),emptyMessage:e=>e.length===0?"No duplicated Vue behavior candidates found.":void 0,heuristicLabel:"Vue composable extraction candidates",render:e=>{P.list(e,t=>{let n=[`
931
+ ${e.length} duplicated Vue component pair(s) found.`)}}),cb=Xe("vue-composable-candidates",{query:({db:e,args:t,opts:n,budget:r})=>kn(e,{minSimilarity:N(n,"minSimilarity",.45),minSharedBehaviors:N(n,"minSharedBehaviors",6),limit:O(n,"limit",20),scope:E(n,"scope"),scanLimit:r.scanLimit,filePattern:pe(t,0)}),emptyMessage:e=>e.length===0?"No duplicated Vue behavior candidates found.":void 0,heuristicLabel:"Vue composable extraction candidates",render:e=>{P.list(e,t=>{let n=[`
895
932
  ${Math.round(t.similarity*100)}% similar Vue behavior:`,` ${t.fileA}`,` ${t.fileB}`,` Evidence class: ${t.evidenceClass} (tier: ${t.actionTier})`,` Recommendation: ${t.recommendation}`,` ${t.reason}`];return t.evidenceClassReasons.length&&n.push(` Evidence reasons: ${t.evidenceClassReasons.join("; ")}`),t.sharedComposables.length&&n.push(` Shared composables: ${t.sharedComposables.join(", ")}`),t.sharedStores.length&&n.push(` Shared stores: ${t.sharedStores.join(", ")}`),t.sharedRequests.length&&n.push(` Shared requests: ${t.sharedRequests.join(", ")}`),t.sharedLifecycle.length&&n.push(` Shared lifecycle: ${t.sharedLifecycle.join(", ")}`),t.sharedFunctions.length&&n.push(` Shared functions: ${t.sharedFunctions.slice(0,12).join(", ")}`),t.sharedFunctionVerbs.length&&n.push(` Shared action verbs: ${t.sharedFunctionVerbs.slice(0,12).join(", ")}`),t.sharedBindings.length&&n.push(` Shared bindings: ${t.sharedBindings.slice(0,20).join(", ")}`),t.sharedTemplateEvents.length&&n.push(` Shared template events: ${t.sharedTemplateEvents.slice(0,20).join(", ")}`),n.join(`
896
933
  `)}),console.log(`
897
- ${e.length} Vue composable candidate pair(s) found.`)}}),pb=ze("vue-large-view-pressure",{query:({db:e,args:t,opts:n,budget:i})=>tr(e,{minTotalLines:R(n,"reviewThresholds")&&kl(n,"minTotalLines")==="default"?300:N(n,"minTotalLines",800),minTemplateLines:N(n,"minTemplateLines",300),minScriptLines:N(n,"minScriptLines",300),minStyleLines:N(n,"minStyleLines",500),limit:O(n,"limit",20),scope:E(n,"scope"),scanLimit:i.scanLimit,filePattern:le(t,0)}),emptyMessage:e=>e.length===0?"No large Vue view pressure found.":void 0,heuristicLabel:"large Vue view pressure candidates",render:e=>{P.list(e,t=>{let n=[`
934
+ ${e.length} Vue composable candidate pair(s) found.`)}}),lb=Xe("vue-large-view-pressure",{query:({db:e,args:t,opts:n,budget:r})=>fi(e,{minTotalLines:R(n,"reviewThresholds")&&Kl(n,"minTotalLines")==="default"?300:N(n,"minTotalLines",800),minTemplateLines:N(n,"minTemplateLines",300),minScriptLines:N(n,"minScriptLines",300),minStyleLines:N(n,"minStyleLines",500),limit:O(n,"limit",20),scope:E(n,"scope"),scanLimit:r.scanLimit,filePattern:pe(t,0)}),emptyMessage:e=>e.length===0?"No large Vue view pressure found.":void 0,heuristicLabel:"large Vue view pressure candidates",render:e=>{P.list(e,t=>{let n=[`
898
935
  ${t.totalLines} total line(s): ${t.file}`,` Dominant pressure: ${t.dominantPressure} (context: ${t.contextKind})`,` Pressure kinds: ${t.pressureKinds.join(", ")}`,` Blocks: template ${t.templateLines}, script ${t.scriptLines}, style ${t.styleLines}, external script ${t.externalScriptLines}, custom ${t.customBlockLines}`,` Recommendation: ${t.recommendationKind} - ${t.recommendation}`];return t.externalScriptPaths.length&&n.push(` External scripts: ${t.externalScriptPaths.join(", ")}`),n.push(` Reasons: ${t.reasons.join("; ")}`),n.join(`
899
936
  `)}),console.log(`
900
- ${e.length} large Vue view pressure file(s) found.`)}});function nt(e){return{docs:w("Cleanup"),...e}}function Re({heuristicLabel:e,...t}){return nt({...t,heuristic:{label:e}})}var ws=[nt({id:"unused-params",command:"unused-params",description:"Speculative-generality candidates: trailing parameters no body ever uses (TS/JS)",options:_([f("-s, --scope <path>","Limit to files matching path"),f("-n, --limit <n>","Maximum findings",v,30),f("--full","Run unbounded analysis on large indexes")]),budget:"candidate-scan",heuristic:{label:"unused trailing parameter candidates"},renderShape:"list",docs:w("Cleanup",["scip-query unused-params -s src/services"]),handler:ab}),nt({id:"cleanup-plan",command:"cleanup-plan",description:"Ordered, batched deletion plan: graph-fact dead code plus the cascade candidates it unlocks",options:[f("-s, --scope <path>","Limit to files matching path"),f("--min-loc <n>","Only include symbols >= N lines",v,1),f("--max-depth <n>","Maximum cascade depth",v,5),f("--verify","Apply batches in a throwaway worktree and run the project checker (tsc / cargo check)"),f("--patch","With --verify, print the compiler-verified deletion patch to stdout"),f("--json","Output as JSON for programmatic consumption"),f("--full","Run unbounded analysis on large indexes")],budget:"candidate-scan",renderShape:"custom",docs:w("Cleanup",["scip-query cleanup-plan --min-loc 3","scip-query cleanup-plan --verify"]),handler:ib}),nt({id:"cleanup-apply",command:"cleanup-apply",description:"Apply a compiler-verified cleanup-plan batch to the working tree",options:[f("-s, --scope <path>","Limit to files matching path"),f("--min-loc <n>","Only include symbols >= N lines",v,1),f("--max-depth <n>","Maximum cascade depth",v,5),f("--verified","Required: verify the selected cleanup batch before applying it"),f("--batch <n>","Apply one batch depth",v),f("--all","Apply every compiler-verified batch in the plan"),f("--force-dirty","Allow applying when plan files already have working-tree edits"),f("--full","Run unbounded analysis on large indexes")],budget:"candidate-scan",renderShape:"custom",docs:w("Cleanup",["scip-query cleanup-apply --verified --batch 0"]),handler:rb}),nt({id:"recent-duplicates",command:"recent-duplicates",description:"Directional duplicate candidates: recent code that re-implements established callable, React, or Vue code",options:_([f("--window <n>",'How many commits back counts as "recent"',v,100),f("--min-similarity <n>","Minimum similarity (0-1); omitted uses detector defaults",tt),f("-n, --limit <n>","Maximum findings",v,30),f("-s, --scope <path>","Limit to files matching path"),f("--full","Run unbounded semantic analysis on large indexes")]),budget:"candidate-scan",heuristic:{label:"recent re-implementation candidates"},renderShape:"custom",docs:w("Cleanup",["scip-query recent-duplicates --window 50"]),handler:ob}),nt({id:"doc-drift",command:"doc-drift [doc]",description:"Stale-doc candidates: code the doc references or co-changed with kept changing after the doc stopped",options:_([f("-n, --limit <n>","Maximum docs to report",v,20),f("--min-coupling <n>","Minimum historical co-changes to track a subject",v,3),f("--full","Run unbounded analysis on large indexes")]),heuristic:{label:"doc drift candidates"},renderShape:"custom",docs:w("Cleanup",["scip-query doc-drift","scip-query doc-drift AGENTS.md"]),handler:sb}),nt({id:"dead",command:"dead [scope]",description:"Find dead code and file-internal symbols (no cross-file consumers)",options:_([f("--min-loc <n>","Only show symbols >= N lines",v,1),f("--include-tests","Include test files"),f("--skip-barrels","Ignore refs from barrel re-export files"),f("--include-members","Include class members"),f("--only-dead","Show only [dead code] symbols (skip [file-internal only])"),f("--only-internal","Show only [file-internal only] symbols (skip [dead code])"),f("--full","Run unbounded semantic analysis on large indexes")]),budget:"candidate-scan",renderShape:"custom",docs:w("Cleanup",["scip-query dead --min-loc 10"]),handler:Vh}),nt({id:"unused-imports",command:"unused-imports <file>",description:"Find imports not referenced in the same file",options:_([f("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"list",handler:qh}),nt({id:"isolated",command:"isolated",description:"Find completely orphaned symbols (no references at all)",options:_([f("-s, --scope <path>","Limit to files matching path"),f("--min-loc <n>","Minimum lines of code",v,3),f("--full","Run unbounded semantic analysis on large indexes")]),budget:"candidate-scan",renderShape:"grouped-by-file",handler:Uh}),Re({id:"similar",command:"similar [symbol]",description:"Find heuristic function similarity candidates from callee fingerprints",options:_([f("--min-similarity <n>","Minimum Jaccard similarity (0-1)",tt,.4),f("-n, --limit <n>","Number of results",v,20),f("-s, --scope <path>","Limit to files matching path"),f("--min-callees <n>","Minimum callees to consider",v,4),f("--cross-file-only","Only show cross-file pairs (skip same-file matches)"),f("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"similarity candidates",budget:"candidate-scan",renderShape:"custom",handler:Xh}),Re({id:"similar-files",command:"similar-files [file]",description:"Find heuristic similar-file candidates from dependency profiles",options:_([f("--min-similarity <n>","Minimum Jaccard similarity (0-1)",tt,.5),f("-n, --limit <n>","Number of results",v,20),f("-s, --scope <path>","Limit to files matching path"),f("--min-deps <n>","Minimum dependencies to consider",v),f("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"similar file candidates",renderShape:"custom",handler:Yh}),Re({id:"react-component-duplicates",command:"react-component-duplicates [file]",description:"Find heuristic duplicated React component structure candidates from JSX tags, props, events, and bindings",options:_([f("--min-similarity <n>","Minimum JSX structure similarity (0-1)",tt,.62),f("--min-tokens <n>","Minimum structural tokens to consider",v,8),f("-n, --limit <n>","Number of results",v,20),f("-s, --scope <path>","Limit to files matching path"),f("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"React component duplicate candidates",budget:"candidate-scan",renderShape:"custom",handler:cb}),Re({id:"react-hook-candidates",command:"react-hook-candidates [file]",description:"Find heuristic React hook extraction candidates from shared state, effects, requests, and handlers",options:_([f("--min-similarity <n>","Minimum behavior similarity (0-1)",tt,.45),f("--min-shared-behaviors <n>","Minimum shared behavior tokens",v,6),f("-n, --limit <n>","Number of results",v,20),f("-s, --scope <path>","Limit to files matching path"),f("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"React hook extraction candidates",budget:"candidate-scan",renderShape:"custom",handler:lb}),Re({id:"react-large-component-pressure",command:"react-large-component-pressure [file]",description:"Find heuristic large React component pressure candidates from component lines, JSX structure, and hook behavior",options:_([f("--min-component-lines <n>","Minimum component lines",v,300),f("--min-file-lines <n>","Minimum file lines",v,800),f("--min-jsx-tokens <n>","Minimum JSX structure tokens",v,80),f("--min-behavior-tokens <n>","Minimum behavior tokens",v,40),f("-n, --limit <n>","Number of results",v,20),f("-s, --scope <path>","Limit to files matching path"),f("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"large React component pressure candidates",budget:"candidate-scan",renderShape:"custom",handler:ub}),Re({id:"vue-component-duplicates",command:"vue-component-duplicates [file]",description:"Find heuristic duplicated Vue component structure candidates from template tags, bindings, slots, and directives",options:_([f("--min-similarity <n>","Minimum template similarity (0-1)",tt,.62),f("--min-tokens <n>","Minimum structural tokens to consider",v,8),f("-n, --limit <n>","Number of results",v,20),f("-s, --scope <path>","Limit to files matching path"),f("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"Vue component duplicate candidates",budget:"candidate-scan",renderShape:"custom",handler:db}),Re({id:"vue-composable-candidates",command:"vue-composable-candidates [file]",description:"Find heuristic Vue composable extraction candidates from shared state, effects, requests, and template bindings",options:_([f("--min-similarity <n>","Minimum behavior similarity (0-1)",tt,.45),f("--min-shared-behaviors <n>","Minimum shared behavior tokens",v,6),f("-n, --limit <n>","Number of results",v,20),f("-s, --scope <path>","Limit to files matching path"),f("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"Vue composable extraction candidates",budget:"candidate-scan",renderShape:"custom",handler:mb}),Re({id:"vue-large-view-pressure",command:"vue-large-view-pressure [file]",description:"Find heuristic large Vue view pressure candidates from template, script, style, and external script line counts",options:_([f("--min-total-lines <n>","Minimum total component lines",v,800),f("--min-template-lines <n>","Minimum template lines",v,300),f("--min-script-lines <n>","Minimum script lines",v,300),f("--min-style-lines <n>","Minimum style lines",v,500),f("--review-thresholds","Use lower review thresholds without changing health scoring"),f("-n, --limit <n>","Number of results",v,20),f("-s, --scope <path>","Limit to files matching path"),f("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"large Vue view pressure candidates",budget:"candidate-scan",renderShape:"custom",handler:pb}),Re({id:"similar-chains",command:"similar-chains",description:"Find heuristic similar-chain candidates from dependency flows",options:_([f("--min-similarity <n>","Minimum chain similarity (0-1)",tt,.5),f("-n, --limit <n>","Number of results",v,15),f("-s, --scope <path>","Limit to files matching path"),f("--min-length <n>","Minimum chain length",v,3),f("--max-length <n>","Maximum chain length",v,8),f("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"similar chain candidates",renderShape:"custom",handler:Zh}),Re({id:"extract-candidates",command:"extract-candidates",description:"Find heuristic extraction candidates from isolated callee clusters",options:_([f("-s, --scope <path>","Limit to files matching path"),f("--min-loc <n>","Minimum function LOC",v,10),f("--min-callees <n>","Minimum callees to analyze",v,6),f("-n, --limit <n>","Number of results",v,20),f("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"extraction candidates",budget:"candidate-scan",renderShape:"custom",handler:Wh}),Re({id:"locality-candidates",command:"locality-candidates [symbol-or-file]",description:"Find directory-locality and ancestry candidates from consumer ownership",options:_([f("-s, --scope <path>","Limit scan mode to files matching path"),f("--min-consumers <n>","Minimum consumers in scan mode",v,1),f("-n, --limit <n>","Number of results",v,20),f("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"locality candidates",budget:"candidate-scan",renderShape:"custom",docs:w("Cleanup",["scip-query locality-candidates","scip-query locality-candidates formatName --json","scip-query locality-candidates src/shared/date.ts"]),handler:Gh}),Re({id:"drift",command:"drift [module]",description:"Detect heuristic drift candidates: unused imports, layer violations, and pattern deviations",options:_([f("--min-deviation <n>","Minimum sibling files before reporting unique dependency deviations",ts,5),f("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"drift candidates",budget:"semantic",renderShape:"grouped-by-file",handler:eb}),Re({id:"wrapper-candidates",command:"wrapper-candidates",description:"Find heuristic wrapper candidates only called by one consumer",options:_([f("-s, --scope <path>","Limit to files matching path"),f("--max-loc <n>","Maximum LOC for candidates",v,15),f("-n, --limit <n>","Number of results",v,30),f("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"wrapper candidates",budget:"candidate-scan",renderShape:"list",handler:zh}),Re({id:"passthrough-candidates",command:"passthrough-candidates",description:"Find heuristic passthrough candidates that forward to one callee",options:_([f("-s, --scope <path>","Limit to files matching path"),f("--max-loc <n>","Maximum LOC for candidates",v,15),f("-n, --limit <n>","Number of results",v,30),f("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"passthrough candidates",budget:"candidate-scan",renderShape:"list",handler:Kh}),Re({id:"stale-abstractions",command:"stale-abstractions",description:"Find heuristic stale abstraction candidates with 0-1 consumers",options:_([f("-s, --scope <path>","Limit to files matching path"),f("--min-loc <n>","Minimum LOC",v,3),f("-n, --limit <n>","Number of results",v,30),f("--include-low-confidence","Include 1-consumer classes (usually encapsulation, not stale)",void 0,!1),f("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"stale abstraction candidates",budget:"candidate-scan",renderShape:"list",handler:Jh}),Re({id:"complexity-hotspots",command:"complexity-hotspots",description:"Find heuristic complexity hotspot candidates from LOC x fan-in x fan-out",options:_([f("-s, --scope <path>","Limit to files matching path"),f("--min-loc <n>","Minimum LOC",v,10),f("-n, --limit <n>","Number of results",v,20),f("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"complexity hotspot candidates",budget:"candidate-scan",renderShape:"table",handler:Qh}),nt({id:"convergence",command:"convergence <symbol1> <symbol2>",description:"Show what a consolidated version of two similar functions would look like",options:_([f("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"custom",handler:tb}),Bh({id:"redundant-reexports",command:"redundant-reexports",description:"Find barrel re-exports that nobody imports through",options:[f("-s, --scope <path>","Limit to files matching path"),f("-n, --limit <n>","Number of results",v,30),f("--full","Run unbounded analysis on large indexes")],docs:w("Cleanup"),query:({db:e,opts:t})=>Ec(e,{scope:E(t,"scope"),limit:O(t,"limit",30)}),format:e=>` ${e.shortName} (from ${e.originalFile})
937
+ ${e.length} large Vue view pressure file(s) found.`)}});function ct(e){return{docs:w("Cleanup"),...e}}function we({heuristicLabel:e,...t}){return ct({...t,heuristic:{label:e}})}var Ws=[ct({id:"unused-params",command:"unused-params",description:"Speculative-generality candidates: trailing parameters no body ever uses (TS/JS)",options:_([p("-s, --scope <path>","Limit to files matching path"),p("-n, --limit <n>","Maximum findings",v,30),p("--full","Run unbounded analysis on large indexes")]),budget:"candidate-scan",heuristic:{label:"unused trailing parameter candidates"},renderShape:"list",docs:w("Cleanup",["scip-query unused-params -s src/services"]),handler:rb}),ct({id:"cleanup-plan",command:"cleanup-plan",description:"Ordered, batched deletion plan: graph-fact dead code plus the cascade candidates it unlocks",options:[p("-s, --scope <path>","Limit to files matching path"),p("--min-loc <n>","Only include symbols >= N lines",v,1),p("--max-depth <n>","Maximum cascade depth",v,5),p("--verify","Apply batches in a throwaway worktree and run the project checker (tsc / cargo check)"),p("--patch","With --verify, print the compiler-verified deletion patch to stdout"),p("--json","Output as JSON for programmatic consumption"),p("--full","Run unbounded analysis on large indexes")],budget:"candidate-scan",renderShape:"custom",docs:w("Cleanup",["scip-query cleanup-plan --min-loc 3","scip-query cleanup-plan --verify"]),handler:Zy}),ct({id:"cleanup-apply",command:"cleanup-apply",description:"Apply a compiler-verified cleanup-plan batch to the working tree",options:[p("-s, --scope <path>","Limit to files matching path"),p("--min-loc <n>","Only include symbols >= N lines",v,1),p("--max-depth <n>","Maximum cascade depth",v,5),p("--verified","Required: verify the selected cleanup batch before applying it"),p("--batch <n>","Apply one batch depth",v),p("--all","Apply every compiler-verified batch in the plan"),p("--force-dirty","Allow applying when plan files already have working-tree edits"),p("--full","Run unbounded analysis on large indexes")],budget:"candidate-scan",renderShape:"custom",docs:w("Cleanup",["scip-query cleanup-apply --verified --batch 0"]),handler:eb}),ct({id:"recent-duplicates",command:"recent-duplicates",description:"Directional duplicate candidates: recent code that re-implements established callable, React, or Vue code",options:_([p("--window <n>",'How many commits back counts as "recent"',v,100),p("--min-similarity <n>","Minimum similarity (0-1); omitted uses detector defaults",st),p("-n, --limit <n>","Maximum findings",v,30),p("-s, --scope <path>","Limit to files matching path"),p("--full","Run unbounded semantic analysis on large indexes")]),budget:"candidate-scan",heuristic:{label:"recent re-implementation candidates"},renderShape:"custom",docs:w("Cleanup",["scip-query recent-duplicates --window 50"]),handler:tb}),ct({id:"doc-drift",command:"doc-drift [doc]",description:"Stale-doc candidates: code the doc references or co-changed with kept changing after the doc stopped",options:_([p("-n, --limit <n>","Maximum docs to report",v,20),p("--min-coupling <n>","Minimum historical co-changes to track a subject",v,3),p("--full","Run unbounded analysis on large indexes")]),heuristic:{label:"doc drift candidates"},renderShape:"custom",docs:w("Cleanup",["scip-query doc-drift","scip-query doc-drift AGENTS.md"]),handler:nb}),ct({id:"dead",command:"dead [scope]",description:"Find dead code and file-internal symbols (no cross-file consumers)",options:_([p("--min-loc <n>","Only show symbols >= N lines",v,1),p("--include-tests","Include test files"),p("--skip-barrels","Ignore refs from barrel re-export files"),p("--include-members","Include class members"),p("--only-dead","Show only [dead code] symbols (skip [file-internal only])"),p("--only-internal","Show only [file-internal only] symbols (skip [dead code])"),p("--full","Run unbounded semantic analysis on large indexes")]),budget:"candidate-scan",renderShape:"custom",docs:w("Cleanup",["scip-query dead --min-loc 10"]),handler:jy}),ct({id:"unused-imports",command:"unused-imports <file>",description:"Find imports not referenced in the same file",options:_([p("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"list",handler:Oy}),ct({id:"isolated",command:"isolated",description:"Find completely orphaned symbols (no references at all)",options:_([p("-s, --scope <path>","Limit to files matching path"),p("--min-loc <n>","Minimum lines of code",v,3),p("--full","Run unbounded semantic analysis on large indexes")]),budget:"candidate-scan",renderShape:"grouped-by-file",handler:By}),we({id:"similar",command:"similar [symbol]",description:"Find heuristic function similarity candidates from callee fingerprints",options:_([p("--min-similarity <n>","Minimum Jaccard similarity (0-1)",st,.4),p("-n, --limit <n>","Number of results",v,20),p("-s, --scope <path>","Limit to files matching path"),p("--min-callees <n>","Minimum callees to consider",v,4),p("--cross-file-only","Only show cross-file pairs (skip same-file matches)"),p("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"similarity candidates",budget:"candidate-scan",renderShape:"custom",handler:zy}),we({id:"similar-files",command:"similar-files [file]",description:"Find heuristic similar-file candidates from dependency profiles",options:_([p("--min-similarity <n>","Minimum Jaccard similarity (0-1)",st,.5),p("-n, --limit <n>","Number of results",v,20),p("-s, --scope <path>","Limit to files matching path"),p("--min-deps <n>","Minimum dependencies to consider",v),p("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"similar file candidates",renderShape:"custom",handler:Jy}),we({id:"react-component-duplicates",command:"react-component-duplicates [file]",description:"Find heuristic duplicated React component structure candidates from JSX tags, props, events, and bindings",options:_([p("--min-similarity <n>","Minimum JSX structure similarity (0-1)",st,.62),p("--min-tokens <n>","Minimum structural tokens to consider",v,8),p("-n, --limit <n>","Number of results",v,20),p("-s, --scope <path>","Limit to files matching path"),p("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"React component duplicate candidates",budget:"candidate-scan",renderShape:"custom",handler:ib}),we({id:"react-hook-candidates",command:"react-hook-candidates [file]",description:"Find heuristic React hook extraction candidates from shared state, effects, requests, and handlers",options:_([p("--min-similarity <n>","Minimum behavior similarity (0-1)",st,.45),p("--min-shared-behaviors <n>","Minimum shared behavior tokens",v,6),p("-n, --limit <n>","Number of results",v,20),p("-s, --scope <path>","Limit to files matching path"),p("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"React hook extraction candidates",budget:"candidate-scan",renderShape:"custom",handler:ob}),we({id:"react-large-component-pressure",command:"react-large-component-pressure [file]",description:"Find heuristic large React component pressure candidates from component lines, JSX structure, and hook behavior",options:_([p("--min-component-lines <n>","Minimum component lines",v,300),p("--min-file-lines <n>","Minimum file lines",v,800),p("--min-jsx-tokens <n>","Minimum JSX structure tokens",v,80),p("--min-behavior-tokens <n>","Minimum behavior tokens",v,40),p("-n, --limit <n>","Number of results",v,20),p("-s, --scope <path>","Limit to files matching path"),p("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"large React component pressure candidates",budget:"candidate-scan",renderShape:"custom",handler:sb}),we({id:"vue-component-duplicates",command:"vue-component-duplicates [file]",description:"Find heuristic duplicated Vue component structure candidates from template tags, bindings, slots, and directives",options:_([p("--min-similarity <n>","Minimum template similarity (0-1)",st,.62),p("--min-tokens <n>","Minimum structural tokens to consider",v,8),p("-n, --limit <n>","Number of results",v,20),p("-s, --scope <path>","Limit to files matching path"),p("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"Vue component duplicate candidates",budget:"candidate-scan",renderShape:"custom",handler:ab}),we({id:"vue-composable-candidates",command:"vue-composable-candidates [file]",description:"Find heuristic Vue composable extraction candidates from shared state, effects, requests, and template bindings",options:_([p("--min-similarity <n>","Minimum behavior similarity (0-1)",st,.45),p("--min-shared-behaviors <n>","Minimum shared behavior tokens",v,6),p("-n, --limit <n>","Number of results",v,20),p("-s, --scope <path>","Limit to files matching path"),p("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"Vue composable extraction candidates",budget:"candidate-scan",renderShape:"custom",handler:cb}),we({id:"vue-large-view-pressure",command:"vue-large-view-pressure [file]",description:"Find heuristic large Vue view pressure candidates from template, script, style, and external script line counts",options:_([p("--min-total-lines <n>","Minimum total component lines",v,800),p("--min-template-lines <n>","Minimum template lines",v,300),p("--min-script-lines <n>","Minimum script lines",v,300),p("--min-style-lines <n>","Minimum style lines",v,500),p("--review-thresholds","Use lower review thresholds without changing health scoring"),p("-n, --limit <n>","Number of results",v,20),p("-s, --scope <path>","Limit to files matching path"),p("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"large Vue view pressure candidates",budget:"candidate-scan",renderShape:"custom",handler:lb}),we({id:"similar-chains",command:"similar-chains",description:"Find heuristic similar-chain candidates from dependency flows",options:_([p("--min-similarity <n>","Minimum chain similarity (0-1)",st,.5),p("-n, --limit <n>","Number of results",v,15),p("-s, --scope <path>","Limit to files matching path"),p("--min-length <n>","Minimum chain length",v,3),p("--max-length <n>","Maximum chain length",v,8),p("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"similar chain candidates",renderShape:"custom",handler:Ky}),we({id:"extract-candidates",command:"extract-candidates",description:"Find heuristic extraction candidates from isolated callee clusters",options:_([p("-s, --scope <path>","Limit to files matching path"),p("--min-loc <n>","Minimum function LOC",v,10),p("--min-callees <n>","Minimum callees to analyze",v,6),p("-n, --limit <n>","Number of results",v,20),p("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"extraction candidates",budget:"candidate-scan",renderShape:"custom",handler:Hy}),we({id:"locality-candidates",command:"locality-candidates [symbol-or-file]",description:"Find directory-locality and ancestry candidates from consumer ownership",options:_([p("-s, --scope <path>","Limit scan mode to files matching path"),p("--min-consumers <n>","Minimum consumers in scan mode",v,1),p("-n, --limit <n>","Number of results",v,20),p("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"locality candidates",budget:"candidate-scan",renderShape:"custom",docs:w("Cleanup",["scip-query locality-candidates","scip-query locality-candidates formatName --json","scip-query locality-candidates src/shared/date.ts"]),handler:Vy}),we({id:"drift",command:"drift [module]",description:"Detect heuristic drift candidates: unused imports, layer violations, and pattern deviations",options:_([p("--min-deviation <n>","Minimum sibling files before reporting unique dependency deviations",Fi,5),p("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"drift candidates",budget:"semantic",renderShape:"grouped-by-file",handler:Xy}),we({id:"wrapper-candidates",command:"wrapper-candidates",description:"Find heuristic wrapper candidates only called by one consumer",options:_([p("-s, --scope <path>","Limit to files matching path"),p("--max-loc <n>","Maximum LOC for candidates",v,15),p("-n, --limit <n>","Number of results",v,30),p("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"wrapper candidates",budget:"candidate-scan",renderShape:"list",handler:qy}),we({id:"passthrough-candidates",command:"passthrough-candidates",description:"Find heuristic passthrough candidates that forward to one callee",options:_([p("-s, --scope <path>","Limit to files matching path"),p("--max-loc <n>","Maximum LOC for candidates",v,15),p("-n, --limit <n>","Number of results",v,30),p("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"passthrough candidates",budget:"candidate-scan",renderShape:"list",handler:Uy}),we({id:"stale-abstractions",command:"stale-abstractions",description:"Find heuristic stale abstraction candidates with 0-1 consumers",options:_([p("-s, --scope <path>","Limit to files matching path"),p("--min-loc <n>","Minimum LOC",v,3),p("-n, --limit <n>","Number of results",v,30),p("--include-low-confidence","Include 1-consumer classes (usually encapsulation, not stale)",void 0,!1),p("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"stale abstraction candidates",budget:"candidate-scan",renderShape:"list",handler:Wy}),we({id:"complexity-hotspots",command:"complexity-hotspots",description:"Find heuristic complexity hotspot candidates from LOC x fan-in x fan-out",options:_([p("-s, --scope <path>","Limit to files matching path"),p("--min-loc <n>","Minimum LOC",v,10),p("-n, --limit <n>","Number of results",v,20),p("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"complexity hotspot candidates",budget:"candidate-scan",renderShape:"table",handler:Gy}),ct({id:"convergence",command:"convergence <symbol1> <symbol2>",description:"Show what a consolidated version of two similar functions would look like",options:_([p("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"custom",handler:Qy}),Ay({id:"redundant-reexports",command:"redundant-reexports",description:"Find barrel re-exports that nobody imports through",options:[p("-s, --scope <path>","Limit to files matching path"),p("-n, --limit <n>","Number of results",v,30),p("--full","Run unbounded analysis on large indexes")],docs:w("Cleanup"),query:({db:e,opts:t})=>el(e,{scope:E(t,"scope"),limit:O(t,"limit",30)}),format:e=>` ${e.shortName} (from ${e.originalFile})
901
938
  barrel: ${e.barrelConsumers} consumer(s) | direct: ${e.directConsumers} consumer(s) | tier: ${e.actionTier}
902
939
  Recommendation: ${e.recommendation}`+(e.surfaceEvidence.length>0?`
903
940
  Surface evidence: ${e.surfaceEvidence.join("; ")}`:""),key:e=>e.barrelFile,emptyMessage:()=>"No redundant re-exports found.",after:e=>console.log(`
904
- ${e.length} redundant re-export(s).`)}),nt({id:"similar-signatures",command:"similar-signatures",description:"Find functions with near-identical type signatures (same shape)",options:_([f("-s, --scope <path>","Limit to files matching path"),f("--min-loc <n>","Minimum LOC per function",v,3),f("-n, --limit <n>","Number of groups",v,20),f("--full","Run unbounded semantic analysis on large indexes")]),budget:"candidate-scan",renderShape:"list",handler:nb})];var NM=z(({db:e,args:t,opts:n})=>{let i=Oe(e);if(R(n,"json")){F("stats",t,n,i);return}console.log(`Documents: ${i.documents}`),console.log(`Symbols: ${i.symbols}`),console.log(`Definitions: ${i.definitions}`),console.log(`References: ${i.references}`),console.log(`Index size: ${hi(i.indexSizeBytes)}`),i.lastBuilt&&console.log(`Last built: ${i.lastBuilt.toISOString().replace("T"," ").slice(0,19)}`)}),fb=[{id:"stats",command:"stats",description:"Show index statistics",options:[Wc()],renderShape:"custom",docs:w("Core"),handler:NM}];var EM=Cs("bottlenecks",{headers:["tier","risk","score","fan-in","fan-out","symbol"],query:({db:e,opts:t,budget:n})=>Fa(e,{limit:O(t,"limit",20),scope:E(t,"scope"),minFanIn:N(t,"minFanIn",2),minFanOut:N(t,"minFanOut",2),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${e.actionTier.padEnd(6)} ${e.riskKind.padEnd(20)} ${String(e.score).padStart(5)} ${String(e.fanIn).padStart(6)} ${String(e.fanOut).padStart(7)} ${e.shortName}`,emptyMessage:()=>"No bottlenecks found."}),TM=z(({db:e,args:t,opts:n})=>{let i=le(t,0),r=O(n,"limit",30);if(i){let s=Pa(e,i);if(R(n,"json")){F("fan-in",t,n,{mode:"symbol",symbol:i,rows:s});return}if(s.length===0)return P.empty(`No fan-in for ${i}.`);P.list(s,a=>` ${String(a.count).padStart(4)} files ${a.name}`);return}let o=Ea(e,{limit:r,scope:E(n,"scope")});if(R(n,"json")){F("fan-in",t,n,{mode:"top",rows:o});return}P.table(["files","symbol"],o.map(s=>` ${String(s.count).padStart(5)} ${s.name}`))}),_M=z(({db:e,args:t,opts:n})=>{let i=le(t,0),r=O(n,"limit",30);if(i){let s=Na(e,i);if(R(n,"json")){F("fan-out",t,n,{mode:"file",file:i,rows:s});return}if(s.length===0)return P.empty(`No fan-out for ${i}.`);P.list(s,a=>` ${String(a.count).padStart(4)} symbols ${a.name}`);return}let o=Ta(e,{limit:r,scope:E(n,"scope")});if(R(n,"json")){F("fan-out",t,n,{mode:"top",rows:o});return}P.table(["symbols","file"],o.map(s=>` ${String(s.count).padStart(7)} ${s.name}`))}),$M=z(({db:e,args:t,opts:n})=>{let i=le(t,0),r=le(t,1),o=O(n,"limit",20);if(i&&r){let a=_a(e,i,r);if(R(n,"json")){F("coupling",t,n,{mode:"pair",result:a});return}console.log(`${a.file1} \u2194 ${a.file2}: ${a.sharedSymbols} shared symbols (${a.actionTier})`),console.log(` Risk: ${a.couplingKind}`),console.log(` Recommendation: ${a.recommendation}`);return}let s=$a(e,{limit:o,scope:E(n,"scope")});if(R(n,"json")){F("coupling",t,n,{mode:"top",rows:s});return}P.table(["tier","risk","shared","file1 \u2192 file2"],s.map(a=>` ${a.actionTier.padEnd(6)} ${a.couplingKind.padEnd(22)} ${String(a.sharedSymbols).padStart(6)} ${a.file1} \u2192 ${a.file2}`))}),FM=_n({commandName:"cycles",query:({db:e,opts:t})=>mn(e,{scope:E(t,"scope"),maxDepth:N(t,"maxDepth",10)}),emptyMessage:e=>e.length===0?"No circular dependencies found.":void 0,render:e=>{let t=e.filter(i=>i.kind==="real"),n=e.filter(i=>i.kind==="module-hierarchy");for(let i=0;i<t.length;i++){console.log(`
905
- Cycle ${i+1} (${t[i].path.length-1} files):`);for(let r=0;r<t[i].path.length;r++){let o=r<t[i].path.length-1?" \u2192":" (cycle)";console.log(` ${t[i].path[r]}${o}`)}}t.length===0?console.log("No real circular dependencies found."):console.log(`
906
- ${t.length} real cycle(s) found.`),n.length>0&&console.log(`(${n.length} module-hierarchy cycle(s) hidden \u2014 barrel files participating in normal parent/child re-export patterns. Pass --include-module-hierarchy to see them.)`)}}),AM=_n({commandName:"deep-chains",query:({db:e,opts:t})=>Ba(e,{limit:O(t,"limit",10),scope:E(t,"scope"),minDepth:N(t,"minDepth",3)}),emptyMessage:e=>e.length===0?"No deep chains found.":void 0,render:e=>{for(let t=0;t<e.length;t++){console.log(`
907
- Chain ${t+1} (depth ${e[t].depth}):`);for(let n of e[t].chain)console.log(` \u2192 ${n}`);console.log(` Tier: ${e[t].actionTier} Risk: ${e[t].chainKind}`),console.log(` Recommendation: ${e[t].recommendation}`),console.log(` Evidence: ${e[t].evidenceReasons.join("; ")}`)}}}),gb=[Rs({id:"hotspots",command:"hotspots",description:"Most-referenced symbols in the codebase (choke points)",options:[f("-n, --limit <n>","Number of results",v,30),f("-s, --scope <path>","Limit to files matching path"),f("--full","Run unbounded analysis on large indexes")],docs:w("Graph"),headers:["refs","files","symbol"],query:({db:e,opts:t})=>Ra(e,{limit:O(t,"limit",30),scope:E(t,"scope")}),format:e=>` ${String(e.refCount).padStart(4)} ${String(e.fileCount).padStart(5)} ${e.shortName}`}),{id:"fan-in",command:"fan-in [symbol]",description:"How many files reference a symbol (or top fan-in across codebase)",options:_([f("-n, --limit <n>","Number of results for top mode",v,30),f("-s, --scope <path>","Limit to files matching path"),f("--full","Run unbounded analysis on large indexes")]),renderShape:"custom",docs:w("Graph"),handler:TM},{id:"fan-out",command:"fan-out [file]",description:"How many external symbols a file uses (or top fan-out across codebase)",options:_([f("-n, --limit <n>","Number of results for top mode",v,30),f("-s, --scope <path>","Limit to files matching path"),f("--full","Run unbounded analysis on large indexes")]),renderShape:"custom",docs:w("Graph"),handler:_M},{id:"coupling",command:"coupling [file1] [file2]",description:"Coupling between two files, or top coupled pairs in codebase",options:_([f("-n, --limit <n>","Number of results for top mode",v,20),f("-s, --scope <path>","Limit to files matching path"),f("--full","Run unbounded analysis on large indexes")]),renderShape:"custom",docs:w("Graph"),handler:$M},{id:"cycles",command:"cycles",description:"Detect circular dependency chains between files",options:_([f("-s, --scope <path>","Limit to files matching path"),f("--max-depth <n>","Maximum cycle depth",v,10)]),renderShape:"custom",docs:w("Graph"),handler:FM},{id:"bottlenecks",command:"bottlenecks",description:"Find coupling hubs: high fan-in AND high fan-out",options:_([f("-n, --limit <n>","Number of results",v,20),f("-s, --scope <path>","Limit to files matching path"),f("--min-fan-in <n>","Minimum fan-in",v,2),f("--min-fan-out <n>","Minimum fan-out",v,2),f("--full","Run unbounded semantic analysis on large indexes")]),budget:"candidate-scan",renderShape:"table",docs:w("Graph"),handler:EM},{id:"deep-chains",command:"deep-chains",description:"Find the longest transitive dependency chains",options:_([f("-n, --limit <n>","Number of chains to show",v,10),f("-s, --scope <path>","Limit to files matching path"),f("--min-depth <n>","Minimum chain depth",v,3),f("--full","Run unbounded analysis on large indexes")]),renderShape:"custom",docs:w("Graph"),handler:AM},ks({id:"call-graph",command:"call-graph <symbol>",description:"Show incoming callers and outgoing callees for a symbol",options:[f("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",docs:w("Graph"),query:({db:e,args:t,budget:n})=>Xi(e,String(t[0]),{semantic:n.semantic}),emptyMessage:e=>e?void 0:"Symbol not found.",before:e=>{e&&console.log(`Symbol: ${e.shortName}
908
- `)},sections:e=>e?[{title:`CALLERS (${e.callers.length})`,rows:e.callers.map(t=>` ${t.file} ${t.shortName}`)},{title:`CALLEES (${e.callees.length})`,rows:e.callees.map(t=>` ${t.file} ${t.shortName}`)}]:[]})];var MM=X("complexity",({db:e,args:t,opts:n,budget:i})=>{let r=mr(e,H(t,0),{semantic:i.semantic});if(R(n,"json")){F("complexity",t,n,r);return}if(!r)return P.empty("Symbol not found.");console.log(`${ye(r.relativePath,r.startLine,r.endLine)} ${r.shortName}
909
- `),console.log(` LOC: ${r.loc}`),console.log(` Branches: ${r.branches}`),console.log(` Cyclomatic estimate: ${r.cyclomaticEstimate}`),console.log(` Callees: ${r.calleeCount}`),console.log(` Fan-in: ${r.fanIn}`),console.log(` Fan-out: ${r.fanOut}`)}),OM=z(({db:e,args:t,opts:n})=>{let i=_c(e,{samples:N(n,"samples",50),scope:E(n,"scope")});if(R(n,"json")){F("self-audit",t,n,i);return}if(!i.available)return P.empty("No semantic provider available to audit against (TypeScript projects only).");console.log(`Sampled ${i.sampleSize} symbols; oracle answered ${Math.round(i.oracleCoverage*100)}%.
910
- `),console.log("Agreement with compiler semantics (file-level):");for(let r of i.scores){let o=r.precision===null?`unverified ${r.unverified} (oracle partial \u2014 no precision claim)`:`precision ${r.precision}`;console.log(` ${r.question.padEnd(11)} ${o} recall ${r.recall} (${r.comparedSymbols} symbols)`)}if(i.topDisagreements.length>0){console.log(`
911
- Top disagreements (debugging targets):`);for(let r of i.topDisagreements)console.log(` ${r.symbol} [${r.question}]`),r.cheapOnly.length>0&&console.log(` cheap-only: ${r.cheapOnly.join(", ")}`),r.oracleOnly.length>0&&console.log(` oracle-only: ${r.oracleOnly.join(", ")}`)}}),hb=[{id:"self-audit",command:"self-audit",description:"Score the cheap evidence paths against the TypeScript compiler oracle on sampled symbols",options:_([f("--samples <n>","Number of symbols to sample",v,50),f("-s, --scope <path>","Limit sampling to files matching path")]),renderShape:"custom",docs:w("Health",["scip-query self-audit --samples 100"]),handler:OM},{id:"complexity",command:"complexity <symbol>",description:"Per-symbol complexity: branches, cyclomatic estimate, fan-in/out, callees",options:_([f("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"custom",docs:w("Health"),handler:MM}];var jM=z(({db:e,args:t,opts:n})=>{let i=nr(e,H(t,0),{maxDepth:N(n,"maxDepth",5),scope:E(n,"scope")});if(R(n,"json")){F("affected",t,n,i);return}if(i.length===0)return P.empty("No affected symbols found.");let r=-1;for(let o of i)o.depth!==r&&(console.log(`
912
- \u2500\u2500 Depth ${o.depth} \u2500\u2500`),r=o.depth),console.log(` ${o.file} ${o.shortName}`);console.log(`
913
- ${i.length} affected symbol(s) across ${new Set(i.map(o=>o.file)).size} files.`)}),BM=z(({db:e,args:t,opts:n})=>{let i=t[0]===void 0?void 0:H(t,0),r=xn(e,i,{minTogether:N(n,"minTogether",4),limit:O(n,"limit",30),includeLinked:n.all===!0});if(R(n,"json")){F("co-change",t,n,r);return}if(!r.available)return P.empty("No git history available (not a repository, or git missing).");if(r.findings.length===0)return P.empty(i?`No co-change partners found for ${i} in ${r.commitsAnalyzed} commits.`:`No hidden coupling found in ${r.commitsAnalyzed} commits.`);console.log(i?`Co-change partners (${r.commitsAnalyzed} commits analyzed):
914
- `:`Hidden coupling \u2014 pairs that co-change with no dependency edge (${r.commitsAnalyzed} commits analyzed):
915
- `);for(let o of r.findings){let s=o.structurallyLinked?" [dep edge]":"",a=` [${o.partnerClass}]`,c=` [${o.commitScope}/${o.recency}]`;console.log(` ${o.together}x (${Math.round(o.confidence*100)}%) ${o.fileA} <-> ${o.fileB}${a}${c}${s}`),console.log(` history: ${o.focusedTogether} focused, ${o.broadTogether} broad-sweep (${Math.round(o.broadCommitRatio*100)}% broad), ${o.recentTogether} recent; last ${HM(o.lastTogetherAt)}`),console.log(` subjects: ${VM(o.subjectContext)}`),o.declaredCouplingSuggestion&&console.log(` declare coupling: ${o.declaredCouplingSuggestion.name} (${o.declaredCouplingSuggestion.reason})`)}console.log(`
916
- ${r.findings.length} pair(s). Co-editing one side without the other is how drift starts.`)});function HM(e){return e<=0?"unknown":new Date(e*1e3).toISOString().slice(0,10)}function VM(e){let t=e.subjectLabels.length>0?e.subjectLabels.slice(0,5).join(", "):"none inferred",n=e.issueRefs.length>0?e.issueRefs.slice(0,5).join(", "):"none",i=e.sampleSubjects.length>0?e.sampleSubjects.slice(0,3).map(r=>`"${r}"`).join("; "):"none";return`labels ${t}; refs ${n}; samples ${i}; external issue/PR labels ${e.externalIssueLabelStatus}`}var qM=X("change-surface",({db:e,args:t,opts:n,budget:i})=>{let r=ir(e,H(t,0),{semantic:i.semantic});if(R(n,"json")){F("change-surface",t,n,r);return}if(!r)return P.empty("File not found in index.");console.log(`File: ${r.file}`),console.log(`External consumers: ${r.totalExternalConsumers}
917
- `),P.list(r.symbols,o=>{let s=o.riskLevel==="high"?" *** HIGH RISK ***":o.riskLevel==="medium"?" * medium risk *":"";return` ${ve(o.startLine,o.endLine)} ${o.shortName} [${o.externalConsumers} consumers]${s}`})}),UM=z(({db:e,args:t,opts:n})=>{let i=lr(e,{base:E(n,"base"),minContainment:N(n,"minContainment",.7),maxHelpers:Ee(n,"maxHelpers"),limit:O(n,"limit",20)});if(R(n,"json")){F("incomplete-migration",t,n,i),i.available&&i.findings.length>0&&(process.exitCode=1);return}if(!i.available)return P.empty("No git history available (not a repository, or git missing).");if(i.changedFiles.length===0)return P.empty(`No changes vs ${i.base}.`);console.log(`Incomplete migrations vs ${i.base}: ${i.changedFiles.length} changed file(s), ${i.helpersChecked} new helper(s) scored.`),i.note&&console.log(` note: ${i.note}`);for(let r of i.skipped)console.log(` skipped ${r.helperShortName} (${r.helperFile}): ${r.reason}`);if(i.findings.length===0){console.log(`
918
- No incomplete migrations detected.`);return}for(let r of i.findings){console.log(`
919
- ${r.helperShortName} (${r.helperFile})`),console.log(` helper shape: ${r.helperShape} (${r.specificHelperCalleeCount}/${r.helperCalleeCount} specific callees)`),console.log(` wired into: ${r.migratedFiles.join(", ")}`);for(let o of r.leftovers)console.log(` un-migrated: ${Math.round(o.containment*100)}% helper / ${Math.round(o.siteCoverage*100)}% site [${o.migrationScope}] ${o.shortName} (${o.file})`),console.log(` scope: ${o.migrationScopeReasons.join("; ")}`),o.uniqueSiteCalleeCount>0&&console.log(` extra site callees: ${o.uniqueSiteCalleeCount}`),console.log(` shared: ${o.sharedCallees.join(", ")}`)}console.log(`
920
- ${i.findings.length} helper(s) with un-migrated sites. Finish the extraction or confirm the sites differ on purpose.`)});function WM(e){let t=Array.isArray(e)?e:[],n=t.filter(i=>!Ho.includes(i));return n.length>0&&(console.error(`error: unknown --skip check(s): ${n.join(", ")}. Valid checks: ${Ho.join(", ")}`),process.exit(1)),t}var GM=z(({db:e,opts:t})=>{let n=t.hook===!0;if(n&&cs(xr()))return;!n&&qc(e)&&Hl(e)===0&&console.error("Large index with a cold evidence cache: this first run computes semantic callee evidence for every production callable and can take minutes. Re-runs are incremental (evidence.db).");let i=dr(e,{base:E(t,"base"),minTogether:N(t,"minTogether",6),maxEchoChecks:Ee(t,"maxEchoChecks"),maxHelpers:Ee(t,"maxHelpers"),skip:WM(t.skip)});if(!n&&R(t,"json")){F("diff-gate",[],t,{exitCode:i.findings.length>0?1:0,...i}),i.findings.length>0&&(process.exitCode=1);return}if(n){if(i.findings.length===0)return;console.error(Cr(i)),process.exitCode=2;return}if(i.changedFiles.length===0)return P.empty(i.note??`No changes vs ${i.base}.`);console.log(`Diff gate vs ${i.base}: ${i.changedFiles.length} file(s), ${i.changedSymbols} symbol(s) changed.`),console.log(`Checks: ${i.checksRun.join(", ")}
921
- `);for(let o of i.skipped)console.log(` skipped ${o.check}: ${o.reason}`);if(i.findings.length===0){console.log("PASS: this change introduces no gate findings.");return}let r=i.rootCauseGroups?.filter(o=>o.count>1)??[];if(r.length>0){console.log(`Root-cause groups (${r.length}):`);for(let o of r){console.log(` [${o.check}] ${o.count} finding(s), ${o.severity}${o.actionTier?`, tier: ${o.actionTier}`:""}`),(o.sourceAnalyzer||o.rootCauseKey)&&console.log(` source: ${o.sourceAnalyzer??o.check}${o.rootCauseKey?` root cause: ${o.rootCauseKey}`:""}`);let s=[...new Set([...o.files,...o.relatedFiles])].slice(0,6);s.length>0&&console.log(` files: ${s.join(", ")}`),console.log(` -> ${o.remediation}`)}console.log("")}for(let o of i.findings){if(console.log(` [${o.check}] ${o.message}`),o.partnerClass){console.log(` partner class: ${o.partnerClass}`);for(let s of o.partnerClassReasons??[])console.log(` reason: ${s}`)}o.citationKind&&console.log(` citation kind: ${o.citationKind}${o.actionTier?` (tier: ${o.actionTier})`:""}`);for(let s of o.citedClaims?.slice(0,2)??[])console.log(` cited claim: ${Jo(s)}`);o.declaredCouplingSuggestion&&console.log(` declare coupling: ${o.declaredCouplingSuggestion.name} (${o.declaredCouplingSuggestion.reason})`),console.log(` -> ${o.remediation}`)}console.log(`
922
- FAIL: ${i.findings.length} finding(s), ${i.rootCauseGroups?.length??i.findings.length} root-cause group(s). Fix or knowingly accept before merging.`),process.exitCode=1}),bb=[{id:"affected",command:"affected <symbol>",description:"Transitive closure of symbols that could break if this symbol changes",options:_([f("--max-depth <n>","Maximum traversal depth",v,5),f("-s, --scope <path>","Limit to files matching path")]),renderShape:"custom",docs:w("Impact"),handler:jM},{id:"change-surface",command:"change-surface <file>",description:"Pre-change briefing: exports, consumers, and blast-radius risk",options:_([f("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"list",docs:w("Impact"),handler:qM},{id:"diff-gate",command:"diff-gate",description:"Gate the current diff: echo candidates, incomplete migrations, missing co-change partners, uncited doc updates, unused params, new dead symbols; exit 1 on findings",options:[f("--base <ref>","Git ref to diff against (default: HEAD)"),f("--min-together <n>","Minimum historical co-changes for the partner check",v,6),f("--max-echo-checks <n>","Maximum changed symbols to test for echoes (default: all)",v),f("--max-helpers <n>","Maximum new helpers to score for incomplete-migration (default: all)",v),f("--skip <check>","Skip a check (repeatable): echo, incomplete-migration, co-change-partner, doc-reference, unused-params, new-dead, baseline",es,[]),f("--hook","Agent Stop-hook mode: silent on pass, exit 2 with findings on stderr to block the stop"),f("--json","Output as JSON for programmatic consumption")],heuristic:{label:"diff gate candidates"},renderShape:"custom",docs:w("Impact",["scip-query diff-gate","scip-query diff-gate --base origin/main"]),handler:GM},{id:"incomplete-migration",command:"incomplete-migration",description:"Partially-completed extraction candidates: new helpers in the diff wired into some sites while similar un-migrated sites remain",options:_([f("--base <ref>","Git ref to diff against (default: HEAD)"),f("--min-containment <n>","Minimum share of helper callees a site must contain (0-1)",tt,.7),f("--max-helpers <n>","Maximum new helpers to score (default: all)",v),f("-n, --limit <n>","Maximum findings to report",v,20),f("--full","Run unbounded analysis on large indexes")]),heuristic:{label:"incomplete migration candidates"},renderShape:"custom",docs:w("Impact",["scip-query incomplete-migration","scip-query incomplete-migration --base origin/main"]),handler:UM},{id:"co-change",command:"co-change [file]",description:"Files that change together in git history without a dependency edge \u2014 hidden coupling candidates",options:_([f("--min-together <n>","Minimum commits where both files changed",v,4),f("-n, --limit <n>","Maximum pairs to report",v,30),f("--all","Include pairs that already have a dependency edge"),f("--full","Run unbounded analysis on large indexes")]),heuristic:{label:"co-change candidates"},renderShape:"custom",docs:w("Impact",["scip-query co-change","scip-query co-change src/runtime/config.ts"]),handler:BM}];function zM(e){let t=[];for(let r of e.definitions){let o=r.signature?` \u2014 ${r.signature}`:"";t.push(` ${ye(r.relativePath,r.startLine,r.endLine)}${o}`),r.source&&t.push(r.source.split(`
923
- `).map((s,a)=>` ${Me(r.startLine+a)} ${s}`).join(`
924
- `))}let n=[],i="";for(let r of e.referencedBy)r.relativePath!==i&&(i&&n.push(""),n.push(` ${r.relativePath}`),i=r.relativePath),n.push(` line ${Me(r.line)} in ${r.enclosingShort}`);return[{title:"DEFINITION",rows:t},{title:"REFERENCED BY",rows:n}]}var KM=z(({db:e,args:t,opts:n})=>{let i=H(t,0),r=R(n,"signatures"),o=Da(e,i);if(R(n,"json")){F("outline",t,n,o);return}if(o.length===0)return P.empty(`No symbols found for "${i}".`);function s(a,c){for(let l of a){let u=" ".repeat(c),d=r&&l.signature?` - ${JM(l.signature)}`:"";console.log(`${u}${ve(l.startLine,l.endLine)} ${l.shortName}${d}`),s(l.children,c+1)}}s(o,0)});function JM(e){return e.length>120?`${e.slice(0,117)}...`:e}var QM=Nt("imports",{query:({db:e,args:t,budget:n})=>ka(e,H(t,0),{semantic:n.semantic}),format:e=>` ${e.shortName} \u2190 ${e.fromFile}`,emptyMessage:()=>"No imports found (indexer may not emit role=2 for this language)."}),XM=vs("refs",{query:({db:e,args:t,budget:n})=>ba(e,H(t,0),{semantic:n.semantic}),format:e=>` line ${Me(e.line)}`}),YM=z(({db:e,args:t,opts:n})=>{let i=Nc(e,H(t,0),{context:N(n,"context",0)});if(R(n,"json")){F("code",t,n,i);return}if(!i)return P.empty("Symbol not found or file unreadable.");console.log(`${ye(i.relativePath,i.startLine,i.endLine)} ${i.shortName} [${i.language??"unknown"}]
925
- `);let r=i.source.split(`
926
- `);for(let o=0;o<r.length;o++)console.log(` ${String(Me(i.startLine+o)).padStart(4)} ${r[o]}`)}),ZM=X("dataflow",({db:e,args:t,opts:n,budget:i})=>{let r=pr(e,H(t,0),{semantic:i.semantic});if(R(n,"json")){F("dataflow",t,n,r);return}if(!r)return P.empty("Symbol not found.");if(console.log(`${r.shortName} (${r.relativePath})
927
- `),r.definitionSites.length>0){console.log(" \u2550\u2550\u2550 DEFINED AT \u2550\u2550\u2550");for(let o of r.definitionSites)console.log(` ${o.file}:${Me(o.line)}`)}if(r.usageSites.length>0){console.log(`
928
- \u2550\u2550\u2550 USED AT \u2550\u2550\u2550`);for(let o of r.usageSites)console.log(` ${o.file}:${Me(o.line)} in ${o.enclosingShort}`)}if(r.producers.length>0){console.log(`
929
- \u2550\u2550\u2550 PRODUCERS (feeds into this) \u2550\u2550\u2550`);for(let o of r.producers)console.log(` ${o.file} ${o.shortName}`)}if(r.consumers.length>0){console.log(`
930
- \u2550\u2550\u2550 CONSUMERS (this feeds into) \u2550\u2550\u2550`);for(let o of r.consumers)console.log(` ${o.file} ${o.shortName}`)}}),eO=X("slice",({db:e,args:t,opts:n,budget:i})=>{let r=R(n,"forward")?"forward":"backward",o=mi(e,H(t,0),{direction:r,maxDepth:N(n,"depth",3),semantic:i.semantic});if(R(n,"json")){F("slice",t,n,o);return}if(!o)return P.empty("Symbol not found.");if(console.log(`${o.direction} slice of ${o.shortName}
941
+ ${e.length} redundant re-export(s).`)}),ct({id:"similar-signatures",command:"similar-signatures",description:"Find functions with near-identical type signatures (same shape)",options:_([p("-s, --scope <path>","Limit to files matching path"),p("--min-loc <n>","Minimum LOC per function",v,3),p("-n, --limit <n>","Number of groups",v,20),p("--full","Run unbounded semantic analysis on large indexes")]),budget:"candidate-scan",renderShape:"list",handler:Yy})];var YO=K(({db:e,args:t,opts:n})=>{let r=$e(e);if(R(n,"json")){A("stats",t,n,r);return}console.log(`Documents: ${r.documents}`),console.log(`Symbols: ${r.symbols}`),console.log(`Definitions: ${r.definitions}`),console.log(`References: ${r.references}`),console.log(`Index size: ${$n(r.indexSizeBytes)}`),r.lastBuilt&&console.log(`Last built: ${r.lastBuilt.toISOString().replace("T"," ").slice(0,19)}`)}),ub=[{id:"stats",command:"stats",description:"Show index statistics",options:[pl()],renderShape:"custom",docs:w("Core"),handler:YO}];var ZO=Hs("bottlenecks",{headers:["tier","risk","score","fan-in","fan-out","symbol"],query:({db:e,opts:t,budget:n})=>nc(e,{limit:O(t,"limit",20),scope:E(t,"scope"),minFanIn:N(t,"minFanIn",2),minFanOut:N(t,"minFanOut",2),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${e.actionTier.padEnd(6)} ${e.riskKind.padEnd(20)} ${String(e.score).padStart(5)} ${String(e.fanIn).padStart(6)} ${String(e.fanOut).padStart(7)} ${e.shortName}`,emptyMessage:()=>"No bottlenecks found."}),eB=K(({db:e,args:t,opts:n})=>{let r=pe(t,0),i=O(n,"limit",30);if(r){let s=Xa(e,r);if(R(n,"json")){A("fan-in",t,n,{mode:"symbol",symbol:r,rows:s});return}if(s.length===0)return P.empty(`No fan-in for ${r}.`);P.list(s,a=>` ${String(a.count).padStart(4)} files ${a.name}`);return}let o=Ya(e,{limit:i,scope:E(n,"scope")});if(R(n,"json")){A("fan-in",t,n,{mode:"top",rows:o});return}P.table(["files","symbol"],o.map(s=>` ${String(s.count).padStart(5)} ${s.name}`))}),tB=K(({db:e,args:t,opts:n})=>{let r=pe(t,0),i=O(n,"limit",30);if(r){let s=Qa(e,r);if(R(n,"json")){A("fan-out",t,n,{mode:"file",file:r,rows:s});return}if(s.length===0)return P.empty(`No fan-out for ${r}.`);P.list(s,a=>` ${String(a.count).padStart(4)} symbols ${a.name}`);return}let o=Za(e,{limit:i,scope:E(n,"scope")});if(R(n,"json")){A("fan-out",t,n,{mode:"top",rows:o});return}P.table(["symbols","file"],o.map(s=>` ${String(s.count).padStart(7)} ${s.name}`))}),nB=K(({db:e,args:t,opts:n})=>{let r=pe(t,0),i=pe(t,1),o=O(n,"limit",20);if(r&&i){let a=ec(e,r,i);if(R(n,"json")){A("coupling",t,n,{mode:"pair",result:a});return}console.log(`${a.file1} \u2194 ${a.file2}: ${a.sharedSymbols} shared symbols (${a.actionTier})`),console.log(` Risk: ${a.couplingKind}`),console.log(` Recommendation: ${a.recommendation}`);return}let s=tc(e,{limit:o,scope:E(n,"scope")});if(R(n,"json")){A("coupling",t,n,{mode:"top",rows:s});return}P.table(["tier","risk","shared","file1 \u2192 file2"],s.map(a=>` ${a.actionTier.padEnd(6)} ${a.couplingKind.padEnd(22)} ${String(a.sharedSymbols).padStart(6)} ${a.file1} \u2192 ${a.file2}`))}),rB=Vn({commandName:"cycles",query:({db:e,opts:t})=>Sn(e,{scope:E(t,"scope"),maxDepth:N(t,"maxDepth",10)}),emptyMessage:e=>e.length===0?"No circular dependencies found.":void 0,render:e=>{let t=e.filter(r=>r.kind==="real"),n=e.filter(r=>r.kind==="module-hierarchy");for(let r=0;r<t.length;r++){console.log(`
942
+ Cycle ${r+1} (${t[r].path.length-1} files):`);for(let i=0;i<t[r].path.length;i++){let o=i<t[r].path.length-1?" \u2192":" (cycle)";console.log(` ${t[r].path[i]}${o}`)}}t.length===0?console.log("No real circular dependencies found."):console.log(`
943
+ ${t.length} real cycle(s) found.`),n.length>0&&console.log(`(${n.length} module-hierarchy cycle(s) hidden \u2014 barrel files participating in normal parent/child re-export patterns. Pass --include-module-hierarchy to see them.)`)}}),iB=Vn({commandName:"deep-chains",query:({db:e,opts:t})=>ac(e,{limit:O(t,"limit",10),scope:E(t,"scope"),minDepth:N(t,"minDepth",3)}),emptyMessage:e=>e.length===0?"No deep chains found.":void 0,render:e=>{for(let t=0;t<e.length;t++){console.log(`
944
+ Chain ${t+1} (depth ${e[t].depth}):`);for(let n of e[t].chain)console.log(` \u2192 ${n}`);console.log(` Tier: ${e[t].actionTier} Risk: ${e[t].chainKind}`),console.log(` Recommendation: ${e[t].recommendation}`),console.log(` Evidence: ${e[t].evidenceReasons.join("; ")}`)}}}),db=[qs({id:"hotspots",command:"hotspots",description:"Most-referenced symbols in the codebase (choke points)",options:[p("-n, --limit <n>","Number of results",v,30),p("-s, --scope <path>","Limit to files matching path"),p("--full","Run unbounded analysis on large indexes")],docs:w("Graph"),headers:["refs","files","symbol"],query:({db:e,opts:t})=>Ua(e,{limit:O(t,"limit",30),scope:E(t,"scope")}),format:e=>` ${String(e.refCount).padStart(4)} ${String(e.fileCount).padStart(5)} ${e.shortName}`}),{id:"fan-in",command:"fan-in [symbol]",description:"How many files reference a symbol (or top fan-in across codebase)",options:_([p("-n, --limit <n>","Number of results for top mode",v,30),p("-s, --scope <path>","Limit to files matching path"),p("--full","Run unbounded analysis on large indexes")]),renderShape:"custom",docs:w("Graph"),handler:eB},{id:"fan-out",command:"fan-out [file]",description:"How many external symbols a file uses (or top fan-out across codebase)",options:_([p("-n, --limit <n>","Number of results for top mode",v,30),p("-s, --scope <path>","Limit to files matching path"),p("--full","Run unbounded analysis on large indexes")]),renderShape:"custom",docs:w("Graph"),handler:tB},{id:"coupling",command:"coupling [file1] [file2]",description:"Coupling between two files, or top coupled pairs in codebase",options:_([p("-n, --limit <n>","Number of results for top mode",v,20),p("-s, --scope <path>","Limit to files matching path"),p("--full","Run unbounded analysis on large indexes")]),renderShape:"custom",docs:w("Graph"),handler:nB},{id:"cycles",command:"cycles",description:"Detect circular dependency chains between files",options:_([p("-s, --scope <path>","Limit to files matching path"),p("--max-depth <n>","Maximum cycle depth",v,10)]),renderShape:"custom",docs:w("Graph"),handler:rB},{id:"bottlenecks",command:"bottlenecks",description:"Find coupling hubs: high fan-in AND high fan-out",options:_([p("-n, --limit <n>","Number of results",v,20),p("-s, --scope <path>","Limit to files matching path"),p("--min-fan-in <n>","Minimum fan-in",v,2),p("--min-fan-out <n>","Minimum fan-out",v,2),p("--full","Run unbounded semantic analysis on large indexes")]),budget:"candidate-scan",renderShape:"table",docs:w("Graph"),handler:ZO},{id:"deep-chains",command:"deep-chains",description:"Find the longest transitive dependency chains",options:_([p("-n, --limit <n>","Number of chains to show",v,10),p("-s, --scope <path>","Limit to files matching path"),p("--min-depth <n>","Minimum chain depth",v,3),p("--full","Run unbounded analysis on large indexes")]),renderShape:"custom",docs:w("Graph"),handler:iB},Us({id:"call-graph",command:"call-graph <symbol>",description:"Show incoming callers and outgoing callees for a symbol",options:[p("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",docs:w("Graph"),query:({db:e,args:t,budget:n})=>li(e,String(t[0]),{semantic:n.semantic}),emptyMessage:e=>e?void 0:"Symbol not found.",before:e=>{e&&console.log(`Symbol: ${e.shortName}
945
+ `)},sections:e=>e?[{title:`CALLERS (${e.callers.length})`,rows:e.callers.map(t=>` ${t.file} ${t.shortName}`)},{title:`CALLEES (${e.callees.length})`,rows:e.callees.map(t=>` ${t.file} ${t.shortName}`)}]:[]})];var oB=Q("complexity",({db:e,args:t,opts:n,budget:r})=>{let i=Li(e,H(t,0),{semantic:r.semantic});if(R(n,"json")){A("complexity",t,n,i);return}if(!i)return P.empty("Symbol not found.");console.log(`${Se(i.relativePath,i.startLine,i.endLine)} ${i.shortName}
946
+ `),console.log(` LOC: ${i.loc}`),console.log(` Branches: ${i.branches}`),console.log(` Cyclomatic estimate: ${i.cyclomaticEstimate}`),console.log(` Callees: ${i.calleeCount}`),console.log(` Fan-in: ${i.fanIn}`),console.log(` Fan-out: ${i.fanOut}`)}),sB=K(({db:e,args:t,opts:n})=>{let r=nl(e,{samples:N(n,"samples",50),scope:E(n,"scope")});if(R(n,"json")){A("self-audit",t,n,r);return}if(!r.available)return P.empty("No semantic provider available to audit against (TypeScript projects only).");console.log(`Sampled ${r.sampleSize} symbols; oracle answered ${Math.round(r.oracleCoverage*100)}%.
947
+ `),console.log("Agreement with compiler semantics (file-level):");for(let i of r.scores){let o=i.precision===null?`unverified ${i.unverified} (oracle partial \u2014 no precision claim)`:`precision ${i.precision}`;console.log(` ${i.question.padEnd(11)} ${o} recall ${i.recall} (${i.comparedSymbols} symbols)`)}if(r.topDisagreements.length>0){console.log(`
948
+ Top disagreements (debugging targets):`);for(let i of r.topDisagreements)console.log(` ${i.symbol} [${i.question}]`),i.cheapOnly.length>0&&console.log(` cheap-only: ${i.cheapOnly.join(", ")}`),i.oracleOnly.length>0&&console.log(` oracle-only: ${i.oracleOnly.join(", ")}`)}}),mb=[{id:"self-audit",command:"self-audit",description:"Score the cheap evidence paths against the TypeScript compiler oracle on sampled symbols",options:_([p("--samples <n>","Number of symbols to sample",v,50),p("-s, --scope <path>","Limit sampling to files matching path")]),renderShape:"custom",docs:w("Health",["scip-query self-audit --samples 100"]),handler:sB},{id:"complexity",command:"complexity <symbol>",description:"Per-symbol complexity: branches, cyclomatic estimate, fan-in/out, callees",options:_([p("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"custom",docs:w("Health"),handler:oB}];var aB=K(({db:e,args:t,opts:n})=>{let r=gi(e,H(t,0),{maxDepth:N(n,"maxDepth",5),scope:E(n,"scope")});if(R(n,"json")){A("affected",t,n,r);return}if(r.length===0)return P.empty("No affected symbols found.");let i=-1;for(let o of r)o.depth!==i&&(console.log(`
949
+ \u2500\u2500 Depth ${o.depth} \u2500\u2500`),i=o.depth),console.log(` ${o.file} ${o.shortName}`);console.log(`
950
+ ${r.length} affected symbol(s) across ${new Set(r.map(o=>o.file)).size} files.`)}),cB=K(({db:e,args:t,opts:n})=>{let r=t[0]===void 0?void 0:H(t,0),i=In(e,r,{minTogether:N(n,"minTogether",4),limit:O(n,"limit",30),includeLinked:n.all===!0});if(R(n,"json")){A("co-change",t,n,i);return}if(!i.available)return P.empty("No git history available (not a repository, or git missing).");if(i.findings.length===0)return P.empty(r?`No co-change partners found for ${r} in ${i.commitsAnalyzed} commits.`:`No hidden coupling found in ${i.commitsAnalyzed} commits.`);console.log(r?`Co-change partners (${i.commitsAnalyzed} commits analyzed):
951
+ `:`Hidden coupling \u2014 pairs that co-change with no dependency edge (${i.commitsAnalyzed} commits analyzed):
952
+ `);for(let o of i.findings){let s=o.structurallyLinked?" [dep edge]":"",a=` [${o.partnerClass}]`,c=` [${o.commitScope}/${o.recency}]`;console.log(` ${o.together}x (${Math.round(o.confidence*100)}%) ${o.fileA} <-> ${o.fileB}${a}${c}${s}`),console.log(` history: ${o.focusedTogether} focused, ${o.broadTogether} broad-sweep (${Math.round(o.broadCommitRatio*100)}% broad), ${o.recentTogether} recent; last ${lB(o.lastTogetherAt)}`),console.log(` subjects: ${uB(o.subjectContext)}`),o.declaredCouplingSuggestion&&console.log(` declare coupling: ${o.declaredCouplingSuggestion.name} (${o.declaredCouplingSuggestion.reason})`)}console.log(`
953
+ ${i.findings.length} pair(s). Co-editing one side without the other is how drift starts.`)});function lB(e){return e<=0?"unknown":new Date(e*1e3).toISOString().slice(0,10)}function uB(e){let t=e.subjectLabels.length>0?e.subjectLabels.slice(0,5).join(", "):"none inferred",n=e.issueRefs.length>0?e.issueRefs.slice(0,5).join(", "):"none",r=e.sampleSubjects.length>0?e.sampleSubjects.slice(0,3).map(i=>`"${i}"`).join("; "):"none";return`labels ${t}; refs ${n}; samples ${r}; external issue/PR labels ${e.externalIssueLabelStatus}`}var dB=Q("change-surface",({db:e,args:t,opts:n,budget:r})=>{let i=hi(e,H(t,0),{semantic:r.semantic});if(R(n,"json")){A("change-surface",t,n,i);return}if(!i)return P.empty("File not found in index.");console.log(`File: ${i.file}`),console.log(`External consumers: ${i.totalExternalConsumers}
954
+ `),P.list(i.symbols,o=>{let s=o.riskLevel==="high"?" *** HIGH RISK ***":o.riskLevel==="medium"?" * medium risk *":"";return` ${Re(o.startLine,o.endLine)} ${o.shortName} [${o.externalConsumers} consumers]${s}`})}),mB=Q("incomplete-migration",({db:e,args:t,opts:n,budget:r})=>{let i=Ri(e,{base:E(n,"base"),minContainment:N(n,"minContainment",.7),maxHelpers:ke(n,"maxHelpers"),limit:O(n,"limit",20),scanLimit:r.scanLimit,semantic:r.semantic});if(R(n,"json")){A("incomplete-migration",t,n,i),i.available&&i.findings.length>0&&(process.exitCode=1);return}if(!i.available)return P.empty("No git history available (not a repository, or git missing).");if(i.changedFiles.length===0)return P.empty(`No changes vs ${i.base}.`);console.log(`Incomplete migrations vs ${i.base}: ${i.changedFiles.length} changed file(s), ${i.helpersChecked} new helper(s) scored.`),i.note&&console.log(` note: ${i.note}`);for(let o of i.skipped)console.log(` skipped ${o.helperShortName} (${o.helperFile}): ${o.reason}`);if(i.findings.length===0){console.log(`
955
+ No incomplete migrations detected.`);return}for(let o of i.findings){console.log(`
956
+ ${o.helperShortName} (${o.helperFile})`),console.log(` helper shape: ${o.helperShape} (${o.specificHelperCalleeCount}/${o.helperCalleeCount} specific callees)`),console.log(` wired into: ${o.migratedFiles.join(", ")}`);for(let s of o.leftovers)console.log(` un-migrated: ${Math.round(s.containment*100)}% helper / ${Math.round(s.siteCoverage*100)}% site [${s.migrationScope}] ${s.shortName} (${s.file})`),console.log(` scope: ${s.migrationScopeReasons.join("; ")}`),s.uniqueSiteCalleeCount>0&&console.log(` extra site callees: ${s.uniqueSiteCalleeCount}`),console.log(` shared: ${s.sharedCallees.join(", ")}`)}console.log(`
957
+ ${i.findings.length} helper(s) with un-migrated sites. Finish the extraction or confirm the sites differ on purpose.`)});function pB(e){let t=Array.isArray(e)?e:[],n=t.filter(r=>!ls.includes(r));return n.length>0&&(console.error(`error: unknown --skip check(s): ${n.join(", ")}. Valid checks: ${ls.join(", ")}`),process.exit(1)),t}var fB=K(({db:e,opts:t})=>{let n=t.hook===!0;if(n&&$s(Hi()))return;let r=Ss(e,"diff-gate",R(t,"full"),{quiet:n||R(t,"json")}),i=wi(e,{base:E(t,"base"),minTogether:N(t,"minTogether",6),maxEchoChecks:ke(t,"maxEchoChecks"),maxHelpers:ke(t,"maxHelpers"),includeBaseline:R(t,"baseline"),scanLimit:r.scanLimit,semantic:r.semantic,skip:pB(t.skip)});if(!n&&R(t,"json")){A("diff-gate",[],t,{exitCode:i.findings.length>0?1:0,...i}),i.findings.length>0&&(process.exitCode=1);return}if(n){if(i.findings.length===0)return;console.error(Vi(i)),process.exitCode=2;return}if(i.changedFiles.length===0)return P.empty(i.note??`No changes vs ${i.base}.`);console.log(`Diff gate vs ${i.base}: ${i.changedFiles.length} file(s), ${i.changedSymbols} symbol(s) changed.`),console.log(`Checks: ${i.checksRun.join(", ")}
958
+ `);for(let s of i.skipped)console.log(` skipped ${s.check}: ${s.reason}`);if(i.findings.length===0){console.log("PASS: this change introduces no gate findings.");return}let o=i.rootCauseGroups?.filter(s=>s.count>1)??[];if(o.length>0){console.log(`Root-cause groups (${o.length}):`);for(let s of o){console.log(` [${s.check}] ${s.count} finding(s), ${s.severity}${s.actionTier?`, tier: ${s.actionTier}`:""}`),(s.sourceAnalyzer||s.rootCauseKey)&&console.log(` source: ${s.sourceAnalyzer??s.check}${s.rootCauseKey?` root cause: ${s.rootCauseKey}`:""}`);let a=[...new Set([...s.files,...s.relatedFiles])].slice(0,6);a.length>0&&console.log(` files: ${a.join(", ")}`),console.log(` -> ${s.remediation}`)}console.log("")}for(let s of i.findings){if(console.log(` [${s.check}] ${s.message}`),s.partnerClass){console.log(` partner class: ${s.partnerClass}`);for(let a of s.partnerClassReasons??[])console.log(` reason: ${a}`)}s.citationKind&&console.log(` citation kind: ${s.citationKind}${s.actionTier?` (tier: ${s.actionTier})`:""}`);for(let a of s.citedClaims?.slice(0,2)??[])console.log(` cited claim: ${hs(a)}`);s.declaredCouplingSuggestion&&console.log(` declare coupling: ${s.declaredCouplingSuggestion.name} (${s.declaredCouplingSuggestion.reason})`),console.log(` -> ${s.remediation}`)}console.log(`
959
+ FAIL: ${i.findings.length} finding(s), ${i.rootCauseGroups?.length??i.findings.length} root-cause group(s). Fix or knowingly accept before merging.`),process.exitCode=1}),pb=[{id:"affected",command:"affected <symbol>",description:"Transitive closure of symbols that could break if this symbol changes",options:_([p("--max-depth <n>","Maximum traversal depth",v,5),p("-s, --scope <path>","Limit to files matching path")]),renderShape:"custom",docs:w("Impact"),handler:aB},{id:"change-surface",command:"change-surface <file>",description:"Pre-change briefing: exports, consumers, and blast-radius risk",options:_([p("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"list",docs:w("Impact"),handler:dB},{id:"diff-gate",command:"diff-gate",description:"Gate the current diff: echo candidates, incomplete migrations, missing co-change partners, uncited doc updates, unused params, new dead symbols; exit 1 on findings",options:[p("--base <ref>","Git ref to diff against (default: HEAD)"),p("--min-together <n>","Minimum historical co-changes for the partner check",v,6),p("--max-echo-checks <n>","Maximum changed symbols to test for echoes (default: all)",v),p("--max-helpers <n>","Maximum new helpers to score for incomplete-migration (default: all)",v),p("--baseline","Also run the full health-baseline ratchet"),p("--full","Run unbounded semantic analysis on large indexes"),p("--skip <check>","Skip a check (repeatable): echo, incomplete-migration, co-change-partner, doc-reference, unused-params, new-dead, baseline",_i,[]),p("--hook","Agent Stop-hook mode: silent on pass, exit 2 with findings on stderr to block the stop"),p("--json","Output as JSON for programmatic consumption")],heuristic:{label:"diff gate candidates"},renderShape:"custom",docs:w("Impact",["scip-query diff-gate","scip-query diff-gate --base origin/main"]),handler:fB},{id:"incomplete-migration",command:"incomplete-migration",description:"Partially-completed extraction candidates: new helpers in the diff wired into some sites while similar un-migrated sites remain",options:_([p("--base <ref>","Git ref to diff against (default: HEAD)"),p("--min-containment <n>","Minimum share of helper callees a site must contain (0-1)",st,.7),p("--max-helpers <n>","Maximum new helpers to score (default: all)",v),p("-n, --limit <n>","Maximum findings to report",v,20),p("--full","Run unbounded analysis on large indexes")]),heuristic:{label:"incomplete migration candidates"},renderShape:"custom",docs:w("Impact",["scip-query incomplete-migration","scip-query incomplete-migration --base origin/main"]),handler:mB},{id:"co-change",command:"co-change [file]",description:"Files that change together in git history without a dependency edge \u2014 hidden coupling candidates",options:_([p("--min-together <n>","Minimum commits where both files changed",v,4),p("-n, --limit <n>","Maximum pairs to report",v,30),p("--all","Include pairs that already have a dependency edge"),p("--full","Run unbounded analysis on large indexes")]),heuristic:{label:"co-change candidates"},renderShape:"custom",docs:w("Impact",["scip-query co-change","scip-query co-change src/runtime/config.ts"]),handler:cB}];function gB(e){let t=[];for(let i of e.definitions){let o=i.signature?` \u2014 ${i.signature}`:"";t.push(` ${Se(i.relativePath,i.startLine,i.endLine)}${o}`),i.source&&t.push(i.source.split(`
960
+ `).map((s,a)=>` ${Oe(i.startLine+a)} ${s}`).join(`
961
+ `))}let n=[],r="";for(let i of e.referencedBy)i.relativePath!==r&&(r&&n.push(""),n.push(` ${i.relativePath}`),r=i.relativePath),n.push(` line ${Oe(i.line)} in ${i.enclosingShort}`);return[{title:"DEFINITION",rows:t},{title:"REFERENCED BY",rows:n}]}var hB=K(({db:e,args:t,opts:n})=>{let r=H(t,0),i=R(n,"signatures"),o=Ja(e,r);if(R(n,"json")){A("outline",t,n,o);return}if(o.length===0)return P.empty(`No symbols found for "${r}".`);function s(a,c){for(let l of a){let u=" ".repeat(c),d=i&&l.signature?` - ${yB(l.signature)}`:"";console.log(`${u}${Re(l.startLine,l.endLine)} ${l.shortName}${d}`),s(l.children,c+1)}}s(o,0)});function yB(e){return e.length>120?`${e.slice(0,117)}...`:e}var bB=Ft("imports",{query:({db:e,args:t,budget:n})=>Wa(e,H(t,0),{semantic:n.semantic}),format:e=>` ${e.shortName} \u2190 ${e.fromFile}`,emptyMessage:()=>"No imports found (indexer may not emit role=2 for this language)."}),SB=Vs("refs",{query:({db:e,args:t,budget:n})=>Ma(e,H(t,0),{semantic:n.semantic}),format:e=>` line ${Oe(e.line)}`}),xB=K(({db:e,args:t,opts:n})=>{let r=Zc(e,H(t,0),{context:N(n,"context",0)});if(R(n,"json")){A("code",t,n,r);return}if(!r)return P.empty("Symbol not found or file unreadable.");console.log(`${Se(r.relativePath,r.startLine,r.endLine)} ${r.shortName} [${r.language??"unknown"}]
962
+ `);let i=r.source.split(`
963
+ `);for(let o=0;o<i.length;o++)console.log(` ${String(Oe(r.startLine+o)).padStart(4)} ${i[o]}`)}),CB=Q("dataflow",({db:e,args:t,opts:n,budget:r})=>{let i=Ii(e,H(t,0),{semantic:r.semantic});if(R(n,"json")){A("dataflow",t,n,i);return}if(!i)return P.empty("Symbol not found.");if(console.log(`${i.shortName} (${i.relativePath})
964
+ `),i.definitionSites.length>0){console.log(" \u2550\u2550\u2550 DEFINED AT \u2550\u2550\u2550");for(let o of i.definitionSites)console.log(` ${o.file}:${Oe(o.line)}`)}if(i.usageSites.length>0){console.log(`
965
+ \u2550\u2550\u2550 USED AT \u2550\u2550\u2550`);for(let o of i.usageSites)console.log(` ${o.file}:${Oe(o.line)} in ${o.enclosingShort}`)}if(i.producers.length>0){console.log(`
966
+ \u2550\u2550\u2550 PRODUCERS (feeds into this) \u2550\u2550\u2550`);for(let o of i.producers)console.log(` ${o.file} ${o.shortName}`)}if(i.consumers.length>0){console.log(`
967
+ \u2550\u2550\u2550 CONSUMERS (this feeds into) \u2550\u2550\u2550`);for(let o of i.consumers)console.log(` ${o.file} ${o.shortName}`)}}),vB=Q("slice",({db:e,args:t,opts:n,budget:r})=>{let i=R(n,"forward")?"forward":"backward",o=kr(e,H(t,0),{direction:i,maxDepth:N(n,"depth",3),semantic:r.semantic});if(R(n,"json")){A("slice",t,n,o);return}if(!o)return P.empty("Symbol not found.");if(console.log(`${o.direction} slice of ${o.shortName}
931
968
  `),o.connectedSymbols.length===0){console.log(" No connected symbols found.");return}P.list(o.connectedSymbols,s=>` ${s.file} ${s.shortName}
932
969
  ${s.relationship}`),console.log(`
933
- ${o.connectedSymbols.length} connected symbol(s).`)}),yb=[ht({id:"files",command:"files <pattern>",description:"Find files matching a pattern",docs:w("Navigation",["scip-query files auth"]),query:({db:e,args:t})=>Es(e,H(t,0)),format:e=>e.relativePath}),ht({id:"methods",command:"methods <className>",description:"List methods of a class (with line ranges)",docs:w("Navigation"),query:({db:e,args:t})=>ha(e,H(t,0)),format:e=>` ${ve(e.startLine,e.endLine)} ${e.name}`}),{id:"refs",command:"refs <symbol>",description:"Find all files referencing a symbol",options:[f("--full","Run unbounded semantic analysis on large indexes"),f("--json","Output as JSON for programmatic consumption")],budget:"semantic",renderShape:"grouped-by-file",docs:w("Navigation",["scip-query refs login"]),handler:XM},ks({id:"trace",command:"trace <symbol>",description:"Trace a symbol: definition + all references",options:[f("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",docs:w("Navigation",["scip-query trace parseSymbol"]),query:({db:e,args:t,budget:n})=>Wi(e,H(t,0),{semantic:n.semantic}),sections:zM}),ht({id:"deps",command:"deps <file>",description:"Files this file depends on (internal)",docs:w("Navigation"),query:({db:e,args:t})=>Gi(e,H(t,0)),format:e=>e.relativePath}),ht({id:"rdeps",command:"rdeps <file>",description:"Files that depend on this file/module",docs:w("Navigation"),query:({db:e,args:t})=>zi(e,H(t,0)),format:e=>e.relativePath}),Hh({id:"system",command:"system <module>",description:"Full module map: files, symbols, deps in/out",docs:w("Navigation",["scip-query system queries"]),query:({db:e,args:t})=>Ki(e,H(t,0)),sections:e=>[{title:"FILES",rows:e.files},{title:"EXPORTED SYMBOLS",rows:e.symbols.map(t=>` ${ve(t.startLine,t.endLine)} ${t.shortName}`)},{title:"DEPENDS ON (internal)",rows:e.dependsOn.map(t=>` ${t}`)},{title:"DEPENDED ON BY",rows:e.dependedOnBy.map(t=>` ${t}`)}]}),ht({id:"surface",command:"surface <module>",description:"What symbols consumers actually use from this module",docs:w("Navigation"),query:({db:e,args:t})=>Ji(e,H(t,0)),format:e=>` ${e.consumer} \u2192 ${e.shortName}`}),{id:"imports",command:"imports <file>",description:"What symbols does this file import?",options:[f("--full","Run unbounded semantic analysis on large indexes"),f("--json","Output as JSON for programmatic consumption")],budget:"semantic",renderShape:"list",docs:w("Navigation"),handler:QM},ht({id:"imported-by",command:"imported-by <symbol>",description:"Which files import this symbol?",docs:w("Navigation"),query:({db:e,args:t})=>wa(e,H(t,0)),format:e=>` ${e.fromFile}`}),{id:"outline",command:"outline <file>",description:"Tree view of symbols in a file, with line ranges",options:_([f("--signatures","Show trimmed symbol signatures")]),renderShape:"custom",docs:w("Navigation"),handler:KM},ht({id:"members",command:"members <symbol>",description:"All children of a symbol (methods, fields, nested types)",docs:w("Navigation"),query:({db:e,args:t})=>Ia(e,H(t,0)),format:e=>` ${ve(e.startLine,e.endLine)} [${e.kind}] ${e.shortName}`}),ht({id:"by-kind",command:"by-kind <kind>",description:"Find symbols by SCIP kind (class, interface, enum, function, etc.)",options:[f("-s, --scope <path>","Limit to files matching path"),f("-n, --limit <n>","Number of results",v,100),f("--full","Run unbounded analysis on large indexes")],docs:w("Navigation"),query:({db:e,args:t,opts:n})=>Oa(e,H(t,0),{scope:E(n,"scope"),limit:O(n,"limit",100)}),format:e=>` ${ye(e.relativePath,e.startLine,e.endLine)} [${e.kindName}] ${e.shortName}`,emptyMessage:({args:e})=>`No symbols found for kind "${H(e,0)}". Use "kind-counts" to see available kinds.`,after:e=>console.log(`
934
- ${e.length} symbol(s)`)}),Rs({id:"kind-counts",command:"kind-counts",description:"Histogram of symbol kinds in the codebase",options:[f("-s, --scope <path>","Limit to files matching path")],docs:w("Navigation"),headers:["count","kind"],query:({db:e,opts:t})=>ja(e,{scope:E(t,"scope")}),format:e=>` ${String(e.count).padStart(5)} ${e.kindName} (${e.kind})`}),ht({id:"hierarchy",command:"hierarchy <symbol>",description:"Show a symbol's ancestry chain (method \u2192 class \u2192 module)",docs:w("Navigation"),query:({db:e,args:t})=>Ha(e,H(t,0)),format:e=>`${" ".repeat(e.depth)}${e.shortName}`,emptyMessage:()=>"Symbol not found."}),{id:"code",command:"code <symbol>",description:"Read the source code for a symbol (bounded to its definition range)",options:_([f("-C, --context <n>","Extra lines of context above/below",v,0)]),renderShape:"custom",docs:w("Navigation"),handler:YM},{id:"dataflow",command:"dataflow <symbol>",description:"Reference-level dataflow: definition sites, usage sites, producers, consumers",options:_([f("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"custom",docs:w("Navigation"),handler:ZM},{id:"slice",command:"slice <symbol>",description:"Reference-level program slice: what affects this (backward) or what this affects (forward)",options:_([f("--forward","Forward slice (what does this affect). Default is backward."),f("--depth <n>","Max transitive depth for backward slice",v,3),f("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"custom",docs:w("Navigation"),handler:eO}];var tO=X("plan-context",({db:e,args:t,opts:n,budget:i})=>{let r=O(n,"limit",20),o=Rc(e,H(t,0),{semantic:i.semantic,impactDepth:N(n,"impactDepth",3),sliceDepth:N(n,"sliceDepth",3),scope:E(n,"scope")});if(o.warnings.length===1&&o.warnings[0]==="No symbol, file, or module matched target."){if(R(n,"json")){F("plan-context",t,n,o);return}return P.empty(o.warnings[0])}if(R(n,"json")){F("plan-context",t,n,o);return}let s=[{title:"TARGET",rows:nO(o)},{title:"DEFINITIONS",rows:iO(o,r),skipIfEmpty:!0},{title:"REFERENCES",rows:rO(o,r),skipIfEmpty:!0},{title:"CALL GRAPH",rows:oO(o,r),skipIfEmpty:!0},{title:"DATAFLOW",rows:sO(o,r),skipIfEmpty:!0},{title:"DEPENDENCIES",rows:aO(o,r),skipIfEmpty:!0},{title:"SURFACE",rows:cO(o,r),skipIfEmpty:!0},{title:"DOWNSTREAM IMPACT",rows:lO(o,r),skipIfEmpty:!0},{title:"CHANGE RISK",rows:uO(o,r),skipIfEmpty:!0},{title:"HISTORY",rows:dO(o),skipIfEmpty:!0},{title:"PLANNING NOTES",rows:mO(o),skipIfEmpty:!0}];P.sectionedReport(s)}),Sb=[{id:"plan-context",command:"plan-context <target>",description:"Pre-edit planning context for a symbol, file, or module",options:_([f("--impact-depth <n>","Maximum affected traversal depth",v,3),f("--slice-depth <n>","Maximum backward slice depth",v,3),f("-s, --scope <path>","Limit downstream impact to files matching path"),f("-n, --limit <n>","Rows per section",v,20),f("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"custom",docs:w("Planning",["scip-query plan-context parseSymbol"]),handler:tO}];function nO(e){return[`Target: ${e.target}`,`Matched: symbol=${Il(e.matched.symbol)} file=${Il(e.matched.file)} module=${Il(e.matched.module)}`]}function iO(e,t){let n=[];for(let i of e.trace.definitions){let r=i.signature?` -- ${i.signature}`:"";n.push(` ${ye(i.relativePath,i.startLine,i.endLine)}${r}`),i.source&&n.push(...i.source.split(`
935
- `).map((o,s)=>` ${String(Me(i.startLine+s)).padStart(4)} ${o}`))}return n.length===0&&n.push(...e.system.symbols.map(i=>` ${ve(i.startLine,i.endLine)} ${i.shortName}`)),zt(n,t).rows}function rO(e,t){let n=e.trace.referencedBy.map(i=>` ${i.relativePath}:${Me(i.line)} in ${i.enclosingShort}`);return $n(zt(n,t))}function oO(e,t){if(!e.callGraph)return[];let n=e.callGraph.callers.map(r=>` caller ${r.file} ${r.shortName}`),i=e.callGraph.callees.map(r=>` callee ${r.file} ${r.shortName}`);return $n(zt([...n,...i],t))}function sO(e,t){if(!e.dataflow)return[];let n=e.dataflow.producers.map(o=>` producer ${o.file} ${o.shortName}`),i=e.dataflow.consumers.map(o=>` consumer ${o.file} ${o.shortName}`),r=e.dataflow.usageSites.map(o=>` usage ${o.file}:${Me(o.line)} in ${o.enclosingShort}`);return $n(zt([...n,...i,...r],t))}function aO(e,t){let n=[...e.deps.map(i=>` file depends on ${i.relativePath}`),...e.rdeps.map(i=>` file depended on by ${i.relativePath}`),...e.system.dependsOn.map(i=>` module depends on ${i}`),...e.system.dependedOnBy.map(i=>` module used by ${i}`)];return $n(zt(n,t))}function cO(e,t){let n=[...e.system.files.map(i=>` file ${i}`),...e.system.symbols.map(i=>` export ${ve(i.startLine,i.endLine)} ${i.shortName}`),...e.surface.map(i=>` use ${i.consumer} -> ${i.shortName}`)];return $n(zt(n,t))}function lO(e,t){let n=[],i=-1;for(let r of e.affected)r.depth!==i&&(n.push(` -- Depth ${r.depth} --`),i=r.depth),n.push(` ${r.file} ${r.shortName}`);return $n(zt(n,t))}function uO(e,t){let n=[];return e.changeSurface&&(n.push(` File: ${e.changeSurface.file}`),n.push(` External consumers: ${e.changeSurface.totalExternalConsumers}`),n.push(...e.changeSurface.symbols.map(i=>{let r=i.riskLevel==="high"?" *** HIGH RISK ***":i.riskLevel==="medium"?" * medium risk *":"";return` ${ve(i.startLine,i.endLine)} ${i.shortName} [${i.externalConsumers} consumers]${r}`}))),e.complexity&&(n.push(` Complexity: ${ye(e.complexity.relativePath,e.complexity.startLine,e.complexity.endLine)} ${e.complexity.shortName}`),n.push(` LOC: ${e.complexity.loc}`),n.push(` Branches: ${e.complexity.branches}`),n.push(` Cyclomatic estimate: ${e.complexity.cyclomaticEstimate}`),n.push(` Callees: ${e.complexity.calleeCount}`),n.push(` Fan-in: ${e.complexity.fanIn}`),n.push(` Fan-out: ${e.complexity.fanOut}`)),$n(zt(n,t))}function dO(e){let t=e.history;if(!t.available||!t.file)return[];let n=[];if(t.churn){let i=t.churn.fixChanges>0?`, ${t.churn.fixChanges} in fix commits`:"";n.push(` Churn: ${t.churn.changes} change(s) in recent history${i}`)}for(let i of t.coChangePartners)n.push(` Usually changes with: ${i.file} (${i.together}x, ${Math.round(i.confidence*100)}%)`);return t.suppressionsInFile>0&&n.push(` Detector suppressions in file: ${t.suppressionsInFile} (accepted findings \u2014 read the reasons before refactoring)`),n}function mO(e){let t=e.warnings.map(i=>` ${i}`);return e.history.coChangePartners.length>0&&t.push(" Check the HISTORY co-change partners \u2014 editing this file usually means editing them too."),(e.changeSurface?.symbols.filter(i=>i.riskLevel==="high")??[]).length>0&&t.push(" Inspect high-risk consumers before editing public behavior."),e.affected.length>0&&t.push(" Validate downstream consumers at the shallowest affected depths first."),t}function zt(e,t){let n=Math.max(1,t);return{rows:e.slice(0,n),omitted:Math.max(0,e.length-n)}}function $n(e){return e.omitted>0?[...e.rows,` ... ${e.omitted} more`]:e.rows}function Il(e){return e?"yes":"no"}var xb=["stats","files","methods","refs","trace","deps","rdeps","system","surface","dead","hotspots","imports","imported-by","unused-imports","outline","members","fan-in","fan-out","coupling","cycles","bottlenecks","isolated","by-kind","kind-counts","deep-chains","hierarchy","call-graph","similar","similar-files","react-component-duplicates","react-hook-candidates","react-large-component-pressure","vue-component-duplicates","vue-composable-candidates","vue-large-view-pressure","similar-chains","extract-candidates","locality-candidates","affected","change-surface","cleanup-plan","cleanup-apply","co-change","recent-duplicates","doc-drift","unused-params","diff-gate","incomplete-migration","plan-context","drift","wrapper-candidates","passthrough-candidates","stale-abstractions","complexity-hotspots","self-audit","convergence","code","complexity","dataflow","slice","redundant-reexports","similar-signatures"],pO=[fb,yb,gb,ws,bb,Sb,hb],Cb=pO.flat(),fO=new Map(Cb.map(e=>[e.id,e]));for(let e of Cb)if(!xb.includes(e.id))throw new Error(`Query command descriptor is not ordered: ${e.id}`);var ki=xb.map(e=>gO(e));function gO(e){let t=fO.get(e);if(!t)throw new Error(`Unknown query command descriptor: ${e}`);return t}var hO=ki.slice(0,Pl("plan-context")),bO=ki.slice(Ls("drift"),Pl("self-audit")),yO=ki.slice(Ls("convergence"),Pl("slice")),SO=ki.slice(Ls("redundant-reexports")),vb=[{id:"reindex",command:"reindex",description:"Index the codebase and convert to SQLite",options:[f("-l, --language <lang>","Index only this language (can be repeated)",es,[]),f("--pnpm-workspaces","Enable pnpm workspace support (TypeScript)"),f("--force","Rebuild even if source inputs are unchanged"),f("--allow-partial","Write an incomplete index when one or more detected languages fail"),f("--indexer-concurrency <n>","Number of language indexers to run at once",ts)],renderShape:"custom",docs:w("Indexing",["scip-query reindex"]),handler:bh},{id:"augment-sources",command:"augment-sources",description:"Add source files skipped by upstream SCIP indexers to the SQLite documents table",renderShape:"custom",docs:w("Indexing"),handler:yh},{id:"augment-vue",command:"augment-vue",description:"Add compiler-resolved Vue SFC references to the SQLite index using Volar",options:[f("--project <tsconfig>","Vue tsconfig path",void 0,"frontend/tsconfig.scip.json")],renderShape:"custom",docs:w("Indexing"),handler:Sh},...hO,{id:Yo,command:Yo,description:"Internal diff-impact batch worker",hidden:!0,options:[f("--base <ref>","Git ref to diff against (default: HEAD)")],renderShape:"custom",handler:xh},{id:"diff-impact",command:"diff-impact",description:"Compute changed symbols and downstream consumers from current git diff",options:_([f("--base <ref>","Git ref to diff against (default: HEAD)")]),renderShape:"custom",docs:w("Impact"),handler:Ch},...bO,{id:Xo,command:Xo,description:"Internal health phase worker",hidden:!0,arguments:[{name:"<phase>"}],options:[f("-s, --scope <path>","Limit to files matching path"),f("--full","Run unbounded candidate analyses on large indexes")],renderShape:"custom",handler:vh},{id:"health",command:"health",description:"Composite codebase health report with prioritized action list",options:[f("-s, --scope <path>","Limit to files matching path"),f("--full","Compatibility flag; health already runs unbounded candidate analyses by default"),f("--json","Output as JSON for programmatic consumption"),f("--baseline","Compare findings against the committed baseline; exit 1 on new findings"),f("--write-baseline","Snapshot current finding identities to the baseline file")],renderShape:"custom",docs:w("Health",["scip-query health --json","scip-query health --baseline"]),handler:Rh},...yO,{id:"install-skills",command:"install-skills",description:`Install skills (${ul.join(", ")}) into Claude Code, Codex, and shared agent roots`,renderShape:"custom",docs:w("Maintenance"),handler:kh},{id:"setup-hooks",command:"setup-hooks",description:"Install or refresh project-local Codex and Claude Code lifecycle hooks",options:[f("--json","Output as JSON for programmatic consumption")],renderShape:"custom",docs:w("Maintenance",["scip-query setup-hooks","scip-query setup-hooks --json"]),handler:wh},{id:"hook-context",command:"hook-context",description:"Internal agent lifecycle hook context renderer",hidden:!0,renderShape:"custom",handler:cg},{id:"hook-stop",command:"hook-stop",description:"Internal agent Stop hook wrapper for diff-gate",hidden:!0,renderShape:"custom",handler:lg},{id:"check-deps",command:"check-deps",description:"Check whether scip-query and the detected language indexers are actually runnable",renderShape:"custom",docs:w("Maintenance"),handler:Lh},{id:"capabilities",command:"capabilities",description:"Report which evidence and verification capabilities are available in this project",options:[f("--json","Output as JSON for programmatic consumption")],renderShape:"custom",docs:w("Maintenance"),handler:Dh},{id:"capability-matrix",command:"capability-matrix",description:"Report the evidence and verification capability matrix by language",options:[f("--json","Output as JSON for programmatic consumption")],renderShape:"custom",docs:w("Maintenance"),handler:Ih},...SO,{id:"init",command:"init",description:"Create a .scipquery.json config file for this project",renderShape:"custom",docs:w("Maintenance"),handler:Nh},{id:"config-validate",command:"config-validate",description:"Validate .scipquery.json, including structured suppressions and declared coupling groups",options:[f("--json","Output as JSON for programmatic consumption")],renderShape:"custom",docs:w("Maintenance",["scip-query config-validate"]),handler:Eh},{id:"suppress",command:"suppress <id>",description:"Record an accepted finding in .scipquery.json with a required reason",options:_([f("--reason <text>","Required human reason for accepting the finding"),f("--check <check>","Optional detector/check name to narrow the suppression"),f("--file <path>","Optional file path to narrow the suppression"),f("--expires-at <iso>","Optional ISO date after which the suppression expires")]),renderShape:"custom",docs:w("Maintenance",['scip-query suppress SQABC123DEF456 --reason "intentional boundary"']),handler:Th},{id:"doctor",command:"doctor",description:"Diagnose config, index freshness, dependency readiness, and project capabilities",options:[f("--json","Output as JSON for programmatic consumption")],renderShape:"custom",docs:w("Maintenance"),handler:_h},{id:"setup",command:"setup",description:"Bootstrap this project: install agent skills, refresh the index, verify capabilities, and report health",options:_([f("--git-hook","Also install a git pre-commit hook that runs diff-gate")]),renderShape:"custom",docs:w("Maintenance",["scip-query setup","scip-query setup --json"]),handler:Ah},{id:"setup-agent",command:"setup-agent",description:"Seed agent guidance for this project: AGENTS.md/CLAUDE.md block pointing agents at the scip-query skills and diff gate, plus an optional git pre-commit backstop",options:[f("--git-hook","Also install a git pre-commit hook that runs diff-gate")],renderShape:"custom",docs:w("Maintenance",["scip-query setup-agent","scip-query setup-agent --git-hook"]),handler:Fh},{id:"setup-ci",command:"setup-ci",description:"Write a GitHub Actions workflow that runs scip-query reindex and diff-gate on pull requests",options:[f("--force","Overwrite an existing workflow"),f("--dry-run","Print the workflow without writing it")],renderShape:"custom",docs:w("Maintenance",["scip-query setup-ci"]),handler:Mh},{id:"watch",command:"watch",description:"Watch for file changes and reindex automatically",options:[f("--debounce <ms>","Ms to wait after last change (default: 30000)",Uc),f("--cooldown <ms>","Min ms between reindexes (default: 60000)",Uc)],renderShape:"custom",docs:w("Maintenance"),handler:Oh},{id:"status",command:"status",description:"Show index status for this project",options:[f("--json","Output as JSON for programmatic consumption"),f("--capabilities","Include the project capability matrix")],renderShape:"custom",docs:w("Maintenance"),handler:jh}];function Ls(e){let t=ki.findIndex(n=>n.id===e);if(t<0)throw new Error(`Ordered query command descriptor is missing: ${e}`);return t}function Pl(e){return Ls(e)+1}function Rb(e,t){return t.map(n=>{let i=n.hidden?e.command(n.command,{hidden:!0}):e.command(n.command);i.description(n.description);for(let r of n.arguments??[])i.argument(r.name);for(let r of n.options??[])r.parser&&Object.hasOwn(r,"defaultValue")?i.option(r.flags,r.description,r.parser,r.defaultValue):r.parser?i.option(r.flags,r.description,r.parser):Object.hasOwn(r,"defaultValue")?i.option(r.flags,r.description,r.defaultValue):i.option(r.flags,r.description);return i.action(async(...r)=>{try{await n.handler(...r)}catch(o){xO(o)}}),{descriptor:n,command:i}})}function xO(e){let t=e instanceof Error?e.message:String(e);console.error(`error: ${t}`),process.exitCode=1}import{existsSync as CO,mkdirSync as vO,readFileSync as RO,writeFileSync as kO}from"fs";import{homedir as wO}from"os";import{join as Ds}from"path";var LO=1440*60*1e3,wb="update-check.json",DO="https://registry.npmjs.org/scip-query/latest";async function Lb(e={}){let t=e.env??process.env;if(t.SCIP_QUERY_UPDATE_CHECK==="0"||t.NO_UPDATE_NOTIFIER)return;let n=e.cacheDir??NO(t),i=e.now??Date.now(),r=e.currentVersion??Qo,o=EO(n),s=o&&i-o.checkedAt<LO?o.latestVersion:await TO(n,e.fetchLatestVersion??$O,i);if(!s||!PO(s,r))return;(e.writeNotice??(c=>console.error(c)))(IO(r,s))}function IO(e,t){return[`scip-query update available: ${e} -> ${t}.`,"Agent: tell your human to update with: npm install -g scip-query@latest",""].join(`
936
- `)}function PO(e,t){let n=kb(e),i=kb(t);if(!n||!i)return e!==t;for(let r=0;r<n.length;r++){let o=n[r]-i[r];if(o>0)return!0;if(o<0)return!1}return!1}function NO(e){let t=e.XDG_CACHE_HOME||Ds(wO(),".cache");return Ds(t,"scip-query")}function EO(e){let t=Ds(e,wb);if(!CO(t))return null;try{let n=JSON.parse(RO(t,"utf8"));return typeof n.checkedAt=="number"&&(typeof n.latestVersion=="string"||n.latestVersion===null)?{checkedAt:n.checkedAt,latestVersion:n.latestVersion}:null}catch{return null}}async function TO(e,t,n){let i;try{i=await t()}catch{i=null}return _O(e,{checkedAt:n,latestVersion:i}),i}function _O(e,t){try{vO(e,{recursive:!0}),kO(Ds(e,wb),`${JSON.stringify(t,null,2)}
937
- `)}catch{}}async function $O(){let e=await fetch(DO,{signal:AbortSignal.timeout(1e3)});if(!e.ok)return null;let t=await e.json();return typeof t.version=="string"?t.version:null}function kb(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(e);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}Is.name("scip-query").description("Language-agnostic code intelligence CLI powered by SCIP indexes").version(Qo);Rb(Is,vb);Is.hook("preAction",async()=>{await Lb()});AO()&&await Is.parseAsync();function AO(){if(!process.argv[1])return!1;let e=FO(import.meta.url);try{return Db(e)===Db(process.argv[1])}catch{return e===process.argv[1]}}export{Is as program,bi as renderHeuristicNotice};
970
+ ${o.connectedSymbols.length} connected symbol(s).`)}),fb=[vt({id:"files",command:"files <pattern>",description:"Find files matching a pattern",docs:w("Navigation",["scip-query files auth"]),query:({db:e,args:t})=>Qs(e,H(t,0)),format:e=>e.relativePath}),vt({id:"methods",command:"methods <className>",description:"List methods of a class (with line ranges)",docs:w("Navigation"),query:({db:e,args:t})=>Aa(e,H(t,0)),format:e=>` ${Re(e.startLine,e.endLine)} ${e.name}`}),{id:"refs",command:"refs <symbol>",description:"Find all files referencing a symbol",options:[p("--full","Run unbounded semantic analysis on large indexes"),p("--json","Output as JSON for programmatic consumption")],budget:"semantic",renderShape:"grouped-by-file",docs:w("Navigation",["scip-query refs login"]),handler:SB},Us({id:"trace",command:"trace <symbol>",description:"Trace a symbol: definition + all references",options:[p("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",docs:w("Navigation",["scip-query trace parseSymbol"]),query:({db:e,args:t,budget:n})=>ri(e,H(t,0),{semantic:n.semantic}),sections:gB}),vt({id:"deps",command:"deps <file>",description:"Files this file depends on (internal)",docs:w("Navigation"),query:({db:e,args:t})=>ii(e,H(t,0)),format:e=>e.relativePath}),vt({id:"rdeps",command:"rdeps <file>",description:"Files that depend on this file/module",docs:w("Navigation"),query:({db:e,args:t})=>oi(e,H(t,0)),format:e=>e.relativePath}),My({id:"system",command:"system <module>",description:"Full module map: files, symbols, deps in/out",docs:w("Navigation",["scip-query system queries"]),query:({db:e,args:t})=>si(e,H(t,0)),sections:e=>[{title:"FILES",rows:e.files},{title:"EXPORTED SYMBOLS",rows:e.symbols.map(t=>` ${Re(t.startLine,t.endLine)} ${t.shortName}`)},{title:"DEPENDS ON (internal)",rows:e.dependsOn.map(t=>` ${t}`)},{title:"DEPENDED ON BY",rows:e.dependedOnBy.map(t=>` ${t}`)}]}),vt({id:"surface",command:"surface <module>",description:"What symbols consumers actually use from this module",docs:w("Navigation"),query:({db:e,args:t})=>ai(e,H(t,0)),format:e=>` ${e.consumer} \u2192 ${e.shortName}`}),{id:"imports",command:"imports <file>",description:"What symbols does this file import?",options:[p("--full","Run unbounded semantic analysis on large indexes"),p("--json","Output as JSON for programmatic consumption")],budget:"semantic",renderShape:"list",docs:w("Navigation"),handler:bB},vt({id:"imported-by",command:"imported-by <symbol>",description:"Which files import this symbol?",docs:w("Navigation"),query:({db:e,args:t})=>Ga(e,H(t,0)),format:e=>` ${e.fromFile}`}),{id:"outline",command:"outline <file>",description:"Tree view of symbols in a file, with line ranges",options:_([p("--signatures","Show trimmed symbol signatures")]),renderShape:"custom",docs:w("Navigation"),handler:hB},vt({id:"members",command:"members <symbol>",description:"All children of a symbol (methods, fields, nested types)",docs:w("Navigation"),query:({db:e,args:t})=>Ka(e,H(t,0)),format:e=>` ${Re(e.startLine,e.endLine)} [${e.kind}] ${e.shortName}`}),vt({id:"by-kind",command:"by-kind <kind>",description:"Find symbols by SCIP kind (class, interface, enum, function, etc.)",options:[p("-s, --scope <path>","Limit to files matching path"),p("-n, --limit <n>","Number of results",v,100),p("--full","Run unbounded analysis on large indexes")],docs:w("Navigation"),query:({db:e,args:t,opts:n})=>oc(e,H(t,0),{scope:E(n,"scope"),limit:O(n,"limit",100)}),format:e=>` ${Se(e.relativePath,e.startLine,e.endLine)} [${e.kindName}] ${e.shortName}`,emptyMessage:({args:e})=>`No symbols found for kind "${H(e,0)}". Use "kind-counts" to see available kinds.`,after:e=>console.log(`
971
+ ${e.length} symbol(s)`)}),qs({id:"kind-counts",command:"kind-counts",description:"Histogram of symbol kinds in the codebase",options:[p("-s, --scope <path>","Limit to files matching path")],docs:w("Navigation"),headers:["count","kind"],query:({db:e,opts:t})=>sc(e,{scope:E(t,"scope")}),format:e=>` ${String(e.count).padStart(5)} ${e.kindName} (${e.kind})`}),vt({id:"hierarchy",command:"hierarchy <symbol>",description:"Show a symbol's ancestry chain (method \u2192 class \u2192 module)",docs:w("Navigation"),query:({db:e,args:t})=>cc(e,H(t,0)),format:e=>`${" ".repeat(e.depth)}${e.shortName}`,emptyMessage:()=>"Symbol not found."}),{id:"code",command:"code <symbol>",description:"Read the source code for a symbol (bounded to its definition range)",options:_([p("-C, --context <n>","Extra lines of context above/below",v,0)]),renderShape:"custom",docs:w("Navigation"),handler:xB},{id:"dataflow",command:"dataflow <symbol>",description:"Reference-level dataflow: definition sites, usage sites, producers, consumers",options:_([p("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"custom",docs:w("Navigation"),handler:CB},{id:"slice",command:"slice <symbol>",description:"Reference-level program slice: what affects this (backward) or what this affects (forward)",options:_([p("--forward","Forward slice (what does this affect). Default is backward."),p("--depth <n>","Max transitive depth for backward slice",v,3),p("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"custom",docs:w("Navigation"),handler:vB}];var RB=Q("plan-context",({db:e,args:t,opts:n,budget:r})=>{let i=O(n,"limit",20),o=Wc(e,H(t,0),{semantic:r.semantic,impactDepth:N(n,"impactDepth",3),sliceDepth:N(n,"sliceDepth",3),scope:E(n,"scope")});if(o.warnings.length===1&&o.warnings[0]==="No symbol, file, or module matched target."){if(R(n,"json")){A("plan-context",t,n,o);return}return P.empty(o.warnings[0])}if(R(n,"json")){A("plan-context",t,n,o);return}let s=[{title:"TARGET",rows:kB(o)},{title:"DEFINITIONS",rows:wB(o,i),skipIfEmpty:!0},{title:"REFERENCES",rows:LB(o,i),skipIfEmpty:!0},{title:"CALL GRAPH",rows:IB(o,i),skipIfEmpty:!0},{title:"DATAFLOW",rows:DB(o,i),skipIfEmpty:!0},{title:"DEPENDENCIES",rows:PB(o,i),skipIfEmpty:!0},{title:"SURFACE",rows:NB(o,i),skipIfEmpty:!0},{title:"DOWNSTREAM IMPACT",rows:EB(o,i),skipIfEmpty:!0},{title:"CHANGE RISK",rows:TB(o,i),skipIfEmpty:!0},{title:"HISTORY",rows:_B(o),skipIfEmpty:!0},{title:"PLANNING NOTES",rows:FB(o),skipIfEmpty:!0}];P.sectionedReport(s)}),gb=[{id:"plan-context",command:"plan-context <target>",description:"Pre-edit planning context for a symbol, file, or module",options:_([p("--impact-depth <n>","Maximum affected traversal depth",v,3),p("--slice-depth <n>","Maximum backward slice depth",v,3),p("-s, --scope <path>","Limit downstream impact to files matching path"),p("-n, --limit <n>","Rows per section",v,20),p("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"custom",docs:w("Planning",["scip-query plan-context parseSymbol"]),handler:RB}];function kB(e){return[`Target: ${e.target}`,`Matched: symbol=${eu(e.matched.symbol)} file=${eu(e.matched.file)} module=${eu(e.matched.module)}`]}function wB(e,t){let n=[];for(let r of e.trace.definitions){let i=r.signature?` -- ${r.signature}`:"";n.push(` ${Se(r.relativePath,r.startLine,r.endLine)}${i}`),r.source&&n.push(...r.source.split(`
972
+ `).map((o,s)=>` ${String(Oe(r.startLine+s)).padStart(4)} ${o}`))}return n.length===0&&n.push(...e.system.symbols.map(r=>` ${Re(r.startLine,r.endLine)} ${r.shortName}`)),nn(n,t).rows}function LB(e,t){let n=e.trace.referencedBy.map(r=>` ${r.relativePath}:${Oe(r.line)} in ${r.enclosingShort}`);return qn(nn(n,t))}function IB(e,t){if(!e.callGraph)return[];let n=e.callGraph.callers.map(i=>` caller ${i.file} ${i.shortName}`),r=e.callGraph.callees.map(i=>` callee ${i.file} ${i.shortName}`);return qn(nn([...n,...r],t))}function DB(e,t){if(!e.dataflow)return[];let n=e.dataflow.producers.map(o=>` producer ${o.file} ${o.shortName}`),r=e.dataflow.consumers.map(o=>` consumer ${o.file} ${o.shortName}`),i=e.dataflow.usageSites.map(o=>` usage ${o.file}:${Oe(o.line)} in ${o.enclosingShort}`);return qn(nn([...n,...r,...i],t))}function PB(e,t){let n=[...e.deps.map(r=>` file depends on ${r.relativePath}`),...e.rdeps.map(r=>` file depended on by ${r.relativePath}`),...e.system.dependsOn.map(r=>` module depends on ${r}`),...e.system.dependedOnBy.map(r=>` module used by ${r}`)];return qn(nn(n,t))}function NB(e,t){let n=[...e.system.files.map(r=>` file ${r}`),...e.system.symbols.map(r=>` export ${Re(r.startLine,r.endLine)} ${r.shortName}`),...e.surface.map(r=>` use ${r.consumer} -> ${r.shortName}`)];return qn(nn(n,t))}function EB(e,t){let n=[],r=-1;for(let i of e.affected)i.depth!==r&&(n.push(` -- Depth ${i.depth} --`),r=i.depth),n.push(` ${i.file} ${i.shortName}`);return qn(nn(n,t))}function TB(e,t){let n=[];return e.changeSurface&&(n.push(` File: ${e.changeSurface.file}`),n.push(` External consumers: ${e.changeSurface.totalExternalConsumers}`),n.push(...e.changeSurface.symbols.map(r=>{let i=r.riskLevel==="high"?" *** HIGH RISK ***":r.riskLevel==="medium"?" * medium risk *":"";return` ${Re(r.startLine,r.endLine)} ${r.shortName} [${r.externalConsumers} consumers]${i}`}))),e.complexity&&(n.push(` Complexity: ${Se(e.complexity.relativePath,e.complexity.startLine,e.complexity.endLine)} ${e.complexity.shortName}`),n.push(` LOC: ${e.complexity.loc}`),n.push(` Branches: ${e.complexity.branches}`),n.push(` Cyclomatic estimate: ${e.complexity.cyclomaticEstimate}`),n.push(` Callees: ${e.complexity.calleeCount}`),n.push(` Fan-in: ${e.complexity.fanIn}`),n.push(` Fan-out: ${e.complexity.fanOut}`)),qn(nn(n,t))}function _B(e){let t=e.history;if(!t.available||!t.file)return[];let n=[];if(t.churn){let r=t.churn.fixChanges>0?`, ${t.churn.fixChanges} in fix commits`:"";n.push(` Churn: ${t.churn.changes} change(s) in recent history${r}`)}for(let r of t.coChangePartners)n.push(` Usually changes with: ${r.file} (${r.together}x, ${Math.round(r.confidence*100)}%)`);return t.suppressionsInFile>0&&n.push(` Detector suppressions in file: ${t.suppressionsInFile} (accepted findings \u2014 read the reasons before refactoring)`),n}function FB(e){let t=e.warnings.map(r=>` ${r}`);return e.history.coChangePartners.length>0&&t.push(" Check the HISTORY co-change partners \u2014 editing this file usually means editing them too."),(e.changeSurface?.symbols.filter(r=>r.riskLevel==="high")??[]).length>0&&t.push(" Inspect high-risk consumers before editing public behavior."),e.affected.length>0&&t.push(" Validate downstream consumers at the shallowest affected depths first."),t}function nn(e,t){let n=Math.max(1,t);return{rows:e.slice(0,n),omitted:Math.max(0,e.length-n)}}function qn(e){return e.omitted>0?[...e.rows,` ... ${e.omitted} more`]:e.rows}function eu(e){return e?"yes":"no"}var hb=["stats","files","methods","refs","trace","deps","rdeps","system","surface","dead","hotspots","imports","imported-by","unused-imports","outline","members","fan-in","fan-out","coupling","cycles","bottlenecks","isolated","by-kind","kind-counts","deep-chains","hierarchy","call-graph","similar","similar-files","react-component-duplicates","react-hook-candidates","react-large-component-pressure","vue-component-duplicates","vue-composable-candidates","vue-large-view-pressure","similar-chains","extract-candidates","locality-candidates","affected","change-surface","cleanup-plan","cleanup-apply","co-change","recent-duplicates","doc-drift","unused-params","diff-gate","incomplete-migration","plan-context","drift","wrapper-candidates","passthrough-candidates","stale-abstractions","complexity-hotspots","self-audit","convergence","code","complexity","dataflow","slice","redundant-reexports","similar-signatures"],$B=[ub,fb,db,Ws,pb,gb,mb],yb=$B.flat(),AB=new Map(yb.map(e=>[e.id,e]));for(let e of yb)if(!hb.includes(e.id))throw new Error(`Query command descriptor is not ordered: ${e.id}`);var jr=hb.map(e=>MB(e));function MB(e){let t=AB.get(e);if(!t)throw new Error(`Unknown query command descriptor: ${e}`);return t}var jB=jr.slice(0,tu("plan-context")),OB=jr.slice(Gs("drift"),tu("self-audit")),BB=jr.slice(Gs("convergence"),tu("slice")),HB=jr.slice(Gs("redundant-reexports")),bb=[{id:"reindex",command:"reindex",description:"Index the codebase and convert to SQLite",options:[p("-l, --language <lang>","Index only this language (can be repeated)",_i,[]),p("--pnpm-workspaces","Enable pnpm workspace support (TypeScript)"),p("--force","Rebuild even if source inputs are unchanged"),p("--allow-partial","Write an incomplete index when one or more detected languages fail"),p("--indexer-concurrency <n>","Number of language indexers to run at once",Fi)],renderShape:"custom",docs:w("Indexing",["scip-query reindex"]),handler:uy},{id:"augment-sources",command:"augment-sources",description:"Add source files skipped by upstream SCIP indexers to the SQLite documents table",renderShape:"custom",docs:w("Indexing"),handler:dy},{id:"augment-vue",command:"augment-vue",description:"Add compiler-resolved Vue SFC references to the SQLite index using Volar",options:[p("--project <tsconfig>","Vue tsconfig path",void 0,"frontend/tsconfig.scip.json")],renderShape:"custom",docs:w("Indexing"),handler:my},...jB,{id:bs,command:bs,description:"Internal diff-impact batch worker",hidden:!0,options:[p("--base <ref>","Git ref to diff against (default: HEAD)")],renderShape:"custom",handler:py},{id:"diff-impact",command:"diff-impact",description:"Compute changed symbols and downstream consumers from current git diff",options:_([p("--base <ref>","Git ref to diff against (default: HEAD)")]),renderShape:"custom",docs:w("Impact"),handler:fy},...OB,{id:Ti,command:Ti,description:"Internal health phase worker",hidden:!0,arguments:[{name:"<phase>"}],options:[p("-s, --scope <path>","Limit to files matching path"),p("--full","Run unbounded candidate analyses on large indexes")],renderShape:"custom",handler:gy},{id:"health",command:"health",description:"Composite codebase health report with prioritized action list",options:[p("-s, --scope <path>","Limit to files matching path"),p("--full","Compatibility flag; health already runs unbounded candidate analyses by default"),p("--json","Output as JSON for programmatic consumption"),p("--baseline","Compare findings against the committed baseline; exit 1 on new findings"),p("--write-baseline","Snapshot current finding identities to the baseline file")],renderShape:"custom",docs:w("Health",["scip-query health --json","scip-query health --baseline"]),handler:hy},{id:"bench",command:"bench",description:"Benchmark indexing and command runtimes for this repository",options:[p("--json","Output as JSON for programmatic consumption"),p("--cold-index","Temporarily clear this project index cache and measure a cold rebuild"),p("--include-heavy","Include expensive full-detector commands in the command matrix"),p("--command <cmd>","Benchmark a specific scip-query command (can be repeated)",_i,[]),p("--timeout-ms <n>","Per-command timeout in milliseconds",Fi,18e4)],renderShape:"custom",docs:w("Maintenance",["scip-query bench","scip-query bench --json --cold-index"]),handler:yy},...BB,{id:"install-skills",command:"install-skills",description:`Install skills (${zl.join(", ")}) into Claude Code, Codex, and shared agent roots`,renderShape:"custom",docs:w("Maintenance"),handler:xy},{id:"setup-hooks",command:"setup-hooks",description:"Install or refresh project-local Codex and Claude Code lifecycle hooks",options:[p("--json","Output as JSON for programmatic consumption")],renderShape:"custom",docs:w("Maintenance",["scip-query setup-hooks","scip-query setup-hooks --json"]),handler:Cy},{id:"hook-context",command:"hook-context",description:"Internal agent lifecycle hook context renderer",hidden:!0,renderShape:"custom",handler:jh},{id:"hook-stop",command:"hook-stop",description:"Internal agent Stop hook wrapper for diff-gate",hidden:!0,renderShape:"custom",handler:Oh},{id:"check-deps",command:"check-deps",description:"Check whether scip-query and the detected language indexers are actually runnable",renderShape:"custom",docs:w("Maintenance"),handler:vy},{id:"capabilities",command:"capabilities",description:"Report which evidence and verification capabilities are available in this project",options:[p("--json","Output as JSON for programmatic consumption")],renderShape:"custom",docs:w("Maintenance"),handler:Ry},{id:"capability-matrix",command:"capability-matrix",description:"Report the evidence and verification capability matrix by language",options:[p("--json","Output as JSON for programmatic consumption")],renderShape:"custom",docs:w("Maintenance"),handler:ky},...HB,{id:"init",command:"init",description:"Create a .scipquery.json config file for this project",renderShape:"custom",docs:w("Maintenance"),handler:Ly},{id:"config-validate",command:"config-validate",description:"Validate .scipquery.json, including structured suppressions and declared coupling groups",options:[p("--json","Output as JSON for programmatic consumption")],renderShape:"custom",docs:w("Maintenance",["scip-query config-validate"]),handler:Iy},{id:"suppress",command:"suppress <id>",description:"Record an accepted finding in .scipquery.json with a required reason",options:_([p("--reason <text>","Required human reason for accepting the finding"),p("--check <check>","Optional detector/check name to narrow the suppression"),p("--file <path>","Optional file path to narrow the suppression"),p("--expires-at <iso>","Optional ISO date after which the suppression expires")]),renderShape:"custom",docs:w("Maintenance",['scip-query suppress SQABC123DEF456 --reason "intentional boundary"']),handler:Dy},{id:"doctor",command:"doctor",description:"Diagnose config, index freshness, dependency readiness, and project capabilities",options:[p("--json","Output as JSON for programmatic consumption")],renderShape:"custom",docs:w("Maintenance"),handler:Py},{id:"setup",command:"setup",description:"Bootstrap this project: install agent skills, refresh the index, verify capabilities, and report health",options:_([p("--git-hook","Also install a git pre-commit hook that runs diff-gate")]),renderShape:"custom",docs:w("Maintenance",["scip-query setup","scip-query setup --json"]),handler:Ty},{id:"setup-agent",command:"setup-agent",description:"Seed agent guidance for this project: AGENTS.md/CLAUDE.md block pointing agents at the scip-query skills and diff gate, plus an optional git pre-commit backstop",options:[p("--git-hook","Also install a git pre-commit hook that runs diff-gate")],renderShape:"custom",docs:w("Maintenance",["scip-query setup-agent","scip-query setup-agent --git-hook"]),handler:Ey},{id:"setup-ci",command:"setup-ci",description:"Write a GitHub Actions workflow that runs scip-query reindex and diff-gate on pull requests",options:[p("--force","Overwrite an existing workflow"),p("--dry-run","Print the workflow without writing it")],renderShape:"custom",docs:w("Maintenance",["scip-query setup-ci"]),handler:_y},{id:"watch",command:"watch",description:"Watch for file changes and reindex automatically",options:[p("--debounce <ms>","Ms to wait after last change (default: 30000)",Cs),p("--cooldown <ms>","Min ms between reindexes (default: 60000)",Cs),p("--git-poll <ms>","Ms between Git HEAD/index checks (default: 2000)",Cs)],renderShape:"custom",docs:w("Maintenance"),handler:Fy},{id:"status",command:"status",description:"Show index status for this project",options:[p("--json","Output as JSON for programmatic consumption"),p("--capabilities","Include the project capability matrix")],renderShape:"custom",docs:w("Maintenance"),handler:$y}];function Gs(e){let t=jr.findIndex(n=>n.id===e);if(t<0)throw new Error(`Ordered query command descriptor is missing: ${e}`);return t}function tu(e){return Gs(e)+1}function Sb(e,t){return t.map(n=>{let r=n.hidden?e.command(n.command,{hidden:!0}):e.command(n.command);r.description(n.description);for(let i of n.arguments??[])r.argument(i.name);for(let i of n.options??[])i.parser&&Object.hasOwn(i,"defaultValue")?r.option(i.flags,i.description,i.parser,i.defaultValue):i.parser?r.option(i.flags,i.description,i.parser):Object.hasOwn(i,"defaultValue")?r.option(i.flags,i.description,i.defaultValue):r.option(i.flags,i.description);return r.action(async(...i)=>{try{await n.handler(...i)}catch(o){VB(o)}}),{descriptor:n,command:r}})}function VB(e){let t=e instanceof Error?e.message:String(e);console.error(`error: ${t}`),process.exitCode=1}import{existsSync as qB,mkdirSync as UB,readFileSync as WB,writeFileSync as GB}from"fs";import{homedir as zB}from"os";import{join as zs}from"path";var JB=1440*60*1e3,Cb="update-check.json",KB="https://registry.npmjs.org/scip-query/latest";async function vb(e={}){let t=e.env??process.env;if(t.SCIP_QUERY_UPDATE_CHECK==="0"||t.NO_UPDATE_NOTIFIER)return;let n=e.cacheDir??YB(t),r=e.now??Date.now(),i=e.currentVersion??ys,o=ZB(n),s=o&&r-o.checkedAt<JB?o.latestVersion:await e1(n,e.fetchLatestVersion??n1,r);if(!s||!QB(s,i))return;(e.writeNotice??(c=>console.error(c)))(XB(i,s))}function XB(e,t){return[`scip-query update available: ${e} -> ${t}.`,"Agent: tell your human to update with: npm install -g scip-query@latest",""].join(`
973
+ `)}function QB(e,t){let n=xb(e),r=xb(t);if(!n||!r)return e!==t;for(let i=0;i<n.length;i++){let o=n[i]-r[i];if(o>0)return!0;if(o<0)return!1}return!1}function YB(e){let t=e.XDG_CACHE_HOME||zs(zB(),".cache");return zs(t,"scip-query")}function ZB(e){let t=zs(e,Cb);if(!qB(t))return null;try{let n=JSON.parse(WB(t,"utf8"));return typeof n.checkedAt=="number"&&(typeof n.latestVersion=="string"||n.latestVersion===null)?{checkedAt:n.checkedAt,latestVersion:n.latestVersion}:null}catch{return null}}async function e1(e,t,n){let r;try{r=await t()}catch{r=null}return t1(e,{checkedAt:n,latestVersion:r}),r}function t1(e,t){try{UB(e,{recursive:!0}),GB(zs(e,Cb),`${JSON.stringify(t,null,2)}
974
+ `)}catch{}}async function n1(){let e=await fetch(KB,{signal:AbortSignal.timeout(1e3)});if(!e.ok)return null;let t=await e.json();return typeof t.version=="string"?t.version:null}function xb(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(e);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}Js.name("scip-query").description("Language-agnostic code intelligence CLI powered by SCIP indexes").version(ys);Sb(Js,bb);Js.hook("preAction",async()=>{await vb()});i1()&&await Js.parseAsync();function i1(){if(!process.argv[1])return!1;let e=r1(import.meta.url);try{return Rb(e)===Rb(process.argv[1])}catch{return e===process.argv[1]}}export{Js as program,Er as renderHeuristicNotice};
938
975
  //# sourceMappingURL=cli.js.map