scip-query 0.10.0 → 0.10.2

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 (293) hide show
  1. package/README.md +115 -58
  2. package/dist/augment-vue-worker.js +1 -1
  3. package/dist/chunk-3KLLFNT4.js +2 -0
  4. package/dist/{chunk-UIWAZ2NT.js → chunk-3UVJJ6Z7.js} +1 -1
  5. package/dist/chunk-3UW7VM4H.js +62 -0
  6. package/dist/chunk-3ZYF3ELZ.js +2 -0
  7. package/dist/{chunk-MN75T4UB.js → chunk-47UA45TU.js} +2 -2
  8. package/dist/{chunk-NC4IUW25.js → chunk-4ZUJJRWT.js} +2 -2
  9. package/dist/chunk-5B53WB6E.js +4 -0
  10. package/dist/{chunk-2WEH5QHC.js → chunk-5FOPAXWY.js} +2 -2
  11. package/dist/{chunk-VZRILF2Z.js → chunk-5M4TYWVI.js} +2 -2
  12. package/dist/{chunk-QJWN6LA5.js → chunk-5QJXH6ZL.js} +5 -5
  13. package/dist/{chunk-NN3O7TPH.js → chunk-64MNV6AB.js} +1 -1
  14. package/dist/chunk-77YBOOYT.js +2 -0
  15. package/dist/chunk-7KCSELEV.js +2 -0
  16. package/dist/{chunk-ZZ2W5P3D.js → chunk-7OHWPJ5N.js} +2 -2
  17. package/dist/chunk-7S5E7KWT.js +2 -0
  18. package/dist/chunk-A3VNUGKJ.js +2 -0
  19. package/dist/{chunk-ISCKLDSS.js → chunk-A4L36SZS.js} +3 -3
  20. package/dist/{chunk-IVAIPXNO.js → chunk-AUVBR62P.js} +2 -2
  21. package/dist/chunk-AW4N6MGC.js +18 -0
  22. package/dist/{chunk-PG3ZI5IH.js → chunk-B6MJ5VQV.js} +2 -2
  23. package/dist/chunk-B75HZHUP.js +2 -0
  24. package/dist/chunk-BGBBVSH4.js +2 -0
  25. package/dist/chunk-BKDXBJDQ.js +2 -0
  26. package/dist/{chunk-AQYBOORI.js → chunk-C2QSK7E7.js} +1 -1
  27. package/dist/chunk-C3MZZ2ZN.js +2 -0
  28. package/dist/{chunk-AP5GTKSG.js → chunk-CAWSSEVM.js} +2 -2
  29. package/dist/chunk-CFL2CNIF.js +10 -0
  30. package/dist/{chunk-4HTJZC6G.js → chunk-CJJP64OC.js} +2 -2
  31. package/dist/chunk-CNTEQMHA.js +2 -0
  32. package/dist/{chunk-WEJYUS5O.js → chunk-CRU42NJU.js} +2 -2
  33. package/dist/chunk-CSWZFD46.js +2 -0
  34. package/dist/{chunk-ZOT3WUZW.js → chunk-CTCAF3YA.js} +2 -2
  35. package/dist/chunk-D322LMSA.js +5 -0
  36. package/dist/{chunk-772YYL6I.js → chunk-DAI74TJU.js} +2 -2
  37. package/dist/chunk-DE7MA6OD.js +3 -0
  38. package/dist/chunk-DJMK4DBL.js +2 -0
  39. package/dist/chunk-DRAZH77R.js +7 -0
  40. package/dist/{chunk-L2KFPRMA.js → chunk-E44ZMVNA.js} +2 -2
  41. package/dist/{chunk-BNW3Q24R.js → chunk-E7KERP7E.js} +2 -2
  42. package/dist/{chunk-QKO474FG.js → chunk-EOZIZWW4.js} +2 -2
  43. package/dist/chunk-ERHOS6AW.js +2 -0
  44. package/dist/{chunk-ADRYSISR.js → chunk-ESG4HBEF.js} +2 -2
  45. package/dist/chunk-EWC3UK4V.js +3 -0
  46. package/dist/chunk-FGCL6NDB.js +8 -0
  47. package/dist/chunk-FIB4JPEX.js +2 -0
  48. package/dist/chunk-FNRPGGVI.js +2 -0
  49. package/dist/chunk-FOQHUKNZ.js +4 -0
  50. package/dist/chunk-FPMVCDIJ.js +2 -0
  51. package/dist/chunk-FUPDW5AC.js +3 -0
  52. package/dist/chunk-G3WGZU5Q.js +2 -0
  53. package/dist/chunk-GS33KGAY.js +2 -0
  54. package/dist/chunk-GZCQTZLK.js +2 -0
  55. package/dist/{chunk-VGBSY6N7.js → chunk-HVTYSC26.js} +2 -2
  56. package/dist/{chunk-2BMFRBV6.js → chunk-ICXVNWMI.js} +2 -2
  57. package/dist/chunk-JM72FNGA.js +2 -0
  58. package/dist/chunk-KPHKX4LP.js +71 -0
  59. package/dist/{chunk-6DEX3XP6.js → chunk-LPLGJ4HO.js} +2 -2
  60. package/dist/chunk-MHK7Z53U.js +2 -0
  61. package/dist/chunk-MHTDOFV7.js +5 -0
  62. package/dist/chunk-MUULWXSJ.js +2 -0
  63. package/dist/chunk-MZ7APUFN.js +3 -0
  64. package/dist/chunk-NNDYO2DX.js +2 -0
  65. package/dist/chunk-NP5HYVLX.js +20 -0
  66. package/dist/{chunk-Y5H7TBVE.js → chunk-NVFERV4U.js} +2 -2
  67. package/dist/{chunk-LWYIGRHR.js → chunk-NXIAHE7F.js} +1 -1
  68. package/dist/chunk-O3OKSF6O.js +2 -0
  69. package/dist/chunk-O4L4AB3T.js +2 -0
  70. package/dist/chunk-OBBDKQAG.js +3 -0
  71. package/dist/chunk-OLD6PBU6.js +7 -0
  72. package/dist/{chunk-V76FCF5F.js → chunk-PFOCOG57.js} +2 -2
  73. package/dist/chunk-PVZMPG5I.js +2 -0
  74. package/dist/chunk-QLNGUWR7.js +2 -0
  75. package/dist/chunk-QSXQT3NE.js +2 -0
  76. package/dist/{chunk-OLCKSG3Y.js → chunk-QVCCLDZI.js} +2 -2
  77. package/dist/chunk-RHTJBYZ5.js +2 -0
  78. package/dist/chunk-SPE4YCOT.js +7 -0
  79. package/dist/{chunk-FVIKFWUL.js → chunk-TM6GVHA6.js} +2 -2
  80. package/dist/chunk-TO54DY4O.js +2 -0
  81. package/dist/chunk-UMNENNTX.js +2 -0
  82. package/dist/chunk-UNJG7P2I.js +2 -0
  83. package/dist/{chunk-TKDJQ2WD.js → chunk-UUBMFL3F.js} +1 -1
  84. package/dist/chunk-VAA5FFIW.js +2 -0
  85. package/dist/chunk-WDUTG2ZR.js +4 -0
  86. package/dist/chunk-X7ZY6FFF.js +4 -0
  87. package/dist/{chunk-BGRPMGTD.js → chunk-YQH353VA.js} +2 -2
  88. package/dist/chunk-YTR4CO5S.js +38 -0
  89. package/dist/chunk-YUOAAR24.js +2 -0
  90. package/dist/{chunk-YWZBKYLS.js → chunk-YYD245WG.js} +2 -2
  91. package/dist/{chunk-SCEMECW7.js → chunk-Z4VHYJ5U.js} +2 -2
  92. package/dist/chunk-ZFMPHDAT.js +4 -0
  93. package/dist/chunk-ZQLO2SCU.js +6 -0
  94. package/dist/chunk-ZSLT7NWQ.js +61 -0
  95. package/dist/cli.js +276 -271
  96. package/dist/{config-types-CGIeLEpY.d.ts → config-types-Bj4sh28g.d.ts} +37 -1
  97. package/dist/{db-DdTPetj5.d.ts → db-CTarohbZ.d.ts} +1 -1
  98. package/dist/git-history-Dao3_Pu9.d.ts +12 -0
  99. package/dist/{health-C6r2VgpA.d.ts → health-Bx0x1HAG.d.ts} +64 -4
  100. package/dist/index.d.ts +7 -6
  101. package/dist/index.js +1 -1
  102. package/dist/postinstall.js +2 -2
  103. package/dist/queries/affected.d.ts +2 -2
  104. package/dist/queries/affected.js +1 -1
  105. package/dist/queries/bottlenecks.d.ts +6 -2
  106. package/dist/queries/bottlenecks.js +1 -1
  107. package/dist/queries/by-kind.d.ts +2 -2
  108. package/dist/queries/by-kind.js +1 -1
  109. package/dist/queries/call-graph.d.ts +2 -2
  110. package/dist/queries/call-graph.js +1 -1
  111. package/dist/queries/change-surface.d.ts +2 -2
  112. package/dist/queries/change-surface.js +1 -1
  113. package/dist/queries/cleanup-plan.d.ts +2 -2
  114. package/dist/queries/cleanup-plan.js +1 -1
  115. package/dist/queries/co-change.d.ts +40 -5
  116. package/dist/queries/co-change.js +1 -1
  117. package/dist/queries/code.d.ts +2 -2
  118. package/dist/queries/code.js +1 -1
  119. package/dist/queries/complexity-hotspots.d.ts +2 -2
  120. package/dist/queries/complexity-hotspots.js +1 -1
  121. package/dist/queries/complexity.d.ts +2 -2
  122. package/dist/queries/complexity.js +1 -1
  123. package/dist/queries/convergence.d.ts +2 -2
  124. package/dist/queries/convergence.js +1 -1
  125. package/dist/queries/coupling.d.ts +6 -2
  126. package/dist/queries/coupling.js +1 -1
  127. package/dist/queries/cycles.d.ts +2 -2
  128. package/dist/queries/cycles.js +1 -1
  129. package/dist/queries/dataflow.d.ts +2 -2
  130. package/dist/queries/dataflow.js +1 -1
  131. package/dist/queries/dead.d.ts +10 -3
  132. package/dist/queries/dead.js +1 -1
  133. package/dist/queries/deep-chains.d.ts +6 -2
  134. package/dist/queries/deep-chains.js +1 -1
  135. package/dist/queries/deps.d.ts +2 -2
  136. package/dist/queries/deps.js +1 -1
  137. package/dist/queries/diff-gate.d.ts +66 -3
  138. package/dist/queries/diff-gate.js +1 -1
  139. package/dist/queries/diff-impact.d.ts +20 -4
  140. package/dist/queries/diff-impact.js +1 -1
  141. package/dist/queries/doc-drift.d.ts +20 -3
  142. package/dist/queries/doc-drift.js +1 -1
  143. package/dist/queries/drift.d.ts +10 -3
  144. package/dist/queries/drift.js +1 -1
  145. package/dist/queries/extract-candidates.d.ts +11 -3
  146. package/dist/queries/extract-candidates.js +1 -1
  147. package/dist/queries/fan.d.ts +2 -2
  148. package/dist/queries/fan.js +1 -1
  149. package/dist/queries/files.d.ts +2 -2
  150. package/dist/queries/files.js +1 -1
  151. package/dist/queries/health.d.ts +3 -3
  152. package/dist/queries/health.js +1 -1
  153. package/dist/queries/hierarchy.d.ts +2 -2
  154. package/dist/queries/hierarchy.js +1 -1
  155. package/dist/queries/hotspots.d.ts +2 -2
  156. package/dist/queries/hotspots.js +1 -1
  157. package/dist/queries/imports.d.ts +2 -2
  158. package/dist/queries/imports.js +1 -1
  159. package/dist/queries/incomplete-migration.d.ts +16 -3
  160. package/dist/queries/incomplete-migration.js +1 -1
  161. package/dist/queries/index.d.ts +20 -12
  162. package/dist/queries/index.js +1 -1
  163. package/dist/queries/isolated.d.ts +2 -2
  164. package/dist/queries/isolated.js +1 -1
  165. package/dist/queries/locality-candidates.d.ts +51 -0
  166. package/dist/queries/locality-candidates.js +2 -0
  167. package/dist/queries/members.d.ts +2 -2
  168. package/dist/queries/members.js +1 -1
  169. package/dist/queries/methods.d.ts +2 -2
  170. package/dist/queries/methods.js +1 -1
  171. package/dist/queries/outline.d.ts +2 -2
  172. package/dist/queries/outline.js +1 -1
  173. package/dist/queries/passthrough-candidates.d.ts +8 -3
  174. package/dist/queries/passthrough-candidates.js +1 -1
  175. package/dist/queries/plan-context.d.ts +4 -2
  176. package/dist/queries/plan-context.js +1 -1
  177. package/dist/queries/react-component-duplicates.d.ts +31 -0
  178. package/dist/queries/react-component-duplicates.js +2 -0
  179. package/dist/queries/react-hook-candidates.d.ts +40 -0
  180. package/dist/queries/react-hook-candidates.js +2 -0
  181. package/dist/queries/react-large-component-pressure.d.ts +34 -0
  182. package/dist/queries/react-large-component-pressure.js +2 -0
  183. package/dist/queries/recent-duplicates.d.ts +32 -3
  184. package/dist/queries/recent-duplicates.js +1 -1
  185. package/dist/queries/redundant-reexports.d.ts +7 -3
  186. package/dist/queries/redundant-reexports.js +1 -1
  187. package/dist/queries/refs.d.ts +2 -2
  188. package/dist/queries/refs.js +1 -1
  189. package/dist/queries/self-audit.d.ts +2 -2
  190. package/dist/queries/self-audit.js +1 -1
  191. package/dist/queries/similar-chains.d.ts +2 -2
  192. package/dist/queries/similar-chains.js +1 -1
  193. package/dist/queries/similar-files.d.ts +2 -2
  194. package/dist/queries/similar-files.js +1 -1
  195. package/dist/queries/similar-signatures.d.ts +2 -2
  196. package/dist/queries/similar-signatures.js +1 -1
  197. package/dist/queries/similar.d.ts +21 -3
  198. package/dist/queries/similar.js +1 -1
  199. package/dist/queries/slice.d.ts +2 -2
  200. package/dist/queries/slice.js +1 -1
  201. package/dist/queries/stale-abstractions.d.ts +10 -3
  202. package/dist/queries/stale-abstractions.js +1 -1
  203. package/dist/queries/stats.d.ts +2 -2
  204. package/dist/queries/stats.js +1 -1
  205. package/dist/queries/surface.d.ts +2 -2
  206. package/dist/queries/surface.js +1 -1
  207. package/dist/queries/symbols.d.ts +2 -2
  208. package/dist/queries/symbols.js +1 -1
  209. package/dist/queries/system.d.ts +2 -2
  210. package/dist/queries/system.js +1 -1
  211. package/dist/queries/trace.d.ts +2 -2
  212. package/dist/queries/trace.js +1 -1
  213. package/dist/queries/unused-imports.d.ts +4 -0
  214. package/dist/queries/unused-imports.js +2 -0
  215. package/dist/queries/unused-params.d.ts +2 -2
  216. package/dist/queries/unused-params.js +1 -1
  217. package/dist/queries/vue-component-duplicates.d.ts +35 -0
  218. package/dist/queries/vue-component-duplicates.js +2 -0
  219. package/dist/queries/vue-composable-candidates.d.ts +40 -0
  220. package/dist/queries/vue-composable-candidates.js +2 -0
  221. package/dist/queries/vue-large-view-pressure.d.ts +37 -0
  222. package/dist/queries/vue-large-view-pressure.js +2 -0
  223. package/dist/queries/wrapper-candidates.d.ts +6 -3
  224. package/dist/queries/wrapper-candidates.js +1 -1
  225. package/dist/reindex-worker.js +10 -10
  226. package/dist/reindex.d.ts +1 -1
  227. package/dist/reindex.js +22 -22
  228. package/dist/runtime.d.ts +1 -1
  229. package/dist/runtime.js +2 -2
  230. package/docs/AGENT_GUIDE.md +353 -0
  231. package/docs/AI_FAILURE_MODES.md +278 -0
  232. package/docs/API.md +40 -0
  233. package/docs/COMMAND_REFERENCE.md +131 -0
  234. package/docs/DETECTOR_GUIDE.md +119 -0
  235. package/docs/accuracy-hardening-goal.md +54 -0
  236. package/docs/analyzer-inventory.md +162 -0
  237. package/docs/analyzer-validation-ledger.md +262 -0
  238. package/docs/analyzer-validation-protocol.md +192 -0
  239. package/docs/assets/scip-query-logo-dark.svg +21 -0
  240. package/docs/assets/scip-query-logo.svg +24 -0
  241. package/docs/locality-analyzer-design.md +193 -0
  242. package/package.json +44 -5
  243. package/skills/scip-directory-architecture/SKILL.md +178 -0
  244. package/skills/scip-maintainability/SKILL.md +24 -3
  245. package/skills/scip-query/SKILL.md +4 -2
  246. package/skills/scip-query-setup/SKILL.md +118 -0
  247. package/skills/scip-react-maintainability/SKILL.md +114 -0
  248. package/skills/scip-vue-maintainability/SKILL.md +130 -0
  249. package/dist/chunk-4DAPXOWD.js +0 -2
  250. package/dist/chunk-4JQFTUKD.js +0 -2
  251. package/dist/chunk-4MHT7LKP.js +0 -3
  252. package/dist/chunk-5OHZEO3U.js +0 -3
  253. package/dist/chunk-5QJIEYFB.js +0 -34
  254. package/dist/chunk-6IGXZZQ4.js +0 -4
  255. package/dist/chunk-6K2JQ2VI.js +0 -61
  256. package/dist/chunk-6QVCPUK6.js +0 -2
  257. package/dist/chunk-6VL4AIEO.js +0 -8
  258. package/dist/chunk-A2VTV2QB.js +0 -7
  259. package/dist/chunk-AI2ECT7L.js +0 -2
  260. package/dist/chunk-BUAC4Q4G.js +0 -2
  261. package/dist/chunk-BZ6LCGE6.js +0 -2
  262. package/dist/chunk-CMXFASVD.js +0 -2
  263. package/dist/chunk-CO3AL7NZ.js +0 -2
  264. package/dist/chunk-FVVT7GV6.js +0 -4
  265. package/dist/chunk-HXXRN77A.js +0 -2
  266. package/dist/chunk-IC3RC3KJ.js +0 -4
  267. package/dist/chunk-ITHQJZTG.js +0 -2
  268. package/dist/chunk-IW7ASGVF.js +0 -2
  269. package/dist/chunk-JODYQDE4.js +0 -2
  270. package/dist/chunk-MCW36F2D.js +0 -2
  271. package/dist/chunk-MX6F756F.js +0 -2
  272. package/dist/chunk-NGI4V4AB.js +0 -18
  273. package/dist/chunk-O6KCZPJQ.js +0 -62
  274. package/dist/chunk-OAI5GEIN.js +0 -6
  275. package/dist/chunk-OH5HIAID.js +0 -4
  276. package/dist/chunk-OXKEUWMJ.js +0 -2
  277. package/dist/chunk-PBGTMPJ7.js +0 -2
  278. package/dist/chunk-PRVDXGSK.js +0 -2
  279. package/dist/chunk-QYKKTYBN.js +0 -6
  280. package/dist/chunk-R3G6ERW7.js +0 -7
  281. package/dist/chunk-R6XDPWJA.js +0 -10
  282. package/dist/chunk-SJR4SB7B.js +0 -2
  283. package/dist/chunk-SYKCO25G.js +0 -16
  284. package/dist/chunk-T22X7WT6.js +0 -2
  285. package/dist/chunk-TH4JVC34.js +0 -71
  286. package/dist/chunk-VDY4HYNK.js +0 -2
  287. package/dist/chunk-VDZIEDJB.js +0 -2
  288. package/dist/chunk-VDZL45XI.js +0 -2
  289. package/dist/chunk-WJIS6BNI.js +0 -3
  290. package/dist/chunk-WN5Z3UVT.js +0 -7
  291. package/dist/chunk-XCW7DYHM.js +0 -2
  292. package/dist/chunk-ZF6P2NAT.js +0 -63
  293. package/dist/chunk-ZGIK464P.js +0 -2
package/dist/cli.js CHANGED
@@ -1,13 +1,15 @@
1
1
  #!/usr/bin/env node
2
- import{program as ji}from"commander";import{realpathSync as Fd}from"fs";import{fileURLToPath as lL}from"url";import{createRequire as iI}from"module";import{fileURLToPath as ku}from"url";import{statSync as Td}from"fs";function Ee(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,...Ad(e.config.dbPath)}}function Ad(e){try{let t=Td(e);return{indexSizeBytes:t.size,lastBuilt:t.mtime}}catch{return{indexSizeBytes:0,lastBuilt:null}}}function M(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
2
+ import{program as rs}from"commander";import{realpathSync as Hh}from"fs";import{fileURLToPath as WA}from"url";import{createRequire as F_}from"module";import{fileURLToPath as Qp}from"url";import{statSync as Uh}from"fs";function Ae(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,...Wh(e.config.dbPath)}}function Wh(e){try{let t=Uh(e);return{indexSizeBytes:t.size,lastBuilt:t.mtime}}catch{return{indexSizeBytes:0,lastBuilt:null}}}function M(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
3
3
  FROM documents
4
4
  WHERE 1 = 1
5
5
  ${e.pathExclusionsFor("documents")}
6
6
  ${n}
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 Md(e){return/[*?]/.test(e)?e.replace(/\*\*/g,"%").replace(/\*/g,"%").replace(/\?/g,"_"):`%${e}%`}function Bi(e,t){let n=Md(t);return M(e,{like:n,includeIgnored:!1}).map(r=>({relativePath:r}))}import{extname as fa}from"path";var Od={".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 B(e){return Od[fa(e).toLowerCase()]??null}function xt(e){return fa(e).toLowerCase()===".vue"}var ga=[];function at(e){e.groups.length>0&&ga.push(e)}function Hi(e,t){let n=new Set(t.groups);for(let r of ga)r.groups.some(i=>n.has(i))&&(t.file!==void 0&&r.clearFile?r.clearFile(e,t.file):r.clearAll(e))}function ha(){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 H(e,t){let{cache:n,ensure:r}=ha(),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 at({name:e,groups:t.clearGroups,clearAll:o=>i.invalidateAll(o),clearFile:(o,s)=>i.invalidate(o,s)}),i}function te(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 at({name:e,groups:t.clearGroups,clearAll:i=>r.invalidate(i)}),r}function Zt(e,t){let{cache:n,ensure:r}=ha(),i={get(o,s,a,c){let l=r(o),u=l.get(s);if(u&&u.source===a)return u.value;let m=c();return l.set(s,{source:a,value:m}),m},invalidate(o,s){n.get(o)?.delete(s)},invalidateAll(o){n.delete(o)}};return at({name:e,groups:t.clearGroups,clearAll:o=>i.invalidateAll(o),clearFile:(o,s)=>i.invalidate(o,s)}),i}import{createRequire as $d}from"module";var le=$d(import.meta.url),Sr=null,ya=!1;function jd(){if(ya)return null;if(Sr)return Sr;try{return Sr=le("tree-sitter"),Sr}catch{return ya=!0,null}}var ba=new Map,qi=new Set;function Bd(e){if(qi.has(e))return null;let t=ba.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 qi.add(e),null}return ba.set(e,n),n}var Sa=new Map;function Hd(e){let t=Sa.get(e);if(t)return t;let n=Bd(e);if(!n)return null;let r=jd();if(!r)return null;let i=new r;try{i.setLanguage(n)}catch{return qi.add(e),null}return Sa.set(e,i),i}function qd(e,t){return e.parse(r=>r>=t.length?null:t.slice(r,Math.min(t.length,r+16384)))}function Vi(e,t){let n=Hd(e);if(!n)return null;try{return qd(n,t)}catch{return null}}import{existsSync as Vd,readFileSync as Wd}from"fs";import{join as Ud}from"path";var Gd=H("source-text",{clearGroups:["whole-project","source-file"]});function P(e,t){let n=t.replace(/\\/g,"/");return Gd.get(e,n,()=>{let r=Ud(e.config.projectRoot,n);return Vd(r)?Wd(r,"utf-8"):""})}var Jd=/scip-query[\s:-]*ignore[\s:-]*(?:dead(?:-code)?|stale|wrapper|passthrough|drift|extract)?/i;function Wi(e,t,n){if(n<=0)return!1;let r=P(e,t);if(!r)return!1;let i=r.split(`
9
- `);for(let o=n-1;o>=0&&o>=n-5;o-=1){let s=(i[o]??"").trim();if(s!==""){if(Jd.test(s))return!0;if(!s.startsWith("//")&&!s.startsWith("*")&&!s.startsWith("/*")&&!s.startsWith("@")&&!s.startsWith("#"))return!1}}return!1}function xa(e){let t=[],n=/<script\b([^>]*)>([\s\S]*?)<\/script>/g;for(let a of e.matchAll(n))typeof a.index=="number"&&t.push({tagOpen:a[1]??"",body:a[2]??"",openIdx:a.index+(a[0].length-(a[2]?.length??0)-9)});if(t.length===0)return null;let r=t.find(a=>/\bsetup\b/.test(a.tagOpen))??t[0],o=r.tagOpen.match(/\blang\s*=\s*["']?([\w-]+)/)?.[1]?.toLowerCase(),s=o==="ts"||o==="typescript"?"typescript":o==="tsx"?"tsx":"javascript";return{body:r.body,startLine:zd(e,r.openIdx),language:s}}function zd(e,t){let n=0;for(let r=0;r<t&&r<e.length;r++)e.charCodeAt(r)===10&&n++;return n}var Ca=Zt("ast-trees",{clearGroups:["whole-project","source-file"]});function ue(e,t){if(xt(t))return Kd(e,t);let n=B(t);if(!n)return null;let r=P(e,t);return r?Ca.get(e,t,r,()=>Vi(n,r)):null}function Kd(e,t){let n=P(e,t);return n?Ca.get(e,t,n,()=>{let r=xa(n);if(!r)return null;let i=`
10
- `.repeat(r.startLine)+r.body;return Vi(r.language,i)}):null}function Ra(e,t){let n=Qd(e,t);if(!n)return null;let r=en(n);return r?{calleeLeaf:r,memberAccess:Yd(n),line:e.startPosition.row}:null}function Qd(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 Yd(e){switch(e.type){case"field_expression":case"member_expression":case"attribute":return!0;default:return!1}}function en(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?en(t):null}case"scoped_identifier":{let t=e.childForFieldName("name")??e.namedChild(e.namedChildCount-1);return t?en(t):null}case"super":case"self":case"this":return null;default:return null}}import{createHash as Xd}from"crypto";import{createRequire as Zd}from"module";import{dirname as ep,join as tp}from"path";import np from"better-sqlite3";var rp=Zd(import.meta.url),ip="evidence.db",xr=new WeakMap,op=H("evidence-content-hash",{clearGroups:["whole-project","source-file"]});function sp(){for(let e of["../package.json","../../package.json"])try{return rp(e).version}catch{}return"0.0.0"}var Cr=sp();function Ui(e){return Xd("sha256").update(e).digest("hex")}function Ct(e,t,n){return op.get(e,t,()=>Ui(n))}function Ia(e,t){process.env.SCIP_QUERY_DEBUG&&console.error(`evidence-cache: ${e}: ${t instanceof Error?t.message:String(t)}`)}function wn(e){if(xr.has(e))return xr.get(e)??null;let t=null;try{let n=new np(tp(ep(e.config.dbPath),ip));n.pragma("journal_mode = WAL"),n.pragma("busy_timeout = 5000"),n.pragma("synchronous = NORMAL"),n.exec(`
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 Gh(e){return/[*?]/.test(e)?e.replace(/\*\*/g,"%").replace(/\*/g,"%").replace(/\?/g,"_"):`%${e}%`}function as(e,t){let n=Gh(t);return M(e,{like:n,includeIgnored:!1}).map(i=>({relativePath:i}))}import{extname as pl}from"path";var zh={".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 zh[pl(e).toLowerCase()]??null}function gt(e){return pl(e).toLowerCase()===".vue"}var fl=[];function Et(e){e.groups.length>0&&fl.push(e)}function cs(e,t){let n=new Set(t.groups);for(let i of fl)i.groups.some(r=>n.has(r))&&(t.file!==void 0&&i.clearFile?i.clearFile(e,t.file):i.clearAll(e))}function gl(){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}=gl(),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 ce(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 Kh={clearGroups:["whole-project","source-file"]};function pr(e){return qt(e,Kh)}function qt(e,t){let{cache:n,ensure:i}=gl(),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 Jh}from"module";var ve=Jh(import.meta.url),fr=null,hl=!1;function Qh(){if(hl)return null;if(fr)return fr;try{return fr=ve("tree-sitter"),fr}catch{return hl=!0,null}}var bl=new Map,ls=new Set;function Xh(e){if(ls.has(e))return null;let t=bl.get(e);if(t)return t;let n;try{switch(e){case"rust":n=ve("tree-sitter-rust");break;case"typescript":n=ve("tree-sitter-typescript").typescript;break;case"tsx":n=ve("tree-sitter-typescript").tsx;break;case"javascript":n=ve("tree-sitter-javascript");break;case"python":n=ve("tree-sitter-python");break;case"java":n=ve("tree-sitter-java");break;case"kotlin":n=ve("tree-sitter-kotlin");break;case"scala":n=ve("tree-sitter-scala");break;case"ruby":n=ve("tree-sitter-ruby");break;case"c":n=ve("tree-sitter-c");break;case"cpp":n=ve("tree-sitter-cpp");break;case"csharp":n=ve("tree-sitter-c-sharp");break;case"php":n=ve("tree-sitter-php").php;break;case"vb":{let i=ve("tree-sitter-vb-dotnet");n=i.language??i;break}}}catch{return ls.add(e),null}return bl.set(e,n),n}var yl=new Map;function Yh(e){let t=yl.get(e);if(t)return t;let n=Xh(e);if(!n)return null;let i=Qh();if(!i)return null;let r=new i;try{r.setLanguage(n)}catch{return ls.add(e),null}return yl.set(e,r),r}function Zh(e,t){return e.parse(i=>i>=t.length?null:t.slice(i,Math.min(t.length,i+16384)))}function fi(e,t){let n=Yh(e);if(!n)return null;try{return Zh(n,t)}catch{return null}}import{existsSync as eb,readFileSync as tb}from"fs";import{join as nb}from"path";var ib=U("source-text",{clearGroups:["whole-project","source-file"]}),rb=U("source-lines",{clearGroups:["whole-project","source-file"]});function A(e,t){let n=t.replace(/\\/g,"/");return ib.get(e,n,()=>{let i=nb(e.config.projectRoot,n);return eb(i)?tb(i,"utf-8"):""})}function Pe(e,t){let n=t.replace(/\\/g,"/");return rb.get(e,n,()=>{let i=A(e,n);return i?i.split(`
9
+ `):[]})}var ob=/^\s*(?:\/\/|#|\/\*+|\*)\s*scip-query[\s:-]*ignore(?:[\s:-]+(dead(?:-code)?|stale|wrapper|passthrough|drift|extract|similar))?\b/i;function gi(e){let t=ob.exec(e);return t?t[1]??"":null}function gr(e,t,n){if(n<=0)return!1;let i=Pe(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(gi(o)!==null)return!0;if(!o.startsWith("//")&&!o.startsWith("*")&&!o.startsWith("/*")&&!o.startsWith("@")&&!o.startsWith("#"))return!1}}return!1}import{parse as db}from"@vue/compiler-sfc";import{posix as us}from"path";import{parse as sb}from"@vue/compiler-sfc";var ab=pr("vue-sfc-units");function br(e,t){let n=Cl(t),i=A(e,n);return ab.get(e,n,i,()=>cb(e,n,i))}function Cl(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function ds(e){let t=e?.toLowerCase();return!t||t==="js"||t==="javascript"||t==="jsx"?"javascript":t==="ts"||t==="typescript"?"typescript":t==="tsx"?"tsx":null}function Ut(e){return!e||e.body.length===0?0:e.body.split(`
10
+ `).length}function cb(e,t,n){let i={relativePath:t,template:null,scripts:[],styles:[],customBlocks:[],errors:[]};if(!n)return i;let r;try{r=sb(n,{filename:t})}catch(s){return i.errors.push(xl(s)),i}i.errors.push(...r.errors.map(xl));let{descriptor:o}=r;return o.template&&(i.template=hr(e,t,"template",o.template)),o.script&&i.scripts.push(Sl(e,t,o.script,!1)),o.scriptSetup&&i.scripts.push(Sl(e,t,o.scriptSetup,!0)),i.styles=o.styles.map(s=>hr(e,t,"style",s)),i.customBlocks=o.customBlocks.map(s=>hr(e,t,"custom",s)),i.errors.push(...[i.template,...i.scripts,...i.styles,...i.customBlocks].flatMap(s=>s?.errors??[])),i}function Sl(e,t,n,i){let r=hr(e,t,"script",n);return{...r,kind:"script",setup:i,astLanguage:ds(r.lang)}}function hr(e,t,n,i){let r=ub(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=lb(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=A(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 lb(e,t){let n=t.split(/[?#]/,1)[0];if(!n||n.startsWith("/")||n.includes("://"))return null;let i=Cl(us.normalize(us.join(us.dirname(e),n)));return i===".."||i.startsWith("../")?null:i}function ub(e){return{...e}}function xl(e){return e instanceof Error?e.message:String(e)}function yr(e){let t=db(e),n=t.descriptor.scriptSetup??t.descriptor.script;if(!n||n.src)return null;let i=ds(n.lang??null);return i?{body:n.content,startLine:Math.max(0,n.loc.start.line-1),language:i}:null}var vl=qt("ast-trees",{clearGroups:["whole-project","source-file"]});function le(e,t){if(gt(t))return mb(e,t);let n=W(t);if(!n)return null;let i=A(e,t);return i?vl.get(e,t,i,()=>fi(n,i)):null}function mb(e,t){let n=A(e,t);return n?vl.get(e,t,n,()=>{let i=yr(n);if(!i)return null;let r=`
12
+ `.repeat(i.startLine)+i.body;return fi(i.language,r)}):null}function En(e,t){let n=pb(e,t);if(!n)return null;let i=Nn(n);return i?{calleeLeaf:i,memberAccess:fb(n),line:e.startPosition.row}:null}function pb(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 fb(e){switch(e.type){case"field_expression":case"member_expression":case"attribute":return!0;default:return!1}}function Nn(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?Nn(t):null}case"scoped_identifier":{let t=e.childForFieldName("name")??e.namedChild(e.namedChildCount-1);return t?Nn(t):null}case"super":case"self":case"this":return null;default:return null}}import{createHash as gb}from"crypto";import{createRequire as hb}from"module";import{dirname as bb,join as yb}from"path";import Sb from"better-sqlite3";var xb=hb(import.meta.url),Cb="evidence.db",Sr=new WeakMap,vb=U("evidence-content-hash",{clearGroups:["whole-project","source-file"]});function Rb(){for(let e of["../package.json","../../package.json"])try{return xb(e).version}catch{}return"0.0.0"}var xr=Rb();function ms(e){return gb("sha256").update(e).digest("hex")}function Wt(e,t,n){return vb.get(e,t,()=>ms(n))}function Rl(e,t){process.env.SCIP_QUERY_DEBUG&&console.error(`evidence-cache: ${e}: ${t instanceof Error?t.message:String(t)}`)}function hi(e){if(Sr.has(e))return Sr.get(e)??null;let t=null;try{let n=new Sb(yb(bb(e.config.dbPath),Cb));n.pragma("journal_mode = WAL"),n.pragma("busy_timeout = 5000"),n.pragma("synchronous = NORMAL"),n.exec(`
11
13
  CREATE TABLE IF NOT EXISTS file_evidence (
12
14
  kind TEXT NOT NULL,
13
15
  relative_path TEXT NOT NULL,
@@ -27,14 +29,15 @@ import{program as ji}from"commander";import{realpathSync as Fd}from"fs";import{f
27
29
  );
28
30
  `),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
29
31
  WHERE relative_path = ? AND symbol = ? AND content_hash = ? AND deps_digest = ? AND version = ?`),writeCallees:n.prepare(`INSERT OR REPLACE INTO semantic_callees
30
- (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){Ia("disabled (open failed)",n)}return xr.set(e,t),t}function En(e,t,n){Ia(`disabled (${t})`,n),xr.set(e,null)}function Rr(e,t,n,r){let i=wn(e);if(!i)return null;try{return i.readFileEvidence.get(t,n,r,Cr)?.payload??null}catch(o){return En(e,"file_evidence read",o),null}}function Ir(e,t,n,r,i){let o=wn(e);if(o)try{o.writeFileEvidence.run(t,n,r,Cr,i)}catch(s){En(e,"file_evidence write",s)}}function va(e){let t=wn(e);if(!t)return 0;try{return t.evidence.prepare("SELECT COUNT(*) AS count FROM semantic_callees").get()?.count??0}catch(n){return En(e,"semantic_callees count",n),0}}function Da(e,t,n,r,i){let o=wn(e);if(!o)return null;try{return o.readCallees.get(t,n,r,i,Cr)?.payload??null}catch(s){return En(e,"semantic_callees read",s),null}}function Na(e,t){if(t.length===0)return;let n=wn(e);if(n)try{n.evidence.transaction(()=>{for(let r of t)n.dropStaleCallees.run(r.relativePath,r.contentHash),n.writeCallees.run(r.relativePath,r.symbol,r.contentHash,r.depsDigest,Cr,r.payload)})()}catch(r){En(e,"semantic_callees write",r)}}function kn(e){return e.type==="comment"||e.type==="line_comment"||e.type==="block_comment"}var ap=new Set(["function_declaration","method_definition","method_signature","function_signature"]);function ka(e,t){let n=lp(e,t);if(n)return{name:n.name,startLine:n.definitionNode.startPosition.row,endLine:n.definitionNode.endPosition.row,paramCount:wa(n.functionNode),params:_a(n.functionNode),paramsEndLine:La(n.functionNode),isLiteralPassthrough:Ea(n.functionNode,t)};if(!cp(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:wa(e),params:_a(e),paramsEndLine:La(e),isLiteralPassthrough:Ea(e,t)}:null}function Pa(e){return e.namedChildren.find(t=>t.type==="parameters"||t.type==="formal_parameters")}function _a(e){let t=Pa(e);if(!t)return[];let n=[];for(let r of t.namedChildren){if(kn(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 La(e){let t=Pa(e);return t?t.endPosition.row:e.startPosition.row}function cp(e,t){return t==="rust"?e==="function_item"||e==="function_signature_item":t==="python"?e==="function_definition":t==="typescript"||t==="tsx"||t==="javascript"?ap.has(e):!1}function lp(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 wa(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)kn(r)||(n+=1);return n}function Ea(e,t){let n=e.namedChildren.find(m=>m.type==="block"||m.type==="statement_block");if(!n)return!1;let r=n.namedChildren.filter(m=>!kn(m));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(m=>m.type==="arguments"||m.type==="argument_list");if(!a)return!1;let c=a.namedChildren.filter(m=>!kn(m)),l=e.namedChildren.find(m=>m.type==="parameters"||m.type==="formal_parameters");if(!l)return!1;let u=[];for(let m of l.namedChildren){if(m.type==="identifier"){u.push(m.text);continue}let d=m.namedChildren.find(p=>p.type==="identifier");d&&u.push(d.text)}if(c.length!==u.length)return!1;for(let m=0;m<u.length;m+=1){let d=c[m];if(d.type!=="identifier"||d.text!==u[m])return!1}return!0}var up=new Set(["identifier","type_identifier","field_identifier"]),mp=new Set(["identifier"]),dp=new Set(["identifier","property_identifier","type_identifier","shorthand_property_identifier","shorthand_property_identifier_pattern"]),pp=new Set(["rust","python"]),fp=/\{([^{}]*)\}/g,gp=/\b([A-Za-z_][\w]*)\b/g;function Fa(e,t){return hp(t).has(e.type)}function Ta(e,t){return pp.has(t)&&e.type==="string_content"}function Gi(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 hp(e){return e==="rust"?up:e==="python"?mp:dp}function Aa(e,t){let n=e.startPosition.row;for(let r of e.text.matchAll(fp)){let i=r[1]??"";for(let o of i.matchAll(gp))o[1]&&t(o[1],n)}}var yp=[/\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],bp=/^#!?\[\s*serde\s*\(/,Sp=/^#!?\[\s*schemars\s*\(/,xp=/^#!?\[\s*validate\s*\(/,Cp=new Set(["invoke","invokeTauriCommand","listen","once","emit","subscribe","dispatch","sendCommand","callRust"]);function Ma(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=en(r);if(!i||!Cp.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 Oa(e,t){let n=bp.test(e),r=Sp.test(e),i=xp.test(e);if(!(!n&&!r&&!i))for(let o of yp){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 $a(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 Rp=Zt("source-facts",{clearGroups:["whole-project","source-file"]});function Q(e,t){let n=B(t);if(!n)return null;let r=P(e,t);return r?Rp.get(e,t,r,()=>Ip(e,t,n,r)):null}function Ip(e,t,n,r){let i=Ct(e,t,r),o=Rr(e,"source-facts",t,i);if(o){let c=Dp(o);if(c&&c.language===n)return c}let s=ue(e,t);if(!s)return null;let a=_p(s,n);return Ir(e,"source-facts",t,i,vp(a)),a}function vp(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 Dp(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:Gi(n),fileIdentifiers:new Set(n.keys()),rustAttrReferencedNames:new Set(t.rustAttrReferencedNames),crossLanguageDispatchNames:new Set(t.crossLanguageDispatchNames)}}catch{return null}}function Ji(e,t,n,r){let i=Q(e,t);return i?Np(i,n,r)?.isLiteralPassthrough??!0:!0}function Np(e,t,n){return e.callables.find(r=>r.startLine===t&&r.endLine===n)??null}function _p(e,t){let n=[],r=[],i=new Set,o=new Set,s=new Map,a=(l,u)=>{let m=s.get(l);if(!m){s.set(l,[u]);return}m[m.length-1]!==u&&m.push(u)},c=l=>{let u=ka(l,t);u&&n.push(u);let m=Ra(l,t);m&&r.push(m),Ma(l,t,o),t==="rust"&&(l.type==="attribute_item"||l.type==="inner_attribute_item")&&Oa(l.text,i),Fa(l,t)&&a(l.text,l.startPosition.row),Ta(l,t)&&Aa(l,a);for(let d of l.children)c(d)};return c(e.rootNode),{language:t,callables:n,callSites:r,typeContainerMap:$a(e,t),identifierLineMap:s,identifiersByLine:Gi(s),fileIdentifiers:new Set(s.keys()),rustAttrReferencedNames:i,crossLanguageDispatchNames:o}}var ja=new Set(["rust","typescript","tsx","javascript","python"]);function zi(e,t){let n=Q(e,t);return!n||!ja.has(n.language)?null:n.callables.map(r=>({name:r.name,startLine:r.startLine,endLine:r.endLine}))}function tn(e,t){let n=Q(e,t);return!n||!ja.has(n.language)?null:n.callSites}function Ki(e,t){return Q(e,t)?.typeContainerMap??new Map}function Rt(e,t,n={}){let r=Q(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 Lp={"/":"namespace","#":"type",".":"term","[":"type-param",":":"meta","!":"macro"};function ne(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=wp(i);return{scheme:n,manager:r,packageName:o,version:s,descriptors:c,raw:e}}function Be(e){let t=ne(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 wp(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||Ba(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&&!Ba(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=Lp[i];o&&t.push({name:r,suffix:o}),n+=1}}return t}function Ba(e){return e==="/"||e==="#"||e==="."||e==="("||e==="["||e===":"||e==="!"}function b(e){let t=ne(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=Ep(i);o&&r.push(o)}return r.join(":")}function Ep(e){let t=e.suffix==="namespace"?kp(e.name):e.name;return t?e.suffix==="method"?`${t}()`:t:""}function kp(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 T(e){let t=ne(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 re(e){let t=ne(e);if("kind"in t&&t.kind==="local")return null;let n=t;return n.descriptors[n.descriptors.length-1]?.suffix??null}function ae(e){return e.endsWith("().")||re(e)==="method"}function Y(e){let t=re(e);return t==="method"||t==="term"}function ct(e){return re(e)==="namespace"}var Pp=/^rust-analyzer\b.*[\s/]impl#\[[^\]]+\]\[[^\]]+\]/;function vr(e){return Pp.test(e)}var Fp=new Set(["test","tests","_tests"]);function nn(e){let t=ne(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&&Fp.has(r.name))return!0}return!1}function Ha(e,t){let n=ne(e),r=ne(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 qa(e,t){let n=ne(e),r=ne(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 rn(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
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){Rl("disabled (open failed)",n)}return Sr.set(e,t),t}function bi(e,t,n){Rl(`disabled (${t})`,n),Sr.set(e,null)}function Cr(e,t,n,i){let r=hi(e);if(!r)return null;try{return r.readFileEvidence.get(t,n,i,xr)?.payload??null}catch(o){return bi(e,"file_evidence read",o),null}}function vr(e,t,n,i,r){let o=hi(e);if(o)try{o.writeFileEvidence.run(t,n,i,xr,r)}catch(s){bi(e,"file_evidence write",s)}}function Ll(e){let t=hi(e);if(!t)return 0;try{return t.evidence.prepare("SELECT COUNT(*) AS count FROM semantic_callees").get()?.count??0}catch(n){return bi(e,"semantic_callees count",n),0}}function wl(e,t,n,i,r){let o=hi(e);if(!o)return null;try{return o.readCallees.get(t,n,i,r,xr)?.payload??null}catch(s){return bi(e,"semantic_callees read",s),null}}function kl(e,t){if(t.length===0)return;let n=hi(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,xr,r.payload)}})()}catch(i){bi(e,"semantic_callees write",i)}}function yi(e){return e.type==="comment"||e.type==="line_comment"||e.type==="block_comment"}var Lb=new Set(["function_declaration","method_definition","method_signature","function_signature"]);function Rr(e,t){let n=kb(e,t);if(n)return{name:n.name,startLine:n.definitionNode.startPosition.row,endLine:n.definitionNode.endPosition.row,paramCount:Nl(n.functionNode),params:Dl(n.functionNode),paramsEndLine:Il(n.functionNode),isLiteralPassthrough:El(n.functionNode,t)};if(!wb(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:Nl(e),params:Dl(e),paramsEndLine:Il(e),isLiteralPassthrough:El(e,t)}:null}function Pl(e){return e.namedChildren.find(t=>t.type==="parameters"||t.type==="formal_parameters")}function Dl(e){let t=Pl(e);if(!t)return[];let n=[];for(let i of t.namedChildren){if(yi(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 Il(e){let t=Pl(e);return t?t.endPosition.row:e.startPosition.row}function wb(e,t){return t==="rust"?e==="function_item"||e==="function_signature_item":t==="python"?e==="function_definition":t==="typescript"||t==="tsx"||t==="javascript"?Lb.has(e):!1}function kb(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 Nl(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)yi(i)||(n+=1);return n}function El(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=>!yi(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=>!yi(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 Db=new Set(["identifier","type_identifier","field_identifier"]),Ib=new Set(["identifier"]),Nb=new Set(["identifier","property_identifier","type_identifier","shorthand_property_identifier","shorthand_property_identifier_pattern"]),Eb=new Set(["rust","python"]),Pb=/\{([^{}]*)\}/g,_b=/\b([A-Za-z_][\w]*)\b/g;function _l(e,t){return Tb(t).has(e.type)}function Tl(e,t){return Eb.has(t)&&e.type==="string_content"}function ps(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 Tb(e){return e==="rust"?Db:e==="python"?Ib:Nb}function Fl(e,t){let n=e.startPosition.row;for(let i of e.text.matchAll(Pb)){let r=i[1]??"";for(let o of r.matchAll(_b))o[1]&&t(o[1],n)}}var Fb=[/\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],$b=/^#!?\[\s*serde\s*\(/,Ab=/^#!?\[\s*schemars\s*\(/,Mb=/^#!?\[\s*validate\s*\(/,Ob=new Set(["invoke","invokeTauriCommand","listen","once","emit","subscribe","dispatch","sendCommand","callRust"]);function $l(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=Nn(i);if(!r||!Ob.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 Al(e,t){let n=$b.test(e),i=Ab.test(e),r=Mb.test(e);if(!(!n&&!i&&!r))for(let o of Fb){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 Ml(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 jb=qt("source-facts",{clearGroups:["whole-project","source-file"]});function ie(e,t){let n=A(e,t);if(!n)return null;let i=Bb(t,n);return i?jb.get(e,t,n,()=>Vb(e,t,i,n)):null}function Bb(e,t){return gt(e)?yr(t)?.language??null:W(e)}function Vb(e,t,n,i){let r=Wt(e,t,i),o=Cr(e,"source-facts",t,r);if(o){let c=qb(o);if(c&&c.language===n)return c}let s=le(e,t);if(!s)return null;let a=Wb(s,n);return vr(e,"source-facts",t,r,Hb(a)),a}function Hb(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 qb(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:ps(n),fileIdentifiers:new Set(n.keys()),rustAttrReferencedNames:new Set(t.rustAttrReferencedNames),crossLanguageDispatchNames:new Set(t.crossLanguageDispatchNames)}}catch{return null}}function fs(e,t,n,i){let r=ie(e,t);return r?Ub(r,n,i)?.isLiteralPassthrough??!0:!0}function Ub(e,t,n){return e.callables.find(i=>i.startLine===t&&i.endLine===n)??null}function Wb(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=Rr(l,t);u&&n.push(u);let d=En(l,t);d&&i.push(d),$l(l,t,o),t==="rust"&&(l.type==="attribute_item"||l.type==="inner_attribute_item")&&Al(l.text,r),_l(l,t)&&a(l.text,l.startPosition.row),Tl(l,t)&&Fl(l,a);for(let m of l.children)c(m)};return c(e.rootNode),{language:t,callables:n,callSites:i,typeContainerMap:Ml(e,t),identifierLineMap:s,identifiersByLine:ps(s),fileIdentifiers:new Set(s.keys()),rustAttrReferencedNames:r,crossLanguageDispatchNames:o}}var Ol=new Set(["rust","typescript","tsx","javascript","python"]);function gs(e,t){let n=ie(e,t);return!n||!Ol.has(n.language)?null:n.callables.map(i=>({name:i.name,startLine:i.startLine,endLine:i.endLine}))}function Pn(e,t){let n=ie(e,t);return!n||!Ol.has(n.language)?null:n.callSites}function hs(e,t){return ie(e,t)?.typeContainerMap??new Map}import{ElementTypes as Gb,NodeTypes as Bl,parse as zb}from"@vue/compiler-dom";import{parse as eO}from"@vue/compiler-sfc";function Lr(e,t){return e.split(t).filter(Boolean).map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join("")}var Kb=pr("vue-template-facts"),Jb=new Set(["component","keep-alive","slot","suspense","teleport","template","transition","transition-group"]),Qb=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"]),Xb=new Set(["div","span","template"]),Yb=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 Vl(e,t){let n=t.replace(/\\/g,"/"),i=A(e,n);return Kb.get(e,n,i,()=>Zb(n,br(e,n).template))}function Zb(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=zb(t.body,{comments:!1})}catch{return n}let r=new Set,o=s=>{s.trim()&&r.add(s)};return Hl(i.children,t.startLine,n,o),n.structuralTokens=[...r].sort(),n}function Hl(e,t,n,i){for(let r of e)r.type===Bl.ELEMENT&&(ey(r,t,n,i),Hl(r.children,t,n,i))}function ey(e,t,n,i){let r=cy(e.tag),o={tag:e.tag,normalized:r,kind:ay(e),startLine:_n(t,e.loc.start.line),endLine:_n(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),Xb.has(e.tag)||i(`native:${e.tag}`));for(let s of e.props)ty(s,t,n,i)}function ty(e,t,n,i){if(e.type===Bl.ATTRIBUTE){let a=e.value?.content??null,c=jl("prop",e.name,a,t,e.loc.start.line,e.loc.end.line);n.props.push(c),i(`prop:${e.name}`);return}let r=iy(e),o=ql(e.exp),s=jl(ny(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&&ry(o,t,e.loc.start.line,n,i)}function jl(e,t,n,i,r,o){return{kind:e,name:t,value:n,startLine:_n(i,r),endLine:_n(i,o)}}function ny(e){switch(e){case"bind":case"model":return"prop";case"on":return"event";case"slot":return"slot";default:return"directive"}}function iy(e){let t=ql(e.arg);return t||e.name}function ql(e){if(!e)return null;let t=("content"in e&&typeof e.content=="string"?e.content:e.loc.source).trim();return t||null}function ry(e,t,n,i,r){for(let o of oy(e)){let s={name:o,startLine:_n(t,n),endLine:_n(t,n)};i.expressionIdentifiers.push(s),r(`id:${o}`)}}function oy(e){let t=new Set,n=sy(e),i=/\b[A-Za-z_$][A-Za-z0-9_$]*\b/g,r;for(;r=i.exec(n);){let o=r[0];Yb.has(o)||/^[A-Z_]+$/.test(o)||t.add(o)}return[...t].sort()}function sy(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 ay(e){let t=e.tag;return e.tagType===Gb.COMPONENT?"component":Jb.has(t)?"builtin":Qb.has(t)?"native":/^[A-Z]/.test(t)||t.includes("-")?"component":"native"}function cy(e){return Lr(e,/[-_:]/)}function _n(e,t){return e+Math.max(0,t-1)}import{readdirSync as ly}from"fs";import{execFileSync as uy}from"child_process";import{extname as bs,join as dy}from"path";var my=[".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"],Ul=[".vue"],Wl=new Set(my.map(e=>e.toLowerCase())),py=[...Wl].sort().join(","),ys=new Set(["node_modules",".git","target","dist","build",".next",".nuxt",".cache",".turbo","out","coverage",".scipquery-cache","__pycache__",".venv","venv",".idea",".vscode"]);function we(e,t={}){let n=t.includeIndexed??!0,i=t.includeAuxiliary??!0,r=t.extensions?.map(c=>c.toLowerCase()),o=r?new Set(r):Wl,s=r?[...o].sort().join(","):py,a=`${n?"1":"0"}|${i?"1":"0"}|${s}`;return fy.get(e,a,()=>{let c=new Set;if(n)for(let l of M(e,{includeIgnored:!1}))o.has(bs(l).toLowerCase())&&c.add(l);if(i)for(let l of gy(e.config.projectRoot,o))e.isIgnored(l)||n&&c.has(l)||c.add(l);return[...c].sort()})}var fy=U("source-files",{clearGroups:[]});function gy(e,t){return hy(e,t)??by(e,t)}function hy(e,t){try{let n=uy("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(bs(o).toLowerCase())&&i.add(o)}return i}catch{return null}}function by(e,t){let n=new Set,i=r=>{let o=r?dy(e,r):e,s;try{s=ly(o,{withFileTypes:!0})}catch{return}for(let a of s)if(!ys.has(a.name)){if(a.isDirectory()){i(r?`${r}/${a.name}`:a.name);continue}t.has(bs(a.name).toLowerCase())&&n.add(r?`${r}/${a.name}`:a.name)}};return i(""),n}var yy=new Set(["ref","shallowRef","reactive","computed","watch","watchEffect"]),Sy=new Set(["onBeforeMount","onMounted","onBeforeUpdate","onUpdated","onBeforeUnmount","onUnmounted","onActivated","onDeactivated","onErrorCaptured"]),xy=new Set(["axios","fetch","runRequest","useAsyncData","useFetch","useResource"]),Cy=new Set(["defineEmits","defineExpose","defineModel","defineOptions","defineProps","withDefaults"]),vy=new Set(["catch","for","function","if","return","switch","while"]);function Gl(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+=Ut(n),n.external&&(t.externalLineCount+=Ut(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(...ky(n));let i=fi(n.astLanguage,n.body);i?Ly(n,i.rootNode,t):wy(n,t)}return Ry(t),t.externalScriptPaths=Kl(t.externalScriptPaths),t}function Ry(e){e.composables=Tn(e,"composable"),e.stores=Tn(e,"store"),e.reactivity=Tn(e,"reactivity"),e.lifecycle=Tn(e,"lifecycle"),e.requests=Tn(e,"request"),e.macros=Tn(e,"macro")}function Tn(e,t){return Kl(e.calls.filter(n=>n.categories.includes(t)).map(n=>n.name))}function Ly(e,t,n){let i=new Set,r=new Set,o=s=>{let a=Rr(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=En(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:zl(c.calleeLeaf),setup:e.setup}))}for(let l of s.children)o(l)};o(t)}function wy(e,t){for(let n of e.body.matchAll(/\b([A-Za-z_$][\w$]*)\s*\(/g)){let i=n[1];!i||vy.has(i)||t.calls.push({name:i,sourcePath:e.sourcePath,line:e.startLine+wr(e.body,n.index??0),categories:zl(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+wr(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+wr(e.body,n.index??0);t.functions.push({name:i,sourcePath:e.sourcePath,startLine:r,endLine:r,setup:e.setup})}}function ky(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+wr(e.body,n.index??0);for(let s of Dy(i))t.push({local:s,source:r,sourcePath:e.sourcePath,line:o,setup:e.setup})}return t}function Dy(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 zl(e){let t=["call"];return/^use[A-Z0-9_]/.test(e)&&t.push("composable"),/^use[A-Z0-9_].*Store$/.test(e)&&t.push("store"),yy.has(e)&&t.push("reactivity"),Sy.has(e)&&t.push("lifecycle"),xy.has(e)&&t.push("request"),Cy.has(e)&&t.push("macro"),t}function wr(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 Kl(e){return[...new Set(e)].sort()}var Iy=new Set(["in","key","of"]),Ny=new Set(["computed","defineEmits","defineProps","reactive","ref","watch","watchEffect"]);function Fn(e,t={}){let n=we(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=>Ey(e,r)).filter(r=>(t.minTemplateTokens===void 0||r.templateTokens.size>=t.minTemplateTokens)&&(t.minBehaviorTokens===void 0||r.behaviorTokens.size>=t.minBehaviorTokens))}function Ey(e,t){let n=t.replace(/\\/g,"/"),i=br(e,n),r=Vl(e,n),o=Gl(i),s=_y(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=Pe(e,n).length,u=Ut(i.template),d=o.lineCount,m=i.styles.reduce((h,g)=>h+Ut(g),0),p=i.customBlocks.reduce((h,g)=>h+Ut(g),0);return{file:n,sfc:i,templateFacts:r,scriptFacts:o,templateTokens:new Set(r.structuralTokens),behaviorTokens:Py(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 Py(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(Ny.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 _y(e){let t=new Set;for(let n of e.directives)if(n.name==="for"&&n.value)for(let i of Ty(n.value))t.add(i);for(let n of e.slots)if(n.value)for(let i of Jl(n.value))t.add(i);return[...t].sort()}function Ty(e){let t=/^(.*?)\s+(?:in|of)\s+/.exec(e.trim());return t?Jl(t[1]??""):[]}function Jl(e){let t=[];for(let n of e.matchAll(/\b[A-Za-z_$][\w$]*\b/g)){let i=n[0];Iy.has(i)||t.push(i)}return t}import{extname as Fy}from"path";var $y=[".tsx",".jsx"],Ql=new Set(["useActionState","useCallback","useContext","useDebugValue","useDeferredValue","useEffect","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useOptimistic","useReducer","useRef","useState","useSyncExternalStore","useTransition"]),Ay=new Set(["useEffect","useInsertionEffect","useLayoutEffect"]),My=new Set(["useActionState","useOptimistic","useReducer","useRef","useState"]),Oy=new Set(["useLocation","useNavigate","useParams","useSearchParams","useTranslation"]),jy=new Set(["axios","fetch","gql","graphql","mutate","query","request","useMutation","useQuery","useSuspenseQuery"]),By=new Set(["add","apply","cancel","change","clear","close","create","delete","fetch","filter","handle","load","open","refresh","remove","render","reset","save","select","submit","toggle","update"]),Vy=new Set(["children","className","false","key","null","style","true","undefined"]),Hy=new Set(["aria-hidden","className","clipRule","d","fill","fillRule","height","role","stroke","strokeLinecap","strokeLinejoin","strokeWidth","style","viewBox","width","xmlns"]);function $n(e,t={}){let n=we(e,{extensions:$y}).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=>qy(e,r)).filter(r=>(t.minJsxTokens===void 0||r.jsxTokens.size>=t.minJsxTokens)&&(t.minBehaviorTokens===void 0||r.behaviorTokens.size>=t.minBehaviorTokens))}function qy(e,t){let n=t.replace(/\\/g,"/"),i=Uy(n);if(!i)return[];let r=le(e,n);if(!r)return[];let o=Pe(e,n).length;return Wy(r.rootNode,i).filter(a=>a.kind==="hook"||tu(a.bodyNode)).map(a=>{let c=Qy(a.bodyNode),l=tS(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:ht(c.componentNames),nativeTags:ht(c.nativeTags),propNames:ht(c.propNames),eventNames:ht(c.eventNames),hookNames:ht(l.hookNames),requestNames:ht(l.requestNames),stateNames:ht(l.stateNames),effectNames:ht(l.effectNames),handlerNames:ht(l.handlerNames)}})}function Uy(e){let t=Fy(e).toLowerCase();return t!==".tsx"&&t!==".jsx"?null:W(e)}function Wy(e,t){let n=[],i=new Set,r=o=>{let s=Gy(o);if(s&&!Ky(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 Gy(e){if(e.type==="function_declaration"){let o=eu(e);return!o||!Xl(o)?null:{name:o,kind:Yl(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=Si(t);if(!i||!n||!Xl(i))return null;let r=zy(n);return r?{name:i,kind:Yl(i),node:e,bodyNode:r}:null}function Xl(e){return/^[A-Z]/.test(e)||/^use[A-Z0-9_]/.test(e)}function Yl(e){return/^use[A-Z0-9_]/.test(e)?"hook":"component"}function zy(e){if(e.type==="arrow_function"||e.type==="function_expression")return e;if(e.type!=="call_expression")return null;let t=Jy(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 Ky(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 eu(e){return Si(e.childForFieldName("name")??e.namedChild(0))}function Jy(e){let t=e.childForFieldName("function")??e.namedChild(0);return t?t.text.split(".").pop()??t.text:null}function tu(e){return e.type.startsWith("jsx_")?!0:e.namedChildren.some(tu)}function Qy(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"?Xy(i,t):i.type==="jsx_expression"?Yy(i,t):i.type==="jsx_fragment"&&t.tokens.add("jsx:fragment");for(let r of i.namedChildren)n(r)};return n(e),t}function Xy(e,t){let n=Zy(e),i=!1;if(n){let r=Zl(n);i=sS(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=eS(r);if(!o)continue;let s=Zl(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 Hy.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 Yy(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 aS(n))Vy.has(i)||t.tokens.add(`binding:${i}`)}function Zy(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 eS(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 tS(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=En(r,t);o&&nS(o.calleeLeaf,n)}else if(r.type==="variable_declarator")rS(r,n);else if(r.type==="function_declaration"){let o=eu(r);o&&nu(o,n)}for(let o of r.namedChildren)i(o)};return i(e),n}function nS(e,t){/^use[A-Z0-9_]/.test(e)&&(t.hookNames.add(e),!Ql.has(e)&&!Oy.has(e)&&t.tokens.add(`hook:${e}`)),Ql.has(e)&&t.tokens.add(`react-hook:${e}`),Ay.has(e)&&(t.effectNames.add(e),t.tokens.add(`effect:${e}`)),My.has(e)&&t.tokens.add(`state-hook:${e}`),iS(e)&&(t.requestNames.add(e),t.tokens.add(`request:${e}`))}function iS(e){if(jy.has(e))return!0;let t=/^use([A-Z0-9_].*)$/.exec(e)?.[1];return t?/(Query|Mutation|Fetch|Resource)$/.test(t):!1}function rS(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=>Si(a)),s=Si(o);s&&(t.stateNames.add(s),t.tokens.add(`state:${s}`))}let r=Si(n);r&&nu(r,t)}function nu(e,t){let n=oS(e);!n||!By.has(n)||(t.handlerNames.add(e),t.tokens.add(`handler:${e}`),t.tokens.add(`handler-verb:${n}`))}function oS(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 sS(e){return/^[A-Z]/.test(e)||e.includes(".")}function Zl(e){return e.replace(/^this\./,"").replace(/\$/g,".")}function Si(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 aS(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 ht(e){return[...e].sort()}function Gt(e,t,n={}){let i=ie(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 cS={"/":"namespace","#":"type",".":"term","[":"type-param",":":"meta","!":"macro"};function ue(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=lS(r);return{scheme:n,manager:i,packageName:o,version:s,descriptors:c,raw:e}}function et(e){let t=ue(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 lS(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||iu(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&&!iu(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=cS[r];o&&t.push({name:i,suffix:o}),n+=1}}return t}function iu(e){return e==="/"||e==="#"||e==="."||e==="("||e==="["||e===":"||e==="!"}function y(e){let t=ue(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=uS(r);o&&i.push(o)}return i.join(":")}function uS(e){let t=e.suffix==="namespace"?dS(e.name):e.name;return t?e.suffix==="method"?`${t}()`:t:""}function dS(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 F(e){let t=ue(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 X(e){let t=ue(e);if("kind"in t&&t.kind==="local")return null;let n=t;return n.descriptors[n.descriptors.length-1]?.suffix??null}function be(e){return e.endsWith("().")||X(e)==="method"}function re(e){let t=X(e);return t==="method"||t==="term"}function Pt(e){return X(e)==="namespace"}var mS=/^rust-analyzer\b.*[\s/]impl#\[[^\]]+\]\[[^\]]+\]/;function kr(e){return mS.test(e)}var pS=new Set(["test","tests","_tests"]);function An(e){let t=ue(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&&pS.has(i.name))return!0}return!1}function ru(e,t){let n=ue(e),i=ue(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 ou(e,t){let n=ue(e),i=ue(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 Mn(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
31
34
  FROM global_symbols gs
32
35
  JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
33
36
  JOIN documents d ON der.document_id = d.id
34
37
  WHERE ${t.where}
35
38
  ${e.pathExclusionsFor("d")}
36
- ${Wa(t.orderBy)}
37
- ${Ua(t.limit)}`,...t.params??[])}function on(e,t){return e.all(`SELECT
39
+ ${au(t.orderBy)}
40
+ ${cu(t.limit)}`,...t.params??[])}function On(e,t){return e.all(`SELECT
38
41
  gs.id,
39
42
  gs.symbol,
40
43
  c.document_id,
@@ -51,8 +54,8 @@ import{program as ji}from"commander";import{realpathSync as Fd}from"fs";import{f
51
54
  AND ${t.where}
52
55
  ${e.pathExclusionsFor("d")}
53
56
  GROUP BY gs.id, gs.symbol, c.document_id, d.relative_path, gs.display_name, gs.documentation
54
- ${Wa(t.orderBy)}
55
- ${Ua(t.limit)}`,...t.params??[])}function Wa(e){return e?`ORDER BY ${e}`:""}function Ua(e){return typeof e=="number"?`LIMIT ${e}`:""}function It(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 vt(e){if(!e)return null;let t=Va(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(Va(r)??r).replace(/\n/g," ")}function Va(e){return/^```(?:\w+)?\s*\n?([\s\S]*?)\n?```/.exec(e.trimStart())?.[1]?.trim()||null}function Tp(e){if(Be(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 sn(e,t,n={}){let r=new Map;for(let o of t)e.length>0&&!Tp(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 Ap=H("file-definitions",{clearGroups:["definition-catalog"]});function W(e,t){return Ap.get(e,t,()=>{let n=sn(Mp(e,t),Op(e,t),{sort:!0});return jp(e,t,n.map($p))})}function Mp(e,t){return e.all(`SELECT
57
+ ${au(t.orderBy)}
58
+ ${cu(t.limit)}`,...t.params??[])}function au(e){return e?`ORDER BY ${e}`:""}function cu(e){return typeof e=="number"?`LIMIT ${e}`:""}function zt(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 Kt(e){if(!e)return null;let t=su(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(su(i)??i).replace(/\n/g," ")}function su(e){return/^```(?:\w+)?\s*\n?([\s\S]*?)\n?```/.exec(e.trimStart())?.[1]?.trim()||null}function fS(e){if(et(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 jn(e,t,n={}){let i=new Map;for(let o of t)e.length>0&&!fS(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 gS=U("file-definitions",{clearGroups:["definition-catalog"]}),lu=new WeakMap;function G(e,t){return gS.get(e,t,()=>{let n=jn(hS(e,t),bS(e,t),{sort:!0});return SS(e,t,n.map(yS))})}function hS(e,t){return e.all(`SELECT
56
59
  gs.id,
57
60
  gs.symbol,
58
61
  der.document_id,
@@ -68,7 +71,7 @@ import{program as ji}from"commander";import{realpathSync as Fd}from"fs";import{f
68
71
  JOIN documents d ON der.document_id = d.id
69
72
  WHERE d.relative_path = ?
70
73
  ${e.symbolNoiseFor("gs")}
71
- ORDER BY der.start_line, der.end_line`,t)}function Op(e,t){return e.all(`SELECT
74
+ ORDER BY der.start_line, der.end_line`,t)}function bS(e,t){return e.all(`SELECT
72
75
  gs.id,
73
76
  gs.symbol,
74
77
  c.document_id,
@@ -87,10 +90,10 @@ import{program as ji}from"commander";import{realpathSync as Fd}from"fs";import{f
87
90
  AND m.role = 1
88
91
  ${e.symbolNoiseFor("gs")}
89
92
  GROUP BY gs.id, gs.symbol, c.document_id, d.relative_path
90
- ORDER BY start_line, end_line`,t)}function $p(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:T(e.symbol),parentTypeName:Be(e.symbol),isFunctionLike:Y(e.symbol),isTypeLike:re(e.symbol)==="type",kind:e.kind??null,documentation:e.documentation??null,enclosingSymbol:e.enclosing_symbol??null}}function He(e,t={}){return Qi(e,t.scope)}function Qi(e,t){return M(e,{scope:t,includeIgnored:!1}).flatMap(n=>W(e,n)).filter(n=>!e.isIgnored(n.relativePath))}function Dr(e,t,n={}){if(t.length===0)return[];let r=t.flatMap(i=>W(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:It(vt(i.documentation)),relativePath:i.relativePath,enclosingSymbol:i.enclosingSymbol}))}function Ce(e,t){let n=null;for(let r of e)r.startLine>t||r.endLine<t||(!n||r.endLine-r.startLine<n.endLine-n.startLine)&&(n=r);return n}function Dt(e,t){let n=W(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 jp(e,t,n){let r=P(e,t),i=zi(e,t);return i?Up(n,i,r):r?Bp(n,r):n}function Bp(e,t){let n=t.split(/\r?\n/),r=Hp(e,n),i=qp(e,r),o=Vp(i,n);return Wp(e,o)}function Hp(e,t){let n=e.some(i=>Nr(i.symbol))?zp(t):null,r=new Map;for(let i of e)r.set(i.symbolId,Jp(t,n,i));return r}function qp(e,t){return e.filter(n=>Nr(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 Vp(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:Kp(t,i.definition,i.startLine,s)})}return n}function Wp(e,t){return e.map(n=>{let r=t.get(n.symbolId);return r?{...n,startLine:r.startLine,endLine:r.endLine}:n})}function Up(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(!Gp(i)||!i.leaf)return Ga(i,n);let o=r.get(i.leaf);if(!o||o.length===0)return Ga(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 Gp(e){return Nr(e.symbol)?!0:re(e.symbol)==="term"&&Be(e.symbol)===null}function Ga(e,t){if(!t||!e.leaf||re(e.symbol)!=="term"||Be(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 Jp(e,t,n){if(!Nr(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 zp(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 Kp(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=Qp(e[l]??"");for(let m of u)m==="{"?(s+=1,c=!0):m==="}"?s=Math.max(0,s-1):m==="("?a+=1:m===")"&&(a=Math.max(0,a-1));if(c&&s===0||!c&&a===0&&l>=o)return l}return o}function Qp(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 Nr(e){return e.includes("().")}function _r(e){let t=ne(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 mf}from"fs";import{basename as Ja,isAbsolute as df,join as pf}from"path";function A(e,t){let n=cn(e,t.trim());if(n)return n;let r=nf(e,t);if(r)return r;let i=Yp(e,t);return i||tf(e,t)}function Yp(e,t){let n=Xi(t),r=Yi(n);if(!r)return null;let i=`%${r.path}%`,o=r.leaf,a=Xp(e,i,o,n)[0];return a?Dt(e,a):null}function Xp(e,t,n,r){let i=sn([],[...Zp(e,t,n),...ef(e,t,n)]).filter(o=>!e.isIgnored(o.relative_path)).filter(o=>an(o,r)>1);return i.sort((o,s)=>an(s,r)-an(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 Zp(e,t,n){return rn(e,{where:"d.relative_path LIKE ? AND (gs.display_name = ? OR gs.symbol LIKE ?)",params:[t,n,`%/${n}.%`]})}function ef(e,t,n){return on(e,{where:"d.relative_path LIKE ? AND (gs.display_name = ? OR gs.symbol LIKE ?)",params:[t,n,`%/${n}.%`]})}function tf(e,t){let n=Xi(t),r=lf(t),i=af(e,r),o=uf(i,t,n);if(o&&!e.isIgnored(o.relative_path))return Dt(e,o);let s=null;for(let a of i){if(e.isIgnored(a.relative_path))continue;let c=cf(a,t,n,r);c<=0||(!s||c>s.score)&&(s={row:a,score:c})}return s?Dt(e,s.row):null}function nf(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=rf(e,r,s,a)??of(e,r,s,a);return c&&!e.isIgnored(c.relative_path)?Dt(e,c):null}function rf(e,t,n,r){return rn(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 of(e,t,n,r){return on(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 cn(e,t){let r=rn(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, der.start_line",limit:1})[0]??on(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, start_line",limit:1})[0];return!r||e.isIgnored(r.relative_path)?null:Dt(e,r)}function Lr(e,t){if("symbol"in t&&"relativePath"in t)return t;let n=sf(e,t.symbolId)[0];return n?Dt(e,n):null}function sf(e,t){let n=rn(e,{where:"gs.id = ?",params:[t],orderBy:"der.start_line, der.end_line"}),r=on(e,{where:"gs.id = ?",params:[t],orderBy:"start_line, end_line"});return sn(n,r)}function af(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(`
91
- AND `),o=rn(e,{where:i,params:r,limit:200}),s=on(e,{where:i,params:r,limit:200});return sn(o,s)}function cf(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,m=b(e.symbol),d=T(e.symbol),p=e.display_name??"",h=e.symbol.toLowerCase(),f=m.toLowerCase(),y=d.toLowerCase(),R=p.toLowerCase(),E=e.relative_path.toLowerCase(),S=/[/:.]/.test(n),x=Yi(n),D=x?.leaf.toLowerCase(),w=0;return(u===i||u===o)&&(w+=1150),(m===i||m===o)&&(w+=1100),p===s&&(w+=1180),d===s&&(w+=1160),(`${d}()`===i||`${d}()`===o)&&(w+=955),(h===a||h===c)&&(w+=1e3),(f===a||f===c)&&(w+=950),(E===a||E===c)&&(w+=925),(E.endsWith(`/${c}`)||E.endsWith(`/${a}`))&&(w+=875),R===l&&(w+=850),y===l&&(w+=825),(`${y}()`===a||`${y}()`===c)&&(w+=820),(f.endsWith(`:${c}`)||f.endsWith(`:${l}`)||f.endsWith(`:${l}()`))&&(w+=800),h.includes(c)&&(w+=120),f.includes(c)&&(w+=140),E.includes(c)&&(w+=140),R.includes(c)&&(w+=110),r.every($=>{let F=$.toLowerCase();return h.includes(F)||f.includes(F)||E.includes(F)||R.includes(F)})&&(w+=100+r.length*15),x&&E.includes(x.path.toLowerCase())&&(w+=360,D&&(y===D||`${y}()`===D||`${y}()`==`${D}()`)&&(w+=700),ae(e.symbol)&&(w+=180)),Y(e.symbol)&&y===l&&(w+=60),!S&&ct(e.symbol)&&(w-=160),w-=Math.min(50,Math.max(0,e.end_line-e.start_line)),w}function Yi(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 Xi(e){return e.trim().replace(/\(\)$/,"").replace(/\(.*$/,"")}function lf(e){let t=Xi(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 uf(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||an(o,n)>1||o.relative_path===r});return i.length===0?null:(i.sort((o,s)=>an(s,n)-an(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 an(e,t){let n=Yi(t);if(!n)return 0;let r=e.relative_path.toLowerCase(),i=T(e.symbol).toLowerCase(),o=n.path.toLowerCase(),s=n.leaf.toLowerCase();return r.includes(o)?i!==s?1:ae(e.symbol)?Be(e.symbol)===null?5:4:Be(e.symbol)===null?3:2:0}function pe(e,t){let n=za(e,t,{allowMultiple:!1})[0]?.relativePath;return n||ff(e,t)}function ln(e,t){return za(e,t,{allowMultiple:!0}).map(n=>n.relativePath)}function ff(e,t){if(!t)return null;let n=t.replace(/\\/g,"/").replace(/^\.\//,""),r=df(n)&&n.startsWith(e.config.projectRoot)?n.slice(e.config.projectRoot.length).replace(/^\/+/,""):n,i=pf(e.config.projectRoot,r);return mf(i)?r:null}function za(e,t,n){let r=Ka(t);if(!r)return[];let i=M(e,{includeIgnored:!1}).map(a=>({relativePath:a,score:gf(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=A(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 gf(e,t){let n=Ka(e),r=Ja(n),i=Ja(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 Ka(e){return e.trim().replace(/\\/g,"/").replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"")}import{basename as vy}from"path";import{existsSync as wr}from"fs";import{basename as hf,dirname as lt,extname as Ke,join as ke,relative as Pn,resolve as Re}from"path";var yf=te("indexed-paths",{clearGroups:[]}),Nt=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs",".vue"],Er=[".py",".pyi"],ye=[".java",".scala",".kt",".kts"],kr=[".rs"],Pr=[".rb"],Fr=[".c",".h",".cc",".cpp",".cxx",".hpp",".hh",".hxx"],ut=[".cs",".vb"],Tr=[".dart"],_t=[".php"],bf=new Set(Nt),Zi=new Set(Er),Qa=new Set(ye),eo=new Set(kr),to=new Set(Pr),Ya=new Set(Fr),Xa=new Set(ut),no=new Set(Tr),Za=new Set(_t),Sf=[{extensions:Nt,lookup:bf},{extensions:Er,lookup:Zi},{extensions:ye,lookup:Qa},{extensions:kr,lookup:eo},{extensions:Pr,lookup:to},{extensions:Fr,lookup:Ya},{extensions:ut,lookup:Xa},{extensions:Tr,lookup:no},{extensions:_t,lookup:Za}];function mt(e,t){return t.has(Ke(e).toLowerCase())}function xf(e){return mt(e,Zi)}function Cf(e){return mt(e,Qa)}function Rf(e){return mt(e,eo)}function If(e){return mt(e,to)}function vf(e){return mt(e,Ya)}function Df(e){return mt(e,Xa)}function ec(e){return Ke(e).toLowerCase()===".vb"}function Nf(e){return mt(e,no)}function _f(e){return mt(e,Za)}function ro(e){let t=Ke(e).toLowerCase();for(let n of Sf)if(n.lookup.has(t))return n.extensions;return Nt}function Lf(e){return Cf(e)||Df(e)||_f(e)}function Fe(e,t,n){return xf(t)?un(e,t,n):Rf(t)?Qe(e,t,n):If(t)?Ar(e,t,n):vf(t)?Mr(e,t,n):Lf(t)?J(e,n.replace(/\\/g,"."),ro(t)):Nf(t)?Or(e,t,n):wf(e,t,n)}function wf(e,t,n){if(!n.startsWith(".")&&!n.startsWith("/"))return null;let r=lt(ke(e.config.projectRoot,t)),i=Re(r,n),o=Fn(e);for(let s of Tf(i)){let a=Pe(Pn(e.config.projectRoot,s));if(o.has(a)||wr(s))return a}return Pe(Pn(e.config.projectRoot,i))}function un(e,t,n){let r=Fn(e),i;if(n.startsWith(".")){let o=n.match(/^(\.+)(.*)$/);if(!o)return null;let s=o[1].length,a=o[2].replace(/^\./,""),c=lt(ke(e.config.projectRoot,t));for(let l=1;l<s;l++)c=lt(c);i=a?Re(c,a.replace(/\./g,"/")):c}else i=Re(e.config.projectRoot,n.replace(/\./g,"/"));for(let o of Ef(i)){let s=Pe(Pn(e.config.projectRoot,o));if(r.has(s)||wr(o))return s}return null}function Qe(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=lt(ke(e.config.projectRoot,t)),o;return r.startsWith("crate::")?o=Re(e.config.projectRoot,"src",r.slice(7).replace(/::/g,"/")):r.startsWith("self::")?o=Re(i,r.slice(6).replace(/::/g,"/")):o=Re(lt(i),r.slice(7).replace(/::/g,"/")),io(e,kf(o))}function Ar(e,t,n){let r=lt(ke(e.config.projectRoot,t)),i=Re(r,n);return io(e,Pf(i))}function Mr(e,t,n){let r=lt(ke(e.config.projectRoot,t)),i=[Re(r,n),Re(e.config.projectRoot,n),Re(e.config.projectRoot,"include",n),Re(e.config.projectRoot,"src",n)];return io(e,i)}function J(e,t,n){let r=Fn(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(m=>m.endsWith(l));if(u)return u}for(let c of n){let l=[...r].find(u=>hf(u)===`${s}${c}`);if(l)return l}let a=[...r].filter(c=>n.includes(Ke(c).toLowerCase())).filter(c=>c.includes(`/${o}/`)||c.includes(`/${s}/`)).sort((c,l)=>c.localeCompare(l));return a.length===1?a[0]:null}function Or(e,t,n){let r=Fn(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=Pe(c.startsWith("lib/")?c:`lib/${c}`);return r.has(l)?l:null}let i=lt(ke(e.config.projectRoot,t)),o=Re(i,n);for(let s of Ff(o)){let a=Pe(Pn(e.config.projectRoot,s));if(r.has(a)||wr(s))return a}return null}function Ef(e){let t=Ke(e);return Zi.has(t)?[e]:[`${e}.py`,`${e}.pyi`,ke(e,"__init__.py"),ke(e,"__init__.pyi")]}function io(e,t){let n=Fn(e);for(let r of t){let i=Pe(Pn(e.config.projectRoot,r));if(n.has(i)||wr(r))return i}return null}function kf(e){let t=Ke(e);return eo.has(t)?[e]:[`${e}.rs`,ke(e,"mod.rs")]}function Pf(e){let t=Ke(e);return to.has(t)?[e]:[`${e}.rb`,ke(e,"index.rb")]}function Ff(e){let t=Ke(e);return no.has(t)?[e]:[`${e}.dart`,e]}function Tf(e){let t=Ke(e),n=new Set;if(t){n.add(e);for(let r of Nt)n.add(e.slice(0,-t.length)+r)}else for(let r of Nt)n.add(`${e}${r}`),n.add(ke(e,`index${r}`));return[...n]}function Fn(e){return yf.get(e,()=>new Set(M(e,{includeIgnored:!1}).map(Pe)))}function Pe(e){return e.replace(/\\/g,"/")}import{basename as nc}from"path";function Lt(e){return e.replace(/'''[\s\S]*?'''/g,dt).replace(/"""[\s\S]*?"""/g,dt).replace(/#.*$/gm,dt).replace(/\/\/.*$/gm,dt).replace(/\/\*[\s\S]*?\*\//g,dt).replace(/`(?:\\[\s\S]|[^`])*`/g,dt).replace(/'(?:\\.|[^'\\\r\n])*'/g,dt).replace(/"(?:\\.|[^"\\\r\n])*"/g,dt)}function dt(e){return e.replace(/[^\r\n]/g," ")}var zw=Zt("stripped-lines",{clearGroups:["whole-project","source-file"]});at({name:"stripped-source-singleton",groups:["whole-project","source-file"],clearAll:()=>{$r=null,Tn=""},clearFile:()=>{$r=null,Tn=""}});var $r=null,Tn="";function Af(e){return $r===e||($r=e,Tn=Lt(e)),Tn}function pt(e,t,n){let r=Af(e);return`${r.slice(0,t)}${" ".repeat(n-t)}${r.slice(n)}`}function fe(e,t){return new RegExp(`\\b${tc(t)}\\b`,"m").test(e)}function mn(e,t){let n=new Set,r=new RegExp(`\\b${tc(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 tc(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function An(e){let t=0;for(let n of e)n==="("&&(t+=1),n===")"&&(t-=1);return t}var Mf=new Set(["identifier","type_identifier","property_identifier","shorthand_property_identifier","field_identifier"]);function ge(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 be(e,t){for(let n of e.namedChildren)if(n.type===t)return n;return null}function z(e,t){let n=new Set,r=(i,o)=>{let s=o||t.has(i.type);!s&&Mf.has(i.type)&&n.add(i.text);for(let a of i.children)r(a,s)};return r(e.rootNode,!1),n}function qe(e,t,n,r,i,o,s){return{importedName:i,localName:o,sourcePath:s??J(e,r,ro(t)),kind:"named",used:fe(n,o),usedMembers:[]}}function U(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 dn(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 wt(e,t){return{importedName:e,localName:null,sourcePath:t,kind:"side-effect",used:!0,usedMembers:[]}}function Et(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 Ie(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=pt(e,i.index,i.index+o.length);for(let a of n(i,s))r.push(a)}return r}function ve(e,t,n,r){let i=ue(e,t);if(i){let o=n(i);if(o)return o}return r()}function jr(e,t,n,r){let i=ue(e,t),o=B(t),s=o?n[o]:void 0;return i&&s?s(i):r()}function rc(e,t,n){return ve(e,t,r=>$f(e,t,r),()=>Of(e,t,n))}function Of(e,t,n){return Ie(n,/^[ \t]*#include\s+[<"]([^">]+)[">]\s*$/gm,(r,i)=>{let o=r[1]?.trim();if(!o)return[];let s=nc(o).replace(/\.[^.]+$/,"");return[dn(o,s,Mr(e,t,o),fe(i,s))]})}function $f(e,t,n){let r=z(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=nc(s).replace(/\.[^.]+$/,"");i.push(U(s,a,Mr(e,t,s),r))}return i}function ic(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=pt(n,i.index,i.index+a.length);r.push({importedName:o,localName:s,sourcePath:Or(e,t,o),kind:s?"namespace":"side-effect",used:s?fe(c,s):!0,usedMembers:s?mn(c,s):[]})}return r}function oc(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:Or(e,t,o)})}return r}function sc(e,t,n){return jr(e,t,{csharp:r=>Bf(e,t,r),vb:r=>jf(e,t,r)},()=>{let r=ec(t)?/^[ \t]*Imports\s+(.+?)\s*$/gm:/^[ \t]*using\s+(.+?)\s*;$/gm;return Ie(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,m=u.split(".").pop()??u,d=l?a?.trim()??m:m;return[qe(e,t,o,u,m,d,J(e,u,ut))]})})}function jf(e,t,n){let r=z(n,new Set(["imports_statement"])),i=[];for(let o of n.rootNode.descendantsOfType("imports_statement")){let s=o.namedChildren.filter(d=>d.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,m=c?.text??u;i.push(U(u,m,J(e,l,ut),r,c?"namespace":"named"))}return i}function Bf(e,t,n){let r=z(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,m=a?.text??u;i.push(U(u,m,J(e,l,ut),r,a?"namespace":"named"))}return i}var Hf=H("vue-non-script-identifiers",{clearGroups:["whole-project","source-file"]});function ac(e,t){return Hf.get(e,t,()=>{let n=new Set,r=P(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 oo(e,t,n){return ve(e,t,r=>Vf(e,t,r),()=>qf(e,t,n))}function qf(e,t,n){return eg(n).flatMap(r=>tg(e,t,r.clause,r.specifier,r.start,r.end,n))}function Vf(e,t,n){let r=Wf(e,t,n),i=[];for(let o of n.rootNode.descendantsOfType("import_statement"))i.push(...Uf(e,t,n,o,r));return i}function Wf(e,t,n){let r=z(n,new Set(["import_statement"]));if(xt(t))for(let i of ac(e,t))r.add(i);return r}function Uf(e,t,n,r,i){let o=Qf(r);if(!o)return[];let s=Fe(e,t,o),a=be(r,"import_clause");return a?Gf(n,a,s,i,Yf(r.text)):[wt("*",s)]}function Gf(e,t,n,r,i){let o=[];for(let s of t.namedChildren)if(s.type==="identifier")o.push(Jf(s.text,n,r,i));else if(s.type==="namespace_import"){let a=zf(e,s,n,r,i);a&&o.push(a)}else s.type==="named_imports"&&o.push(...Kf(s,n,r,i));return o}function Jf(e,t,n,r){return U("default",e,t,n,"default",{isTypeOnly:r})}function zf(e,t,n,r,i){let s=be(t,"identifier")?.text??"";if(!s)return null;let a=Zf(e,s);return Et("*",n,{localName:s,usedMembers:a,isTypeOnly:i,used:a.length>0||r.has(s)})}function Kf(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(U(c,l,t,n,"named",{isTypeOnly:r||Xf(o.text)}))}return i}function Qf(e){let t=be(e,"string");if(!t)return null;let n=be(t,"string_fragment");return n?n.text:null}function Yf(e){return/^\s*import\s+type\b/.test(e)}function Xf(e){return/^\s*type\b/.test(e.trim())}function Zf(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 eg(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 tg(e,t,n,r,i,o,s){let a=Fe(e,t,r),c=pt(s,i,o);return n?ng(n).map(u=>({...u,sourcePath:a})).map(u=>{if(u.kind==="namespace"){let m=mn(c,u.localName);return Et(u.importedName,u.sourcePath,{localName:u.localName,usedMembers:m,used:m.length>0||fe(c,u.localName),isTypeOnly:u.isTypeOnly})}return u.kind==="side-effect"?wt(u.importedName,u.sourcePath):dn(u.importedName,u.localName??"",u.sourcePath,u.localName?fe(c,u.localName):!1,u.kind,[],{isTypeOnly:u.isTypeOnly})}):[wt("*",a)]}function ng(e){let t=e.trim(),n=/^type\b/.test(t),r=t.replace(/^type\s+/,""),[i,o]=rg(r),s=[];return i&&s.push(...cc(i,n)),o&&s.push(...cc(o,n)),s}function cc(e,t){let n=e.trim();if(!n)return[];if(n.startsWith("{")){let r=n.slice(1,-1).trim();return r?ge(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 rg(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 so(e,t,n){let r=ue(e,t);return r?lg(e,t,r):ig(e,t,n)}function ig(e,t,n){return[...og(e,t,n),...sg(e,t,n),...ag(e,t,n)]}function og(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=ge(s).map(m=>cg(m.trim())).filter(m=>!!m),l=pn(n,o.index),u=pn(n,o.index+o[0].length-1);r.push({kind:"named",sourcePath:Fe(e,t,a),names:c,startLine:l,endLine:u})}return r}function sg(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=pn(n,o.index),c=pn(n,o.index+o[0].length-1);r.push({kind:"star-as",sourcePath:Fe(e,t,s),names:[],startLine:a,endLine:c})}return r}function ag(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=pn(n,o.index),c=pn(n,o.index+o[0].length-1);r.push({kind:"star",sourcePath:Fe(e,t,s),names:[],startLine:a,endLine:c})}return r}function cg(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 pn(e,t){let n=0;for(let r=0;r<t&&r<e.length;r++)e.charCodeAt(r)===10&&n++;return n}function lg(e,t,n){let r=[];for(let i of n.rootNode.descendantsOfType("export_statement")){let o=ug(e,t,i);if(o===void 0)continue;let s=i.startPosition.row,a=i.endPosition.row,c=mg(i,o,s,a);r.push(c)}return r}function ug(e,t,n){let r=be(n,"string");if(!r)return;let i=be(r,"string_fragment");if(i)return Fe(e,t,i.text)}function mg(e,t,n,r){let i=be(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 be(e,"namespace_export")?{kind:"star-as",sourcePath:t,names:[],startLine:n,endLine:r}:{kind:"star",sourcePath:t,names:[],startLine:n,endLine:r}}function lc(e,t,n){return jr(e,t,{java:r=>dg(e,t,r),kotlin:r=>pg(e,t,r),scala:r=>fg(e,t,r)},()=>Ie(n,/^[ \t]*import\s+(?:static\s+)?(.+?)\s*;?$/gm,(r,i)=>{let o=r[1]?.trim();return o?gg(e,t,o,i):[]}))}function dg(e,t,n){let r=z(n,new Set(["import_declaration"])),i=[];for(let o of n.rootNode.descendantsOfType("import_declaration")){let s=o.children.some(m=>m.type==="asterisk"),c=o.namedChildren.find(m=>m.type==="scoped_identifier")??o.namedChildren.find(m=>m.type==="identifier");if(!c)continue;let l=c.text;if(s){i.push(Et("*",J(e,l,ye)));continue}let u=l.split(".").pop()??l;i.push(U(u,u,J(e,l,ye),r))}return i}function pg(e,t,n){let r=z(n,new Set(["import_header","import_list"])),i=[];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){i.push(Et("*",J(e,s.text,ye)));continue}let l=s.text,u=l.split(".").pop()??l,d=c?.namedChild(0)?.text??u;i.push(U(u,d,J(e,l,ye),r))}return i}function fg(e,t,n){let r=z(n,new Set(["import_declaration"])),i=[];for(let o of n.rootNode.descendantsOfType("import_declaration")){let s=o.namedChildren.find(m=>m.type==="namespace_selectors"||m.type==="namespace_wildcard"),a=o.namedChildren.filter(m=>m!==s&&(m.type==="identifier"||m.type==="stable_identifier")),c=a.map(m=>m.text).join(".");if(!c)continue;if(s?.type==="namespace_wildcard"){i.push(Et("*",J(e,c,ye)));continue}if(s?.type==="namespace_selectors"){for(let m of s.namedChildren)if(m.type==="arrow_renamed_identifier"){let[d,p]=m.namedChildren;if(!d)continue;let h=d.text,f=p?.text??h;if(h==="_")continue;i.push(U(h,f,J(e,`${c}.${h}`,ye),r))}else if(m.type==="identifier"){let d=m.text;i.push(U(d,d,J(e,`${c}.${d}`,ye),r))}continue}let l=a[a.length-1]?.text??c,u=a.slice(0,-1).map(m=>m.text).join(".")||c;i.push(U(l,l,J(e,u&&a.length>1?`${u}.${l}`:c,ye),r))}return i}function gg(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 ge(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 m=(l??u.split(".").pop()??u).trim(),d=u==="_"?i:`${i}.${u}`.replace(/\.\./g,".");return[qe(e,t,r,d,u,m)]})}return[qe(e,t,r,n,n.split(".").pop()??n,n.split(".").pop()??n)]}function mc(e,t,n){return ve(e,t,r=>hg(e,t,r),()=>Ie(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(r,i)=>{let o=r[1]?.trim();return o?ge(o).flatMap(s=>{let a=s.trim();if(!a)return[];let[c,l]=a.split(/\s+as\s+/i),u=c?.trim()??a,m=u.split("\\").pop()??u,d=(l??m).trim();return[qe(e,t,i,u,m,d,J(e,u.replace(/\\/g,"."),_t))]}):[]}))}function hg(e,t,n){let r=z(n,new Set(["namespace_use_declaration"])),i=[],o=(s,a,c)=>{i.push(U(a,c,J(e,s.replace(/\\/g,"."),_t),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:m,qualified:d}=uc(l,c);u&&o(d,u,m)}continue}for(let c of s.namedChildren){if(c.type!=="namespace_use_clause")continue;let{importedName:l,localName:u,qualified:m}=uc(c,"");l&&o(m,l,u)}}return i}function uc(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 pc(e,t,n){return ve(e,t,r=>yg(e,t,r),()=>Sg(n).flatMap(r=>Cg(e,t,r,n)))}function yg(e,t,n){let r=z(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=dc(s);if(!a)continue;let c=un(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=bg(s);if(a===null)continue;let c=un(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 m=dc(u);m&&i.push({importedName:m.qualifiedName,localName:m.localName,sourcePath:c,kind:"named",used:r.has(m.localName),usedMembers:[]})}}return i}function dc(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 bg(e){if(e.type==="dotted_name")return e.text;if(e.type==="relative_import"){let t=be(e,"import_prefix")?.text??"",n=be(e,"dotted_name")?.text??"";return`${t}${n}`}return null}function Sg(e){let t=e.split(`
92
- `),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=An(o);for(;i+1<t.length&&(u>0||c.trimEnd().endsWith("\\"));){i++;let d=t[i];c+=`
93
- ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,end:l})}return n}function xg(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 Cg(e,t,n,r){let i=pt(r,n.start,n.end),o=n.clause.replace(/\n/g," ").trim();if(n.kind==="import")return ge(o).flatMap(c=>{let l=c.trim().replace(/,$/,"");if(!l)return[];let[u,m]=l.split(/\s+as\s+/),d=u.trim(),p=(m??d.split(".")[0]??d).trim(),h=un(e,t,d),f=mn(i,p);return[{importedName:d,localName:p,sourcePath:h,kind:"namespace",used:fe(i,p)||f.length>0,usedMembers:f}]});let s=n.module?un(e,t,n.module):null,a=[];for(let c of ge(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,m]=l.split(/\s+as\s+/),d=(m??u).trim();a.push({importedName:u.trim(),localName:d,sourcePath:s,kind:"named",used:fe(i,d),usedMembers:[]})}return a}import{basename as Rg}from"path";function fc(e,t,n){return ve(e,t,r=>vg(e,t,r),()=>Ig(e,t,n))}function Ig(e,t,n){return Ie(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"?Ar(e,t,s):null;if(a){let c=gc(s);return[dn(c,c,a,fe(i,c))]}return[wt(s,a)]})}function vg(e,t,n){let r=z(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(p=>p.type==="argument_list")?.namedChild(0);if(!l||l.type!=="string")continue;let m=l.namedChildren.find(p=>p.type==="string_content")?.text;if(!m)continue;let d=a.text==="require_relative"?Ar(e,t,m):null;if(d){let p=gc(m);i.push(U(p,p,d,r))}else i.push(wt(m,d))}return i}function gc(e){return Rg(e).replace(/\.[^.]+$/,"").split("_").filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}function hc(e,t,n){return ve(e,t,r=>Dg(e,t,r),()=>Ie(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(r,i)=>{let o=r[1]?.trim();return o?Ng(e,t,o,i):[]}))}function Dg(e,t,n){let r=z(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 Mn(s,"")){if(!a.importedName||a.importedName==="*")continue;let c=Qe(e,t,a.qualifiedName)??Qe(e,t,a.qualifiedName.split("::").slice(0,-1).join("::"));i.push(U(a.importedName,a.localName,c,r))}}return i}function Mn(e,t){switch(e.type){case"identifier":case"super":case"self":case"crate":{let n=e.text;return[{qualifiedName:Br(t,n),importedName:n,localName:n}]}case"scoped_identifier":{let n=e.text,r=n.split("::").pop()??n;return[{qualifiedName:Br(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=Br(t,n.text),o=[];for(let s of r.namedChildren)o.push(...Mn(s,i));return o}case"use_list":{let n=[];for(let r of e.namedChildren)n.push(...Mn(r,t));return n}case"use_as_clause":{let n=e.namedChild(0),r=e.namedChild(1);if(!n||!r)return[];let i=Mn(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:Br(t,`${r}::*`),importedName:"*",localName:"*"}]}default:return[]}}function Br(e,t){return e?t?`${e}::${t}`:e:t}function Ng(e,t,n,r){let i=n.trim();if(i.includes("{")&&i.includes("}")){let u=i.slice(0,i.indexOf("{")).replace(/::$/,"").trim(),m=i.slice(i.indexOf("{")+1,i.lastIndexOf("}")).trim();return ge(m).flatMap(d=>{let p=d.trim();if(!p||p==="self")return[];let[h,f]=p.split(/\s+as\s+/),y=h?.trim();if(!y)return[];let R=(f??y.split("::").pop()??y).trim(),E=`${u}::${y}`.replace(/::::/g,"::");return[qe(e,t,r,E,y.split("::").pop()??y,R,Qe(e,t,u))]})}let[o,s]=i.split(/\s+as\s+/),a=o?.trim()??i,c=(s??a.split("::").pop()??a).trim(),l=Qe(e,t,a)??Qe(e,t,a.split("::").slice(0,-1).join("::"));return[qe(e,t,r,a,a.split("::").pop()??a,c,l)]}function yc(e,t,n){let r=ue(e,t);if(r)return _g(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(...wg(e,t,s))}return i}function _g(e,t,n){let r=[];for(let i of n.rootNode.descendantsOfType("use_declaration")){if(!Lg(i))continue;let o=i.namedChildren.find(s=>s.type!=="visibility_modifier");if(o)for(let s of Mn(o,""))s.importedName&&r.push(ao(e,t,s.qualifiedName))}return r}function Lg(e){for(let t of e.children)if(t.type==="visibility_modifier"&&t.text.startsWith("pub"))return!0;return!1}function wg(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 ge(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[ao(e,t,l)]})}return[ao(e,t,r)]}function ao(e,t,n){return{specifier:n,sourcePath:Qe(e,t,n)??Qe(e,t,n.split("::").slice(0,-1).join("::"))}}function kt({language:e,extensions:t,imports:n,parseImports:r}){return{language:e,extensions:t,capabilities:{imports:n},parseImports:r}}function bc(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 Eg={language:"javascript",extensions:Nt,capabilities:{imports:"ast-with-regex-fallback",reExports:"ast-with-regex-fallback"},parseImports:oo,parseReExports:so},kg=kt({language:"python",extensions:Er,imports:"ast-with-regex-fallback",parseImports:pc}),Pg=kt({language:"jvm",extensions:ye,imports:"ast-dispatch-with-regex-fallback",parseImports:lc}),Fg={language:"rust",extensions:kr,capabilities:{imports:"ast-with-regex-fallback",exports:"ast-with-regex-fallback"},parseImports:hc,parseExports:yc},Tg=kt({language:"ruby",extensions:Pr,imports:"ast-with-regex-fallback",parseImports:fc}),Ag=kt({language:"c/cpp",extensions:Fr,imports:"ast-with-regex-fallback",parseImports:rc}),Mg=kt({language:"dotnet",extensions:ut,imports:"ast-dispatch-with-regex-fallback",parseImports:sc}),Og={language:"dart",extensions:Tr,capabilities:{imports:"regex-only",exports:"regex-only"},parseImports:ic,parseExports:oc},$g=kt({language:"php",extensions:_t,imports:"ast-with-regex-fallback",parseImports:mc}),jg=[Eg,kg,Pg,Fg,Tg,Ag,Mg,Og,$g];function Hr(e){return bc(jg,e)}var co={clearGroups:["whole-project","source-file"]},Bg=H("source-imports",co),Hg=H("source-exports",co),qg=H("source-reexports",co);function Sc(e,t){let n=Pe(t);return qg.get(e,n,()=>{let r=Hr(n);if(!r?.parseReExports)return[];let i=P(e,n);return i?r.parseReExports(e,n,i):[]})}function ie(e,t){let n=Pe(t);return Bg.get(e,n,()=>{let r=Hr(n);if(!r)return[];let i=P(e,n);return i?r.parseImports(e,n,i):[]})}function lo(e,t){let n=Pe(t);return Hg.get(e,n,()=>{let r=Hr(n);if(!r?.parseExports)return[];let i=P(e,n);return i?r.parseExports(e,n,i):[]})}var Vg=H("file-dep-graph",{clearGroups:["whole-project"]});function X(e,t){return Vg.get(e,t??"",()=>{let n=new Map,r=new Set(M(e,{includeIgnored:!1})),i=(o,s)=>Ug(e,n,r,o,s);for(let o of Wg(e,t))i(o.from_file,o.to_file);for(let o of r)if(!(t&&!o.includes(t)))for(let s of ie(e,o))s.sourcePath&&i(o,s.sourcePath);return n})}function Wg(e,t){let n=t?`AND d1.relative_path LIKE '%${t}%'`:"";return e.all(`SELECT DISTINCT
93
+ ORDER BY start_line, end_line`,t)}function yS(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:F(e.symbol),parentTypeName:et(e.symbol),isFunctionLike:re(e.symbol),isTypeLike:X(e.symbol)==="type",kind:e.kind??null,documentation:e.documentation??null,enclosingSymbol:e.enclosing_symbol??null}}function tt(e,t={}){return xi(e,t.scope)}function xi(e,t){return M(e,{scope:t,includeIgnored:!1}).flatMap(n=>G(e,n)).filter(n=>!e.isIgnored(n.relativePath))}function Dr(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:zt(Kt(r.documentation)),relativePath:r.relativePath,enclosingSymbol:r.enclosingSymbol}))}function Ss(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 Me(e,t){let n=lu.get(e);return n||(n=Ss(e),lu.set(e,n)),n.get(t)??null}function Jt(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 SS(e,t,n){let i=A(e,t),r=gs(e,t);return r?wS(n,r,i):i?xS(n,i):n}function xS(e,t){let n=t.split(/\r?\n/),i=CS(e,n),r=vS(e,i),o=RS(r,n);return LS(e,o)}function CS(e,t){let n=e.some(r=>Ir(r.symbol))?IS(t):null,i=new Map;for(let r of e)i.set(r.symbolId,DS(t,n,r));return i}function vS(e,t){return e.filter(n=>Ir(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 RS(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:NS(t,r.definition,r.startLine,s)})}return n}function LS(e,t){return e.map(n=>{let i=t.get(n.symbolId);return i?{...n,startLine:i.startLine,endLine:i.endLine}:n})}function wS(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(!kS(r)||!r.leaf)return uu(r,n);let o=i.get(r.leaf);if(!o||o.length===0)return uu(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 kS(e){return Ir(e.symbol)?!0:X(e.symbol)==="term"&&et(e.symbol)===null}function uu(e,t){if(!t||!e.leaf||X(e.symbol)!=="term"||et(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 DS(e,t,n){if(!Ir(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 IS(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 NS(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=ES(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 ES(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 Ir(e){return e.includes("().")}function Nr(e){let t=ue(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 US}from"fs";import{basename as du,isAbsolute as WS,join as GS}from"path";function j(e,t){let n=Vn(e,t.trim());if(n)return n;let i=AS(e,t);if(i)return i;let r=PS(e,t);return r||$S(e,t)}function PS(e,t){let n=Cs(t),i=xs(n);if(!i)return null;let r=`%${i.path}%`,o=i.leaf,a=_S(e,r,o,n)[0];return a?Jt(e,a):null}function _S(e,t,n,i){let r=jn([],[...TS(e,t,n),...FS(e,t,n)]).filter(o=>!e.isIgnored(o.relative_path)).filter(o=>Bn(o,i)>1);return r.sort((o,s)=>Bn(s,i)-Bn(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 TS(e,t,n){return Mn(e,{where:"d.relative_path LIKE ? AND (gs.display_name = ? OR gs.symbol LIKE ?)",params:[t,n,`%/${n}.%`]})}function FS(e,t,n){return On(e,{where:"d.relative_path LIKE ? AND (gs.display_name = ? OR gs.symbol LIKE ?)",params:[t,n,`%/${n}.%`]})}function $S(e,t){let n=Cs(t),i=HS(t),r=BS(e,i),o=qS(r,t,n);if(o&&!e.isIgnored(o.relative_path))return Jt(e,o);let s=null;for(let a of r){if(e.isIgnored(a.relative_path))continue;let c=VS(a,t,n,i);c<=0||(!s||c>s.score)&&(s={row:a,score:c})}return s?Jt(e,s.row):null}function AS(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=MS(e,i,s,a)??OS(e,i,s,a);return c&&!e.isIgnored(c.relative_path)?Jt(e,c):null}function MS(e,t,n,i){return Mn(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 OS(e,t,n,i){return On(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 Vn(e,t){let i=Mn(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, der.start_line",limit:1})[0]??On(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, start_line",limit:1})[0];return!i||e.isIgnored(i.relative_path)?null:Jt(e,i)}function Er(e,t){if("symbol"in t&&"relativePath"in t)return t;let n=jS(e,t.symbolId)[0];return n?Jt(e,n):null}function jS(e,t){let n=Mn(e,{where:"gs.id = ?",params:[t],orderBy:"der.start_line, der.end_line"}),i=On(e,{where:"gs.id = ?",params:[t],orderBy:"start_line, end_line"});return jn(n,i)}function BS(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=Mn(e,{where:r,params:i,limit:200}),s=On(e,{where:r,params:i,limit:200});return jn(o,s)}function VS(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=F(e.symbol),p=e.display_name??"",h=e.symbol.toLowerCase(),g=d.toLowerCase(),b=m.toLowerCase(),S=p.toLowerCase(),L=e.relative_path.toLowerCase(),_=/[/:.]/.test(n),w=xs(n),C=w?.leaf.toLowerCase(),N=0;return(u===r||u===o)&&(N+=1150),(d===r||d===o)&&(N+=1100),p===s&&(N+=1180),m===s&&(N+=1160),(`${m}()`===r||`${m}()`===o)&&(N+=955),(h===a||h===c)&&(N+=1e3),(g===a||g===c)&&(N+=950),(L===a||L===c)&&(N+=925),(L.endsWith(`/${c}`)||L.endsWith(`/${a}`))&&(N+=875),S===l&&(N+=850),b===l&&(N+=825),(`${b}()`===a||`${b}()`===c)&&(N+=820),(g.endsWith(`:${c}`)||g.endsWith(`:${l}`)||g.endsWith(`:${l}()`))&&(N+=800),h.includes(c)&&(N+=120),g.includes(c)&&(N+=140),L.includes(c)&&(N+=140),S.includes(c)&&(N+=110),i.every(V=>{let B=V.toLowerCase();return h.includes(B)||g.includes(B)||L.includes(B)||S.includes(B)})&&(N+=100+i.length*15),w&&L.includes(w.path.toLowerCase())&&(N+=360,C&&(b===C||`${b}()`===C||`${b}()`==`${C}()`)&&(N+=700),be(e.symbol)&&(N+=180)),re(e.symbol)&&b===l&&(N+=60),!_&&Pt(e.symbol)&&(N-=160),N-=Math.min(50,Math.max(0,e.end_line-e.start_line)),N}function xs(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 Cs(e){return e.trim().replace(/\(\)$/,"").replace(/\(.*$/,"")}function HS(e){let t=Cs(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 qS(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||Bn(o,n)>1||o.relative_path===i});return r.length===0?null:(r.sort((o,s)=>Bn(s,n)-Bn(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 Bn(e,t){let n=xs(t);if(!n)return 0;let i=e.relative_path.toLowerCase(),r=F(e.symbol).toLowerCase(),o=n.path.toLowerCase(),s=n.leaf.toLowerCase();return i.includes(o)?r!==s?1:be(e.symbol)?et(e.symbol)===null?5:4:et(e.symbol)===null?3:2:0}function ke(e,t){let n=mu(e,t,{allowMultiple:!1})[0]?.relativePath;return n||zS(e,t)}function Hn(e,t){return mu(e,t,{allowMultiple:!0}).map(n=>n.relativePath)}function zS(e,t){if(!t)return null;let n=t.replace(/\\/g,"/").replace(/^\.\//,""),i=WS(n)&&n.startsWith(e.config.projectRoot)?n.slice(e.config.projectRoot.length).replace(/^\/+/,""):n,r=GS(e.config.projectRoot,i);return US(r)?i:null}function mu(e,t,n){let i=pu(t);if(!i)return[];let r=M(e,{includeIgnored:!1}).map(a=>({relativePath:a,score:KS(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=j(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 KS(e,t){let n=pu(e),i=du(n),r=du(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 pu(e){return e.trim().replace(/\\/g,"/").replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"")}import{basename as dR}from"path";import{existsSync as Pr}from"fs";import{basename as JS,dirname as _t,extname as bt,join as Ge,relative as Ci,resolve as Oe}from"path";var QS=ce("indexed-paths",{clearGroups:[]}),Qt=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs",".vue"],_r=[".py",".pyi"],_e=[".java",".scala",".kt",".kts"],Tr=[".rs"],Fr=[".rb"],$r=[".c",".h",".cc",".cpp",".cxx",".hpp",".hh",".hxx"],Tt=[".cs",".vb"],Ar=[".dart"],Xt=[".php"],XS=new Set(Qt),vs=new Set(_r),fu=new Set(_e),Rs=new Set(Tr),Ls=new Set(Fr),gu=new Set($r),hu=new Set(Tt),ws=new Set(Ar),bu=new Set(Xt),YS=[{extensions:Qt,lookup:XS},{extensions:_r,lookup:vs},{extensions:_e,lookup:fu},{extensions:Tr,lookup:Rs},{extensions:Fr,lookup:Ls},{extensions:$r,lookup:gu},{extensions:Tt,lookup:hu},{extensions:Ar,lookup:ws},{extensions:Xt,lookup:bu}];function Ft(e,t){return t.has(bt(e).toLowerCase())}function ZS(e){return Ft(e,vs)}function ex(e){return Ft(e,fu)}function tx(e){return Ft(e,Rs)}function nx(e){return Ft(e,Ls)}function ix(e){return Ft(e,gu)}function rx(e){return Ft(e,hu)}function yu(e){return bt(e).toLowerCase()===".vb"}function ox(e){return Ft(e,ws)}function sx(e){return Ft(e,bu)}function ks(e){let t=bt(e).toLowerCase();for(let n of YS)if(n.lookup.has(t))return n.extensions;return Qt}function ax(e){return ex(e)||rx(e)||sx(e)}function Ke(e,t,n){return ZS(t)?qn(e,t,n):tx(t)?yt(e,t,n):nx(t)?Mr(e,t,n):ix(t)?Or(e,t,n):ax(t)?Y(e,n.replace(/\\/g,"."),ks(t)):ox(t)?jr(e,t,n):cx(e,t,n)}function cx(e,t,n){if(!n.startsWith(".")&&!n.startsWith("/"))return null;let i=_t(Ge(e.config.projectRoot,t)),r=Oe(i,n),o=vi(e);for(let s of px(r)){let a=ze(Ci(e.config.projectRoot,s));if(o.has(a)||Pr(s))return a}return ze(Ci(e.config.projectRoot,r))}function qn(e,t,n){let i=vi(e),r;if(n.startsWith(".")){let o=n.match(/^(\.+)(.*)$/);if(!o)return null;let s=o[1].length,a=o[2].replace(/^\./,""),c=_t(Ge(e.config.projectRoot,t));for(let l=1;l<s;l++)c=_t(c);r=a?Oe(c,a.replace(/\./g,"/")):c}else r=Oe(e.config.projectRoot,n.replace(/\./g,"/"));for(let o of lx(r)){let s=ze(Ci(e.config.projectRoot,o));if(i.has(s)||Pr(o))return s}return null}function yt(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(Ge(e.config.projectRoot,t)),o;return i.startsWith("crate::")?o=Oe(e.config.projectRoot,"src",i.slice(7).replace(/::/g,"/")):i.startsWith("self::")?o=Oe(r,i.slice(6).replace(/::/g,"/")):o=Oe(_t(r),i.slice(7).replace(/::/g,"/")),Ds(e,ux(o))}function Mr(e,t,n){let i=_t(Ge(e.config.projectRoot,t)),r=Oe(i,n);return Ds(e,dx(r))}function Or(e,t,n){let i=_t(Ge(e.config.projectRoot,t)),r=[Oe(i,n),Oe(e.config.projectRoot,n),Oe(e.config.projectRoot,"include",n),Oe(e.config.projectRoot,"src",n)];return Ds(e,r)}function Y(e,t,n){let i=vi(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=>JS(u)===`${s}${c}`);if(l)return l}let a=[...i].filter(c=>n.includes(bt(c).toLowerCase())).filter(c=>c.includes(`/${o}/`)||c.includes(`/${s}/`)).sort((c,l)=>c.localeCompare(l));return a.length===1?a[0]:null}function jr(e,t,n){let i=vi(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=ze(c.startsWith("lib/")?c:`lib/${c}`);return i.has(l)?l:null}let r=_t(Ge(e.config.projectRoot,t)),o=Oe(r,n);for(let s of mx(o)){let a=ze(Ci(e.config.projectRoot,s));if(i.has(a)||Pr(s))return a}return null}function lx(e){let t=bt(e);return vs.has(t)?[e]:[`${e}.py`,`${e}.pyi`,Ge(e,"__init__.py"),Ge(e,"__init__.pyi")]}function Ds(e,t){let n=vi(e);for(let i of t){let r=ze(Ci(e.config.projectRoot,i));if(n.has(r)||Pr(i))return r}return null}function ux(e){let t=bt(e);return Rs.has(t)?[e]:[`${e}.rs`,Ge(e,"mod.rs")]}function dx(e){let t=bt(e);return Ls.has(t)?[e]:[`${e}.rb`,Ge(e,"index.rb")]}function mx(e){let t=bt(e);return ws.has(t)?[e]:[`${e}.dart`,e]}function px(e){let t=bt(e),n=new Set;if(t){n.add(e);for(let i of Qt)n.add(e.slice(0,-t.length)+i)}else for(let i of Qt)n.add(`${e}${i}`),n.add(Ge(e,`index${i}`));return[...n]}function vi(e){return QS.get(e,()=>new Set(M(e,{includeIgnored:!1}).map(ze)))}function ze(e){return e.replace(/\\/g,"/")}import{basename as xu}from"path";function Yt(e){return e.replace(/'''[\s\S]*?'''/g,$t).replace(/"""[\s\S]*?"""/g,$t).replace(/#.*$/gm,$t).replace(/\/\/.*$/gm,$t).replace(/\/\*[\s\S]*?\*\//g,$t).replace(/`(?:\\[\s\S]|[^`])*`/g,$t).replace(/'(?:\\.|[^'\\\r\n])*'/g,$t).replace(/"(?:\\.|[^"\\\r\n])*"/g,$t)}function $t(e){return e.replace(/[^\r\n]/g," ")}var bj=qt("stripped-lines",{clearGroups:["whole-project","source-file"]});Et({name:"stripped-source-singleton",groups:["whole-project","source-file"],clearAll:()=>{Br=null,Ri=""},clearFile:()=>{Br=null,Ri=""}});var Br=null,Ri="";function fx(e){return Br===e||(Br=e,Ri=Yt(e)),Ri}function At(e,t,n){let i=fx(e);return`${i.slice(0,t)}${" ".repeat(n-t)}${i.slice(n)}`}function De(e,t){return new RegExp(`\\b${Su(t)}\\b`,"m").test(e)}function Un(e,t){let n=new Set,i=new RegExp(`\\b${Su(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 Su(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Li(e){let t=0;for(let n of e)n==="("&&(t+=1),n===")"&&(t-=1);return t}var gx=new Set(["identifier","type_identifier","property_identifier","shorthand_property_identifier","field_identifier"]);function Ie(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 Te(e,t){for(let n of e.namedChildren)if(n.type===t)return n;return null}function Z(e,t){let n=new Set,i=(r,o)=>{let s=o||t.has(r.type);!s&&gx.has(r.type)&&n.add(r.text);for(let a of r.children)i(a,s)};return i(e.rootNode,!1),n}function nt(e,t,n,i,r,o,s){return{importedName:r,localName:o,sourcePath:s??Y(e,i,ks(t)),kind:"named",used:De(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 Wn(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 Zt(e,t){return{importedName:e,localName:null,sourcePath:t,kind:"side-effect",used:!0,usedMembers:[]}}function en(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 je(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=At(e,r.index,r.index+o.length);for(let a of n(r,s))i.push(a)}return i}function Be(e,t,n,i){let r=le(e,t);if(r){let o=n(r);if(o)return o}return i()}function Vr(e,t,n,i){let r=le(e,t),o=W(t),s=o?n[o]:void 0;return r&&s?s(r):i()}function Cu(e,t,n){return Be(e,t,i=>bx(e,t,i),()=>hx(e,t,n))}function hx(e,t,n){return je(n,/^[ \t]*#include\s+[<"]([^">]+)[">]\s*$/gm,(i,r)=>{let o=i[1]?.trim();if(!o)return[];let s=xu(o).replace(/\.[^.]+$/,"");return[Wn(o,s,Or(e,t,o),De(r,s))]})}function bx(e,t,n){let i=Z(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=xu(s).replace(/\.[^.]+$/,"");r.push(J(s,a,Or(e,t,s),i))}return r}function vu(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=At(n,r.index,r.index+a.length);i.push({importedName:o,localName:s,sourcePath:jr(e,t,o),kind:s?"namespace":"side-effect",used:s?De(c,s):!0,usedMembers:s?Un(c,s):[]})}return i}function Ru(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:jr(e,t,o)})}return i}function Lu(e,t,n){return Vr(e,t,{csharp:i=>Sx(e,t,i),vb:i=>yx(e,t,i)},()=>{let i=yu(t)?/^[ \t]*Imports\s+(.+?)\s*$/gm:/^[ \t]*using\s+(.+?)\s*;$/gm;return je(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[nt(e,t,o,u,d,m,Y(e,u,Tt))]})})}function yx(e,t,n){let i=Z(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,Y(e,l,Tt),i,c?"namespace":"named"))}return r}function Sx(e,t,n){let i=Z(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,Y(e,l,Tt),i,a?"namespace":"named"))}return r}var xx=U("vue-non-script-identifiers",{clearGroups:["whole-project","source-file"]});function wu(e,t){return xx.get(e,t,()=>{let n=new Set,i=A(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 Is(e,t,n){return Be(e,t,i=>vx(e,t,i),()=>Cx(e,t,n))}function Cx(e,t,n){return Tx(n).flatMap(i=>Fx(e,t,i.clause,i.specifier,i.start,i.end,n))}function vx(e,t,n){let i=Rx(e,t,n),r=[];for(let o of n.rootNode.descendantsOfType("import_statement"))r.push(...Lx(e,t,n,o,i));return r}function Rx(e,t,n){let i=Z(n,new Set(["import_statement"]));if(gt(t))for(let r of wu(e,t))i.add(r);return i}function Lx(e,t,n,i,r){let o=Nx(i);if(!o)return[];let s=Ke(e,t,o),a=Te(i,"import_clause");return a?wx(n,a,s,r,Ex(i.text)):[Zt("*",s)]}function wx(e,t,n,i,r){let o=[];for(let s of t.namedChildren)if(s.type==="identifier")o.push(kx(s.text,n,i,r));else if(s.type==="namespace_import"){let a=Dx(e,s,n,i,r);a&&o.push(a)}else s.type==="named_imports"&&o.push(...Ix(s,n,i,r));return o}function kx(e,t,n,i){return J("default",e,t,n,"default",{isTypeOnly:i})}function Dx(e,t,n,i,r){let s=Te(t,"identifier")?.text??"";if(!s)return null;let a=_x(e,s);return en("*",n,{localName:s,usedMembers:a,isTypeOnly:r,used:a.length>0||i.has(s)})}function Ix(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||Px(o.text)}))}return r}function Nx(e){let t=Te(e,"string");if(!t)return null;let n=Te(t,"string_fragment");return n?n.text:null}function Ex(e){return/^\s*import\s+type\b/.test(e)}function Px(e){return/^\s*type\b/.test(e.trim())}function _x(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 Tx(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 Fx(e,t,n,i,r,o,s){let a=Ke(e,t,i),c=At(s,r,o);return n?$x(n).map(u=>({...u,sourcePath:a})).map(u=>{if(u.kind==="namespace"){let d=Un(c,u.localName);return en(u.importedName,u.sourcePath,{localName:u.localName,usedMembers:d,used:d.length>0||De(c,u.localName),isTypeOnly:u.isTypeOnly})}return u.kind==="side-effect"?Zt(u.importedName,u.sourcePath):Wn(u.importedName,u.localName??"",u.sourcePath,u.localName?De(c,u.localName):!1,u.kind,[],{isTypeOnly:u.isTypeOnly})}):[Zt("*",a)]}function $x(e){let t=e.trim(),n=/^type\b/.test(t),i=t.replace(/^type\s+/,""),[r,o]=Ax(i),s=[];return r&&s.push(...ku(r,n)),o&&s.push(...ku(o,n)),s}function ku(e,t){let n=e.trim();if(!n)return[];if(n.startsWith("{")){let i=n.slice(1,-1).trim();return i?Ie(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 Ax(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 Ns(e,t,n){let i=le(e,t);return i?Hx(e,t,i):Mx(e,t,n)}function Mx(e,t,n){return[...Ox(e,t,n),...jx(e,t,n),...Bx(e,t,n)]}function Ox(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=Ie(s).map(d=>Vx(d.trim())).filter(d=>!!d),l=Gn(n,o.index),u=Gn(n,o.index+o[0].length-1);i.push({kind:"named",sourcePath:Ke(e,t,a),names:c,startLine:l,endLine:u})}return i}function jx(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=Gn(n,o.index),c=Gn(n,o.index+o[0].length-1);i.push({kind:"star-as",sourcePath:Ke(e,t,s),names:[],startLine:a,endLine:c})}return i}function Bx(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=Gn(n,o.index),c=Gn(n,o.index+o[0].length-1);i.push({kind:"star",sourcePath:Ke(e,t,s),names:[],startLine:a,endLine:c})}return i}function Vx(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 Gn(e,t){let n=0;for(let i=0;i<t&&i<e.length;i++)e.charCodeAt(i)===10&&n++;return n}function Hx(e,t,n){let i=[];for(let r of n.rootNode.descendantsOfType("export_statement")){let o=qx(e,t,r);if(o===void 0)continue;let s=r.startPosition.row,a=r.endPosition.row,c=Ux(r,o,s,a);i.push(c)}return i}function qx(e,t,n){let i=Te(n,"string");if(!i)return;let r=Te(i,"string_fragment");if(r)return Ke(e,t,r.text)}function Ux(e,t,n,i){let r=Te(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 Te(e,"namespace_export")?{kind:"star-as",sourcePath:t,names:[],startLine:n,endLine:i}:{kind:"star",sourcePath:t,names:[],startLine:n,endLine:i}}function Du(e,t,n){return Vr(e,t,{java:i=>Wx(e,t,i),kotlin:i=>Gx(e,t,i),scala:i=>zx(e,t,i)},()=>je(n,/^[ \t]*import\s+(?:static\s+)?(.+?)\s*;?$/gm,(i,r)=>{let o=i[1]?.trim();return o?Kx(e,t,o,r):[]}))}function Wx(e,t,n){let i=Z(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(en("*",Y(e,l,_e)));continue}let u=l.split(".").pop()??l;r.push(J(u,u,Y(e,l,_e),i))}return r}function Gx(e,t,n){let i=Z(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(en("*",Y(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,Y(e,l,_e),i))}return r}function zx(e,t,n){let i=Z(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(en("*",Y(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,Y(e,`${c}.${h}`,_e),i))}else if(d.type==="identifier"){let m=d.text;r.push(J(m,m,Y(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,Y(e,u&&a.length>1?`${u}.${l}`:c,_e),i))}return r}function Kx(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 Ie(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[nt(e,t,i,m,u,d)]})}return[nt(e,t,i,n,n.split(".").pop()??n,n.split(".").pop()??n)]}function Nu(e,t,n){return Be(e,t,i=>Jx(e,t,i),()=>je(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(i,r)=>{let o=i[1]?.trim();return o?Ie(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[nt(e,t,r,u,d,m,Y(e,u.replace(/\\/g,"."),Xt))]}):[]}))}function Jx(e,t,n){let i=Z(n,new Set(["namespace_use_declaration"])),r=[],o=(s,a,c)=>{r.push(J(a,c,Y(e,s.replace(/\\/g,"."),Xt),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}=Iu(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}=Iu(c,"");l&&o(d,l,u)}}return r}function Iu(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 Pu(e,t,n){return Be(e,t,i=>Qx(e,t,i),()=>Yx(n).flatMap(i=>eC(e,t,i,n)))}function Qx(e,t,n){let i=Z(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=Eu(s);if(!a)continue;let c=qn(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=Xx(s);if(a===null)continue;let c=qn(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=Eu(u);d&&r.push({importedName:d.qualifiedName,localName:d.localName,sourcePath:c,kind:"named",used:i.has(d.localName),usedMembers:[]})}}return r}function Eu(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 Xx(e){if(e.type==="dotted_name")return e.text;if(e.type==="relative_import"){let t=Te(e,"import_prefix")?.text??"",n=Te(e,"dotted_name")?.text??"";return`${t}${n}`}return null}function Yx(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=Li(o);for(;r+1<t.length&&(u>0||c.trimEnd().endsWith("\\"));){r++;let m=t[r];c+=`
96
+ ${m}`,l+=1+m.length,u+=Li(m),i+=m.length+1}let d=Zx(c);d&&n.push({...d,start:a,end:l})}return n}function Zx(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 eC(e,t,n,i){let r=At(i,n.start,n.end),o=n.clause.replace(/\n/g," ").trim();if(n.kind==="import")return Ie(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=qn(e,t,m),g=Un(r,p);return[{importedName:m,localName:p,sourcePath:h,kind:"namespace",used:De(r,p)||g.length>0,usedMembers:g}]});let s=n.module?qn(e,t,n.module):null,a=[];for(let c of Ie(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:De(r,m),usedMembers:[]})}return a}import{basename as tC}from"path";function _u(e,t,n){return Be(e,t,i=>iC(e,t,i),()=>nC(e,t,n))}function nC(e,t,n){return je(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"?Mr(e,t,s):null;if(a){let c=Tu(s);return[Wn(c,c,a,De(r,c))]}return[Zt(s,a)]})}function iC(e,t,n){let i=Z(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"?Mr(e,t,d):null;if(m){let p=Tu(d);r.push(J(p,p,m,i))}else r.push(Zt(d,m))}return r}function Tu(e){return Lr(tC(e).replace(/\.[^.]+$/,""),/_/)}function Fu(e,t,n){return Be(e,t,i=>rC(e,t,i),()=>je(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(i,r)=>{let o=i[1]?.trim();return o?oC(e,t,o,r):[]}))}function rC(e,t,n){let i=Z(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 wi(s,"")){if(!a.importedName||a.importedName==="*")continue;let c=yt(e,t,a.qualifiedName)??yt(e,t,a.qualifiedName.split("::").slice(0,-1).join("::"));r.push(J(a.importedName,a.localName,c,i))}}return r}function wi(e,t){switch(e.type){case"identifier":case"super":case"self":case"crate":{let n=e.text;return[{qualifiedName:Hr(t,n),importedName:n,localName:n}]}case"scoped_identifier":{let n=e.text,i=n.split("::").pop()??n;return[{qualifiedName:Hr(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=Hr(t,n.text),o=[];for(let s of i.namedChildren)o.push(...wi(s,r));return o}case"use_list":{let n=[];for(let i of e.namedChildren)n.push(...wi(i,t));return n}case"use_as_clause":{let n=e.namedChild(0),i=e.namedChild(1);if(!n||!i)return[];let r=wi(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:Hr(t,`${i}::*`),importedName:"*",localName:"*"}]}default:return[]}}function Hr(e,t){return e?t?`${e}::${t}`:e:t}function oC(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 Ie(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(),L=`${u}::${b}`.replace(/::::/g,"::");return[nt(e,t,i,L,b.split("::").pop()??b,S,yt(e,t,u))]})}let[o,s]=r.split(/\s+as\s+/),a=o?.trim()??r,c=(s??a.split("::").pop()??a).trim(),l=yt(e,t,a)??yt(e,t,a.split("::").slice(0,-1).join("::"));return[nt(e,t,i,a,a.split("::").pop()??a,c,l)]}function $u(e,t,n){let i=le(e,t);if(i)return sC(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(...cC(e,t,s))}return r}function sC(e,t,n){let i=[];for(let r of n.rootNode.descendantsOfType("use_declaration")){if(!aC(r))continue;let o=r.namedChildren.find(s=>s.type!=="visibility_modifier");if(o)for(let s of wi(o,""))s.importedName&&i.push(Es(e,t,s.qualifiedName))}return i}function aC(e){for(let t of e.children)if(t.type==="visibility_modifier"&&t.text.startsWith("pub"))return!0;return!1}function cC(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 Ie(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[Es(e,t,l)]})}return[Es(e,t,i)]}function Es(e,t,n){return{specifier:n,sourcePath:yt(e,t,n)??yt(e,t,n.split("::").slice(0,-1).join("::"))}}function tn({language:e,extensions:t,imports:n,parseImports:i}){return{language:e,extensions:t,capabilities:{imports:n},parseImports:i}}function Au(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 lC={language:"javascript",extensions:Qt,capabilities:{imports:"ast-with-regex-fallback",reExports:"ast-with-regex-fallback"},parseImports:Is,parseReExports:Ns},uC=tn({language:"python",extensions:_r,imports:"ast-with-regex-fallback",parseImports:Pu}),dC=tn({language:"jvm",extensions:_e,imports:"ast-dispatch-with-regex-fallback",parseImports:Du}),mC={language:"rust",extensions:Tr,capabilities:{imports:"ast-with-regex-fallback",exports:"ast-with-regex-fallback"},parseImports:Fu,parseExports:$u},pC=tn({language:"ruby",extensions:Fr,imports:"ast-with-regex-fallback",parseImports:_u}),fC=tn({language:"c/cpp",extensions:$r,imports:"ast-with-regex-fallback",parseImports:Cu}),gC=tn({language:"dotnet",extensions:Tt,imports:"ast-dispatch-with-regex-fallback",parseImports:Lu}),hC={language:"dart",extensions:Ar,capabilities:{imports:"regex-only",exports:"regex-only"},parseImports:vu,parseExports:Ru},bC=tn({language:"php",extensions:Xt,imports:"ast-with-regex-fallback",parseImports:Nu}),yC=[lC,uC,dC,mC,pC,fC,gC,hC,bC];function qr(e){return Au(yC,e)}var Ps={clearGroups:["whole-project","source-file"]},SC=U("source-imports",Ps),xC=U("source-exports",Ps),CC=U("source-reexports",Ps);function ki(e,t){let n=ze(t);return CC.get(e,n,()=>{let i=qr(n);if(!i?.parseReExports)return[];let r=A(e,n);return r?i.parseReExports(e,n,r):[]})}function de(e,t){let n=ze(t);return SC.get(e,n,()=>{let i=qr(n);if(!i)return[];let r=A(e,n);return r?i.parseImports(e,n,r):[]})}function Ur(e,t){let n=ze(t);return xC.get(e,n,()=>{let i=qr(n);if(!i?.parseExports)return[];let r=A(e,n);return r?i.parseExports(e,n,r):[]})}var vC=U("file-dep-graph",{clearGroups:["whole-project"]});function ee(e,t){return vC.get(e,t??"",()=>{let n=new Map,i=new Set(M(e,{includeIgnored:!1})),r=(o,s)=>LC(e,n,i,o,s);for(let o of RC(e,t))r(o.from_file,o.to_file);for(let o of i)if(!(t&&!o.includes(t)))for(let s of de(e,o))s.sourcePath&&r(o,s.sourcePath);return n})}function RC(e,t){let n=t?`AND d1.relative_path LIKE '%${t}%'`:"";return e.all(`SELECT DISTINCT
94
97
  d1.relative_path AS from_file,
95
98
  d2.relative_path AS to_file
96
99
  FROM mentions m
@@ -108,11 +111,11 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
108
111
  WHERE d1.id != d2.id
109
112
  AND m.role != 1
110
113
  ${e.pathExclusionsFor("d1","d2")}
111
- ${n}`)}function Ug(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{readdirSync as Gg}from"fs";import{extname as xc,join as Jg}from"path";var zg=[".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"],Cc=[".vue"],Rc=new Set(zg.map(e=>e.toLowerCase())),Kg=[...Rc].sort().join(","),uo=new Set(["node_modules",".git","target","dist","build",".next",".nuxt",".cache",".turbo","out","coverage",".scipquery-cache","__pycache__",".venv","venv",".idea",".vscode"]);function Ve(e,t={}){let n=t.includeIndexed??!0,r=t.includeAuxiliary??!0,i=t.extensions?.map(c=>c.toLowerCase()),o=i?new Set(i):Rc,s=i?[...o].sort().join(","):Kg,a=`${n?"1":"0"}|${r?"1":"0"}|${s}`;return Qg.get(e,a,()=>{let c=new Set;if(n)for(let l of M(e,{includeIgnored:!1}))o.has(xc(l).toLowerCase())&&c.add(l);if(r)for(let l of Yg(e.config.projectRoot,o))e.isIgnored(l)||c.add(l);return[...c].sort()})}var Qg=H("source-files",{clearGroups:[]});function Yg(e,t){let n=new Set,r=i=>{let o=i?Jg(e,i):e,s;try{s=Gg(o,{withFileTypes:!0})}catch{return}for(let a of s)if(!uo.has(a.name)){if(a.isDirectory()){r(i?`${i}/${a.name}`:a.name);continue}t.has(xc(a.name).toLowerCase())&&n.add(i?`${i}/${a.name}`:a.name)}};return r(""),n}import{readFileSync as Xg}from"fs";import{join as Zg}from"path";var eh={files:new Set,pathPrefixes:[]},mo=/^(?:dist|build|lib|out|output|esm|cjs|umd)\//,th=/\.(?:d\.ts|d\.mts|d\.cts|ts|tsx|mts|cts|js|jsx|mjs|cjs)$/,nh=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"],rh=te("package-surface",{clearGroups:["whole-project"]});function ih(e){return rh.get(e,()=>oh(e.config.projectRoot))}function vc(e,t){let n=ih(e);return n.files.has(t)?!0:n.pathPrefixes.some(r=>t.startsWith(r))}function oh(e){let t=sh(e);if(!t)return eh;let n=new Set,r=[];for(let i of ah(t))ch(i,n,r);return{files:n,pathPrefixes:r}}function sh(e){try{let t=Xg(Zg(e,"package.json"),"utf-8"),n=JSON.parse(t);return n&&typeof n=="object"?n:null}catch{return null}}function ah(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 Dc(e.exports,t),t}function Dc(e,t){if(typeof e=="string"){t.push(e);return}if(!(!e||typeof e!="object"))for(let n of Object.values(e))Dc(n,t)}function ch(e,t,n){let r=e.replace(/\\/g,"/").replace(/^\.\//,"");if(r===""||r.startsWith(".."))return;let i=r.indexOf("*");if(i>=0){let s=r.slice(0,i);for(let a of Ic(s))a!==""&&n.push(a);return}let o=r.replace(th,"");for(let s of Ic(o)){s===o&&s===r&&t.add(r);for(let a of nh)t.add(s+a)}t.add(r)}function Ic(e){let t=[e];return mo.test(e)&&(t.push(e.replace(mo,"src/")),t.push(e.replace(mo,""))),t}function G(e){let t=fn(e);return mh(t)?"test":dh(t)?"worker":ph(t)?"entry":fh(t)?"barrel":"source"}function qr(e){return G(e)==="barrel"}function _c(e){return lh.get(e,()=>{let t=X(e),n=Ve(e).filter(o=>{let s=G(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),G(o)==="barrel"&&i.add(o);for(let s of t.get(o)??[])r.has(s)||n.push(s)}}return i})}var lh=te("live-barrels",{clearGroups:["whole-project"]});function po(e,t){return _c(e).has(fn(t))}function Lc(e){let t=_c(e);return Ve(e).filter(n=>qr(n)&&!t.has(n)&&!uh(e,n))}function uh(e,t){let n=fn(t),r=Q(e,n)?.callables;return r&&r.length>0?!0:(e.get(`SELECT COUNT(*) AS n
114
+ ${n}`)}function LC(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 Wr,readFileSync as wC,readdirSync as Ou}from"fs";import{join as Di}from"path";var kC={files:new Set,pathPrefixes:[]},_s=/^(?:dist|build|lib|out|output|esm|cjs|umd)\//,DC=/\.(?:d\.ts|d\.mts|d\.cts|ts|tsx|mts|cts|js|jsx|mjs|cjs)$/,ju=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"],IC=new Set([".git",".next",".turbo","build","coverage","dist","node_modules","out"]),NC=4,EC=ce("package-surface",{clearGroups:["whole-project"]});function PC(e){return EC.get(e,()=>_C(e.config.projectRoot))}function Kn(e,t){let n=PC(e);return n.files.has(t)?!0:n.pathPrefixes.some(i=>t.startsWith(i))}function _C(e){let t=new Set,n=[];for(let{manifest:i,packageRoot:r}of TC(e))for(let o of FC(i))$C(e,r,o,t,n);return t.size===0&&n.length===0?kC:{files:t,pathPrefixes:n}}function TC(e){let t=[],n=Vu(e,"");return n&&t.push({manifest:n,packageRoot:""}),Bu(e,"",t,0),t}function Bu(e,t,n,i){if(i>=NC)return;let r=Di(e,t);if(Wr(r))for(let o of Ou(r,{withFileTypes:!0})){if(!o.isDirectory()||IC.has(o.name))continue;let s=t?`${t}/${o.name}`:o.name,a=Vu(e,s);a&&n.push({manifest:a,packageRoot:s}),Bu(e,s,n,i+1)}}function Vu(e,t){try{let n=wC(Di(e,t,"package.json"),"utf-8"),i=JSON.parse(n);return i&&typeof i=="object"?i:null}catch{return null}}function FC(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 Hu(e.exports,t),t}function Hu(e,t){if(typeof e=="string"){t.push(e);return}if(!(!e||typeof e!="object"))for(let n of Object.values(e))Hu(n,t)}function $C(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 Mu(c))l!==""&&r.push(zn(t,l));return}let a=o.replace(DC,"");for(let c of Mu(a)){c===a&&c===o&&i.add(zn(t,o));for(let l of ju)AC(e,i,t,c+l)}i.add(zn(t,o))}function Mu(e){let t=[e];return _s.test(e)&&(t.push(e.replace(_s,"src/")),t.push(e.replace(_s,""))),t}function AC(e,t,n,i){let r=zn(n,i);if(t.add(r),!i.startsWith("src/")||Wr(Di(e,r)))return;let o=ju.find(u=>i.endsWith(u));if(!o)return;let s=i.slice(0,-o.length);MC(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 qu(e,n,c,`${l}${o}`))t.add(u)}function MC(e,t,n,i,r){let o=zn(n,`${i}/index${r}`);Wr(Di(e,o))&&t.add(o)}function qu(e,t,n,i){let r=Di(e,t,n);if(!Wr(r))return[];let o=[];for(let s of Ou(r,{withFileTypes:!0})){let a=`${n}/${s.name}`;s.isDirectory()?o.push(...qu(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=Jn(e);return YC(t)?"test":ZC(t)?"worker":ev(t)?"entry":tv(t)?"barrel":"source"}function Gr(e){return K(e)==="barrel"}function Wu(e){return OC.get(e,()=>{let t=ee(e),n=we(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 OC=ce("live-barrels",{clearGroups:["whole-project"]});function Ts(e,t){return Wu(e).has(Jn(t))}function Gu(e){let t=Wu(e);return we(e).filter(n=>Gr(n)&&!t.has(n)&&!jC(e,n))}function jC(e,t){let n=Jn(t),i=ie(e,n)?.callables;return i&&i.length>0?!0:(e.get(`SELECT COUNT(*) AS n
112
115
  FROM defn_enclosing_ranges der
113
116
  JOIN documents d ON d.id = der.document_id
114
117
  WHERE d.relative_path = ?
115
- AND der.end_line - der.start_line >= 2`,n)?.n??0)>0}function me(e,t){let n=G(t);return n==="entry"||n==="worker"||po(e,t)}function oe(e,t,n){let r=fn(n);if(vc(e,r))return!0;let i=e.config.entryRoots;return i?!!(i.files?.some(o=>fn(o)===r)||i.pathPrefixes?.some(o=>r.startsWith(fn(o)))||i.qualifiedVars?.some(o=>gh(t,o))||i.symbolPatterns?.some(o=>{try{return new RegExp(o).test(t)}catch{return!1}})):!1}function mh(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 dh(e){return/(?:^|\/)[^/]*worker\.(?:ts|tsx|js|mjs|cjs|rs|py|go)$/.test(e)}function ph(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 fh(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 fn(e){return e.replace(/\\/g,"/")}function gh(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(Nc(r)+"/")&&e.includes(Nc(i)+".")}function Nc(e){return/^[A-Za-z0-9_$+-]+$/.test(e)?e:"`"+e.replace(/`/g,"``")+"`"}function Vr(e,t,n,r={}){if(!n)return[];let i=P(e,t);return i?i.indexOf(n)===-1?[]:(Ye(e,t).get(n)??[]).filter(s=>!hh(s,r)):[]}function hh(e,t){return typeof t.excludeStartLine=="number"&&typeof t.excludeEndLine=="number"&&e>=t.excludeStartLine&&e<=t.excludeEndLine}var yh=H("file-identifiers",{clearGroups:["whole-project","source-file"]});function wc(e,t){let n=Q(e,t);return n?n.fileIdentifiers:yh.get(e,t,()=>new Set(Ye(e,t).keys()))}var bh=H("file-ident-lines",{clearGroups:["whole-project","source-file"]});function Ye(e,t){let n=Q(e,t);return n?n.identifierLineMap:bh.get(e,t,()=>xh(e,t))}var Sh=H("file-idents-by-line",{clearGroups:["whole-project","source-file"]});function Ec(e,t){let n=Q(e,t);return n?n.identifiersByLine:Sh.get(e,t,()=>{let r=Ye(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 xh(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=P(e,t);if(!i)return n;let o=Lt(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 kc(e,t){return fo(e,t,n=>{let r=n?`AND m.symbol_id IN (${n.map(()=>"?").join(",")})`:"";return e.all(`SELECT
118
+ AND der.end_line - der.start_line >= 2`,n)?.n??0)>0}function Re(e,t){let n=K(t);return n==="entry"||n==="worker"||Ts(e,t)}function te(e,t,n){let i=Jn(n);if(Kn(e,i)||WC(t,i))return!0;let r=e.config.entryRoots;return r?!!(r.files?.some(o=>Jn(o)===i)||r.pathPrefixes?.some(o=>i.startsWith(Jn(o)))||r.qualifiedVars?.some(o=>nv(t,o))||r.symbolPatterns?.some(o=>{try{return new RegExp(o).test(t)}catch{return!1}})):!1}var zu=new Set(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"]),BC=new Set(["default","generateMetadata","generateStaticParams"]),VC=new Set(["default","getStaticProps","getServerSideProps","getStaticPaths","config"]),HC=new Set(["default","loader","action","clientLoader","clientAction","headers","links","meta","shouldRevalidate","ErrorBoundary","HydrateFallback"]),qC=new Set(["load","actions","entries",...zu]),UC=new Set(["default"]);function WC(e,t){let n=F(e);return n===""?!1:GC(t)?zu.has(n):zC(t)?BC.has(n):KC(t)?VC.has(n):JC(t)?HC.has(n):QC(t)?qC.has(n):XC(t)?UC.has(n):!1}function GC(e){return/(?:^|\/)app(?:\/[^/]+)*\/route\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function zC(e){return/(?:^|\/)app(?:\/[^/]+)*\/(?:page|layout|template|loading|error|not-found|global-error|head|default)\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function KC(e){return/(?:^|\/)pages\/.+\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function JC(e){return/(?:^|\/)app\/routes\/.+\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function QC(e){return/(?:^|\/)src\/routes\/(?:.*\/)?\+(?:page|page\.server|layout|layout\.server|server)\.(?:ts|js)$/.test(e)}function XC(e){return/(?:^|\/)src\/(?:pages|views|routes)\/.+\.(?:ts|tsx|js|jsx|vue)$/.test(e)}function YC(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 ZC(e){return/(?:^|\/)[^/]*worker\.(?:ts|tsx|js|mjs|cjs|rs|py|go)$/.test(e)}function ev(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 tv(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 Jn(e){return e.replace(/\\/g,"/")}function nv(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(Uu(i)+"/")&&e.includes(Uu(r)+".")}function Uu(e){return/^[A-Za-z0-9_$+-]+$/.test(e)?e:"`"+e.replace(/`/g,"``")+"`"}function zr(e,t,n,i={}){if(!n)return[];let r=A(e,t);return r?r.indexOf(n)===-1?[]:(St(e,t).get(n)??[]).filter(s=>!iv(s,i)):[]}function iv(e,t){return typeof t.excludeStartLine=="number"&&typeof t.excludeEndLine=="number"&&e>=t.excludeStartLine&&e<=t.excludeEndLine}var rv=U("file-identifiers",{clearGroups:["whole-project","source-file"]});function Ku(e,t){let n=ie(e,t);return n?n.fileIdentifiers:rv.get(e,t,()=>new Set(St(e,t).keys()))}var ov=U("file-ident-lines",{clearGroups:["whole-project","source-file"]});function St(e,t){let n=ie(e,t);return n?n.identifierLineMap:ov.get(e,t,()=>av(e,t))}var sv=U("file-idents-by-line",{clearGroups:["whole-project","source-file"]});function Ju(e,t){let n=ie(e,t);return n?n.identifiersByLine:sv.get(e,t,()=>{let i=St(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 av(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=A(e,t);if(!r)return n;let o=Yt(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 Qu(e,t){return Fs(e,t,n=>{let i=n?`AND m.symbol_id IN (${n.map(()=>"?").join(",")})`:"";return e.all(`SELECT
116
119
  m.symbol_id,
117
120
  d.relative_path,
118
121
  COUNT(*) AS ref_count
@@ -120,23 +123,23 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
120
123
  JOIN chunks c ON m.chunk_id = c.id
121
124
  JOIN documents d ON c.document_id = d.id
122
125
  WHERE m.role != 1
123
- ${r}
126
+ ${i}
124
127
  ${e.pathExclusionsFor("d")}
125
- GROUP BY m.symbol_id, d.relative_path`,...n??[])})}function Pc(e,t){return fo(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
128
+ GROUP BY m.symbol_id, d.relative_path`,...n??[])})}function Xu(e,t){return Fs(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
126
129
  FROM mentions m
127
130
  JOIN chunks c ON m.chunk_id = c.id
128
131
  JOIN documents d ON c.document_id = d.id
129
132
  WHERE m.role != 1
130
- ${r}
131
- ${e.pathExclusionsFor("d")}`,...n??[])}).filter(n=>n.symbol_id!==null)}function Wr(e,t){return fo(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,
133
+ ${i}
134
+ ${e.pathExclusionsFor("d")}`,...n??[])}).filter(n=>n.symbol_id!==null)}function Kr(e,t){return Fs(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,
132
135
  c.start_line AS chunk_start, c.end_line AS chunk_end
133
136
  FROM mentions m
134
137
  JOIN chunks c ON m.chunk_id = c.id
135
138
  JOIN documents d ON c.document_id = d.id
136
139
  WHERE m.role != 1
137
- ${r}
140
+ ${i}
138
141
  ${e.pathExclusionsFor("d")}
139
- ORDER BY d.relative_path, c.start_line`,...n??[])})}function fo(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 Fc(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function ft(e,t){return Fc(e)===Fc(t)}function Ur(e,t){let n=Tc(e);return n?t.filter(r=>Tc(r.file)===n):t}function Gr(e,t,n,r){let i=n.find(o=>o.file===t);if(i)return i;if(r){let o=new Set(ie(e,t).map(s=>s.sourcePath).filter(s=>!!s));for(let s of n)for(let a of o)if(ft(a,s.file))return s;return null}return n.length===1?n[0]:null}function Tc(e){let t=B(e);return t?t==="typescript"||t==="tsx"||t==="javascript"?"javascript-family":t:null}var Ch=te("global-leaf-index",{clearGroups:["whole-project"]});function Pt(e){return Ch.get(e,()=>{let t=e.all(`SELECT gs.id, gs.symbol,
142
+ ORDER BY d.relative_path, c.start_line`,...n??[])})}function Fs(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 Yu(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function Mt(e,t){return Yu(e)===Yu(t)}function Jr(e,t){let n=Zu(e);return n?t.filter(i=>Zu(i.file)===n):t}function Qr(e,t,n,i){let r=n.find(o=>o.file===t);if(r)return r;if(i){let o=new Set(de(e,t).map(s=>s.sourcePath).filter(s=>!!s));for(let s of n)for(let a of o)if(Mt(a,s.file))return s;return null}return n.length===1?n[0]:null}function Zu(e){let t=W(e);return t?t==="typescript"||t==="tsx"||t==="javascript"?"javascript-family":t:null}var cv=ce("global-leaf-index",{clearGroups:["whole-project"]});function nn(e){return cv.get(e,()=>{let t=e.all(`SELECT gs.id, gs.symbol,
140
143
  COALESCE(der_doc.relative_path, mention_doc.relative_path) AS relative_path
141
144
  FROM global_symbols gs
142
145
  LEFT JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
@@ -150,68 +153,8 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
150
153
  GROUP BY m.symbol_id
151
154
  ) mention_doc ON mention_doc.symbol_id = gs.id
152
155
  WHERE 1 = 1
153
- ${e.symbolNoiseFor("gs")}`),n=new Map;for(let r of t){if(!r.relative_path||e.isIgnored(r.relative_path))continue;let i=T(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})}function Te(e,t,n){if(e.has(t))return e.get(t);let r=n();return e.set(t,r),r}import Ac from"path";function Rh(e,t){return e.getReferences().map(n=>{let r=n.getNode();return $c(r,t)})}function Ih(e){let t=e;return typeof t.findReferences=="function"?t.findReferences():[]}function Mc(e,t,n,r){let i=[];for(let o of Ih(e))for(let s of Rh(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 Jr(i)}function Oc(e,t,n,r){let i=[],o=n?.getStart();for(let s of e.getReferences()){let a=s.getNode();On(r,a.getSourceFile().getFilePath())===t&&(o!==void 0&&a.getStart()===o||i.push({location:$c(a,r),node:a}))}return i}function $c(e,t){let n=e.getSourceFile(),r=n.getLineAndColumnAtPos(e.getStart());return{file:On(t,n.getFilePath())??n.getBaseName(),line:r.line-1,column:r.column-1}}function jc(e,t,n){let r=e.getSourceFile(),i=gn(r,e),o=e.getText(),s=new RegExp(`\\b${vh(o)}\\b`,"g"),a=r.getFullText().split(`
154
- `),c=[];for(let l=0;l<a.length;l++){if(l===i)continue;let u=a[l]??"";s.lastIndex=0;let m;for(;(m=s.exec(u))!==null;)c.push({file:t,line:l,column:m.index})}return Jr(c.filter(l=>On(n,Ac.join(n,l.file))===t))}function go(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 gn(e,t){return e.getLineAndColumnAtPos(t.getStart()).line-1}function Jr(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 On(e,t){let n=Ac.relative(e||process.cwd(),t).replace(/\\/g,"/");return!n||n.startsWith("..")?null:n}function vh(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Bc(e,t,n,r){let i=Dh(t,r);return i.size===0?new Map:Nh(e,n,i)}function Dh(e,t){let n=new Map;for(let r of W(e,t)){let i=T(r.symbol)??r.leaf;if(!i)continue;let o=n.get(i);o||(o=[],n.set(i,o)),o.push(r)}return n}function Nh(e,t,n){let r=new Map,i=new Map;return t.forEachDescendant(o=>{for(let s of _h(e,o)){let a=n.get(s);if(!a)continue;let c=gn(t,o);for(let l of a){if(c<l.startLine-1||c>l.endLine+1)continue;let u=Math.abs(c-l.startLine),m=i.get(l.symbolId);m!==void 0&&m<=u||(i.set(l.symbolId,u),r.set(l.symbolId,o))}}}),r}function _h(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}function Hc(e,t,n,r){return e.all(`SELECT
155
- gs.id AS symbolId,
156
- gs.symbol,
157
- d.relative_path AS relativePath,
158
- COALESCE(der.start_line, c.start_line) AS startLine,
159
- COALESCE(der.end_line, c.end_line) AS endLine,
160
- COALESCE(gs.display_name, '') AS leaf,
161
- NULL AS parentTypeName,
162
- CASE WHEN gs.kind IN (6, 12, 13) OR gs.symbol LIKE '%().' THEN 1 ELSE 0 END AS isFunctionLike,
163
- CASE WHEN gs.kind IN (5, 8, 11) THEN 1 ELSE 0 END AS isTypeLike,
164
- gs.kind AS kind,
165
- gs.documentation AS documentation,
166
- gs.enclosing_symbol AS enclosingSymbol
167
- FROM global_symbols gs
168
- LEFT JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
169
- LEFT JOIN chunks c ON c.document_id = der.document_id
170
- JOIN documents d ON d.id = der.document_id
171
- WHERE d.relative_path = ?
172
- AND COALESCE(gs.display_name, gs.symbol) LIKE ?
173
- ORDER BY ABS(COALESCE(der.start_line, c.start_line) - ?)
174
- LIMIT 5`,t,`%${r}%`,n)[0]??null}function qc(e,t){let n=e.all(`SELECT
175
- d.id AS documentId,
176
- gs.id AS symbolId,
177
- gs.symbol,
178
- d.relative_path AS relativePath,
179
- der.start_line AS startLine,
180
- der.end_line AS endLine,
181
- COALESCE(gs.display_name, '') AS leaf,
182
- NULL AS parentTypeName,
183
- CASE WHEN gs.kind IN (6, 12, 13) OR gs.symbol LIKE '%().' THEN 1 ELSE 0 END AS isFunctionLike,
184
- CASE WHEN gs.kind IN (5, 8, 11) THEN 1 ELSE 0 END AS isTypeLike,
185
- gs.kind AS kind,
186
- gs.documentation AS documentation,
187
- gs.enclosing_symbol AS enclosingSymbol
188
- FROM global_symbols gs
189
- JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
190
- JOIN documents d ON d.id = der.document_id
191
- WHERE d.relative_path = ?
192
- UNION ALL
193
- SELECT
194
- d.id AS documentId,
195
- gs.id AS symbolId,
196
- gs.symbol,
197
- d.relative_path AS relativePath,
198
- MIN(c.start_line) AS startLine,
199
- MAX(c.end_line) AS endLine,
200
- COALESCE(gs.display_name, '') AS leaf,
201
- NULL AS parentTypeName,
202
- CASE WHEN gs.kind IN (6, 12, 13) OR gs.symbol LIKE '%().' THEN 1 ELSE 0 END AS isFunctionLike,
203
- CASE WHEN gs.kind IN (5, 8, 11) THEN 1 ELSE 0 END AS isTypeLike,
204
- gs.kind AS kind,
205
- gs.documentation AS documentation,
206
- gs.enclosing_symbol AS enclosingSymbol
207
- FROM global_symbols gs
208
- JOIN mentions m ON m.symbol_id = gs.id
209
- JOIN chunks c ON c.id = m.chunk_id
210
- JOIN documents d ON d.id = c.document_id
211
- WHERE d.relative_path = ?
212
- AND m.role = 1
213
- GROUP BY gs.id, gs.symbol, d.id, d.relative_path, gs.display_name, gs.kind, gs.documentation, gs.enclosing_symbol
214
- ORDER BY startLine, endLine`,t,t),r=new Set,i=new Map;for(let o of n){if(r.has(o.symbolId))continue;r.add(o.symbolId);let s=o.leaf||T(o.symbol);!s||i.has(s)||i.set(s,{...o,leaf:s})}return i}import Lh from"path";var $n=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"];function hn(e){let t=e.toLowerCase();return $n.some(n=>t.endsWith(n))}function Vc(e,t){let n=new Map,r=i=>hn(i)?Te(n,i,()=>{let o=Lh.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:()=>M(e,{extensions:$n})}}import gt from"path";import{existsSync as zr,readdirSync as wh,readFileSync as Wc}from"fs";function Uc(e){let t=gt.join(e,"package.json");if(!zr(t))return[];let n;try{n=JSON.parse(Wc(t,"utf8"))}catch{return[]}return(Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages??[]).flatMap(i=>Eh(e,i)).flatMap(i=>kh(e,i))}function Eh(e,t){if(!t||t.startsWith("!")||t.includes("node_modules"))return[];if(!t.includes("*")){let s=gt.join(e,t);return zr(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(!zr(o))return[];try{return wh(o).map(s=>gt.join(o,s,i)).filter(s=>zr(gt.join(s,"package.json")))}catch{return[]}}function kh(e,t){try{let n=JSON.parse(Wc(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 Gc(e,t){for(let n of e)if(t===n.name||t.startsWith(`${n.name}/`))return n.name;return null}function Jc(e){return[`${e.sourceRootRelative}/index.ts`,`${e.sourceRootRelative}/index.tsx`,`${e.sourceRootRelative}/index.mts`,`${e.sourceRootRelative}/index.cts`]}import{existsSync as jn,readFileSync as Ph,readdirSync as Fh,statSync as Th}from"fs";import K from"path";var yo=["tsconfig.json","tsconfig.app.json","tsconfig.node.json","tsconfig.base.json"];function bo(e,t){let r=t?K.dirname(K.join(e,t)):e,i=K.resolve(e);for(;r.startsWith(i);){for(let s of yo){let a=K.join(r,s);if(jn(a))return a}let o=K.dirname(r);if(o===r)break;r=o}for(let o of yo){let s=K.join(e,o);if(jn(s))return s}return null}function zc(e){let t=e.config.projectRoot,n=new Set(So(t,e.config.semantic?.typescript?.tsconfigs)),r=M(e,{includeIgnored:!1,extensions:$n});for(let i of r){let o=bo(t,i);o&&n.add(K.resolve(o))}if(n.size===0){let i=bo(t);i&&n.add(K.resolve(i))}return[...n].filter(i=>!Kc(t,i)).sort((i,o)=>i.localeCompare(o))}function So(e,t=[]){let n=new Set;for(let r of t){let i=K.isAbsolute(r)?r:K.join(e,r);jn(i)&&n.add(K.resolve(i))}for(let r of Ah(e))for(let i of yo){let o=K.join(r,i);jn(o)&&n.add(K.resolve(o))}if(n.size===0){let r=bo(e);r&&n.add(K.resolve(r))}return[...n].filter(r=>!Kc(e,r)).sort((r,i)=>r.localeCompare(i))}function Ah(e){let t=K.join(e,"package.json");if(!jn(t))return[];let n;try{n=JSON.parse(Ph(t,"utf8"))}catch{return[]}return(Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages??[]).flatMap(i=>Mh(e,i))}function Mh(e,t){if(!t||t.startsWith("!")||t.includes("node_modules"))return[];if(!t.includes("*")){let s=K.join(e,t);return ho(s)?[s]:[]}let n=t.indexOf("*"),r=t.slice(0,n).replace(/\/$/,""),i=t.slice(n+1).replace(/^\//,""),o=K.join(e,r||".");return ho(o)?Fh(o).map(s=>K.join(o,s,i)).filter(ho):[]}function ho(e){try{return Th(e).isDirectory()}catch{return!1}}function Kc(e,t){let n=K.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 Oh}from"module";var $h=Oh(import.meta.url),Bn;function Qc(){if(Bn!==void 0)return Bn;try{Bn=$h("ts-morph")}catch{Bn=null}return Bn}function Yc(e,t){return t.map(n=>({tsconfigPath:n,project:new e.Project({tsConfigFilePath:n,skipFileDependencyResolution:!1})}))}function Kr(e,t,n){return{language:"typescript",availability:()=>({available:!1,reason:e,tsconfigPath:t,tsconfigPaths:n}),importUsage:()=>[],referencesFor:()=>[],calleesFor:()=>[],signatureFor:()=>null}}function el(e,t){let n=Qc();if(!n)return Kr("ts-morph is not installed");let r=zc(e);if(r.length===0)return Kr("no tsconfig found");try{let i=Yc(n,r);return new xo(e,n,i)}catch(i){return Kr(i instanceof Error?i.message:String(i),r[0],r)}}var xo=class{constructor(t,n,r){this.db=t;this.tsMorph=n;this.projects=r;this.workspacePackages=Uc(t.config.projectRoot),this.sourceFiles=Vc(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 Te(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 Te(this.referencesCache,t.symbolId,()=>{let n=this.nodeForDefinition(t),r=this.packageImportReferencesForDefinition(t);return n?Mc(n,t,r,this.db.config.projectRoot):r})}calleesFor(t){return Te(this.calleesCache,t.symbolId,()=>Te(this.fileCalleesCache,t.relativePath,()=>this.calleeMapForFile(t.relativePath)).get(t.symbolId)??[])}signatureFor(t){return Te(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 Zc(c)}),o=r.getReturnType().getText(n);return`(${i.join(",")})=>${Zc(o)}`})}importUsageForDeclaration(t,n){let r=Fe(this.db,t,n.getModuleSpecifierValue()),i=Xc(n);return n.getImportClause()?.isTypeOnly()?i.map(o=>jh(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 Oc(l,t,r.identifier,this.db.config.projectRoot))o.push(u);let s=o.some(l=>!go(l.node)),a=o.some(l=>go(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,Jr(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=Gc(this.workspacePackages,i.getModuleSpecifierValue());if(!o)return;let s=n.get(o);if(s)for(let a of Xc(i)){if(a.kind!=="named"||!a.identifier)continue;let c=s.get(a.importedName);if(!c||c.size===0)continue;let l=jc(a.identifier,r,this.db.config.projectRoot);l.length>0&&qh(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 Jc(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?Fe(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 m=u.getNameNode().getText(),d=u.getAliasNode()?.getText()??m,p=this.indexedDefinitionByLeaf(c,m);if(!p)continue;let h=r.get(d);h||(h=new Set,r.set(d,h)),h.add(p.symbolId)}}}indexedDefinitionByLeaf(t,n){return Te(this.indexedDefinitionLeafCache,t,()=>qc(this.db,t)).get(n)??null}nodeForDefinition(t){return Te(this.definitionNodeCache,t.symbolId,()=>this.definitionNodesForFile(t.relativePath).get(t.symbolId)??null)}definitionNodesForFile(t){return Te(this.fileDefinitionNodeCache,t,()=>{let n=this.sourceFiles.sourceFile(t);return n?Bc(this.tsMorph,this.db,n,t):new Map})}definitionFromSymbol(t){let n=t.getDeclarations();for(let r of n){let i=r.getSourceFile(),o=On(this.db.config.projectRoot,i.getFilePath());if(!o||this.db.isIgnored(o))continue;let s=gn(i,r),a=Hc(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=W(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&&Bh(i,s.callerId,s.target)});for(let[o,s]of i)i.set(o,Vh(s));return i}semanticCalleeForCallNode(t,n,r){let i=Hh(n,gn(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 Xc(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 jh(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 Bh(e,t,n){let r=e.get(t);r||(r=[],e.set(t,r)),r.push(n)}function Hh(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 qh(e,t,n){for(let r of t){let i=e.get(r)??[];i.push(...n),e.set(r,i)}}function Vh(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 Zc(e){return e.replace(/\s+/g," ").replace(/\bimport\("[^"]+"\)\./g,"").trim()}var Co=new WeakMap;at({name:"semantic-provider",groups:["semantic-provider"],clearAll:e=>Co.delete(e)});function Ft(e,t){let n=`${e.config.projectRoot}:typescript-workspace`,r=Co.get(e);r||(r=new Map,Co.set(e,r));let i=r.get(n);if(i)return i;let o=el(e,t);return r.set(n,o),o}function Hn(e,t){let n=Yr(e,t);return n?n.importUsage(t):[]}function Tt(e,t){let n=Yr(e,t.relativePath);return n?n.referencesFor(t):[]}function yn(e,t){let n=new Map;for(let r of t)for(let i of Tt(e,r)){if(i.file===r.relativePath||e.isIgnored(i.file))continue;let o=n.get(r.symbolId);o||(o=new Set,n.set(r.symbolId,o)),o.add(i.file)}return n}function Qr(e,t){let n=new Map;for(let r of t){let i=Yr(e,r.relativePath);if(!i)continue;let o=i.calleesFor(r);o.length>0&&n.set(r.symbolId,o)}return n}function tl(e,t){let n=Yr(e,t.relativePath);return n?n.signatureFor(t):null}function Yr(e,t){if(!hn(t))return null;let n=Ft(e,t);return n.availability().available?n:null}function Xr(e,t){let n=new Map;for(let r of ie(e,t)){if(!r.sourcePath)continue;let i=r.localName??r.importedName;if(i&&nl(n,i,r.sourcePath),r.kind==="namespace")for(let o of r.usedMembers)nl(n,o,r.sourcePath)}return n}function nl(e,t,n){let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)}function bn(e,t,n){let r=Pt(e).get(n);if(!r||r.length===0)return[];if(r.length===1)return[qn(r[0])];let i=r.filter(c=>c.file===t);if(i.length>0)return i.map(qn);let o=Xr(e,t),s=o.get(n);if(s)for(let c of s){let l=r.filter(u=>ft(c,u.file));if(l.length>0)return l.map(qn)}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=>ft(c,u.file));if(l.length>0&&l.length===r.length)return l.map(qn)}return[]}function il(e,t,n){let r=bn(e,t,n);if(r.length>0)return r;let i=Pt(e).get(n);return!i||i.length===0?[]:i.map(qn)}function ol(e,t,n={}){let r=Lr(e,t);if(!r)return[];let i=T(r.symbol);if(!i)return[];if(n.semantic!==!1){let s=Tt(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 rl(e,a)}}let o=new Map;for(let s of Ve(e)){let a=P(e,s);if(!a||a.indexOf(i)===-1||s!==r.relativePath&&!bn(e,s,i).some(u=>u.symbolId===r.symbolId))continue;let c=Vr(e,s,i,s===r.relativePath?{excludeStartLine:r.startLine,excludeEndLine:r.endLine}:{});c.length>0&&o.set(s,c)}return rl(e,o)}function sl(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 r=new Set(t.map(o=>o.symbolId)),i=new Map;for(let o of Ve(e)){let s=wc(e,o);if(s.size!==0){for(let a of s)if(n.has(a))for(let c of bn(e,o,a)){if(!r.has(c.symbolId)||o===c.relativePath)continue;let l=i.get(c.symbolId);l||(l=new Set,i.set(c.symbolId,l)),l.add(o)}}}return i}function qn(e){return{symbolId:e.symbolId,symbol:e.symbol,relativePath:e.file}}function rl(e,t){let n=[],r=new Set;for(let[i,o]of t){let s=W(e,i);for(let a of o){let c=Ce(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 At(e,t){let n=Kh(e,t);return n?Qh(e,Uh(e,n.match,n.identifier)):[]}function ht(e,t,n={}){return Wh(e,t,n).map(r=>({file:r.file,line:r.line,enclosingSymbol:r.enclosingSymbol}))}function Wh(e,t,n={}){let r=ol(e,t,{semantic:n.semantic}),i=r.length>0?al(r,"source-attribution"):al(At(e,t),"scip-reference-chunk");return n.includeIgnored===!0?i:i.filter(o=>!e.isIgnored(o.file))}function al(e,t){return e.map(n=>({...n,provenance:t}))}function Uh(e,t,n){let r=new Map;for(let[i,o]of Gh(e,t.symbolId))r.set(i,Jh(e,i,o,t,n));return r}function Gh(e,t){let n=new Map;for(let r of Wr(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 Jh(e,t,n,r,i){let o=t===r.relativePath?{excludeStartLine:r.startLine,excludeEndLine:r.endLine}:{},s=i?Vr(e,t,i,o):[];return n.flatMap(a=>zh(s,a))}function zh(e,t){let n=e.filter(r=>r>=t.start_line&&r<=t.end_line);return n.length>0?n:[t.start_line]}function Kh(e,t){let n=Lr(e,t);return n?{match:n,identifier:T(n.symbol)||null}:null}function Qh(e,t){let n=[],r=new Set;for(let[i,o]of t){let s=W(e,i);for(let a of o){let c=Ce(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 Se(e,t,n={}){let r=Zr(e,[t],{additive:n.additive,semantic:n.semantic}),i=n.callableOnly?(r.get(t.symbolId)??[]).filter(o=>ae(o.symbol)):r.get(t.symbolId)??[];return typeof n.limit=="number"?i.slice(0,n.limit):i}function cl(e,t,n={}){let r=Zh(e)?ty(e,t,{semantic:n.semantic!==!1}):ey(e).get(t.symbolId)??[];return typeof n.limit=="number"?r.slice(0,n.limit):r}var Yh=te("caller-rows",{clearGroups:["whole-project"]}),Xh=2e4;function Zh(e){return(e.get("SELECT COUNT(*) AS count FROM global_symbols")?.count??0)>Xh}function ey(e){return Yh.get(e,()=>{let t=He(e),n=Zr(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 m=`${s.symbol}|${s.relativePath}`;o.get(l).has(m)||(o.get(l).add(m),u.push({symbol:s.symbol,file:s.relativePath,source:"caller-map-inversion"}))}}return i})}function ty(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 At(e,t))a.file!==t.relativePath&&o({symbol:a.enclosingSymbol??a.file,file:a.file,source:"resolved-reference"});let s=n.semantic?ny(e,t):null;if(s)for(let a of Tt(e,s)){if(a.file===t.relativePath||e.isIgnored(a.file))continue;let c=Ce(W(e,a.file),a.line);o({symbol:c?.symbol??a.file,file:a.file,source:"semantic-reference"})}return r}function ny(e,t){return e.get(`SELECT
156
+ ${e.symbolNoiseFor("gs")}`),n=new Map;for(let i of t){if(!i.relative_path||e.isIgnored(i.relative_path))continue;let r=F(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 Je(e,t,n){if(e.has(t))return e.get(t);let i=n();return e.set(t,i),i}import ed from"path";function lv(e,t){return e.getReferences().map(n=>{let i=n.getNode();return id(i,t)})}function uv(e){let t=e;return typeof t.findReferences=="function"?t.findReferences():[]}function td(e,t,n,i){let r=[];for(let o of uv(e))for(let s of lv(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 Xr(r)}function nd(e,t,n,i){let r=[],o=n?.getStart();for(let s of e.getReferences()){let a=s.getNode();Ii(i,a.getSourceFile().getFilePath())===t&&(o!==void 0&&a.getStart()===o||r.push({location:id(a,i),node:a}))}return r}function id(e,t){let n=e.getSourceFile(),i=n.getLineAndColumnAtPos(e.getStart());return{file:Ii(t,n.getFilePath())??n.getBaseName(),line:i.line-1,column:i.column-1}}function rd(e,t,n){let i=e.getSourceFile(),r=Qn(i,e),o=e.getText(),s=new RegExp(`\\b${dv(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 Xr(c.filter(l=>Ii(n,ed.join(n,l.file))===t))}function $s(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 Qn(e,t){return e.getLineAndColumnAtPos(t.getStart()).line-1}function Xr(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 Ii(e,t){let n=ed.relative(e||process.cwd(),t).replace(/\\/g,"/");return!n||n.startsWith("..")?null:n}function dv(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function od(e,t,n,i){let r=mv(t,i);return r.size===0?new Map:pv(e,n,r)}function mv(e,t){let n=new Map;for(let i of G(e,t)){let r=F(i.symbol)??i.leaf;if(!r)continue;let o=n.get(r);o||(o=[],n.set(r,o)),o.push(i)}return n}function pv(e,t,n){let i=new Map,r=new Map;return t.forEachDescendant(o=>{for(let s of fv(e,o)){let a=n.get(s);if(!a)continue;let c=Qn(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 fv(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 gv=U("ts-definition-leaf-candidates",{clearGroups:["definition-catalog"]});function ad(e,t,n,i){let r=ld(e,t),o=sd(r.get(i)??[],n);if(o)return o;let s=[];for(let a of r.values())for(let c of a)((c.leaf||F(c.symbol)||"").includes(i)||c.symbol.includes(i))&&s.push(c);return sd(s,n)}function cd(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 gv.get(e,t,()=>{let n=new Map;for(let i of G(e,t)){let r=i.leaf||F(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 sd(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 hv from"path";var Ni=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"];function Xn(e){let t=e.toLowerCase();return Ni.some(n=>t.endsWith(n))}function ud(e,t){let n=new Map,i=r=>Xn(r)?Je(n,r,()=>{let o=hv.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:()=>M(e,{extensions:Ni})}}import Ot from"path";import{existsSync as Yr,readdirSync as bv,readFileSync as dd}from"fs";function md(e){let t=Ot.join(e,"package.json");if(!Yr(t))return[];let n;try{n=JSON.parse(dd(t,"utf8"))}catch{return[]}return(Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages??[]).flatMap(r=>yv(e,r)).flatMap(r=>Sv(e,r))}function yv(e,t){if(!t||t.startsWith("!")||t.includes("node_modules"))return[];if(!t.includes("*")){let s=Ot.join(e,t);return Yr(Ot.join(s,"package.json"))?[s]:[]}let n=t.indexOf("*"),i=t.slice(0,n).replace(/\/$/,""),r=t.slice(n+1).replace(/^\//,""),o=Ot.join(e,i||".");if(!Yr(o))return[];try{return bv(o).map(s=>Ot.join(o,s,r)).filter(s=>Yr(Ot.join(s,"package.json")))}catch{return[]}}function Sv(e,t){try{let n=JSON.parse(dd(Ot.join(t,"package.json"),"utf8"));if(!n.name)return[];let i=Ot.relative(e,t).replace(/\\/g,"/");return[{name:n.name,rootRelative:i,sourceRootRelative:`${i}/src`}]}catch{return[]}}function pd(e,t){for(let n of e)if(t===n.name||t.startsWith(`${n.name}/`))return n.name;return null}function fd(e){return[`${e.sourceRootRelative}/index.ts`,`${e.sourceRootRelative}/index.tsx`,`${e.sourceRootRelative}/index.mts`,`${e.sourceRootRelative}/index.cts`]}import{existsSync as Ei,readFileSync as xv,readdirSync as Cv,statSync as vv}from"fs";import ne from"path";var Ms=["tsconfig.json","tsconfig.app.json","tsconfig.node.json","tsconfig.base.json"];function Os(e,t){let i=t?ne.dirname(ne.join(e,t)):e,r=ne.resolve(e);for(;i.startsWith(r);){for(let s of Ms){let a=ne.join(i,s);if(Ei(a))return a}let o=ne.dirname(i);if(o===i)break;i=o}for(let o of Ms){let s=ne.join(e,o);if(Ei(s))return s}return null}function gd(e){let t=e.config.projectRoot,n=new Set(js(t,e.config.semantic?.typescript?.tsconfigs)),i=M(e,{includeIgnored:!1,extensions:Ni});for(let r of i){let o=Os(t,r);o&&n.add(ne.resolve(o))}if(n.size===0){let r=Os(t);r&&n.add(ne.resolve(r))}return[...n].filter(r=>!hd(t,r)).sort((r,o)=>r.localeCompare(o))}function js(e,t=[]){let n=new Set;for(let i of t){let r=ne.isAbsolute(i)?i:ne.join(e,i);Ei(r)&&n.add(ne.resolve(r))}for(let i of Rv(e))for(let r of Ms){let o=ne.join(i,r);Ei(o)&&n.add(ne.resolve(o))}if(n.size===0){let i=Os(e);i&&n.add(ne.resolve(i))}return[...n].filter(i=>!hd(e,i)).sort((i,r)=>i.localeCompare(r))}function Rv(e){let t=ne.join(e,"package.json");if(!Ei(t))return[];let n;try{n=JSON.parse(xv(t,"utf8"))}catch{return[]}return(Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages??[]).flatMap(r=>Lv(e,r))}function Lv(e,t){if(!t||t.startsWith("!")||t.includes("node_modules"))return[];if(!t.includes("*")){let s=ne.join(e,t);return As(s)?[s]:[]}let n=t.indexOf("*"),i=t.slice(0,n).replace(/\/$/,""),r=t.slice(n+1).replace(/^\//,""),o=ne.join(e,i||".");return As(o)?Cv(o).map(s=>ne.join(o,s,r)).filter(As):[]}function As(e){try{return vv(e).isDirectory()}catch{return!1}}function hd(e,t){let n=ne.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 wv}from"module";var kv=wv(import.meta.url),Pi;function bd(){if(Pi!==void 0)return Pi;try{Pi=kv("ts-morph")}catch{Pi=null}return Pi}function yd(e,t){return t.map(n=>({tsconfigPath:n,project:new e.Project({tsConfigFilePath:n,skipFileDependencyResolution:!1})}))}function Zr(e,t,n){return{language:"typescript",availability:()=>({available:!1,reason:e,tsconfigPath:t,tsconfigPaths:n}),importUsage:()=>[],referencesFor:()=>[],calleesFor:()=>[],signatureFor:()=>null}}function Cd(e,t){let n=bd();if(!n)return Zr("ts-morph is not installed");let i=gd(e);if(i.length===0)return Zr("no tsconfig found");try{let r=yd(n,i);return new Bs(e,n,r)}catch(r){return Zr(r instanceof Error?r.message:String(r),i[0],i)}}var Bs=class{constructor(t,n,i){this.db=t;this.tsMorph=n;this.projects=i;this.workspacePackages=md(t.config.projectRoot),this.sourceFiles=ud(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 Je(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 Je(this.referencesCache,t.symbolId,()=>{let n=this.nodeForDefinition(t),i=this.packageImportReferencesForDefinition(t);return n?td(n,t,i,this.db.config.projectRoot):i})}calleesFor(t){return Je(this.calleesCache,t.symbolId,()=>Je(this.fileCalleesCache,t.relativePath,()=>this.calleeMapForFile(t.relativePath)).get(t.symbolId)??[])}signatureFor(t){return Je(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 xd(c)}),o=i.getReturnType().getText(n);return`(${r.join(",")})=>${xd(o)}`})}importUsageForDeclaration(t,n){let i=Ke(this.db,t,n.getModuleSpecifierValue()),r=Sd(n);return n.getImportClause()?.isTypeOnly()?r.map(o=>Dv(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 nd(l,t,i.identifier,this.db.config.projectRoot))o.push(u);let s=o.some(l=>!$s(l.node)),a=o.some(l=>$s(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,Xr(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=pd(this.workspacePackages,r.getModuleSpecifierValue());if(!o)return;let s=n.get(o);if(s)for(let a of Sd(r)){if(a.kind!=="named"||!a.identifier)continue;let c=s.get(a.importedName);if(!c||c.size===0)continue;let l=rd(a.identifier,i,this.db.config.projectRoot);l.length>0&&Ev(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 fd(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?Ke(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 Je(this.indexedDefinitionLeafCache,t,()=>cd(this.db,t)).get(n)??null}nodeForDefinition(t){return Je(this.definitionNodeCache,t.symbolId,()=>this.definitionNodesForFile(t.relativePath).get(t.symbolId)??null)}definitionNodesForFile(t){return Je(this.fileDefinitionNodeCache,t,()=>{let n=this.sourceFiles.sourceFile(t);return n?od(this.tsMorph,this.db,n,t):new Map})}definitionFromSymbol(t){let n=t.getDeclarations();for(let i of n){let r=i.getSourceFile(),o=Ii(this.db.config.projectRoot,r.getFilePath());if(!o||this.db.isIgnored(o))continue;let s=Qn(r,i),a=ad(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&&Iv(r,s.callerId,s.target)});for(let[o,s]of r)r.set(o,Pv(s));return r}semanticCalleeForCallNode(t,n,i){let r=Nv(n,Qn(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 Sd(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 Dv(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 Iv(e,t,n){let i=e.get(t);i||(i=[],e.set(t,i)),i.push(n)}function Nv(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 Ev(e,t,n){for(let i of t){let r=e.get(i)??[];r.push(...n),e.set(i,r)}}function Pv(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 xd(e){return e.replace(/\s+/g," ").replace(/\bimport\("[^"]+"\)\./g,"").trim()}var Vs=new WeakMap;Et({name:"semantic-provider",groups:["semantic-provider"],clearAll:e=>Vs.delete(e)});function rn(e,t){let n=`${e.config.projectRoot}:typescript-workspace`,i=Vs.get(e);i||(i=new Map,Vs.set(e,i));let r=i.get(n);if(r)return r;let o=Cd(e,t);return i.set(n,o),o}function _i(e,t){let n=to(e,t);return n?n.importUsage(t):[]}function on(e,t){let n=to(e,t.relativePath);return n?n.referencesFor(t):[]}function Yn(e,t){let n=new Map;for(let i of t)for(let r of on(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 eo(e,t){let n=new Map;for(let i of t){let r=to(e,i.relativePath);if(!r)continue;let o=r.calleesFor(i);o.length>0&&n.set(i.symbolId,o)}return n}function vd(e,t){let n=to(e,t.relativePath);return n?n.signatureFor(t):null}function to(e,t){if(!Xn(t))return null;let n=rn(e,t);return n.availability().available?n:null}function no(e,t){let n=new Map;for(let i of de(e,t)){if(!i.sourcePath)continue;let r=i.localName??i.importedName;if(r&&Rd(n,r,i.sourcePath),i.kind==="namespace")for(let o of i.usedMembers)Rd(n,o,i.sourcePath)}return n}function Rd(e,t,n){let i=e.get(t);i||(i=new Set,e.set(t,i)),i.add(n)}function Zn(e,t,n){let i=nn(e).get(n);if(!i||i.length===0)return[];if(i.length===1)return[Ti(i[0])];let r=i.filter(c=>c.file===t);if(r.length>0)return r.map(Ti);let o=no(e,t),s=o.get(n);if(s)for(let c of s){let l=i.filter(u=>Mt(c,u.file));if(l.length>0)return l.map(Ti)}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=>Mt(c,u.file));if(l.length>0&&l.length===i.length)return l.map(Ti)}return[]}function wd(e,t,n){let i=Zn(e,t,n);if(i.length>0)return i;let r=nn(e).get(n);return!r||r.length===0?[]:r.map(Ti)}function kd(e,t,n={}){let i=Er(e,t);if(!i)return[];let r=F(i.symbol);if(!r)return[];if(n.semantic!==!1){let s=on(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 Ld(e,a)}}let o=new Map;for(let s of we(e)){let a=A(e,s);if(!a||a.indexOf(r)===-1||s!==i.relativePath&&!Zn(e,s,r).some(u=>u.symbolId===i.symbolId))continue;let c=zr(e,s,r,s===i.relativePath?{excludeStartLine:i.startLine,excludeEndLine:i.endLine}:{});c.length>0&&o.set(s,c)}return Ld(e,o)}function Dd(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 we(e)){let s=Ku(e,o);if(s.size!==0){for(let a of s)if(n.has(a))for(let c of Zn(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 Ti(e){return{symbolId:e.symbolId,symbol:e.symbol,relativePath:e.file}}function Ld(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=Me(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 sn(e,t){let n=Mv(e,t);return n?Ov(e,Tv(e,n.match,n.identifier)):[]}function jt(e,t,n={}){return _v(e,t,n).map(i=>({file:i.file,line:i.line,enclosingSymbol:i.enclosingSymbol}))}function _v(e,t,n={}){let i=kd(e,t,{semantic:n.semantic}),r=i.length>0?Id(i,"source-attribution"):Id(sn(e,t),"scip-reference-chunk");return n.includeIgnored===!0?r:r.filter(o=>!e.isIgnored(o.file))}function Id(e,t){return e.map(n=>({...n,provenance:t}))}function Tv(e,t,n){let i=new Map;for(let[r,o]of Fv(e,t.symbolId))i.set(r,$v(e,r,o,t,n));return i}function Fv(e,t){let n=new Map;for(let i of Kr(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 $v(e,t,n,i,r){let o=t===i.relativePath?{excludeStartLine:i.startLine,excludeEndLine:i.endLine}:{},s=r?zr(e,t,r,o):[];return n.flatMap(a=>Av(s,a))}function Av(e,t){let n=e.filter(i=>i>=t.start_line&&i<=t.end_line);return n.length>0?n:[t.start_line]}function Mv(e,t){let n=Er(e,t);return n?{match:n,identifier:F(n.symbol)||null}:null}function Ov(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=Me(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 Fe(e,t,n={}){let i=io(e,[t],{additive:n.additive,semantic:n.semantic}),r=n.callableOnly?(i.get(t.symbolId)??[]).filter(o=>be(o.symbol)):i.get(t.symbolId)??[];return typeof n.limit=="number"?r.slice(0,n.limit):r}function Ed(e,t,n={}){let i=Vv(e)?qv(e,t,{semantic:n.semantic!==!1}):Hv(e).get(t.symbolId)??[];return typeof n.limit=="number"?i.slice(0,n.limit):i}var jv=ce("caller-rows",{clearGroups:["whole-project"]}),Bv=2e4;function Vv(e){return(e.get("SELECT COUNT(*) AS count FROM global_symbols")?.count??0)>Bv}function Hv(e){return jv.get(e,()=>{let t=tt(e),n=io(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 qv(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 sn(e,t))a.file!==t.relativePath&&o({symbol:a.enclosingSymbol??a.file,file:a.file,source:"resolved-reference"});let s=n.semantic?Uv(e,t):null;if(s)for(let a of on(e,s)){if(a.file===t.relativePath||e.isIgnored(a.file))continue;let c=Me(G(e,a.file),a.line);o({symbol:c?.symbol??a.file,file:a.file,source:"semantic-reference"})}return i}function Uv(e,t){return e.get(`SELECT
215
158
  d.id AS documentId,
216
159
  gs.id AS symbolId,
217
160
  gs.symbol,
@@ -230,10 +173,11 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
230
173
  LEFT JOIN chunks c ON c.document_id = der.document_id
231
174
  JOIN documents d ON d.id = COALESCE(der.document_id, c.document_id)
232
175
  WHERE gs.id = ?
233
- LIMIT 1`,t.symbolId)??null}function Zr(e,t,n={}){if(t.length===0)return new Map;let r=n.additive??!1,i=[],o=[];for(let u of t)B(u.relativePath)&&tn(e,u.relativePath)!==null?i.push(u):o.push(u);let s=new Map,a=new Map,c=u=>{for(let[m,d]of u){let p=s.get(m);p||(p=[],s.set(m,p));let h=a.get(m);h||(h=new Set,a.set(m,h));for(let f of d){let y=`${f.symbol}|${f.chunkId}`;h.has(y)||(h.add(y),p.push(f))}}};i.length>0&&c(ay(e,i)),n.semantic!==!1&&c(dy(ry(e,t)));let l=r?t:o;return l.length>0&&c(my(e,l)),s}function ry(e,t){let n=new Map,r=[],i=[];for(let s of t){if(!hn(s.relativePath))continue;let a=P(e,s.relativePath);if(!a){i.push(s);continue}let c=Ct(e,s.relativePath,a),l=sy(e,s.relativePath),u=Da(e,s.relativePath,s.symbol,c,l);if(u!==null){let m=iy(u);if(m){m.length>0&&n.set(s.symbolId,m);continue}}r.push({def:s,contentHash:c,depsDigest:l})}if(r.length===0&&i.length===0)return n;let o=Qr(e,[...i,...r.map(s=>s.def)]);for(let[s,a]of o)n.set(s,a);return Ft(e).availability().available&&Na(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 iy(e){try{return JSON.parse(e)}catch{return null}}var oy=H("semantic-deps-digest",{clearGroups:["whole-project","source-file"]});function sy(e,t){return oy.get(e,t,()=>{let r=[...X(e).get(t)??[]].sort().map(i=>`${i}:${Ct(e,i,P(e,i))}`);return Ui(r.join("|"))})}function ay(e,t){let n=new Map,r=cy(t,n),i=Pt(e);for(let[o,s]of r){let a=tn(e,o);if(a)for(let c of a){let l=ly(s,c.line);if(!l)continue;let u=uy(e,o,i,c.calleeLeaf,c.memberAccess);u&&u.symbol!==l.symbol&&n.get(l.symbolId).push({symbol:u.symbol,file:u.file,chunkId:c.line,source:"ast-callsite"})}}return n}function cy(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 ly(e,t){return e.find(n=>t>=n.startLine&&t<=n.endLine)??null}function uy(e,t,n,r,i){let o=Ur(t,n.get(r)??[]);return o.length===0?null:Gr(e,t,o,i)}function my(e,t){if(t.length===0)return new Map;let n=e.all(`SELECT c.document_id, c.id AS chunk_id, c.start_line, c.end_line, m.symbol_id
176
+ LIMIT 1`,t.symbolId)??null}function io(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)&&Pn(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(Jv(e,r)),n.semantic!==!1&&c(Zv(Wv(e,t)));let l=i?t:o;return l.length>0&&c(Yv(e,l)),s}function Wv(e,t){let n=new Map,i=[],r=[];for(let s of t){if(!Xn(s.relativePath))continue;let a=A(e,s.relativePath);if(!a){r.push(s);continue}let c=Wt(e,s.relativePath,a),l=Kv(e,s.relativePath),u=wl(e,s.relativePath,s.symbol,c,l);if(u!==null){let d=Gv(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=eo(e,[...r,...i.map(s=>s.def)]);for(let[s,a]of o)n.set(s,a);return rn(e).availability().available&&kl(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 Gv(e){try{return JSON.parse(e)}catch{return null}}var zv=U("semantic-deps-digest",{clearGroups:["whole-project","source-file"]});function Kv(e,t){return zv.get(e,t,()=>{let i=[...ee(e).get(t)??[]].sort().map(r=>`${r}:${Wt(e,r,A(e,r))}`);return ms(i.join("|"))})}function Jv(e,t){let n=new Map,i=Qv(t,n),r=nn(e);for(let[o,s]of i){let a=Pn(e,o);if(!a)continue;let c=Ss(s);for(let l of a){let u=c.get(l.line);if(!u)continue;let d=Xv(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 Qv(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 Xv(e,t,n,i,r){let o=Jr(t,n.get(i)??[]);return o.length===0?null:Qr(e,t,o,r)}function Yv(e,t){if(t.length===0)return new Map;let i=Hs(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
234
177
  FROM mentions m
235
178
  JOIN chunks c ON m.chunk_id = c.id
236
- WHERE m.role != 1`),r=new Map;for(let l of n)r.has(l.document_id)||r.set(l.document_id,[]),r.get(l.document_id).push(l);let i=new Map(e.all("SELECT id, relative_path FROM documents").map(l=>[l.id,l.relative_path])),o=new Map,s=e.all(`SELECT gs.id AS symbol_id, gs.symbol,
179
+ 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=Hs(i.map(m=>m.symbol_id)).flatMap(m=>e.all(`SELECT gs.id AS symbol_id, gs.symbol,
237
181
  COALESCE(der.document_id, def_chunk.document_id) AS document_id
238
182
  FROM global_symbols gs
239
183
  LEFT JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
@@ -242,11 +186,14 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
242
186
  FROM mentions m
243
187
  JOIN chunks c ON m.chunk_id = c.id
244
188
  WHERE m.role = 1
189
+ AND m.symbol_id IN (${m.map(()=>"?").join(",")})
245
190
  GROUP BY m.symbol_id
246
- ) def_chunk ON def_chunk.symbol_id = gs.id`);for(let l of s)o.has(l.symbol_id)||o.set(l.symbol_id,{symbol:l.symbol,file:l.document_id!==null?i.get(l.document_id)??"":""});let a=new Map,c=i;for(let l of t){let u=r.get(l.documentId)??[],m=new Set,d=[],p=null,h=()=>{if(p)return p;let f=c.get(l.documentId)??"",y=new Set;if(f){let R=Ec(e,f),E=Math.max(0,l.startLine),S=Math.min(R.length-1,l.endLine);for(let x=E;x<=S;x+=1)for(let D of R[x])y.add(D)}return p=y,y};for(let f of u){if(f.symbol_id===l.symbolId)continue;let y=o.get(f.symbol_id);if(!y)continue;if(!(f.start_line>=l.startLine&&f.end_line<=l.endLine)){if(!(f.start_line<=l.endLine&&f.end_line>=l.startLine))continue;let x=T(y.symbol);if(!x||!h().has(x))continue}let E=`${y.symbol}|${f.chunk_id}`;m.has(E)||(m.add(E),d.push({...y,chunkId:f.chunk_id,source:"scip-chunk"}))}a.set(l.symbolId,d)}return a}function dy(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 ll(e,t,n={}){let r=new Map;if(t&&t.length===0)return r;let i=M(e,{includeIgnored:!1}),o=Pt(e),s=t??He(e),a=new Set(s.map(c=>c.symbolId));return py(e,r,i,o,a),fy(e,r,s,a),by(e,r,i,o,a),n.semantic!==!1&&xy(r,yn(e,Sy(s))),r}function py(e,t,n,r,i){for(let o of n){if(!B(o))continue;let s=tn(e,o);if(s)for(let a of s){let c=Ur(o,r.get(a.calleeLeaf)??[]);if(!c||c.length===0)continue;let l=Gr(e,o,c,a.memberAccess);l&&i.has(l.symbolId)&&l.file!==o&&Ro(t,l.symbolId,o)}}}function fy(e,t,n,r){let i=hy(n);for(let o of gy(e,r))e.isIgnored(o.relative_path)||yy(o,i.get(o.symbol_id))||Ro(t,o.symbol_id,o.relative_path)}function gy(e,t){return Wr(e,t?[...t]:void 0)}function hy(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 yy(e,t){return!!t&&t.docId===e.document_id&&e.chunk_start>=t.startLine&&e.chunk_end<=t.endLine}function by(e,t,n,r,i){for(let o of n){if(B(o)!=="rust")continue;let s=Rt(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&&Ro(t,l.symbolId,o)}}}function Ro(e,t,n){let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)}function Sy(e){return e.filter(t=>"relativePath"in t&&"symbol"in t&&"leaf"in t)}function xy(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 De(e,t,n={}){return cl(e,t,n)}function Io(e,t,n={}){return ll(e,t,n)}function vo(e,t){return sl(e,t)}function ul(e,t,n={}){let r=Io(e,t,{semantic:n.semantic});return n.sourceFallback===!1?r:Cy(r,vo(e,t))}function Cy(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 ml(e,t,n){let r=t.identifierResolution==="strict"?bn:il;for(let i of t.paths)if(!(!B(i)&&!(t.includeVueSfc&&xt(i)))&&!e.isIgnored(i)&&!t.skipPath?.(i))try{let s=(c,l,u,m)=>{if(t.candidateNames&&!t.candidateNames.has(c))return;let d=t.resolveTargets?t.resolveTargets({sourceFile:i,name:c,kind:l,defaultTargets:m}):m();for(let p of d)n({sourceFile:i,name:c,target:p,occurrences:u,kind:l})},a=Ye(e,i);for(let[c,l]of a)s(c,"identifier",l.length,()=>r(e,i,c));for(let c of Rt(e,i,{includeCrossLanguageDispatchNames:t.includeCrossLanguageDispatchNames,includeRustAttributeNames:t.includeRustAttributeNames})){let l=c.kind==="cross-language-dispatch"?()=>bn(e,i,c.name):()=>r(e,i,c.name);s(c.name,c.kind,c.occurrences,l)}}finally{t.afterPath?.(i)}}var _=class{constructor(t){this.db=t}db;scopedDefinitions(t){return Qi(this.db,t)}definitionsForFile(t){return W(this.db,t)}productionCallableDefinitions(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:m=!1,includeSuppressed:d=!1,sortByLocDesc:p=!1}=t,h=[];for(let f of this.scopedDefinitions(n)){let y=f.relativePath;if(this.db.isIgnored(y)||s&&me(this.db,y)||!Ry(f,{requireFunctionLikeSymbol:l,requireCallableSymbol:u})||o!==void 0&&f.symbol===o)continue;let R=Do(f);R<r||R>i||a&&Iy(y)||c&&oe(this.db,f.symbol,y)||m&&vr(f.symbol)||G(y)!=="test"&&(nn(f.symbol)||!d&&Wi(this.db,y,f.startLine)||h.push(f))}return p?h.sort((f,y)=>Do(y)-Do(f)):h}calleeMap(t,n={}){return Zr(this.db,t,n)}crossFileCallerMap(t,n={}){return Io(this.db,t,n)}sourceFallbackCallerFiles(t){return vo(this.db,t)}callerFileMap(t,n={}){return ul(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 M(this.db,{includeIgnored:!1}))if(B(i)==="rust")for(let{name:o}of Rt(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 X(this.db,t)}fileKind(t){return G(t)}hasSuppressionComment(t){return Wi(this.db,t.relativePath,t.startLine)}sourceFiles(){return Ve(this.db)}scanSourceReferences(t,n){ml(this.db,t,n)}callableSignature(t){let n=Q(this.db,t.relativePath)?.callables.find(r=>r.startLine===t.startLine&&r.endLine===t.endLine);return n?{paramCount:n.paramCount}:null}};function Ry(e,t){return t.requireCallableSymbol?ae(e.symbol):t.requireFunctionLikeSymbol?Y(e.symbol):e.isFunctionLike}function Do(e){return e.endLine-e.startLine+1}function Iy(e){return(e.split("/").pop()??"").includes("types")}function No(e,t){let n=A(e,t);if(!n)return[];let r=T(n.symbol),o=new _(e).definitionsForFile(n.relativePath).filter(c=>ae(c.symbol)),s=o.filter(c=>c.parentTypeName===r||c.symbol.includes(r));return(s.length>0?s:Dy(vy(n.relativePath))===r?o.filter(c=>c.symbol.includes("<invalid-global-code>")):[]).map(c=>({startLine:c.startLine,endLine:c.endLine,name:T(c.symbol)}))}function Dy(e){return e.replace(/\.[^.]+$/,"")}function _o(e,t,n={}){let r=A(e,t);if(!r)return[];let o=!Y(r.symbol)&&!e.isIgnored(r.relativePath)?[{relativePath:r.relativePath,line:r.startLine}]:[],s=ht(e,r,{semantic:n.semantic}).map(u=>({relativePath:u.file,line:u.line})),a=Ny(e,r),c=new Set,l=[];for(let u of[...o,...s,...a]){let m=`${u.relativePath}:${u.line}`;c.has(m)||(c.add(m),l.push(u))}return l}function Ny(e,t){if(!t.relativePath.endsWith(".rb"))return[];let n=_y(t.symbol);if(n.length===0)return[];let r=[];for(let i of M(e,{extensions:[".rb"],includeIgnored:!1})){let o=P(e,i);if(!o)continue;let s=o.split(`
247
- `);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 _y(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 Vn(e,t,n={}){let r=A(e,t);if(!r)return{definitions:[],referencedBy:[]};let i=e.get("SELECT display_name, documentation FROM global_symbols WHERE id = ?",r.symbolId),o=vt(i?.documentation??null),s=e.isIgnored(r.relativePath)?[]:[{relativePath:r.relativePath,startLine:r.startLine,endLine:r.endLine,signature:wy(o,i?.display_name??null,r.symbol),source:Ly(e,r.relativePath,r.startLine,r.endLine)}],a=ht(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 Ly(e,t,n,r){let i=P(e,t);if(!i)return null;let s=i.split(`
248
- `).slice(n,r+1).join(`
249
- `).trimEnd();return s.length>0?s:null}function wy(e,t,n){let r=It(e);if(r&&!Ey(r))return r;let i=(t??"").trim();return i?Y(n)&&!i.endsWith("()")?`${i}()`:i:b(n)}function Ey(e){return e.startsWith("undefined")||e.includes("|")||e.includes("```")}function Wn(e,t){let n=pe(e,t);return n?e.all(`SELECT DISTINCT d2.relative_path
191
+ ) def_chunk ON def_chunk.symbol_id = gs.id
192
+ WHERE gs.id IN (${m.map(()=>"?").join(",")})`,...m,...m)),a=Hs([...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 L=d.get(m.documentId)??"",_=new Set;if(L){let w=Ju(e,L),C=Math.max(0,m.startLine),N=Math.min(w.length-1,m.endLine);for(let V=C;V<=N;V+=1)for(let B of w[V])_.add(B)}return b=_,_};for(let L of p){if(L.symbol_id===m.symbolId)continue;let _=l.get(L.symbol_id);if(!_)continue;if(!(L.start_line>=m.startLine&&L.end_line<=m.endLine)){if(!(L.start_line<=m.endLine&&L.end_line>=m.startLine))continue;let V=F(_.symbol);if(!V||!S().has(V))continue}let C=`${_.symbol}|${L.chunk_id}`;h.has(C)||(h.add(C),g.push({..._,chunkId:L.chunk_id,source:"scip-chunk"}))}u.set(m.symbolId,g)}return u}var Nd=500;function Hs(e){let t=[...new Set(e)],n=[];for(let i=0;i<t.length;i+=Nd)n.push(t.slice(i,i+Nd));return n}function Zv(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 Pd(e,t,n={}){let i=new Map;if(t&&t.length===0)return i;let r=M(e,{includeIgnored:!1}),o=nn(e),s=t??tt(e),a=new Set(s.map(c=>c.symbolId));return eR(e,i,r,o,a),tR(e,i,s,a),oR(e,i,r,o,a),n.semantic!==!1&&aR(i,Yn(e,sR(s))),i}function eR(e,t,n,i,r){for(let o of n){if(!W(o))continue;let s=Pn(e,o);if(s)for(let a of s){let c=Jr(o,i.get(a.calleeLeaf)??[]);if(!c||c.length===0)continue;let l=Qr(e,o,c,a.memberAccess);l&&r.has(l.symbolId)&&l.file!==o&&qs(t,l.symbolId,o)}}}function tR(e,t,n,i){let r=iR(n);for(let o of nR(e,i))e.isIgnored(o.relative_path)||rR(o,r.get(o.symbol_id))||qs(t,o.symbol_id,o.relative_path)}function nR(e,t){return Kr(e,t?[...t]:void 0)}function iR(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 rR(e,t){return!!t&&t.docId===e.document_id&&e.chunk_start>=t.startLine&&e.chunk_end<=t.endLine}function oR(e,t,n,i,r){for(let o of n){if(W(o)!=="rust")continue;let s=Gt(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&&qs(t,l.symbolId,o)}}}function qs(e,t,n){let i=e.get(t);i||(i=new Set,e.set(t,i)),i.add(n)}function sR(e){return e.filter(t=>"relativePath"in t&&"symbol"in t&&"leaf"in t)}function aR(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 Ve(e,t,n={}){return Ed(e,t,n)}function Us(e,t,n={}){return Pd(e,t,n)}function Ws(e,t){return Dd(e,t)}function _d(e,t,n={}){let i=Us(e,t,{semantic:n.semantic});return n.sourceFallback===!1?i:cR(i,Ws(e,t))}function cR(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 Td(e,t,n){let i=t.identifierResolution==="strict"?Zn:wd;for(let r of t.paths)if(!(!W(r)&&!(t.includeVueSfc&&gt(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=St(e,r);for(let[c,l]of a)s(c,"identifier",l.length,()=>i(e,r,c));for(let c of Gt(e,r,{includeCrossLanguageDispatchNames:t.includeCrossLanguageDispatchNames,includeRustAttributeNames:t.includeRustAttributeNames})){let l=c.kind==="cross-language-dispatch"?()=>Zn(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 Fd(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 xi(e,n)){let b=g.relativePath;if(e.isIgnored(b)||s&&Re(e,b)||!lR(g,{requireFunctionLikeSymbol:l,requireCallableSymbol:u})||o!==void 0&&g.symbol===o)continue;let S=q(g);S<i||S>r||a&&uR(b)||c&&te(e,g.symbol,b)||d&&kr(g.symbol)||K(b)!=="test"&&(An(g.symbol)||!m&&gr(e,b,g.startLine)||h.push(g))}return p?h.sort((g,b)=>q(b)-q(g)):h}function lR(e,t){return t.requireCallableSymbol?be(e.symbol):t.requireFunctionLikeSymbol?re(e.symbol):e.isFunctionLike}function uR(e){return(e.split("/").pop()??"").includes("types")}var E=class{constructor(t){this.db=t}db;scopedDefinitions(t){return xi(this.db,t)}definitionsForFile(t){return G(this.db,t)}productionCallableDefinitions(t={}){return Fd(this.db,t)}calleeMap(t,n={}){return io(this.db,t,n)}crossFileCallerMap(t,n={}){return Us(this.db,t,n)}sourceFallbackCallerFiles(t){return Ws(this.db,t)}callerFileMap(t,n={}){return _d(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 M(this.db,{includeIgnored:!1}))if(W(r)==="rust")for(let{name:o}of Gt(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 ee(this.db,t)}fileKind(t){return K(t)}hasSuppressionComment(t){return gr(this.db,t.relativePath,t.startLine)}sourceFiles(){return we(this.db)}scanSourceReferences(t,n){Td(this.db,t,n)}callableSignature(t){let n=ie(this.db,t.relativePath)?.callables.find(i=>i.startLine===t.startLine&&i.endLine===t.endLine);return n?{paramCount:n.paramCount}:null}};function Gs(e,t){let n=j(e,t);if(!n)return[];let i=F(n.symbol),o=new E(e).definitionsForFile(n.relativePath).filter(c=>be(c.symbol)),s=o.filter(c=>c.parentTypeName===i||c.symbol.includes(i));return(s.length>0?s:mR(dR(n.relativePath))===i?o.filter(c=>c.symbol.includes("<invalid-global-code>")):[]).map(c=>({startLine:c.startLine,endLine:c.endLine,name:F(c.symbol)}))}function mR(e){return e.replace(/\.[^.]+$/,"")}function zs(e,t,n={}){let i=j(e,t);if(!i)return[];let o=!re(i.symbol)&&!e.isIgnored(i.relativePath)?[{relativePath:i.relativePath,line:i.startLine}]:[],s=jt(e,i,{semantic:n.semantic}).map(u=>({relativePath:u.file,line:u.line})),a=pR(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 pR(e,t){if(!t.relativePath.endsWith(".rb"))return[];let n=fR(t.symbol);if(n.length===0)return[];let i=[];for(let r of M(e,{extensions:[".rb"],includeIgnored:!1})){let o=A(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 fR(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 Fi(e,t,n={}){let i=j(e,t);if(!i)return{definitions:[],referencedBy:[]};let r=e.get("SELECT display_name, documentation FROM global_symbols WHERE id = ?",i.symbolId),o=Kt(r?.documentation??null),s=e.isIgnored(i.relativePath)?[]:[{relativePath:i.relativePath,startLine:i.startLine,endLine:i.endLine,signature:hR(o,r?.display_name??null,i.symbol),source:gR(e,i.relativePath,i.startLine,i.endLine)}],a=jt(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 gR(e,t,n,i){let r=A(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 hR(e,t,n){let i=zt(e);if(i&&!bR(i))return i;let r=(t??"").trim();return r?re(n)&&!r.endsWith("()")?`${r}()`:r:y(n)}function bR(e){return e.startsWith("undefined")||e.includes("|")||e.includes("```")}function $i(e,t){let n=ke(e,t);return n?e.all(`SELECT DISTINCT d2.relative_path
250
197
  FROM mentions m
251
198
  JOIN chunks c ON m.chunk_id = c.id
252
199
  JOIN documents d1 ON c.document_id = d1.id
@@ -262,7 +209,7 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
262
209
  WHERE d1.relative_path = ?
263
210
  AND d2.relative_path <> d1.relative_path
264
211
  AND ${e.localSymbolPredicate}
265
- ORDER BY d2.relative_path`,n).filter(i=>!e.isIgnored(i.relative_path)).map(i=>({relativePath:i.relative_path})):[]}function Un(e,t){let n=pe(e,t);return n?e.all(`SELECT DISTINCT d1.relative_path
212
+ ORDER BY d2.relative_path`,n).filter(r=>!e.isIgnored(r.relative_path)).map(r=>({relativePath:r.relative_path})):[]}function Ai(e,t){let n=ke(e,t);return n?e.all(`SELECT DISTINCT d1.relative_path
266
213
  FROM mentions m
267
214
  JOIN chunks c ON m.chunk_id = c.id
268
215
  JOIN documents d1 ON c.document_id = d1.id
@@ -277,9 +224,9 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
277
224
  JOIN documents d2 ON sym_def.document_id = d2.id
278
225
  WHERE d2.relative_path = ?
279
226
  AND d1.relative_path != ?
280
- ORDER BY d1.relative_path`,n,n).filter(i=>!e.isIgnored(i.relative_path)).map(i=>({relativePath:i.relative_path})):[]}function Gn(e,t){let n=ln(e,t);if(n.length===0)return{files:[],symbols:[],dependsOn:[],dependedOnBy:[]};let r=n.map(()=>"?").join(", "),o=e.all(`SELECT relative_path FROM documents
281
- WHERE relative_path IN (${r})
282
- ORDER BY relative_path`,...n).map(m=>m.relative_path).filter(m=>!e.isIgnored(m)),s=Dr(e,o,{onlyDocumented:!0,sort:!0}).map(({relativePath:m,...d})=>d),c=e.all(`SELECT DISTINCT d2.relative_path
227
+ ORDER BY d1.relative_path`,n,n).filter(r=>!e.isIgnored(r.relative_path)).map(r=>({relativePath:r.relative_path})):[]}function Mi(e,t){let n=Hn(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=Dr(e,o,{onlyDocumented:!0,sort:!0}).map(({relativePath:d,...m})=>m),c=e.all(`SELECT DISTINCT d2.relative_path
283
230
  FROM mentions m
284
231
  JOIN chunks c ON m.chunk_id = c.id
285
232
  JOIN documents d1 ON c.document_id = d1.id
@@ -292,10 +239,10 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
292
239
  GROUP BY m2.symbol_id
293
240
  ) sym_def ON sym_def.symbol_id = gs.id
294
241
  JOIN documents d2 ON sym_def.document_id = d2.id
295
- WHERE d1.relative_path IN (${r})
296
- AND d2.relative_path NOT IN (${r})
242
+ WHERE d1.relative_path IN (${i})
243
+ AND d2.relative_path NOT IN (${i})
297
244
  AND ${e.localSymbolPredicate}
298
- ORDER BY d2.relative_path`,...n,...n).map(m=>m.relative_path).filter(m=>!e.isIgnored(m)),u=e.all(`SELECT DISTINCT d1.relative_path
245
+ 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
299
246
  FROM mentions m
300
247
  JOIN chunks c ON m.chunk_id = c.id
301
248
  JOIN documents d1 ON c.document_id = d1.id
@@ -308,9 +255,9 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
308
255
  GROUP BY m2.symbol_id
309
256
  ) sym_def ON sym_def.symbol_id = gs.id
310
257
  JOIN documents d2 ON sym_def.document_id = d2.id
311
- WHERE d2.relative_path IN (${r})
312
- AND d1.relative_path NOT IN (${r})
313
- ORDER BY d1.relative_path`,...n,...n).map(m=>m.relative_path).filter(m=>!e.isIgnored(m));return{files:o,symbols:s,dependsOn:c,dependedOnBy:u}}function Jn(e,t){let n=ln(e,t);return n.length===0?[]:Fy([...ky(e,n),...Py(e,n)]).filter(r=>!e.isIgnored(r.relative_path)).map(Ty)}function ky(e,t){let n=t.map(()=>"?").join(", ");return e.all(`SELECT DISTINCT d1.relative_path, gs.symbol
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 Oi(e,t){let n=Hn(e,t);return n.length===0?[]:xR([...yR(e,n),...SR(e,n)]).filter(i=>!e.isIgnored(i.relative_path)).map(CR)}function yR(e,t){let n=t.map(()=>"?").join(", ");return e.all(`SELECT DISTINCT d1.relative_path, gs.symbol
314
261
  FROM mentions m
315
262
  JOIN chunks c ON m.chunk_id = c.id
316
263
  JOIN documents d1 ON c.document_id = d1.id
@@ -337,7 +284,7 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
337
284
  AND m.role != 1
338
285
  AND ${e.localSymbolPredicate}
339
286
  ${e.pathExclusionsFor("d1")}
340
- ORDER BY d1.relative_path`,...t,...t,...t)}function Py(e,t){let n=new _(e);return t.flatMap(r=>n.definitionsForFile(r).filter(i=>ae(i.symbol)).map(i=>({relative_path:r,symbol:i.symbol})))}function Fy(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 Ty(e){return{consumer:e.relative_path,symbol:e.symbol,shortName:b(e.symbol)}}var zn=new WeakMap;function pl(e,t){let n=B(t);return n==="rust"?jy(e,t):n==="typescript"||n==="tsx"||n==="javascript"?My(e,t):[]}var Ay=new Set(["describe","it","test","fdescribe","fit","xdescribe","xit","beforeEach","afterEach","beforeAll","afterAll","before","after","suite","bench","benchmark"]);function My(e,t){let n=ue(e,t);if(!n)return[];let r=zn.get(n);if(r)return r;let i=/(^|\/)(pages|app)\/.+\.(tsx?|jsx?)$/.test(t)||/(^|\/)(layout|page|loading|error|not-found|head|template|default)\.(tsx?|jsx?)$/.test(t),o=/(^|\/)src\/(pages|views|routes)\/.+\.(tsx?|jsx?|vue)$/.test(t),s=!1,a=n.rootNode;for(let l of a.namedChildren){if(l.type!=="expression_statement")continue;let u=l.namedChild(0);if(!u||u.type!=="call_expression")continue;let m=u.namedChild(0);if(!m)continue;let d=m.type==="member_expression"?m.namedChild(m.namedChildCount-1)?.text:m.text;if(d&&Ay.has(d)){s=!0;break}}let c=[];s&&c.push({startLine:0,endLine:a.endPosition.row,reason:"TS/JS test file (describe/it/test at top level)"}),(i||o)&&c.push({startLine:0,endLine:a.endPosition.row,reason:i?"Next.js / Remix route file":"Vite/Vue route component"});for(let l of a.namedChildren){let u=null,m=null;if(l.type==="function_declaration")u=l.namedChild(0)?.text??null,m=l;else if(l.type==="export_statement"){let d=l.namedChild(0);d?.type==="function_declaration"&&(u=d.namedChild(0)?.text??null,m=d)}else if(l.type==="lexical_declaration"){let d=l.namedChild(0);if(d?.type==="variable_declarator"){let p=d.namedChild(0)?.text,h=d.namedChild(1);p&&(h?.type==="arrow_function"||h?.type==="function_expression")&&(u=p,m=d)}}u&&/^use[A-Z]/.test(u)&&m&&c.push({startLine:m.startPosition.row,endLine:m.endPosition.row,reason:"React custom hook (use*)"})}return c.push(...fl(n,new Set(["function_declaration","method_definition","class_declaration","interface_declaration","type_alias_declaration","enum_declaration","variable_declarator","export_statement"]),new Set(["comment"]))),zn.set(n,c),c}var Oy=/scip-query[\s:-]*ignore[\s:-]*(?:dead(?:-code)?|stale)?/i;function $y(e){return Oy.test(e)}function fl(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($y(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 jy(e,t){let n=ue(e,t);if(!n)return[];let r=zn.get(n);if(r)return r;let i=[],o=By(n);return o?(zn.set(n,o),o):(gl(n.rootNode,i,!1,!1),i.push(...fl(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(...zy(n.rootNode)),zn.set(n,i),i)}function By(e){return Ky(e.rootNode)?[{startLine:0,endLine:e.rootNode.endPosition.row,reason:"generated file (@generated header)"}]:null}function gl(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"?Hy(e,t,n,r):r&&Jy(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"?qy(e,t,n):e.type==="mod_item"&&Lo(e).some(s=>/#\[\s*cfg\s*\(\s*test\s*\)/.test(s))&&(i=!0);for(let s of e.namedChildren)gl(s,t,i,o)}function Hy(e,t,n,r){let i=Lo(e),o=null;r?o="trait impl method (dynamic dispatch)":n&&(o="inside #[cfg(test)] mod");for(let s of i){let a=Wy(s);if(a){o=a;break}if(hl(s)){o="#[allow(dead_code)]";break}}o&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:o})}function qy(e,t,n){let r=Lo(e),i=e.namedChildren.find(o=>o.type==="type_identifier")?.text;r.some(Gy)&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"#[derive(<reflective>)] \u2014 fields accessed via macro/reflection",containerName:i}),r.some(hl)&&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 Lo(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 Vy=[{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 Wy(e){return Vy.find(({re:t})=>t.test(e))?.reason??null}var Uy=[/\bSerialize\b/,/\bDeserialize\b/,/\bFromRow\b/,/\bsqlx::FromRow\b/,/\bDeriveEntityModel\b/,/\bIntoSchema\b/,/\bToSchema\b/,/\bDeriveValueType\b/,/\bError\b/,/\bthiserror::Error\b/];function Gy(e){return/#\[\s*derive\s*\(/.test(e)?Uy.some(t=>t.test(e)):!1}function hl(e){return/#\[\s*allow\s*\(\s*dead_code\s*\)/.test(e)}function Jy(e){return e.type==="const_item"||e.type==="type_item"||e.type==="static_item"||e.type==="associated_type"}function zy(e){let t=Yy(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 Ky(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 Qy=/^#!?\[\s*serde\s*\(/,dl=/\bwith\s*=\s*"([^"]+)"/g;function Yy(e){let t=new Set;for(let n of e.descendantsOfType("attribute_item")){if(!Qy.test(n.text))continue;dl.lastIndex=0;let r;for(;(r=dl.exec(n.text))!==null;){let i=r[1],o=i.split("::").pop()??i;o&&t.add(o)}}return t}function yl(e){let t=new Map,n=r=>{let i=t.get(r);if(i)return i;let o=pl(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 _r(o))if(a.containers.has(c))return!0;return!1}}function wo(e,t={}){Hi(e,{groups:t.semanticProvider===!0?["whole-project","semantic-provider"]:["whole-project"]})}function Eo(e,t,n={}){Hi(e,{groups:n.definitions===!0?["source-file","definition-catalog"]:["source-file"],file:t.replace(/\\/g,"/")})}function Sl(e,t){return t.isIgnoredPath(e.relativePath)?We("ignored-file"):ct(e.symbol)?We("module-like-symbol"):bl(e.symbol)?!e.isFunctionLike&&e.enclosingSymbol&&bl(e.enclosingSymbol)?We("nested-non-callable-value"):!t.includeTests&&!ko(e.relativePath)?We("test-file"):!t.includeTests&&t.isExcludedRegion(e.relativePath,e.startLine,e.symbol,e.parentTypeName)?We("excluded-file-region"):vr(e.symbol)?We("rust-trait-impl-member"):nn(e.symbol)?We("rust-test-module"):!t.includeMembers&&!Xy(e)?We("member"):e.endLine-e.startLine+1<t.minLoc?We("below-min-loc"):{accepted:!0}:We("non-value-symbol")}function ko(e){return G(e)!=="test"}function We(e){return{accepted:!1,rejectionReason:e}}function bl(e){return Y(e)||e.endsWith("().")||e.endsWith(".")}function Xy(e){return ae(e.symbol)||_r(e.symbol).length===0}function q(e){return e.endLine-e.startLine+1}function ei(e,t){return q(e)-q(t)||e.relativePath.localeCompare(t.relativePath)}function Ne(e,t){return typeof t!="number"||t<=0||e.length<=t?e:e.slice(0,t)}function Sn(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 xl(){return new Map}function Cl(e,t,n){let r=new Map;for(let i of kc(e,n))e.isIgnored(i.relative_path)||t.has(i.relative_path)||ti(r,i.symbol_id,i.relative_path,i.ref_count,"scip-mention");return r}function Rl(e,t,n){let r=new Set;for(let i of Pc(e,t))e.isIgnored(i.relative_path)||n.has(i.relative_path)||r.add(i.symbol_id);return r}function Po(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 Il(e){return e?.occurrences??0}function ti(e,t,n,r,i="source-fallback"){if(r<=0)return;let o=Dl(e,t,n);o.occurrences+=r,o.sources.add(i)}function vl(e,t,n,r,i){if(r<=0)return;let o=Dl(e,t,n);o.occurrences=Math.max(r,o.occurrences),o.sources.add(i)}function Dl(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}function Xe(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=Ne(Zy(e,{scope:n,minLoc:r,includeTests:i,includeMembers:s}),c),m=o?new Set(Lc(e)):new Set,d=a?xl():Cl(e,m,u.map(R=>R.symbolId)),p=a?Rl(e,u.map(R=>R.symbolId),m):new Set,h=a?u.filter(R=>!p.has(R.symbolId)):u;a?ib(e,h,d,m):rb(e,h,d,m);let f=a?h.filter(R=>!Po(d,R.symbolId)):u;lb(e,f,d,{includeTests:i,inactiveBarrelPaths:m,includeSemantic:!a&&l});let y=a?h.filter(R=>!Po(d,R.symbolId)):u;return nb(e,eb(y,d))}function Zy(e,t){let n=yl(e),r=[];for(let i of M(e,{scope:t.scope}))try{for(let o of W(e,i))Sl(o,{minLoc:t.minLoc,includeTests:t.includeTests,includeMembers:t.includeMembers,isIgnoredPath:a=>e.isIgnored(a),isExcludedRegion:n}).accepted&&r.push(o)}finally{Eo(e,i,{definitions:!0})}return r}function eb(e,t){return e.map(n=>tb(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 tb(e,t){let n=t.get(e.symbolId)??new Map,r=Il(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 nb(e,t){let n=[],r=0,i=0,o=0;for(let s of t){if(e.isIgnored(s.relative_path)||me(e,s.relative_path)||oe(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,totalCount:n.length,deadCodeCount:r,fileInternalCount:i,totalLoc:o}}function rb(e,t,n,r){if(t.length===0)return;let i=new _(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 M(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)&&(ab(e,c)||ti(n,c.target.symbolId,c.sourceFile,cb(c),"source-fallback"))})}function ib(e,t,n,r){if(t.length===0)return;let i=new _(e),o=ob(t),s=new Set(i.sourceFiles());for(let u of M(e))s.add(u);let a=new Set(o.keys()),c=new Map,l=u=>{let m=c.get(u);return m||(m=Xr(e,u),c.set(u,m)),m};i.scanSourceReferences({paths:s,includeVueSfc:!0,includeCrossLanguageDispatchNames:!0,includeRustAttributeNames:!0,identifierResolution:"permissive",candidateNames:a,skipPath:u=>r.has(u),resolveTargets:({sourceFile:u,name:m,kind:d})=>{let p=o.get(m);return p?sb(u,m,p,l(u),{permissive:d!=="cross-language-dispatch"}):[]},afterPath:u=>{c.delete(u),Eo(e,u)}},u=>{let m=u.kind==="identifier"&&u.sourceFile===u.target.relativePath?Math.max(0,u.occurrences-1):u.occurrences;u.kind==="identifier"&&Nl(e,{sourceFile:u.sourceFile,name:u.name,target:u.target,occurrences:m})||ti(n,u.target.symbolId,u.sourceFile,m,"source-fallback")})}function ob(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 sb(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=>ft(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=>ft(c,u.relativePath));if(l.length>0&&l.length===n.length)return l}return i.permissive?[...n]:[]}function ab(e,t){return t.kind==="cross-language-dispatch"&&t.target.relativePath===t.sourceFile?!0:t.kind==="identifier"&&Nl(e,t)}function cb(e){return e.kind==="identifier"&&e.target.relativePath===e.sourceFile?Math.max(0,e.occurrences-1):e.occurrences}function Nl(e,t){return t.occurrences>1?!1:ie(e,t.sourceFile).some(n=>n.used||n.sourcePath!==t.target.relativePath?!1:n.importedName===t.name||n.localName===t.name)}function lb(e,t,n,r){for(let i of t){let o=De(e,i,{semantic:r.includeSemantic!==!1});if(o.length!==0)for(let s of o){let a=s.file;a===i.relativePath||e.isIgnored(a)||r.inactiveBarrelPaths.has(a)||!r.includeTests&&!ko(a)||vl(n,i.symbolId,a,1,"caller-map")}}}function Fo(e,t={}){let{limit:n=30,scope:r}=t,i=r?`AND def_d.relative_path LIKE '%${r}%'`:"",s=e.all(`SELECT
287
+ ORDER BY d1.relative_path`,...t,...t,...t)}function SR(e,t){let n=new E(e);return t.flatMap(i=>n.definitionsForFile(i).filter(r=>be(r.symbol)).map(r=>({relative_path:i,symbol:r.symbol})))}function xR(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 CR(e){return{consumer:e.relative_path,symbol:e.symbol,shortName:y(e.symbol)}}var ji=new WeakMap;function Ad(e,t){let n=W(t);return n==="rust"?kR(e,t):n==="typescript"||n==="tsx"||n==="javascript"?RR(e,t):[]}var vR=new Set(["describe","it","test","fdescribe","fit","xdescribe","xit","beforeEach","afterEach","beforeAll","afterAll","before","after","suite","bench","benchmark"]);function RR(e,t){let n=le(e,t);if(!n)return[];let i=ji.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&&vR.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(...Md(n,new Set(["function_declaration","method_definition","class_declaration","interface_declaration","type_alias_declaration","enum_declaration","variable_declarator","export_statement"]),new Set(["comment"]))),ji.set(n,s),s}var LR=/scip-query[\s:-]*ignore[\s:-]*(?:dead(?:-code)?|stale)?/i;function wR(e){return LR.test(e)}function Md(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(wR(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 kR(e,t){let n=le(e,t);if(!n)return[];let i=ji.get(n);if(i)return i;let r=[],o=DR(n);return o?(ji.set(n,o),o):(Od(n.rootNode,r,!1,!1),r.push(...Md(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(...$R(n.rootNode)),ji.set(n,r),r)}function DR(e){return AR(e.rootNode)?[{startLine:0,endLine:e.rootNode.endPosition.row,reason:"generated file (@generated header)"}]:null}function Od(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"?IR(e,t,n,i):i&&FR(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"?NR(e,t,n):e.type==="mod_item"&&Ks(e).some(s=>/#\[\s*cfg\s*\(\s*test\s*\)/.test(s))&&(r=!0);for(let s of e.namedChildren)Od(s,t,r,o)}function IR(e,t,n,i){let r=Ks(e),o=null;i?o="trait impl method (dynamic dispatch)":n&&(o="inside #[cfg(test)] mod");for(let s of r){let a=PR(s);if(a){o=a;break}if(jd(s)){o="#[allow(dead_code)]";break}}o&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:o})}function NR(e,t,n){let i=Ks(e),r=e.namedChildren.find(o=>o.type==="type_identifier")?.text;i.some(TR)&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"#[derive(<reflective>)] \u2014 fields accessed via macro/reflection",containerName:r}),i.some(jd)&&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 Ks(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 ER=[{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 PR(e){return ER.find(({re:t})=>t.test(e))?.reason??null}var _R=[/\bSerialize\b/,/\bDeserialize\b/,/\bFromRow\b/,/\bsqlx::FromRow\b/,/\bDeriveEntityModel\b/,/\bIntoSchema\b/,/\bToSchema\b/,/\bDeriveValueType\b/,/\bError\b/,/\bthiserror::Error\b/];function TR(e){return/#\[\s*derive\s*\(/.test(e)?_R.some(t=>t.test(e)):!1}function jd(e){return/#\[\s*allow\s*\(\s*dead_code\s*\)/.test(e)}function FR(e){return e.type==="const_item"||e.type==="type_item"||e.type==="static_item"||e.type==="associated_type"}function $R(e){let t=OR(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 AR(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 MR=/^#!?\[\s*serde\s*\(/,$d=/\bwith\s*=\s*"([^"]+)"/g;function OR(e){let t=new Set;for(let n of e.descendantsOfType("attribute_item")){if(!MR.test(n.text))continue;$d.lastIndex=0;let i;for(;(i=$d.exec(n.text))!==null;){let r=i[1],o=r.split("::").pop()??r;o&&t.add(o)}}return t}function Bd(e){let t=new Map,n=i=>{let r=t.get(i);if(r)return r;let o=Ad(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 Nr(o))if(a.containers.has(c))return!0;return!1}}function Js(e,t={}){cs(e,{groups:t.semanticProvider===!0?["whole-project","semantic-provider"]:["whole-project"]})}function Qs(e,t,n={}){cs(e,{groups:n.definitions===!0?["source-file","definition-catalog"]:["source-file"],file:t.replace(/\\/g,"/")})}function Hd(e,t){return t.isIgnoredPath(e.relativePath)?it("ignored-file"):Pt(e.symbol)?it("module-like-symbol"):Vd(e.symbol)?!e.isFunctionLike&&e.enclosingSymbol&&Vd(e.enclosingSymbol)?it("nested-non-callable-value"):!t.includeTests&&!Xs(e.relativePath)?it("test-file"):!t.includeTests&&t.isExcludedRegion(e.relativePath,e.startLine,e.symbol,e.parentTypeName)?it("excluded-file-region"):kr(e.symbol)?it("rust-trait-impl-member"):An(e.symbol)?it("rust-test-module"):!t.includeMembers&&!jR(e)?it("member"):e.endLine-e.startLine+1<t.minLoc?it("below-min-loc"):{accepted:!0}:it("non-value-symbol")}function Xs(e){return K(e)!=="test"}function it(e){return{accepted:!1,rejectionReason:e}}function Vd(e){return re(e)||e.endsWith("().")||e.endsWith(".")}function jR(e){return be(e.symbol)||Nr(e.symbol).length===0}function ro(e,t){return q(e)-q(t)||e.relativePath.localeCompare(t.relativePath)}function He(e,t){return typeof t!="number"||t<=0||e.length<=t?e:e.slice(0,t)}function ei(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 qd(){return new Map}function Ud(e,t,n){let i=new Map;for(let r of Qu(e,n))e.isIgnored(r.relative_path)||t.has(r.relative_path)||oo(i,r.symbol_id,r.relative_path,r.ref_count,"scip-mention");return i}function Wd(e,t,n){let i=new Set;for(let r of Xu(e,t))e.isIgnored(r.relative_path)||n.has(r.relative_path)||i.add(r.symbol_id);return i}function Ys(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 Gd(e){return e?.occurrences??0}function oo(e,t,n,i,r="source-fallback"){if(i<=0)return;let o=Kd(e,t,n);o.occurrences+=i,o.sources.add(r)}function zd(e,t,n,i,r){if(i<=0)return;let o=Kd(e,t,n);o.occurrences=Math.max(i,o.occurrences),o.sources.add(r)}function Kd(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 xt(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=He(BR(e,{scope:n,minLoc:i,includeTests:r,includeMembers:s}),c),d=o?new Set(Gu(e)):new Set,m=a?qd():Ud(e,d,u.map(S=>S.symbolId)),p=a?Wd(e,u.map(S=>S.symbolId),d):new Set,h=a?u.filter(S=>!p.has(S.symbolId)):u;a?WR(e,h,m,d):UR(e,h,m,d);let g=a?h.filter(S=>!Ys(m,S.symbolId)):u;QR(e,g,m,{includeTests:r,inactiveBarrelPaths:d,includeSemantic:!a&&l});let b=a?h.filter(S=>!Ys(m,S.symbolId)):u;return qR(e,VR(b,m))}function BR(e,t){let n=Bd(e),i=[];for(let r of M(e,{scope:t.scope}))try{for(let o of G(e,r))Hd(o,{minLoc:t.minLoc,includeTests:t.includeTests,includeMembers:t.includeMembers,isIgnoredPath:a=>e.isIgnored(a),isExcludedRegion:n}).accepted&&i.push(o)}finally{Qs(e,r,{definitions:!0})}return i}function VR(e,t){return e.map(n=>HR(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 HR(e,t){let n=t.get(e.symbolId)??new Map,i=Gd(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 qR(e,t){let n=[],i=0,r=0,o=0;for(let s of t){if(e.isIgnored(s.relative_path)||Re(e,s.relative_path)||te(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 UR(e,t,n,i){if(t.length===0)return;let r=new E(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 M(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)&&(KR(e,c)||oo(n,c.target.symbolId,c.sourceFile,JR(c),"source-fallback"))})}function WR(e,t,n,i){if(t.length===0)return;let r=new E(e),o=GR(t),s=new Set(r.sourceFiles());for(let u of M(e))s.add(u);let a=new Set(o.keys()),c=new Map,l=u=>{let d=c.get(u);return d||(d=no(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?zR(u,d,p,l(u),{permissive:m!=="cross-language-dispatch"}):[]},afterPath:u=>{c.delete(u),Qs(e,u)}},u=>{let d=u.kind==="identifier"&&u.sourceFile===u.target.relativePath?Math.max(0,u.occurrences-1):u.occurrences;u.kind==="identifier"&&Jd(e,{sourceFile:u.sourceFile,name:u.name,target:u.target,occurrences:d})||oo(n,u.target.symbolId,u.sourceFile,d,"source-fallback")})}function GR(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 zR(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=>Mt(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=>Mt(c,u.relativePath));if(l.length>0&&l.length===n.length)return l}return r.permissive?[...n]:[]}function KR(e,t){return t.kind==="cross-language-dispatch"&&t.target.relativePath===t.sourceFile?!0:t.kind==="identifier"&&Jd(e,t)}function JR(e){return e.kind==="identifier"&&e.target.relativePath===e.sourceFile?Math.max(0,e.occurrences-1):e.occurrences}function Jd(e,t){return t.occurrences>1?!1:de(e,t.sourceFile).some(n=>n.used||n.sourcePath!==t.target.relativePath?!1:n.importedName===t.name||n.localName===t.name)}function QR(e,t,n,i){for(let r of t){let o=Ve(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&&!Xs(a)||zd(n,r.symbolId,a,1,"caller-map")}}}function Zs(e,t={}){let{limit:n=30,scope:i}=t,r=i?`AND def_d.relative_path LIKE '%${i}%'`:"",s=e.all(`SELECT
341
288
  gs.symbol,
342
289
  COUNT(*) AS ref_count,
343
290
  COUNT(DISTINCT ref_d.id) AS file_count,
@@ -357,17 +304,17 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
357
304
  WHERE m.role != 1
358
305
  ${e.pathExclusionsFor("def_d")}
359
306
  ${e.symbolNoiseFor("gs")}
360
- ${i}
307
+ ${r}
361
308
  GROUP BY gs.id
362
309
  ORDER BY ref_count DESC
363
- 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:ub(e,r,n)}function ub(e,t,n){return He(e,{scope:t}).filter(r=>!e.isIgnored(r.relativePath)).map(r=>mb(e,r)).filter(r=>r.refCount>0).sort((r,i)=>i.refCount-r.refCount||i.fileCount-r.fileCount).slice(0,n)}function mb(e,t){let n=De(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 To(e,t,n={}){return Ll(e,t,n)?.map(r=>({symbol:r.symbol,shortName:r.shortName,fromFile:r.fromFile}))??[]}function Ao(e,t){let n=db(e,t);return n.length>0?n:pb(e,t)}function Mo(e,t,n={}){return Ll(e,t,n)?.filter(r=>!r.used).map(r=>({symbol:r.symbol,shortName:r.shortName,importedIn:r.importer}))??[]}function db(e,t){return e.all(`SELECT DISTINCT gs.symbol, d.relative_path AS importer
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:XR(e,i,n)}function XR(e,t,n){return tt(e,{scope:t}).filter(i=>!e.isIgnored(i.relativePath)).map(i=>YR(e,i)).filter(i=>i.refCount>0).sort((i,r)=>r.refCount-i.refCount||r.fileCount-i.fileCount).slice(0,n)}function YR(e,t){let n=Ve(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 ea(e,t,n={}){return Xd(e,t,n)?.map(i=>({symbol:i.symbol,shortName:i.shortName,fromFile:i.fromFile}))??[]}function ta(e,t){let n=ZR(e,t);return n.length>0?n:eL(e,t)}function na(e,t,n={}){return Xd(e,t,n)?.filter(i=>!i.used).map(i=>({symbol:i.symbol,shortName:i.shortName,importedIn:i.importer}))??[]}function ZR(e,t){return e.all(`SELECT DISTINCT gs.symbol, d.relative_path AS importer
364
311
  FROM mentions m
365
312
  JOIN chunks c ON m.chunk_id = c.id
366
313
  JOIN documents d ON c.document_id = d.id
367
314
  JOIN global_symbols gs ON m.symbol_id = gs.id
368
315
  WHERE gs.symbol LIKE ?
369
316
  AND m.role = 2
370
- 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 pb(e,t){let n=A(e,t),r=n?.relativePath??null,i=n?T(n.symbol):t.replace(/\(\)$/,""),o=n?ct(n.symbol):!1,s=new Set;for(let a of M(e,{includeIgnored:!1}))for(let c of ie(e,a))fb(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 fb(e,t,n){return!e.sourcePath||n.targetFile&&_l(e.sourcePath)!==_l(n.targetFile)?!1:e.kind==="side-effect"||n.targetFile&&bb(t)||n.targetIsModule||e.kind==="named"&&e.importedName===n.targetLeaf?!0:e.kind==="namespace"&&e.usedMembers.includes(n.targetLeaf)}function Ll(e,t,n={}){let r=pe(e,t);return r?gb(e,r,n)??(n.semantic===!1?null:hb(e,r))??yb(e,r):null}function gb(e,t,n){let i=e.all(`SELECT DISTINCT
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 eL(e,t){let n=j(e,t),i=n?.relativePath??null,r=n?F(n.symbol):t.replace(/\(\)$/,""),o=n?Pt(n.symbol):!1,s=new Set;for(let a of M(e,{includeIgnored:!1}))for(let c of de(e,a))tL(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 tL(e,t,n){return!e.sourcePath||n.targetFile&&Qd(e.sourcePath)!==Qd(n.targetFile)?!1:e.kind==="side-effect"||n.targetFile&&oL(t)||n.targetIsModule||e.kind==="named"&&e.importedName===n.targetLeaf?!0:e.kind==="namespace"&&e.usedMembers.includes(n.targetLeaf)}function Xd(e,t,n={}){let i=ke(e,t);return i?nL(e,i,n)??(n.semantic===!1?null:iL(e,i))??rL(e,i):null}function nL(e,t,n){let r=e.all(`SELECT DISTINCT
371
318
  gs.symbol,
372
319
  def_d.relative_path AS from_file,
373
320
  imp_d.relative_path AS importer,
@@ -393,11 +340,11 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
393
340
  LEFT JOIN documents def_d ON sym_def.document_id = def_d.id
394
341
  WHERE imp_d.relative_path = ?
395
342
  AND m.role = 2
396
- ORDER BY def_d.relative_path, gs.symbol`,t).filter(o=>!e.isIgnored(o.importer));if(i.length>0){let o=n.semantic===!1?[]:Hn(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 hb(e,t){let n=Hn(e,t);return n.length>0?n.map(r=>{let i=wl(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 yb(e,t){return ie(e,t).map(n=>{let r=wl(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 wl(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 _l(e){return e.replace(/\\/g,"/")}function bb(e){return/\.(?:c|h|cc|cpp|cxx|hpp|hh|hxx)$/i.test(e)}function Oo(e,t){let n=ln(e,t),r=Dr(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,m=1/0;for(let d of i)if(d!==l&&d.startLine<=l.startLine&&d.endLine>=l.endLine){if(d.startLine===l.startLine&&d.endLine===l.endLine&&!qa(d.symbol,l.symbol))continue;let h=d.endLine-d.startLine;h<m&&(m=h,u=d)}u?u.children.push(l):s.push(l)}return s}function $o(e,t){let n=A(e,t);return n?new _(e).definitionsForFile(n.relativePath).filter(i=>i.symbol!==n.symbol).filter(i=>Ha(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:re(i.symbol)??"unknown"})):[]}function jo(e,t){let n=A(e,t);if(!n)return[];let r=e.get(`SELECT COUNT(DISTINCT c.document_id) AS file_count
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?[]:_i(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 iL(e,t){let n=_i(e,t);return n.length>0?n.map(i=>{let r=Yd(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 rL(e,t){return de(e,t).map(n=>{let i=Yd(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 Yd(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 Qd(e){return e.replace(/\\/g,"/")}function oL(e){return/\.(?:c|h|cc|cpp|cxx|hpp|hh|hxx)$/i.test(e)}function ia(e,t){let n=Hn(e,t),i=Dr(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&&!ou(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 ra(e,t){let n=j(e,t);return n?new E(e).definitionsForFile(n.relativePath).filter(r=>r.symbol!==n.symbol).filter(r=>ru(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:X(r.symbol)??"unknown"})):[]}function oa(e,t){let n=j(e,t);if(!n)return[];let i=e.get(`SELECT COUNT(DISTINCT c.document_id) AS file_count
397
344
  FROM mentions m
398
345
  JOIN chunks c ON m.chunk_id = c.id
399
346
  WHERE m.symbol_id = ?
400
- AND m.role != 1`,n.symbolId);return[{name:b(n.symbol),count:r?.file_count??0}]}function Bo(e,t){let n=pe(e,t);if(!n)return[];let i=e.all(`SELECT d.relative_path, COUNT(DISTINCT gs.id) AS symbol_count
347
+ AND m.role != 1`,n.symbolId);return[{name:y(n.symbol),count:i?.file_count??0}]}function sa(e,t){let n=ke(e,t);if(!n)return[];let r=e.all(`SELECT d.relative_path, COUNT(DISTINCT gs.id) AS symbol_count
401
348
  FROM mentions m
402
349
  JOIN chunks c ON m.chunk_id = c.id
403
350
  JOIN documents d ON c.document_id = d.id
@@ -414,7 +361,7 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
414
361
  AND m.role != 1
415
362
  AND def_d.id != d.id
416
363
  GROUP BY d.id
417
- 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=X(e).get(n);return!s||s.size===0?[]:[{name:n,count:s.size}]}function Ho(e,t={}){return Sb(e,t).map(n=>({name:b(n.symbol),count:n.file_count}))}function Sb(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
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=ee(e).get(n);return!s||s.size===0?[]:[{name:n,count:s.size}]}function aa(e,t={}){return sL(e,t).map(n=>({name:y(n.symbol),count:n.file_count}))}function sL(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
418
365
  FROM mentions m
419
366
  JOIN chunks c ON m.chunk_id = c.id
420
367
  JOIN global_symbols gs ON m.symbol_id = gs.id
@@ -429,11 +376,11 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
429
376
  WHERE m.role != 1
430
377
  ${e.pathExclusionsFor("def_d")}
431
378
  ${e.symbolNoiseFor("gs")}
432
- ${i}
379
+ ${r}
433
380
  GROUP BY gs.id
434
381
  HAVING file_count > 1
435
382
  ORDER BY file_count DESC
436
- LIMIT ?`,n)}function qo(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
383
+ LIMIT ?`,n)}function ca(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
437
384
  FROM mentions m
438
385
  JOIN chunks c ON m.chunk_id = c.id
439
386
  JOIN documents d ON c.document_id = d.id
@@ -450,10 +397,10 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
450
397
  AND def_d.id != d.id
451
398
  ${e.pathExclusionsFor("d")}
452
399
  ${e.symbolNoiseFor("gs")}
453
- ${i}
400
+ ${r}
454
401
  GROUP BY d.id
455
402
  ORDER BY symbol_count DESC
456
- LIMIT ?`,n).filter(s=>!e.isIgnored(s.relative_path)).map(s=>({name:s.relative_path,count:s.symbol_count}))}function Vo(e,t,n){let r=pe(e,t)??t,i=pe(e,n)??n,o=e.get(`SELECT COUNT(DISTINCT gs.id) AS shared
403
+ LIMIT ?`,n).filter(s=>!e.isIgnored(s.relative_path)).map(s=>({name:s.relative_path,count:s.symbol_count}))}function la(e,t,n){let i=ke(e,t)??t,r=ke(e,n)??n,o=e.get(`SELECT COUNT(DISTINCT gs.id) AS shared
457
404
  FROM global_symbols gs
458
405
  WHERE (
459
406
  -- Defined in file1, referenced in file2
@@ -485,7 +432,7 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
485
432
  JOIN documents d ON c.document_id = d.id
486
433
  WHERE m.symbol_id = gs.id AND m.role != 1 AND d.relative_path = ?
487
434
  )
488
- )`,r,i,i,r);return{file1:r,file2:i,sharedSymbols:o?.shared??0}}function Wo(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
435
+ )`,i,r,r,i);return{...Zd(i,r,o?.shared??0)}}function ua(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
489
436
  def_d.relative_path AS file1,
490
437
  ref_d.relative_path AS file2,
491
438
  COUNT(DISTINCT gs.id) AS shared
@@ -504,15 +451,14 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
504
451
  WHERE m.role != 1
505
452
  AND def_d.id != ref_d.id
506
453
  ${e.pathExclusionsFor("def_d","ref_d")}
507
- ${i}
454
+ ${r}
508
455
  GROUP BY def_d.id, ref_d.id
509
456
  ORDER BY shared DESC
510
- LIMIT ?`,n).filter(s=>!e.isIgnored(s.file1)&&!e.isIgnored(s.file2)).map(s=>({file1:s.file1,file2:s.file2,sharedSymbols:s.shared}))}function Mt(e,t={}){let{scope:n,maxDepth:r=10}=t,i=X(e,n),o=[],s=new Set,a=new Set,c=[];function l(m,d){if(d>r)return;if(a.has(m)){let h=c.indexOf(m);if(h!==-1){let f=c.slice(h).concat(m),y=f.indexOf(f.reduce((S,x)=>S<x?S:x)),R=[...f.slice(y,-1),...f.slice(0,y),f[y]],E=R.join(" -> ");u.has(E)||(u.add(E),o.push({path:R,kind:xb(R)}))}return}if(s.has(m))return;s.add(m),a.add(m),c.push(m);let p=i.get(m);if(p)for(let h of p)l(h,d+1);c.pop(),a.delete(m)}let u=new Set;for(let m of i.keys())s.has(m)||l(m,0);return o.sort((m,d)=>m.kind!==d.kind?m.kind==="real"?-1:1:m.path.length-d.path.length),o}function xb(e){for(let r of e){let i=G(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":qr(t)||qr(n)||El(t,n)||El(n,t)||kl(t,n)||kl(n,t)||G(t)==="entry"||G(n)==="entry"?"module-hierarchy":"real"}function El(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 kl(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 Uo(e,t={}){let{limit:n=20,scope:r,minFanIn:i=2,minFanOut:o=2,scanLimit:s}=t,a=new _(e);return Ne(a.productionCallableDefinitions({scope:r,requireCallableSymbol:!0,includeSuppressed:!0,sortByLocDesc:typeof s=="number"&&s>0}),s).map(u=>Cb(e,u,t.semantic!==!1)).filter(u=>u.fanIn>=i&&u.fanOut>=o).sort((u,m)=>m.score-u.score||m.fanIn-u.fanIn).slice(0,n)}function Cb(e,t,n){let r=new Set(De(e,t,{limit:500,semantic:n}).map(o=>o.file)).size,i=new Set(Se(e,t,{limit:500,semantic:n}).filter(o=>o.file!==t.relativePath).map(o=>`${o.symbol}|${o.file}`)).size;return{symbol:t.symbol,shortName:b(t.symbol),fanIn:r,fanOut:i,score:r*i,definedIn:t.relativePath}}function Ot(e,t={}){let{scope:n,minLoc:r=3,scanLimit:i}=t,o=new _(e),s=t.semantic!==!1,a=Ne(o.productionCallableDefinitions({scope:n,minLoc:r,excludeEntrySurfaces:!0,excludeRustTraitImplMembers:!0,includeSuppressed:!0,sortByLocDesc:typeof i=="number"&&i>0}),i),c=o.crossFileCallerMap(a,{semantic:s}),l=new Set(c.keys());for(let f of o.frameworkReferencedSymbolIds(a))l.add(f);let u=o.symbolsWithNonSelfCallees(a,{additive:!1,semantic:s}),m=a.filter(f=>!l.has(f.symbolId)).filter(f=>!u.has(f.symbolId)),d=o.sourceFallbackCallerFiles(m);for(let f of d.keys())l.add(f);let p=m.filter(f=>!l.has(f.symbolId)),h=o.symbolsWithNonSelfCallees(p,{additive:!0,semantic:s});for(let f of h)u.add(f);return p.filter(f=>!u.has(f.symbolId)).sort((f,y)=>q(y)-q(f)||f.relativePath.localeCompare(y.relativePath)||f.startLine-y.startLine).map(f=>({symbol:f.symbol,shortName:b(f.symbol),relativePath:f.relativePath,startLine:f.startLine,endLine:f.endLine,loc:q(f)}))}var Jo={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"},Go=new Map;for(let[e,t]of Object.entries(Jo))Go.set(t.toLowerCase(),Number(e));function Rb(e){let t=parseInt(e,10);if(!isNaN(t))return t;let n=e.toLowerCase(),r=Go.get(n);if(r!==void 0)return r;for(let[i,o]of Go)if(i.includes(n))return o;return null}function zo(e,t,n={}){let{scope:r,limit:i=100}=n,o=Rb(t);return o===null?[]:Pl(e,r).map(a=>({row:a,resolvedKind:Fl(a)})).filter(a=>a.resolvedKind===o).slice(0,i).map(({row:a,resolvedKind:c})=>({symbol:a.symbol,shortName:b(a.symbol),kind:c,kindName:Jo[c]??"Unknown",relativePath:a.relative_path,startLine:a.start_line,endLine:a.end_line}))}function Ko(e,t={}){let n=new Map;for(let r of Pl(e,t.scope)){let i=Fl(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:Jo[r]??"Unknown",count:i}))}function Pl(e,t){return He(e,{scope:t}).map(Ib)}function Ib(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 Fl(e){return e.kind!==null&&e.kind!==0?vb(e.kind,e.symbol,e.documentation):Db(e.symbol,e.documentation,e.enclosing_symbol)}function vb(e,t,n){let r=(n??"").toLowerCase();if(re(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 Db(e,t,n){let r=ne(e);if("kind"in r)return null;let i=r.descriptors,o=i[i.length-2]??null,s=re(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?re(n):o?.suffix??null)==="type"?21:83}function Qo(e,t={}){let{limit:n=10,scope:r,minDepth:i=3}=t,o=X(e,r),s=new Map,a=[],c=new Map,l=new Map,u=new Set,m=[],d=0;for(let D of o.keys()){if(c.has(D))continue;let w=[],$=(o.get(D)??new Set).values();for(c.set(D,d),l.set(D,d),d+=1,m.push(D),u.add(D),w.push({node:D,iter:$,pendingChild:null});w.length>0;){let F=w[w.length-1];if(F.pendingChild!==null){let je=F.pendingChild;F.pendingChild=null,l.set(F.node,Math.min(l.get(F.node),l.get(je)))}let se=F.iter.next();if(se.done){if(l.get(F.node)===c.get(F.node)){let je=[];for(;;){let br=m.pop();if(u.delete(br),je.push(br),s.set(br,a.length),br===F.node)break}a.push(je)}w.pop();continue}let he=se.value;if(c.has(he))u.has(he)&&l.set(F.node,Math.min(l.get(F.node),c.get(he)));else{c.set(he,d),l.set(he,d),d+=1,m.push(he),u.add(he);let je=(o.get(he)??new Set).values();F.pendingChild=he,w.push({node:he,iter:je,pendingChild:null})}}}let p=new Map,h=new Array(a.length);for(let D=0;D<a.length;D++)h[D]=a[D].length,p.set(D,new Set);for(let[D,w]of o){let $=s.get(D);for(let F of w){let se=s.get(F);se!==$&&p.get($).add(se)}}let f=new Array(a.length),y=new Array(a.length);for(let D=0;D<a.length;D++){let w=[],$=0;for(let F of p.get(D)){let se=y[F];se>$&&($=se,w=f[F])}f[D]=[D,...w],y[D]=h[D]+$}function R(D){return f[D]}let E=a.map(D=>[...D].sort()),S=new Set,x=[];for(let D=0;D<a.length;D++){let w=R(D),$=[];for(let se of w)$.push(...E[se]);if($.length<i)continue;let F=$.join(" ");S.has(F)||(S.add(F),x.push({chain:$,depth:$.length}))}return x.sort((D,w)=>w.depth-D.depth),x.slice(0,n)}function Yo(e,t){let n=A(e,t);if(!n)return[];let r=e.get(`SELECT symbol, enclosing_symbol FROM global_symbols
511
- 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 m=e.get("SELECT symbol, enclosing_symbol FROM global_symbols WHERE symbol = ?",o);if(!m)break;i.push({symbol:m.symbol,shortName:b(m.symbol),depth:s}),o=m.enclosing_symbol,s++}if(i.length>1)return i;let c=ne(r.symbol);if("kind"in c)return i;let l=c.descriptors;if(l.length<=1)return i;let u=[i[0]];for(let m=l.length-2,d=1;m>=0;m--,d++){let h=l.slice(0,m+1).map(f=>f.suffix==="method"?`${f.name}()`:f.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:d})}return u}function Kn(e,t,n={}){let r=A(e,t);if(!r)return null;let i=n.semantic!==!1,o=De(e,r,{limit:50,semantic:i}),s=Sn(Se(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 Qn(e,t){let n=new Set;for(let r of e)t.has(r)&&n.add(r);return n}function Yn(e,t){let n=new Set;for(let r of e)t.has(r)||n.add(r);return n}function Tl(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 Al(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 Xo(e){let t=e.length;if(t===0)return new Map;let n=new Map;for(let i of e)for(let o of i)n.set(o,(n.get(o)??0)+1);let r=new Map;for(let[i,o]of n)r.set(i,Math.log(t/o));return r}function Nb(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 Ml(e,t,n){let r=Qn(e,t);if(r.size===0)return{similarity:0,significantShared:[],trivialShared:[]};let i=0,o=0,s=0,a=new Set([...e,...t]);for(let p of a){let h=n.get(p)??0,f=e.has(p)?h:0,y=t.has(p)?h:0;i+=f*y,o+=f*f,s+=y*y}let c=Math.sqrt(o)*Math.sqrt(s),l=c>0?i/c:0,u=Nb(n),m=[],d=[];for(let p of r)(n.get(p)??0)>=u?m.push(p):d.push(p);return m.sort((p,h)=>(n.get(h)??0)-(n.get(p)??0)),{similarity:l,significantShared:m,trivialShared:d}}function Zn(e,t,n={}){let{minSimilarity:r=.4,limit:i=20}=n,o=wb(e,t,{semantic:n.semantic!==!1});if(!o)return[];if(!Y(o.symbol))return[];let s=_b(e,o,r,{scanLimit:n.scanLimit,semantic:n.semantic!==!1});return s.length>0?s.slice(0,i):Fb(e,t,{minSimilarity:r,limit:i})}function _b(e,t,n,r){let i=ni(e,{minCallees:3,excludeSymbol:t.symbol,scanLimit:r.scanLimit,semantic:r.semantic}),o=Xo([t,...i].map(a=>a.callees)),s=[];for(let a of i){if(a.callees.size<3)continue;let c=Ol(t,a,o,{minSimilarity:n,requireSignificantShared:1,requireSharedCount:0});c&&s.push(c)}return s.sort((a,c)=>c.similarity-a.similarity),s}function Ol(e,t,n,r){let{similarity:i,significantShared:o}=Ml(e.callees,t.callees,n);if(i<r.minSimilarity)return null;let s=Qn(e.callees,t.callees).size;if(o.length<r.requireSignificantShared&&s<r.requireSharedCount)return null;let a=o.length>0?o:[...Qn(e.callees,t.callees)];return{symbolA:e.symbol,shortNameA:b(e.symbol),fileA:e.file,symbolB:t.symbol,shortNameB:b(t.symbol),fileB:t.file,similarity:i,similarityBasis:"callees",sharedCallees:a.map(b),uniqueToA:[...Yn(e.callees,t.callees)].map(b),uniqueToB:[...Yn(t.callees,e.callees)].map(b)}}function Ze(e,t={}){let{minSimilarity:n=.5,limit:r=20,scope:i,minCallees:o=4,crossFileOnly:s=!1,scanLimit:a}=t,c=ni(e,{minCallees:o,scope:i,scanLimit:a,semantic:t.semantic!==!1}),l=Xo(c.map(f=>f.callees)),u=new Map;for(let f of c)for(let y of f.callees)u.set(y,(u.get(y)??0)+1);let m=Math.max(8,Math.ceil(Math.sqrt(c.length))),d=new Map;for(let f=0;f<c.length;f+=1)for(let y of c[f].callees){if((u.get(y)??0)>m)continue;let R=d.get(y);R||(R=[],d.set(y,R)),R.push(f)}let p=[],h=new Set;e:for(let f=0;f<c.length;f+=1){let y=c[f],R=new Set;for(let E of y.callees){let S=d.get(E);if(S)for(let x of S)x>f&&R.add(x)}for(let E of R){let S=`${f}|${E}`;if(h.has(S))continue;h.add(S);let x=c[E];if(s&&y.file===x.file)continue;if(y.paramCount>=0&&x.paramCount>=0){let w=Math.abs(y.paramCount-x.paramCount),$=Math.max(2,Math.ceil(Math.max(y.paramCount,x.paramCount)*.5));if(w>$)continue}let D=Ol(y,x,l,{minSimilarity:n,requireSignificantShared:2,requireSharedCount:4});if(D&&(p.push(D),p.length>r*5))break e}}return p.sort((f,y)=>y.similarity-f.similarity),p.slice(0,r)}var Lb=["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 wb(e,t,n){let r=A(e,t),i=new _(e);if(!r)return null;let o=Se(e,r,{semantic:n.semantic});return{symbol:r.symbol,file:r.relativePath,callees:ri(o.map(s=>s.symbol)),paramCount:i.callableSignature(r)?.paramCount??-1}}var Eb=te("callee-fingerprint-corpus",{clearGroups:["whole-project","definition-catalog"]});function ni(e,t){let{minCallees:n,scope:r,excludeSymbol:i,scanLimit:o}=t,s=t.semantic!==!1,a=Eb.get(e,()=>new Map),c=`${n}|${r??""}|${o??""}|${s}`,l=a.get(c);return l||(l=kb(e,{minCallees:n,scope:r,scanLimit:o,semantic:s}),a.set(c,l)),i===void 0?l:l.filter(u=>u.symbol!==i)}function kb(e,t){let{minCallees:n,scope:r,scanLimit:i,semantic:o}=t,s=new _(e),a=Ne(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:ri((c.get(l.symbolId)??[]).map(u=>u.symbol)),paramCount:s.callableSignature(l)?.paramCount??-1})).filter(l=>l.callees.size>=n)}function ri(e){return new Set([...e].filter(t=>!Pb(t)))}function Pb(e){return Lb.some(t=>e.includes(t))}function Fb(e,t,n){let r=Tb(e,t);if(!r||r.tokens.size<3)return[];let i=n.minSimilarity>=.5?n.minSimilarity:.3,o=[];for(let s of Ob(e)){if(s.symbol===r.symbol||s.tokens.size<3)continue;let a=Qn(r.tokens,s.tokens);if(a.size<2)continue;let c=new Set([...r.tokens,...s.tokens]),l=c.size>0?a.size/c.size:0;l<i||o.push({symbolA:r.symbol,shortNameA:b(r.symbol),fileA:r.file,symbolB:s.symbol,shortNameB:b(s.symbol),fileB:s.file,similarity:l,similarityBasis:"source-tokens",sharedCallees:[...a].sort(),uniqueToA:[...Yn(r.tokens,s.tokens)].sort(),uniqueToB:[...Yn(s.tokens,r.tokens)].sort()})}return o.sort((s,a)=>a.similarity-s.similarity||s.shortNameB.localeCompare(a.shortNameB)),o.slice(0,n.limit)}function Tb(e,t){let n=A(e,t);if(!n||!Y(n.symbol))return null;let r=Ab(e,n);return r?{symbol:n.symbol,file:n.relativePath,tokens:r}:null}function Ab(e,t){let n=T(t.symbol),r=$l(e,t.relativePath,t.startLine,t.endLine,n),i=jl(r,n);return i.size>0?i:null}var Mb=te("source-fingerprint-corpus",{clearGroups:["whole-project","definition-catalog"]});function Ob(e){return Mb.get(e,()=>$b(e))}function $b(e){return new _(e).productionCallableDefinitions().map(n=>({symbol:n.symbol,file:n.relativePath,tokens:jl($l(e,n.relativePath,n.startLine,n.endLine,n.leaf),n.leaf)})).filter(n=>n.tokens.size>0)}function $l(e,t,n,r,i){let o=P(e,t);if(!o)return"";let s=o.split(`
512
- `);if(r>=n&&r-n<=12)return s.slice(n,r+1).join(`
513
- `);let a=[new RegExp(`\\bdef\\s+${Xn(i)}\\b`),new RegExp(`\\bfun\\s+${Xn(i)}\\b`),new RegExp(`\\bfn\\s+${Xn(i)}\\b`),new RegExp(`\\bfunction\\s+${Xn(i)}\\b`),new RegExp(`\\b${Xn(i)}\\s*\\(`)],c=s.findIndex(l=>a.some(u=>u.test(l)));if(c>=0){let l=c;for(let u=c+1;u<s.length&&u<=c+8;u++){let m=s[u]??"";if(u>c&&Bb(m)||(l=u,m.trim()===""&&u>c+1))break}return s.slice(c,l+1).join(`
514
- `)}return s.slice(n,Math.min(s.length,n+8)).join(`
515
- `)}function jl(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=jb(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 jb(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 Bb(e){return/^\s*(?:def|fun|fn|function|class|trait|module|object|enum|interface|public|private|protected)\b/.test(e)}function Xn(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Zo(e,t={}){let{minSimilarity:n=.5,limit:r=20,scope:i,filePattern:o}=t,s=t.minDeps??(o?1:3),{profiles:a,distinctiveDeps:c}=Hb(e,{scope:i,minDeps:s}),l=[];if(o){let u=a.find(m=>m.file.includes(o));if(!u)return[];for(let m of a){if(m.file===u.file)continue;let d=Bl(u,m,n,c);d&&l.push(d)}}else for(let u=0;u<a.length;u++){for(let m=u+1;m<a.length;m++){let d=Bl(a[u],a[m],n,c);d&&l.push(d)}if(l.length>r*5)break}return l.sort((u,m)=>m.similarity-u.similarity),l.slice(0,r)}function Hb(e,t){let{scope:n,minDeps:r}=t,i=X(e,n),{universalDeps:o,distinctiveDeps:s}=qb(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 qb(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 Bl(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=Tl(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 es(e,t={}){let{minSimilarity:n=.5,limit:r=15,scope:i,minChainLength:o=3,maxChainLength:s=8}=t,a=X(e,i),c=Qb(a,o,s);if(c.length===0)return[];let l=Vb(c);return l.length<2?[]:Kb(Gb(l,n,r),r)}function Vb(e){let t=Wb(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 Wb(e){let{nodeFreq:t,tailFreq:n}=Ub(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 Ub(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 Gb(e,t,n){let r=[];for(let i=0;i<e.length;i++){for(let o=i+1;o<e.length;o++){let s=Jb(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 Jb(e,t,n){if(!zb(e.filtered,t.filtered))return null;let{distance:r,ops:i}=Yb(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:Xb(e.original,t.original),commonSuffix:Zb(e.original,t.original)}}function zb(e,t){let n=new Set(e);return t.some(r=>n.has(r))}function Kb(e,t){let n=[];for(let r of e)if(n.some(o=>Hl(r.chainA,o.chainA)&&Hl(r.chainB,o.chainB))||n.push(r),n.length>=t)break;return n}function Qb(e,t,n){let r=[];for(let o of e.keys()){if(r.length>=500)break;ql(e,o,[o],new Set([o]),t,n,r,500)}return r}function ql(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),ql(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 Yb(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 Xb(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 Zb(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 Hl(e,t){if(e.length>t.length)return!1;let n=t.join("\u2192"),r=e.join("\u2192");return n.includes(r)}function _e(e){let t=e.orderCandidates?[...e.candidates()].sort(e.orderCandidates):e.candidates(),n=Ne(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 $t(e,t={}){let{scope:n,minLoc:r=10,minCallees:i=6,limit:o=20,scanLimit:s}=t,a=new _(e);return _e({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)=>eS(c,l.get(c.symbolId)??[],i),orderResults:(c,l)=>l.clusters.length-c.clusters.length||l.loc-c.loc,limit:o})}function eS(e,t,n){let r=new Set(t.map(a=>a.symbol));if(r.size<n)return null;let i=tS(r,t),o=nS(r,i);if(o.length<2)return null;let s=rS(o,i);return s.length===0?null:{symbol:e.symbol,shortName:b(e.symbol),relativePath:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:q(e),totalCallees:r.size,clusters:s}}function tS(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 nS(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 rS(e,t){return e.filter(n=>n.size>=3).map(n=>iS(n,e,t)).filter(n=>n.isolation>.5).sort((n,r)=>r.isolation-n.isolation)}function iS(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}}function er(e,t,n={}){let{maxDepth:r=5,scope:i}=n,o=A(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 m=[];for(let d of l)for(let p of oS(e,d,i)){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&&m.push(p.symbolMatch)}l=m}return s.sort((u,m)=>u.depth-m.depth||u.file.localeCompare(m.file)),s}function oS(e,t,n){let r=De(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 sS(e,t,n)){if(i.has(l))continue;let u=W(e,l),m=u.length>0?Ce(u,u[0].startLine):null;o.push({symbol:m?.symbol??l,file:l})}let s=[...r,...o],a=[],c=new Set;for(let l of s){let u=cn(e,l.symbol);if(!u){let d=`${l.file}|${l.symbol}`;if(c.has(d))continue;c.add(d),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)||!aS(u.symbol))continue;let m=`${u.symbolId}|${u.relativePath}`;c.has(m)||(c.add(m),a.push({symbolId:u.symbolId,symbol:u.symbol,shortName:b(u.symbol),file:u.relativePath,symbolMatch:u}))}return a}function sS(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
457
+ LIMIT ?`,n).filter(s=>!e.isIgnored(s.file1)&&!e.isIgnored(s.file2)).map(s=>Zd(s.file1,s.file2,s.shared))}function Zd(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 an(e,t={}){let{scope:n,maxDepth:i=10}=t,r=ee(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((_,w)=>_<w?_:w)),S=[...g.slice(b,-1),...g.slice(0,b),g[b]],L=S.join(" -> ");u.has(L)||(u.add(L),o.push({path:S,kind:aL(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 aL(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":Gr(t)||Gr(n)||em(t,n)||em(n,t)||tm(t,n)||tm(n,t)||K(t)==="entry"||K(n)==="entry"?"module-hierarchy":"real"}function em(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 tm(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 da(e,t={}){let{limit:n=20,scope:i,minFanIn:r=2,minFanOut:o=2,scanLimit:s}=t,a=new E(e);return He(a.productionCallableDefinitions({scope:i,requireCallableSymbol:!0,includeSuppressed:!0,sortByLocDesc:typeof s=="number"&&s>0}),s).map(u=>cL(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 cL(e,t,n){let i=new Set(Ve(e,t,{limit:500,semantic:n}).map(s=>s.file)).size,r=new Set(Fe(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 cn(e,t={}){let{scope:n,minLoc:i=3,scanLimit:r}=t,o=new E(e),s=t.semantic!==!1,a=He(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 pa={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"},ma=new Map;for(let[e,t]of Object.entries(pa))ma.set(t.toLowerCase(),Number(e));function lL(e){let t=parseInt(e,10);if(!isNaN(t))return t;let n=e.toLowerCase(),i=ma.get(n);if(i!==void 0)return i;for(let[r,o]of ma)if(r.includes(n))return o;return null}function fa(e,t,n={}){let{scope:i,limit:r=100}=n,o=lL(t);return o===null?[]:nm(e,i).map(a=>({row:a,resolvedKind:im(a)})).filter(a=>a.resolvedKind===o).slice(0,r).map(({row:a,resolvedKind:c})=>({symbol:a.symbol,shortName:y(a.symbol),kind:c,kindName:pa[c]??"Unknown",relativePath:a.relative_path,startLine:a.start_line,endLine:a.end_line}))}function ga(e,t={}){let n=new Map;for(let i of nm(e,t.scope)){let r=im(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:pa[i]??"Unknown",count:r}))}function nm(e,t){return tt(e,{scope:t}).map(uL)}function uL(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 im(e){return e.kind!==null&&e.kind!==0?dL(e.kind,e.symbol,e.documentation):mL(e.symbol,e.documentation,e.enclosing_symbol)}function dL(e,t,n){let i=(n??"").toLowerCase();if(X(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 mL(e,t,n){let i=ue(e);if("kind"in i)return null;let r=i.descriptors,o=r[r.length-2]??null,s=X(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?X(n):o?.suffix??null)==="type"?21:83}function ha(e,t={}){let{limit:n=10,scope:i,minDepth:r=3}=t,o=ee(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 N=[],V=(o.get(C)??new Set).values();for(c.set(C,m),l.set(C,m),m+=1,d.push(C),u.add(C),N.push({node:C,iter:V,pendingChild:null});N.length>0;){let B=N[N.length-1];if(B.pendingChild!==null){let Ee=B.pendingChild;B.pendingChild=null,l.set(B.node,Math.min(l.get(B.node),l.get(Ee)))}let he=B.iter.next();if(he.done){if(l.get(B.node)===c.get(B.node)){let Ee=[];for(;;){let ft=d.pop();if(u.delete(ft),Ee.push(ft),s.set(ft,a.length),ft===B.node)break}a.push(Ee)}N.pop();continue}let ae=he.value;if(c.has(ae))u.has(ae)&&l.set(B.node,Math.min(l.get(B.node),c.get(ae)));else{c.set(ae,m),l.set(ae,m),m+=1,d.push(ae),u.add(ae);let Ee=(o.get(ae)??new Set).values();B.pendingChild=ae,N.push({node:ae,iter:Ee,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,N]of o){let V=s.get(C);for(let B of N){let he=s.get(B);he!==V&&p.get(V).add(he)}}let g=new Array(a.length),b=new Array(a.length);for(let C=0;C<a.length;C++){let N=[],V=0;for(let B of p.get(C)){let he=b[B];he>V&&(V=he,N=g[B])}g[C]=[C,...N],b[C]=h[C]+V}function S(C){return g[C]}let L=a.map(C=>[...C].sort()),_=new Set,w=[];for(let C=0;C<a.length;C++){let N=S(C),V=[];for(let he of N)V.push(...L[he]);if(V.length<r)continue;let B=V.join(" ");_.has(B)||(_.add(B),w.push(pL(V)))}return w.sort((C,N)=>N.depth-C.depth),fL(w).slice(0,n)}function pL(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 fL(e){let t=[];for(let n of e)t.some(i=>gL(n.chain,i.chain))||t.push(n);return t}function gL(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 ba(e,t){let n=j(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=ue(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 Bi(e,t,n={}){let i=j(e,t);if(!i)return null;let r=n.semantic!==!1,o=Ve(e,i,{limit:50,semantic:r}),s=ei(Fe(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 me(e,t){let n=new Set;for(let i of e)t.has(i)||n.add(i);return n}function rt(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 rm(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 ya(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 hL(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 om(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=hL(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 Hi(e,t,n={}){let{minSimilarity:i=.4,limit:r=20}=n,o=xL(e,t,{semantic:n.semantic!==!1});if(!o)return[];if(!re(o.symbol))return[];let s=bL(e,o,i,{scanLimit:n.scanLimit,semantic:n.semantic!==!1});return s.length>0?s.slice(0,r):LL(e,t,{minSimilarity:i,limit:r})}function bL(e,t,n,i){let r=so(e,{minCallees:3,excludeSymbol:t.symbol,scanLimit:i.scanLimit,semantic:i.semantic}),o=ya([t,...r].map(a=>a.callees)),s=[];for(let a of r){if(a.callees.size<3)continue;let c=cm(t,a,o,{minSimilarity:n,requireSignificantShared:1,requireSharedCount:0});c&&s.push(c)}return s.sort((a,c)=>c.similarity-a.similarity),s}function cm(e,t,n,i){let{similarity:r,significantShared:o}=om(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:[...me(e.callees,t.callees)].map(y),uniqueToB:[...me(t.callees,e.callees)].map(y),...c}}function Ct(e,t={}){let{minSimilarity:n=.5,limit:i=20,scope:r,minCallees:o=4,crossFileOnly:s=!1,scanLimit:a}=t,c=so(e,{minCallees:o,scope:r,scanLimit:a,semantic:t.semantic!==!1}),l=ya(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 L=m.get(S);L||(L=[],m.set(S,L)),L.push(b)}let p=[],h=0,g=new Set;for(let b=0;b<c.length;b+=1){let S=c[b],L=new Set;for(let _ of S.callees){let w=m.get(_);if(w)for(let C of w)C>b&&L.add(C)}for(let _ of L){let w=`${b}|${_}`;if(g.has(w))continue;g.add(w);let C=c[_];if(s&&S.file===C.file)continue;if(S.paramCount>=0&&C.paramCount>=0){let V=Math.abs(S.paramCount-C.paramCount),B=Math.max(2,Math.ceil(Math.max(S.paramCount,C.paramCount)*.5));if(V>B)continue}let N=cm(S,C,l,{minSimilarity:n,requireSignificantShared:2,requireSharedCount:4});N&&(yL(p,N,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 yL(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 SL=["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 xL(e,t,n){let i=j(e,t),r=new E(e);if(!i)return null;let o=Fe(e,i,{semantic:n.semantic});return{symbol:i.symbol,file:i.relativePath,callees:ao(o.map(s=>s.symbol)),paramCount:r.callableSignature(i)?.paramCount??-1}}var CL=ce("callee-fingerprint-corpus",{clearGroups:["whole-project","definition-catalog"]});function so(e,t){let{minCallees:n,scope:i,excludeSymbol:r,scanLimit:o}=t,s=t.semantic!==!1,a=CL.get(e,()=>new Map),c=`${n}|${i??""}|${o??""}|${s}`,l=a.get(c);return l||(l=vL(e,{minCallees:n,scope:i,scanLimit:o,semantic:s}),a.set(c,l)),r===void 0?l:l.filter(u=>u.symbol!==r)}function vL(e,t){let{minCallees:n,scope:i,scanLimit:r,semantic:o}=t,s=new E(e),a=He(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:ao((c.get(l.symbolId)??[]).map(u=>u.symbol)),paramCount:s.callableSignature(l)?.paramCount??-1})).filter(l=>l.callees.size>=n)}function ao(e){return new Set([...e].filter(t=>!RL(t)))}function RL(e){return SL.some(t=>e.includes(t))}function LL(e,t,n){let i=IL(e,t);if(!i||i.tokens.size<3)return[];let r=n.minSimilarity>=.5?n.minSimilarity:.3,o=[],s=new Set,a=_L(PL(e));for(let c of i.tokens)for(let l of a.get(c)??[])s.add(l);for(let c of s){if(c.symbol===i.symbol||c.tokens.size<3)continue;let l=Le(i.tokens,c.tokens);if(l.size<2)continue;let u=new Set([...i.tokens,...c.tokens]),d=u.size>0?l.size/u.size:0;d<r||o.push({symbolA:i.symbol,shortNameA:y(i.symbol),fileA:i.file,symbolB:c.symbol,shortNameB:y(c.symbol),fileB:c.file,similarity:d,similarityBasis:"source-tokens",sharedCallees:[...l].sort(),uniqueToA:[...me(i.tokens,c.tokens)].sort(),uniqueToB:[...me(c.tokens,i.tokens)].sort(),...lm([...l],"source-tokens")})}return o.sort((c,l)=>l.similarity-c.similarity||c.shortNameB.localeCompare(l.shortNameB)),o.slice(0,n.limit)}function lm(e,t){let n=e.flatMap(xa),i=e.flatMap(b=>sm(b,t)),r=Sa(n,um),o=Sa(n,dm),s=Sa(i,Ca),a=[...new Set(i.filter(am))],c=e.filter(b=>{let S=sm(b,t);return S.some(L=>Ca.has(L))&&S.some(am)}).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=>mm.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:wL(h,g)}}function wL(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 Sa(e,t){return[...new Set(e.filter(n=>t.has(n)))]}function xa(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(t=>t.length>1)}function sm(e,t){if(t==="source-tokens")return xa(e);let n=F(e);return xa(n.length>0?n:kL(e))}function kL(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 am(e){return e.length>3&&!Ca.has(e)&&!um.has(e)&&!dm.has(e)&&!mm.has(e)&&!DL.has(e)}var Ca=new Set(["archive","assign","book","cancel","create","delete","ensure","export","import","notify","persist","publish","restore","schedule","send","set","submit","sync","update","upload","validate","write"]),um=new Set(["access","auth","authorize","cache","context","db","find","get","guard","list","permission","permissions","prisma","query","request","response","role","route","session","sql","where"]),dm=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"]),mm=new Set(["bytes","crypto","data","false","get","hex","id","key","map","name","num","random","result","secret","set","string","to","token","true","type","value"]),DL=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 IL(e,t){let n=j(e,t);if(!n||!re(n.symbol))return null;let i=NL(e,n);return i?{symbol:n.symbol,file:n.relativePath,tokens:i}:null}function NL(e,t){let n=F(t.symbol),i=pm(e,t.relativePath,t.startLine,t.endLine,n),r=fm(i,n);return r.size>0?r:null}var EL=ce("source-fingerprint-corpus",{clearGroups:["whole-project","definition-catalog"]});function PL(e){return EL.get(e,()=>TL(e))}function _L(e){let t=new Map;for(let n of e)for(let i of n.tokens){let r=t.get(i);r||(r=[],t.set(i,r)),r.push(n)}return t}function TL(e){return new E(e).productionCallableDefinitions().map(n=>({symbol:n.symbol,file:n.relativePath,tokens:fm(pm(e,n.relativePath,n.startLine,n.endLine,n.leaf),n.leaf)})).filter(n=>n.tokens.size>0)}function pm(e,t,n,i,r){let o=Pe(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+${Vi(r)}\\b`),new RegExp(`\\bfun\\s+${Vi(r)}\\b`),new RegExp(`\\bfn\\s+${Vi(r)}\\b`),new RegExp(`\\bfunction\\s+${Vi(r)}\\b`),new RegExp(`\\b${Vi(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&&$L(u)||(c=l,u.trim()===""&&l>a+1))break}return o.slice(a,c+1).join(`
460
+ `)}return o.slice(n,Math.min(o.length,n+8)).join(`
461
+ `)}function fm(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=FL(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 FL(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 $L(e){return/^\s*(?:def|fun|fn|function|class|trait|module|object|enum|interface|public|private|protected)\b/.test(e)}function Vi(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ot(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 va(e,t={}){let{minSimilarity:n=.5,limit:i=20,scope:r,filePattern:o}=t,s=t.minDeps??(o?1:3),{profiles:a,distinctiveDeps:c}=AL(e,{scope:r,minDeps:s});return ot({profiles:a,limit:i,filePattern:o,overrunFactor:5,compare:(l,u)=>OL(l,u,n,c)})}function AL(e,t){let{scope:n,minDeps:i}=t,r=ee(e,n),{universalDeps:o,distinctiveDeps:s}=ML(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 ML(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 OL(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=rt(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 ln(e,t={}){let{minSimilarity:n=.62,minTokens:i=8,limit:r=20,scope:o,scanLimit:s,filePattern:a}=t,c=$n(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 ot({profiles:c,limit:r,filePattern:a,compare:(l,u)=>jL(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 jL(e,t,n){let i=Le(e.tokens,t.tokens);if(i.size<6||!BL(i))return null;let r=rt(e.tokens,t.tokens);return r<n?null:{fileA:e.file,componentA:e.component,fileB:t.file,componentB:t.component,similarity:r,sharedTokens:Ra(i),sharedComponents:qi(i,"component:"),sharedNativeTags:qi(i,"native:"),sharedProps:qi(i,"prop:"),sharedEvents:qi(i,"event:"),sharedBindings:qi(i,"binding:"),uniqueToA:Ra(me(e.tokens,t.tokens)).slice(0,25),uniqueToB:Ra(me(t.tokens,e.tokens)).slice(0,25),locA:e.profile.loc,locB:t.profile.loc}}function BL(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 qi(e,t){return[...e].filter(n=>n.startsWith(t)).map(n=>n.slice(t.length)).sort()}function Ra(e){return[...e].sort()}function dn(e,t={}){let{minSimilarity:n=.45,minSharedBehaviors:i=6,limit:r=20,scope:o,scanLimit:s,filePattern:a}=t,c=$n(e,{scope:o,minBehaviorTokens:Math.max(3,i),scanLimit:s}).map(l=>({file:l.file,component:l.name,tokens:l.behaviorTokens,profile:l}));return ot({profiles:c,limit:r,filePattern:a,compare:(l,u)=>VL(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 VL(e,t,n,i){let r=Le(e.tokens,t.tokens);if(r.size<i||!zL(r))return null;let o=GL(e.tokens,t.tokens);if(o<n)return null;let s=un(r,"hook:"),a=un(r,"react-hook:"),c=un(r,"effect:"),l=un(r,"state:"),u=un(r,"request:"),d=un(r,"handler:"),m=un(r,"handler-verb:"),p=HL({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:La(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:La(me(e.tokens,t.tokens)).slice(0,25),uniqueToB:La(me(t.tokens,e.tokens)).slice(0,25),reason:KL({sharedHooks:s,sharedReactHooks:a,sharedEffects:c,sharedState:l,sharedRequests:u,sharedHandlers:d,sharedHandlerVerbs:m}),locA:e.profile.loc,locB:t.profile.loc}}function HL(e){let t=[],n=[],i=[];e.sharedReactHooks.length&&n.push(`shared React primitives: ${e.sharedReactHooks.join(", ")}`),e.sharedEffects.length&&n.push(`shared lifecycle primitive: ${e.sharedEffects.join(", ")}`),Ui(e.sharedHooks,"shared hook",t,i),Ui(e.sharedRequests,"shared request",t,n),Ui(e.sharedState,"shared state",t,n),Ui(e.sharedHandlers,"shared handler",t,n),Ui(e.sharedHandlerVerbs,"shared action verb",t,n);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",c=a==="domain-behavior"||a==="mixed"?"signal":"support",l=[...t,...i,...n].slice(0,6);return{actionTier:c,evidenceClass:a,reasons:l,recommendation:WL(a)}}function Ui(e,t,n,i){let r=[],o=[];for(let s of e)qL(s)?r.push(s):o.push(s);r.length&&n.push(`${t} has domain term(s): ${r.slice(0,6).join(", ")}`),o.length&&i.push(`${t} is generic workflow: ${o.slice(0,6).join(", ")}`)}function qL(e){return UL(e).filter(n=>!JL.has(n)).length>0}function UL(e){return e.replace(/([A-Z])([A-Z][a-z])/g,"$1 $2").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/^use(?=[A-Z])/,"").replace(/^handle(?=[A-Z])/,"").replace(/^is(?=[A-Z])/,"").replace(/^has(?=[A-Z])/,"").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean)}function WL(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 GL(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(rt(e,t),i)}function zL(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 KL(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"}function un(e,t){return[...e].filter(n=>n.startsWith(t)).map(n=>n.slice(t.length)).sort()}function La(e){return[...e].sort()}var JL=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"]);function Wi(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 $n(e,{scope:a,scanLimit:c}).filter(d=>d.kind==="component").filter(d=>!l||d.file.includes(l)||d.name.includes(l)).map(d=>QL(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 QL(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=XL(e),o=YL(e,t,r),s=ZL(e),a=ew(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:tw(a,s),reasons:n,loc:e.loc}}function XL(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 YL(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 ZL(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=>iw.has(l)),s=o>=0&&n.slice(o+1).some(l=>nw.has(l)),a=gm(i)||gm(e.name);return/(?:Page|Route|Screen|View)$/.test(i)||/(?:Page|Route|Screen|View)$/.test(e.name)||r.some(l=>rw.has(l))||o>=0&&!s&&!a?"route-page":"component"}function gm(e){let t=e.split(/[^A-Za-z0-9]+/).filter(Boolean).map(n=>n.toLowerCase());return t.at(-1)&&hm.has(t.at(-1))?!0:[...hm].some(n=>e.endsWith(ow(n)))}function ew(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 tw(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 nw=new Set(["component","components","panel","panels","partial","partials"]),hm=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"]),iw=new Set(["landing","page","pages","route","routes","screen","screens","view","views"]),rw=new Set(["landing","page","route","screen","view"]);function ow(e){return e.charAt(0).toUpperCase()+e.slice(1)}function mn(e,t={}){let{minSimilarity:n=.62,minTokens:i=8,limit:r=20,scope:o,scanLimit:s,filePattern:a}=t,c=sw(e,{scope:o,minTokens:i,scanLimit:s});return ot({profiles:c,limit:r,filePattern:a,compare:(l,u)=>cw(l,u,n),sort:(l,u)=>u.similarity-l.similarity||l.fileA.localeCompare(u.fileA)||l.fileB.localeCompare(u.fileB)})}function sw(e,t){return Fn(e,{scope:t.scope,minTemplateTokens:t.minTokens,scanLimit:t.scanLimit}).map(n=>({file:n.file,tokens:n.templateTokens,loc:aw(n)}))}function aw(e){return e.totalLines}function cw(e,t,n){let i=Le(e.tokens,t.tokens);if(i.size<6||!lw(i))return null;let r=rt(e.tokens,t.tokens);return r<n?null:{fileA:e.file,fileB:t.file,similarity:r,sharedTokens:wa(i),sharedComponents:ti(i,"component:"),sharedProps:ti(i,"prop:"),sharedEvents:ti(i,"event:"),sharedDirectives:ti(i,"directive:"),sharedSlots:ti(i,"slot:"),sharedIdentifiers:ti(i,"id:"),uniqueToA:wa(me(e.tokens,t.tokens)).slice(0,25),uniqueToB:wa(me(t.tokens,e.tokens)).slice(0,25),locA:e.loc,locB:t.loc}}function lw(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 ti(e,t){return[...e].filter(n=>n.startsWith(t)).map(n=>n.slice(t.length)).sort()}function wa(e){return[...e].sort()}function fn(e,t={}){let{minSimilarity:n=.45,minSharedBehaviors:i=6,limit:r=20,scope:o,scanLimit:s,filePattern:a}=t,c=Fn(e,{scope:o,minBehaviorTokens:Math.max(3,i),scanLimit:s}).map(l=>({file:l.file,tokens:l.behaviorTokens,profile:l}));return ot({profiles:c,limit:r,filePattern:a,compare:(l,u)=>uw(l,u,n,i),sort:(l,u)=>u.similarity-l.similarity||l.fileA.localeCompare(u.fileA)||l.fileB.localeCompare(u.fileB)})}function uw(e,t,n,i){let r=Le(e.tokens,t.tokens);if(r.size<i||!hw(r))return null;let o=gw(e.tokens,t.tokens);if(o<n)return null;let s=vt(r,"composable:"),a=vt(r,"store:"),c=vt(r,"reactivity:"),l=vt(r,"lifecycle:"),u=vt(r,"request:"),d=vt(r,"function:"),m=vt(r,"function-verb:"),p=vt(r,"template-binding:"),h=vt(r,"template-event:"),g=dw({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:ka(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:ka(me(e.tokens,t.tokens)).slice(0,25),uniqueToB:ka(me(t.tokens,e.tokens)).slice(0,25),reason:bw({sharedComposables:s,sharedStores:a,sharedRequests:u,sharedLifecycle:l,sharedFunctions:d,sharedFunctionVerbs:m,sharedBindings:p}),locA:e.profile.totalLines,locB:t.profile.totalLines}}function dw(e){let t=[],n=[],i=[];e.sharedReactivity.length&&n.push(`shared reactivity primitive: ${e.sharedReactivity.join(", ")}`),e.sharedLifecycle.length&&n.push(`shared lifecycle primitive: ${e.sharedLifecycle.join(", ")}`),pn(e.sharedComposables,"shared composable",t,i),pn(e.sharedStores,"shared store",t,i),pn(e.sharedRequests,"shared request",t,n),pn(e.sharedFunctions,"shared function",t,n),pn(e.sharedFunctionVerbs,"shared action verb",t,n),pn(e.sharedBindings,"shared binding",t,n),pn(e.sharedTemplateEvents,"shared template event",t,n);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:fw(a)}}function pn(e,t,n,i){let r=[],o=[];for(let s of e)mw(s)?r.push(s):o.push(s);r.length&&n.push(`${t} has domain term(s): ${r.slice(0,6).join(", ")}`),o.length&&i.push(`${t} is generic workflow: ${o.slice(0,6).join(", ")}`)}function mw(e){return pw(e).filter(n=>!yw.has(n)).length>0}function pw(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 fw(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 gw(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(rt(e,t),i)}function hw(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 bw(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"}function vt(e,t){return[...e].filter(n=>n.startsWith(t)).map(n=>n.slice(t.length)).sort()}function ka(e){return[...e].sort()}var yw=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 Gi(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 Fn(e,{scope:a,scanLimit:c}).filter(d=>!l||d.file.includes(l)).map(d=>Sw(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 Sw(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=xw(e),r=Cw(e,t,i),o=vw(e.file),s=Rw(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:Lw(s,o),reasons:n,loc:e.totalLines}}function xw(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 Cw(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 vw(e){return e.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean).some(i=>ww.has(i))||/(?:view|page|route)\.vue$/i.test(e)||/(?:^|\/)(views|pages|routes)\//i.test(e)?"route-page":"component"}function Rw(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 Lw(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 ww=new Set(["landing","page","pages","route","routes","view","views"]);function Da(e,t={}){let{minSimilarity:n=.5,limit:i=15,scope:r,minChainLength:o=3,maxChainLength:s=8}=t,a=ee(e,r),c=Tw(a,o,s);if(c.length===0)return[];let l=kw(c);return l.length<2?[]:_w(Nw(l,n,i),i)}function kw(e){let t=Dw(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 Dw(e){let{nodeFreq:t,tailFreq:n}=Iw(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 Iw(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 Nw(e,t,n){let i=[];for(let r=0;r<e.length;r++){for(let o=r+1;o<e.length;o++){let s=Ew(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 Ew(e,t,n){if(!Pw(e.filtered,t.filtered))return null;let{distance:i,ops:r}=Fw(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:$w(e.original,t.original),commonSuffix:Aw(e.original,t.original)}}function Pw(e,t){let n=new Set(e);return t.some(i=>n.has(i))}function _w(e,t){let n=[];for(let i of e)if(n.some(o=>bm(i.chainA,o.chainA)&&bm(i.chainB,o.chainB))||n.push(i),n.length>=t)break;return n}function Tw(e,t,n){let i=[];for(let o of e.keys()){if(i.length>=500)break;ym(e,o,[o],new Set([o]),t,n,i,500)}return i}function ym(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),ym(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 Fw(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 $w(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 Aw(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 bm(e,t){if(e.length>t.length)return!1;let n=t.join("\u2192"),i=e.join("\u2192");return n.includes(i)}function qe(e){let t=e.orderCandidates?[...e.candidates()].sort(e.orderCandidates):e.candidates(),n=He(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 gn(e,t={}){let{scope:n,minLoc:i=10,minCallees:r=6,limit:o=20,scanLimit:s}=t,a=new E(e);return qe({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)=>Mw(c,l.get(c.symbolId)??[],r),orderResults:(c,l)=>l.clusters.length-c.clusters.length||l.loc-c.loc,limit:o})}function Mw(e,t,n){let i=new Set(t.map(l=>l.symbol));if(i.size<n)return null;let r=Hw(i,t),o=qw(i,r);if(o.length<2)return null;let s=Uw(o,r);if(s.length===0)return null;let a=y(e.symbol),c=Ow(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 Ow(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=jw(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 jw(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=Bw(e);return Vw.has(i)?`caller verb suggests orchestration: ${i}`:null}function Bw(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 Vw=new Set(["apply","build","check","collect","create","diff","execute","find","handle","load","prepare","process","render","resolve","run","select","sync","update","validate","verify","write"]);function Hw(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 qw(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 Uw(e,t){return e.filter(n=>n.size>=3).map(n=>Ww(n,e,t)).filter(n=>n.isolation>.5).sort((n,i)=>i.isolation-n.isolation)}function Ww(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 ni}from"path";var Gw=U("definition-consumer-file-usage",{clearGroups:["whole-project","source-file"]});function hn(e,t,n){return e.callerFileMap(t,{semantic:n.semantic,sourceFallback:n.sourceFallback})}function co(e,t,n){let i=[],r=0,o=0,s=F(t.symbol);for(let a of n)Kw(e,a,t.relativePath,s)?r++:Ia(e,a,s)?o++:i.push(a);return{realConsumers:i,barrelConsumers:r,importOnlyConsumers:o}}function Ia(e,t,n){if(!n)return!1;let i=W(t);if(!i)return!1;let r=Gw.get(e,t,()=>zw(e,t,i));return r.importedLeaves.has(n)&&!r.usedLeaves.has(n)}function zw(e,t,n){let i=new Set,r=new Set,o=le(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 Kw(e,t,n,i){if(!i)return!1;let r=Pe(e,t);if(r.length===0)return!1;let o=ki(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 Jw=20,Qw=1,Xw=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"]]),Yw=new Set(["components","contracts","hooks","lib","services","shared","stores","utils"]),Zw=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 _a(e,t={}){let n=Pa(t.limit,Jw),i=Pa(t.minConsumers,Qw),r=new E(e),o=r.fileDependencyGraph(t.scope),s=Sk(M(e,{includeIgnored:!1})),a=vk(e.config.locality?.architecturalBoundarySegments,t.architecturalBoundarySegments);return(t.target?ek(e,r,t.target):tk(e,t.scope,t.scanLimit)).map(u=>nk(r,o,u,t,s,a)).filter(u=>u.consumerFiles.length>=i||t.target).sort(yk).slice(0,n)}function ek(e,t,n){let i=ok(e,n);if(i)return[Rm(i)];let r=j(e,n);if(!r)return[];let o=t.definitionsForFile(r.relativePath).find(s=>s.symbolId===r.symbolId);return o?[sk(o)]:[{unit:{kind:"symbol",file:r.relativePath,shortName:y(r.symbol),symbol:r.symbol,startLine:r.startLine,endLine:r.endLine}}]}function tk(e,t,n){let i=M(e,{scope:t,includeIgnored:!1}),r=Pa(n,i.length);return i.slice(0,r).map(o=>Rm(o))}function nk(e,t,n,i,r,o){let s=n.definition?ik(e,n.definition,i.semantic):rk(t,n.unit.file),a=n.definition?s.length>0?"exact":"none":s.length>0?"file-level":"none",c=n.unit.file,l=Qe(ni.dirname(c)),u=ck(s),d=ak(l),m=$a([...Sm(l),...u?Sm(u):[]]),p=lk(n.unit,l,u,s),h=uk(p,n.unit,l,u,s,r,o),g=gk(n.unit,a,u,s,l,h.whyNoSuggestedHome),b=hk(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:bk(p,h.suggestedHome,a)}}function ik(e,t,n){let i=hn(e,[t],{semantic:n!==!1,sourceFallback:!0});return Im(i.get(t.symbolId)??[])}function rk(e,t){let n=[];for(let[i,r]of e.entries())i!==t&&r.has(t)&&n.push(i);return Im(n)}function ok(e,t){let n=Fa(t),i=M(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 sk(e){return{definition:e,unit:{kind:"symbol",file:e.relativePath,shortName:y(e.symbol),symbol:e.symbol,startLine:e.startLine,endLine:e.endLine}}}function Rm(e){return{unit:{kind:"file",file:e,shortName:ni.basename(e)}}}function ak(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:Ta(r)})}return t}function Sm(e){return e==="."?[]:Lm(e).map(({marker:t,prefix:n})=>`${t}: ${n}`)}function Ta(e){return $a(Lm(e).map(({marker:t})=>t))}function Lm(e){let t=e.split("/").filter(Boolean),n=[];for(let i=0;i<t.length;i+=1){let r=Xw.get(t[i]);r&&n.push({marker:r,prefix:t.slice(0,i+1).join("/")})}return n}function ck(e){if(e.length===0)return null;let t=e.map(i=>Qe(ni.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 lk(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":Cm(n,"package")?"package-level-shared":Cm(n,"app")?"app-level-shared":vm(n,["feature","domain","module"])||vm(t,["feature","domain","module"])?"feature-local-shared":"sibling-folder":"no-exact-consumers"}function uk(e,t,n,i,r,o,s){let a=dk(e,i);if(a)return Bt(a);let c=xk(t.file),l=mk(e,n,c,r,s);if(l)return l;let u=i;if(Qe(n)===Qe(u))return Bt(`${n} is already the nearest common owner for its consumers.`);let d=pk(u,n,c,s);return d||fk(u,n,c,o,s)}function dk(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 mk(e,t,n,i,r){if(e==="same-file"){let o=i[0]??null;return o?Na(o):Bt("No same-file consumer path was available.")}if(e==="sibling-folder"&&i.length===1){let o=Qe(ni.dirname(i[0])),s=Dm(t,n,o,r);return s?Bt(s):Na(o)}return null}function pk(e,t,n,i){return Lk(e)?wm(e,t,n,i,`Nearest shared owner ${e} is outside source root ${n}.`):null}function fk(e,t,n,i,r){if(e===".")return Bt("The nearest common owner is the repository root.");let o=`${e}/shared`,s=wm(o,t,n,r,`Proposed home ${o} is outside source root ${n}.`);return s.confidence==="withheld"||i.has(o)?s:Bt(`${o} does not exist in the indexed project.`)}function wm(e,t,n,i,r){if(!km(e,n))return Bt(r);let o=Dm(t,n,e,i);return o?Bt(o):Na(e)}function Na(e){return{suggestedHome:e,confidence:"exact",whyNoSuggestedHome:null}}function Bt(e){return{suggestedHome:null,confidence:"withheld",whyNoSuggestedHome:e}}function gk(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 hk(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 bk(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 yk(e,t){return xm(t)-xm(e)||e.candidatePath.localeCompare(t.candidatePath)}function xm(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 Sk(e){let t=new Set(["."]);for(let n of e){let i=Qe(ni.dirname(n));for(;!t.has(i)&&(t.add(i),i!==".");)i=Qe(ni.dirname(i))}return t}function xk(e){let t=Ea(e),n=t.indexOf("src");return n>=0?t.slice(0,n+1).join("/"):t.length<=1?".":t[0]}function km(e,t){let n=Qe(e),i=Qe(t);return i==="."||n===i||n.startsWith(`${i}/`)}function Ck(e,t,n){let i=Ea(e),r=Ea(t);return(km(e,t)?i.slice(r.length):i).some(s=>n.has(s.toLowerCase()))}function Dm(e,t,n,i){return Qe(e)===Qe(n)||!Ck(e,t,i)?null:`${e} is a named architectural boundary; an exact move to ${n} needs human design.`}function vk(...e){let t=new Set(Zw);for(let n of e)for(let i of n??[]){let r=Rk(i);r&&t.add(r)}return t}function Rk(e){let t=e.trim().toLowerCase();return t===""?null:t}function Cm(e,t){return Ta(e).includes(t)}function vm(e,t){let n=Ta(e);return t.some(i=>n.includes(i))}function Lk(e){let t=e.split("/").filter(Boolean),n=t[t.length-1];return n?Yw.has(n):!1}function Fa(e){return e.replaceAll("\\","/").replace(/^\.\//,"")}function Qe(e){let t=Fa(e);return t===""?".":t}function Ea(e){let t=Fa(e);return t==="."?[]:t.split("/").filter(Boolean)}function Pa(e,t){return!Number.isFinite(e)||e===void 0||e<1?t:Math.floor(e)}function Im(e){return $a([...e]).sort((t,n)=>t.localeCompare(n))}function $a(e){return[...new Set(e)]}function zi(e,t,n={}){let{maxDepth:i=5,scope:r}=n,o=j(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 wk(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 wk(e,t,n){let i=Ve(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 kk(e,t,n)){if(r.has(l))continue;let u=G(e,l),d=u.length>0?Me(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=Vn(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)||!Dk(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 kk(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
516
462
  FROM mentions m
517
463
  JOIN chunks c ON m.chunk_id = c.id
518
464
  JOIN documents consumer_d ON consumer_d.id = c.document_id
@@ -520,40 +466,46 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
520
466
  AND m.role != 1
521
467
  AND c.document_id != ?
522
468
  ${e.pathExclusionsFor("consumer_d")}
523
- ${r}`,...i).map(o=>o.relative_path).filter(o=>!e.isIgnored(o)))}function aS(e){let t=re(e);return t==="method"||t==="type"||e.endsWith("().")}function tr(e,t,n={}){let r=pe(e,t);if(!r)return null;let i=cS(e,r);if(!i||e.isIgnored(i.relative_path))return null;let o=[],s=0,a=lS(e,i.relative_path),c=n.semantic===!1?new Map:yn(e,a);for(let l of a){let u=uS(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:mS(u)})}return{file:i.relative_path,symbols:o,totalExternalConsumers:s}}function cS(e,t){return e.get(`SELECT id, relative_path FROM documents
469
+ ${i}`,...r).map(o=>o.relative_path).filter(o=>!e.isIgnored(o)))}function Dk(e){let t=X(e);return t==="method"||t==="type"||e.endsWith("().")}function Ki(e,t,n={}){let i=ke(e,t);if(!i)return null;let r=Ik(e,i);if(!r||e.isIgnored(r.relative_path))return null;let o=[],s=0,a=Nk(e,r.relative_path),c=n.semantic===!1?new Map:Yn(e,a);for(let l of a){let u=Ek(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:Pk(u)})}return{file:r.relative_path,symbols:o,totalExternalConsumers:s}}function Ik(e,t){return e.get(`SELECT id, relative_path FROM documents
524
470
  WHERE relative_path = ?
525
471
  ${e.pathExclusionsFor("documents")}
526
- LIMIT 1`,t)??null}function lS(e,t){return new _(e).definitionsForFile(t).sort((n,r)=>n.startLine-r.startLine||n.endLine-r.endLine)}function uS(e,t,n,r){let i=e.all(`SELECT DISTINCT consumer_d.relative_path
472
+ LIMIT 1`,t)??null}function Nk(e,t){return new E(e).definitionsForFile(t).sort((n,i)=>n.startLine-i.startLine||n.endLine-i.endLine)}function Ek(e,t,n,i){let r=e.all(`SELECT DISTINCT consumer_d.relative_path
527
473
  FROM mentions m
528
474
  JOIN chunks c ON m.chunk_id = c.id
529
475
  JOIN documents consumer_d ON consumer_d.id = c.document_id
530
476
  WHERE m.symbol_id = ?
531
477
  AND m.role != 1
532
- 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 mS(e){return e>10?"high":e>0?"medium":"low"}function ns(e,t={}){let{scope:n,minLoc:r=1,maxDepth:i=5,scanLimit:o}=t,s=new _(e),a=dS(e,n,r,o),c=new ts;for(let f of a)c.add(f);let l=[],u=[];a.length>0&&l.push(Vl(e,0,a,c));let m=a.map(f=>f.definition).filter(f=>f!==null),d=new Set(a.map(f=>f.symbol));for(let f=1;f<=i&&m.length>0;f++){let y=s.calleeMap(m,{semantic:!1}),R=new Set;for(let S of m)for(let x of y.get(S.symbolId)??[])d.has(x.symbol)||R.add(x.symbol);let E=[];for(let S of R){d.add(S);let x=Wl(e,S);if(!x||e.isIgnored(x.relativePath)||me(e,x.relativePath)||oe(e,x.symbol,x.relativePath)||s.fileKind(x.relativePath)==="test"||s.hasSuppressionComment(x))continue;let D=fS(e,x,c);D.removable?E.push(pS(x,"cascade")):D.blockingFiles.length>0&&u.push({shortName:b(x.symbol),file:x.relativePath,blockingFiles:D.blockingFiles.slice(0,3)})}if(E.length===0)break;for(let S of E)c.add(S);l.push(Vl(e,f,E,c)),m=E.map(S=>S.definition).filter(S=>S!==null)}let p=l.reduce((f,y)=>f+y.loc,0),h=l.reduce((f,y)=>f+y.entries.length,0);return{batches:l,totalSymbols:h,totalLoc:p,blocked:u}}function dS(e,t,n,r){let i=Xe(e,{scope:t,minLoc:n,skipBarrels:!0,deadCodeOnly:!0,scanLimit:r,semantic:!1}),o=[];for(let s of i.symbols)s.kind==="dead-code"&&(me(e,s.relativePath)||oe(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:Wl(e,s.symbol)}));return o}function pS(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 Wl(e,t){let n=e.get(`SELECT d.relative_path
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 Pk(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 E(e),a=_k(e,n,i,o),c=new Aa;for(let g of a)c.add(g);let l=[],u=[];a.length>0&&l.push(Nm(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 _ of d)for(let w of b.get(_.symbolId)??[])m.has(w.symbol)||S.add(w.symbol);let L=[];for(let _ of S){m.add(_);let w=Em(e,_);if(!w||e.isIgnored(w.relativePath)||Re(e,w.relativePath)||te(e,w.symbol,w.relativePath)||s.fileKind(w.relativePath)==="test"||s.hasSuppressionComment(w))continue;let C=Fk(e,w,c);C.removable?L.push(Tk(w,"cascade")):C.blockingFiles.length>0&&u.push({shortName:y(w.symbol),file:w.relativePath,blockingFiles:C.blockingFiles.slice(0,3)})}if(L.length===0)break;for(let _ of L)c.add(_);l.push(Nm(e,g,L,c)),d=L.map(_=>_.definition).filter(_=>_!==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 _k(e,t,n,i){let r=xt(e,{scope:t,minLoc:n,skipBarrels:!0,deadCodeOnly:!0,scanLimit:i,semantic:!1}),o=[];for(let s of r.symbols)s.kind==="dead-code"&&(Re(e,s.relativePath)||te(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:Em(e,s.symbol)}));return o}function Tk(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 Em(e,t){let n=e.get(`SELECT d.relative_path
533
479
  FROM global_symbols gs
534
480
  JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
535
481
  JOIN documents d ON d.id = der.document_id
536
482
  WHERE gs.symbol = ?
537
- LIMIT 1`,t);return n?W(e,n.relative_path).find(r=>r.symbol===t)??null:null}function fS(e,t,n){let r=At(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 Vl(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=W(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 ts=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{existsSync as au}from"fs";import{execFileSync as gS}from"child_process";var Gl=2e3,hS=50,yS=/\b(?:fix(?:es|ed)?|bug|regression|hotfix)\b/i;function rs(e){let t=te(e,{clearGroups:["whole-project"]});return(n,r)=>{let i=SS(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 bS=rs("git-commit-history");function jt(e){return bS(e,xS)}function SS(e){try{return ii(e,["rev-parse","HEAD"]).trim()||null}catch{return null}}function ii(e,t){return gS("git",["-C",e,...t],{encoding:"utf-8",maxBuffer:64*1024*1024,stdio:["ignore","pipe","ignore"]})}function xS(e,t){let n;try{n=ii(e,["log","--no-merges","--name-only","-n",String(Gl),"--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(`
538
- `),a=s>=0?o.slice(0,s):o,[c,l,u]=a.split("\0");if(!c||!l)continue;let m=s>=0?o.slice(s+1).split(`
539
- `).map(d=>d.trim()).filter(d=>d!==""):[];if(m.length>hS){i+=1;continue}r.push({hash:c,timestamp:Number(l)||0,subject:u??"",files:m})}return{head:t,commits:r,skippedBulkCommits:i}}function CS(e){return yS.test(e.subject)}function oi(e){let t=jt(e);if(!t)return null;let n=new Map;for(let r of t.commits){let i=CS(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 Jl(e){let t=jt(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:Ul(n,.5),p90FilesPerCommit:Ul(n,.9),commitsAnalyzed:n.length}}function Ul(e,t){let n=Math.min(e.length-1,Math.floor(e.length*t));return e[n]}var RS=rs("git-tracked-files");function is(e){return RS(e,t=>{try{let n=ii(t,["ls-files"]);return new Set(n.split(`
540
- `).map(r=>r.trim()).filter(r=>r!==""))}catch{return null}})}var IS=rs("git-file-adds");function zl(e){return IS(e,t=>vS(t))}function vS(e){let t;try{t=ii(e,["log","--no-merges","--diff-filter=A","--name-only","-n",String(Gl),"--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(`
541
- `),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(`
542
- `)){let u=l.trim();u!==""&&n.set(u,{commitsAgo:r,addedAt:c})}}return n}function si(e,t={}){let{minTogether:n=4,minConfidence:r=.6}=t,i=jt(e);if(!i)return null;let o=new Map,s=new Map;for(let c of i.commits){let l=[...new Set(c.files)].sort();for(let u of l)o.set(u,(o.get(u)??0)+1);for(let u=0;u<l.length;u++)for(let m=u+1;m<l.length;m++){let d=`${l[u]}\0${l[m]}`;s.set(d,(s.get(d)??0)+1)}}let a=[];for(let[c,l]of s){if(l<n)continue;let[u,m]=c.split("\0"),d=o.get(u)??l,p=o.get(m)??l,h=Math.max(l/d,l/p);h<r||a.push({fileA:u,fileB:m,together:l,confidence:h,changesA:d,changesB:p})}return a.sort((c,l)=>l.together-c.together||l.confidence-c.confidence||c.fileA.localeCompare(l.fileA)),a}import{existsSync as DS}from"fs";import{join as NS}from"path";function ss(e){return os.test(e)}var os=/(?:^|\/)(?:package-lock\.json|pnpm-lock\.yaml|yarn\.lock|Cargo\.lock|CHANGELOG(?:\.[a-z]+)?|.*\.map)$|(?:^|\/)(?:dist|build|out|node_modules)\//i;function Bt(e,t,n={}){let{minTogether:r=4,minConfidence:i=.6,limit:o=30}=n,s=jt(e),a=t!==void 0,c=si(e,{minTogether:a?Math.min(r,2):r,minConfidence:a?0:i});if(!s||!c)return{available:!1,commitsAnalyzed:0,findings:[]};let l=X(e),u=n.includeLinked===!0||a,m=[];for(let d of c){if(os.test(d.fileA)||os.test(d.fileB)||!Kl(e,d.fileA)||!Kl(e,d.fileB)||a&&!d.fileA.includes(t)&&!d.fileB.includes(t)||!a&&(G(d.fileA)==="test"||G(d.fileB)==="test"||_S(d.fileA,d.fileB)))continue;let p=LS(l,d.fileA,d.fileB);if(!(!u&&p)&&(m.push({...d,structurallyLinked:p}),m.length>=o))break}return{available:!0,commitsAnalyzed:s.commits.length,findings:m}}function Kl(e,t){return DS(NS(e.config.projectRoot,t))}function _S(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 LS(e,t,n){return e.get(t)?.has(n)===!0||e.get(n)?.has(t)===!0}import{execFileSync as as}from"child_process";var cs="Unable to compute git diff.";function xn(e,t={}){let n=yt(e,t);return n.note?wS(n.note,n.changedFileLines):n.changedFiles.length===0?ES(n.changedFileLines):ci(n.changedFiles,[ai(e,n.changedFiles,n.changedFiles)])}function yt(e,t={}){let{base:n="HEAD"}=t;try{let r=kS(e.config.projectRoot,n);return{changedFileLines:r,changedFiles:PS(e,r),note:r.length===0?"No changed files found.":void 0}}catch{return{changedFileLines:[],changedFiles:[],note:cs}}}function ai(e,t,n){let r=new _(e),i=new Set(n),o=[],s=new Map,a=t.flatMap(u=>r.definitionsForFile(u)).filter(OS).sort((u,m)=>u.relativePath.localeCompare(m.relativePath)||u.startLine-m.startLine),c=new Map(a.map(u=>[u.symbolId,TS(e,u.symbolId)])),l=yn(e,a.filter(u=>c.get(u.symbolId)===0));for(let u of a)FS(e,u,n,i,o,s,l.get(u.symbolId)??new Set,c.get(u.symbolId)??0);return{changedSymbols:o,consumerEntries:[...s.entries()].map(([u,m])=>({file:u,symbols:[...m].sort()}))}}function ci(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=MS(n);return{changedFiles:[...e],changedSymbols:r,affectedConsumers:i,summary:{totalChangedFiles:e.length,totalChangedSymbols:r.length,totalAffectedFiles:i.length}}}function wS(e,t=[]){return{changedFiles:t,changedSymbols:[],affectedConsumers:[],summary:{totalChangedFiles:t.length,totalChangedSymbols:0,totalAffectedFiles:0,note:e}}}function ES(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 kS(e,t){let n=as("git",["diff","--name-only",t],{encoding:"utf-8",cwd:e,timeout:1e4}),r=as("git",["diff","--name-only","--cached",t],{encoding:"utf-8",cwd:e,timeout:1e4}),i=as("git",["ls-files","--others","--exclude-standard"],{encoding:"utf-8",cwd:e,timeout:1e4});return[...new Set([n,r,i].flatMap(o=>o.split(`
543
- `)).map(o=>o.trim()).filter(o=>o.length>0))]}function PS(e,t){let n=[];for(let r of t){let i=e.get(`SELECT relative_path FROM documents
544
- WHERE relative_path LIKE ?
545
- LIMIT 1`,`%${r}`);i&&!e.isIgnored(i.relative_path)&&n.push(i.relative_path)}return n}function FS(e,t,n,r,i,o,s,a){let c=Math.max(a,s.size);if(!$S(t,c))return;let l=b(t.symbol);i.push({symbol:t.symbol,shortName:l,file:t.relativePath,fanIn:c});for(let u of AS(e,t.symbolId,n))Ql(e,r,o,u,l);for(let u of s)Ql(e,r,o,u,l)}function TS(e,t){return e.get(`SELECT COUNT(DISTINCT c.document_id) AS fan_in
483
+ LIMIT 1`,t);return n?G(e,n.relative_path).find(i=>i.symbol===t)??null:null}function Fk(e,t,n){let i=sn(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 Nm(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 Aa=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 TN}from"crypto";import{existsSync as ic,readFileSync as mp}from"fs";import{execFileSync as $k}from"child_process";var _m=2e3,Tm=50,Ak=8,Mk=3,Ok=2160*60*60,jk=/\b(?:fix(?:es|ed)?|bug|regression|hotfix)\b/i,Bk=3,Vk=/#\d+|\b[A-Z][A-Z0-9]+-\d+\b/g,Hk=/^([a-z][a-z0-9-]+)(?:\([^)]+\))?!?:/i;function Ma(e){let t=ce(e,{clearGroups:["whole-project"]});return(n,i)=>{let r=Uk(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 qk=Ma("git-commit-history");function bn(e){return qk(e,Wk)}function Uk(e){try{return uo(e,["rev-parse","HEAD"]).trim()||null}catch{return null}}function uo(e,t){return $k("git",["-C",e,...t],{encoding:"utf-8",maxBuffer:64*1024*1024,stdio:["ignore","pipe","ignore"]})}function Wk(e,t){let n;try{n=uo(e,["log","--no-merges","--name-only","-n",String(_m),"--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(`
484
+ `),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>Tm){r+=1;continue}i.push({hash:c,timestamp:Number(l)||0,subject:u??"",files:d})}return{head:t,commits:i,skippedBulkCommits:r}}function Gk(e){return jk.test(e.subject)}function mo(e){let t=bn(e);if(!t)return null;let n=new Map;for(let i of t.commits){let r=Gk(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 Fm(e){let t=bn(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:Pm(n,.5),p90FilesPerCommit:Pm(n,.9),commitsAnalyzed:n.length}}function Pm(e,t){let n=Math.min(e.length-1,Math.floor(e.length*t));return e[n]}var zk=Ma("git-tracked-files");function Oa(e){return zk(e,t=>{try{let n=uo(t,["ls-files"]);return new Set(n.split(`
486
+ `).map(i=>i.trim()).filter(i=>i!==""))}catch{return null}})}var Kk=Ma("git-file-adds");function $m(e){return Kk(e,t=>Jk(t))}function Jk(e){let t;try{t=uo(e,["log","--no-merges","--diff-filter=A","--name-only","-n",String(_m),"--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 po(e,t={}){let{minTogether:n=4,minConfidence:i=.6,maxFilesPerCommit:r=Tm}=t,o=bn(e);if(!o)return null;let s=new Map,a=new Map,c=0;for(let d of o.commits){let m=[...new Set(d.files)].sort();if(m.length>r)continue;d.timestamp>c&&(c=d.timestamp);let p=Qk(m);for(let h of m)s.set(h,(s.get(h)??0)+1);for(let h=0;h<m.length;h++)for(let g=h+1;g<m.length;g++){let b=`${m[h]}\0${m[g]}`,S=a.get(b)??{together:0,focusedTogether:0,broadTogether:0,lastTogetherAt:0,timestamps:[],subjects:[]};S.together+=1,p?S.broadTogether+=1:S.focusedTogether+=1,d.timestamp>S.lastTogetherAt&&(S.lastTogetherAt=d.timestamp),S.timestamps.push(d.timestamp),S.subjects.push(d.subject),a.set(b,S)}}let l=[],u=c-Ok;for(let[d,m]of a){let p=m.together;if(p<n)continue;let[h,g]=d.split("\0"),b=s.get(h)??p,S=s.get(g)??p,L=Math.max(p/b,p/S);if(L<i)continue;let _=m.broadTogether/p,w=m.timestamps.filter(C=>C>=u).length;l.push({fileA:h,fileB:g,together:p,confidence:L,changesA:b,changesB:S,focusedTogether:m.focusedTogether,broadTogether:m.broadTogether,broadCommitRatio:_,lastTogetherAt:m.lastTogetherAt,recentTogether:w,commitScope:Yk(m.broadTogether,p),recency:w>0?"recent":"stale",subjectContext:Zk(m.subjects)})}return l.sort((d,m)=>m.together-d.together||m.confidence-d.confidence||d.fileA.localeCompare(m.fileA)),l}function Qk(e){return e.length>=Ak?!0:Xk(e).size>=Mk}function Xk(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 Yk(e,t){return e===0?"focused":e/t>=.5?"broad-sweep":"mixed"}function Zk(e){let t=new Set,n=[],i=[];for(let r of e){!i.includes(r)&&i.length<Bk&&i.push(r);for(let o of eD(r))t.add(o);for(let o of r.match(Vk)??[])n.includes(o)||n.push(o)}return{subjectLabels:[...t].sort(),issueRefs:n,sampleSubjects:i,externalIssueLabelStatus:"unavailable"}}function eD(e){let t=new Set,n=Hk.exec(e)?.[1]?.toLowerCase();return n&&t.add(tD(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 tD(e){return e==="feat"?"feature":e}import{existsSync as nD}from"fs";import{join as iD}from"path";function Ba(e){return ja.test(e)}var ja=/(?:^|\/)(?:package-lock\.json|pnpm-lock\.yaml|yarn\.lock|Cargo\.lock|CHANGELOG(?:\.[a-z]+)?|.*\.map)$|(?:^|\/)(?:dist|build|out|node_modules|docs\/plans)\//i;function yn(e,t,n={}){let{minTogether:i=4,minConfidence:r=.6,limit:o=30,maxFilesPerCommit:s=20}=n,a=bn(e),c=t!==void 0,l=po(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=ee(e),d=jm(e),m=qa(e,u,d),p=n.includeLinked===!0||c,h=[];for(let g of l){if(ja.test(g.fileA)||ja.test(g.fileB)||!Am(e,g.fileA)||!Am(e,g.fileB)||c&&!g.fileA.includes(t)&&!g.fileB.includes(t)||!c&&(K(g.fileA)==="test"||K(g.fileB)==="test"||rD(g.fileA,g.fileB)))continue;let b=m(g.fileA,g.fileB);if(!p&&b)continue;let S=Va(g.fileA,g.fileB),L=Ha(g,S,b);if(h.push({...g,structurallyLinked:b,partnerClass:S.partnerClass,partnerClassReasons:S.reasons,...L?{declaredCouplingSuggestion:L}:{}}),h.length>=o)break}return{available:!0,commitsAnalyzed:a.commits.length,findings:h}}function Am(e,t){return nD(iD(e.config.projectRoot,t))}function Va(e,t){let n=Mm(e),i=Mm(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=gD(n.tokens,i.tokens).filter(c=>!pD.has(c));return Om(e,t)||a.length>=2?(o(Om(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 Ha(e,t,n){if(n||e.together<4||e.confidence<.75||e.commitScope==="broad-sweep"||e.recency==="stale"||!mD.has(t.partnerClass))return;let i=[e.fileA,e.fileB].sort();return{name:`co-change ${t.partnerClass}: ${hD(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 qa(e,t=ee(e),n=jm(e)){return(i,r)=>oD(t,n,i,r)}function rD(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 jm(e){return(e.config.declaredCouplings??[]).filter(t=>Array.isArray(t.files)&&t.files.length>=2).map(t=>new Set(t.files))}function oD(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 sD=/(?:^|\/)(?:readme|docs?|guides?|adr|architecture|design)(?:\/|$)|\.(?:md|mdx|rst|adoc|txt)$/i,aD=/(?:^|\/)(?:\.[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,cD=/(?:^|\/)(?:schemas?|contracts?|migrations?|models?|types?)(?:\/|$)|(?:^|\/)[^/]*(?:schema|contract|migration|model|types?)[^/]*|(?:\.schema)?\.(?:graphql|gql|proto|prisma)$/i,lD=/(?:^|\/)(?:scripts?|bin|tools?|tasks?|generators?|codegen|migrations?|seeds?)(?:\/|$)|(?:^|\/)[^/]*(?:generate|codegen|migrate|seed|script)[^/]*\.[cm]?[jt]s$/i,uD=/(?:^|\/)(?:models?|entities|domain|state|stores?|reducers?)(?:\/|$)|(?:^|\/)[^/]*(?:model|entity|state|store|reducer|viewmodel)[^/]*\.[^.]+$/i,dD=/(?:^|\/)(?:views?|pages?|components?|screens?|routes?|templates?)(?:\/|$)|(?:^|\/)[^/]*(?:view|page|component|screen|template)[^/]*\.[^.]+$|\.(?:vue|svelte|tsx|jsx)$/i,mD=new Set(["doc-code","config-code","schema-script","model-view","test-code"]),pD=new Set(["src","lib","app","test","tests","spec","index","main","utils","util","types","type","config","docs","doc"]);function Mm(e){let t=e.replace(/\\/g,"/"),n=new Set;return sD.test(t)&&n.add("doc"),aD.test(t)&&n.add("config"),cD.test(t)&&n.add("schema"),lD.test(t)&&n.add("script"),uD.test(t)&&n.add("model"),dD.test(t)&&n.add("view"),K(t)==="test"&&n.add("test"),!n.has("doc")&&!n.has("config")&&n.add("code"),{tags:n,tokens:fD(t)}}function Om(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 fD(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 gD(e,t){let n=new Set(t);return[...new Set(e.filter(i=>n.has(i)))].sort()}function hD(e){return e.map(t=>t.split("/").pop()?.replace(/\.[^.]+$/,"")||t).join(" + ")}import{execFileSync as st}from"child_process";import{existsSync as bD,readFileSync as yD}from"fs";import{basename as Bm}from"path";var Ua="Unable to compute git diff.";function ii(e,t={}){let n=t.plan??at(e,t);return n.note?SD(n.note,n.changedFileLines):n.changedFiles.length===0?xD(n.changedFileLines):go(n.changedFiles,[fo(e,n.changedFiles,n.changedFiles,n.changedRanges)])}function at(e,t={}){let{base:n="HEAD"}=t;try{let i=CD(e.config.projectRoot,n),r=DD(e,i),o=ID(e,vD(e.config.projectRoot,n));return{changedFileLines:i,changedFiles:r,changedRanges:o,renamedFiles:RD(e.config.projectRoot,n,r),note:i.length===0?"No changed files found.":void 0}}catch{return{changedFileLines:[],changedFiles:[],changedRanges:[],renamedFiles:[],note:Ua}}}function fo(e,t,n,i=[]){let r=new E(e),o=new Set(n),s=ED(i),a=[],c=new Map,l=t.flatMap(h=>r.definitionsForFile(h)).filter(MD).filter(h=>PD(h,s)).sort((h,g)=>h.relativePath.localeCompare(g.relativePath)||h.startLine-g.startLine),u=l.map(h=>h.symbolId),d=FD(e,u),m=$D(e,u,n),p=Yn(e,l.filter(h=>d.get(h.symbolId)===0));for(let h of l)TD(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 go(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=AD(n);return{changedFiles:[...e],changedSymbols:i,affectedConsumers:r,summary:{totalChangedFiles:e.length,totalChangedSymbols:i.length,totalAffectedFiles:r.length}}}function SD(e,t=[]){return{changedFiles:t,changedSymbols:[],affectedConsumers:[],summary:{totalChangedFiles:t.length,totalChangedSymbols:0,totalAffectedFiles:0,note:e}}}function xD(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 CD(e,t){let n=st("git",["diff","--name-only",t],{encoding:"utf-8",cwd:e,timeout:1e4}),i=st("git",["diff","--name-only","--cached",t],{encoding:"utf-8",cwd:e,timeout:1e4}),r=st("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 vD(e,t){let n=st("git",["diff","--unified=0",t],{encoding:"utf-8",cwd:e,timeout:1e4}),i=st("git",["diff","--unified=0","--cached",t],{encoding:"utf-8",cwd:e,timeout:1e4});return Gm([...qm(n),...qm(i)])}function Ji(e,t,n){try{return st("git",["show",`${t}:./${n}`],{encoding:"utf-8",cwd:e,timeout:1e4,stdio:["ignore","pipe","ignore"]})}catch{return null}}function RD(e,t,n){if(n.length===0)return[];let i=new Map,r=new Set;for(let s of wD(e,t))n.includes(s.to)&&(i.set(s.to,s),r.add(s.from));let o=LD(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)||!bD(`${e}/${s}`))continue;let a=o.filter(u=>!r.has(u)).filter(u=>Bm(u)===Bm(s));if(a.length===0)continue;let c=yD(`${e}/${s}`,"utf-8"),l=a.map(u=>({from:u,to:s,similarity:kD(Ji(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 LD(e,t){let n=st("git",["diff","--name-only","--diff-filter=D",t],{encoding:"utf-8",cwd:e,timeout:1e4}),i=st("git",["diff","--name-only","--diff-filter=D","--cached",t],{encoding:"utf-8",cwd:e,timeout:1e4});return[...new Set([...Hm(n),...Hm(i)])]}function wD(e,t){let n=st("git",["diff","--name-status","--find-renames",t],{encoding:"utf-8",cwd:e,timeout:1e4}),i=st("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 kD(e,t){let n=new Set(Vm(e)),i=new Set(Vm(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 Vm(e){return e.match(/[A-Za-z_$][\w$]*|[{}()[\].,]/g)??[]}function Hm(e){return e.split(`
492
+ `).map(t=>t.trim()).filter(t=>t.length>0)}function DD(e,t){let n=Wm(e),i=[];for(let r of t){let o=n(r);o&&!e.isIgnored(o)&&i.push(o)}return i}function ID(e,t){let n=Wm(e),i=[];for(let r of t){let o=n(r.file);o&&!e.isIgnored(o)&&i.push({...r,file:o})}return Gm(i)}function Wm(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 qm(e){let t=[],n=null;for(let i of e.split(`
494
+ `)){if(i.startsWith("+++ ")){n=ND(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 ND(e){return e==="/dev/null"?null:e.startsWith("a/")||e.startsWith("b/")?e.slice(2):e}function Gm(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 ED(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}function PD(e,t){let n=t.get(e.relativePath);return!n||n.length===0?!0:n.some(i=>_D(e.startLine,e.endLine,i.startLine,i.endLine))}function _D(e,t,n,i){return e<=i&&n<=t}function TD(e,t,n,i,r,o,s,a){let c=Math.max(s,o.size);if(!OD(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)Um(e,n,r,u,l);for(let u of o)Um(e,n,r,u,l)}function FD(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
546
495
  FROM mentions m
547
496
  JOIN chunks c ON m.chunk_id = c.id
548
- WHERE m.symbol_id = ?
549
- AND m.role != 1`,t)?.fan_in??0}function AS(e,t,n){return n.length===0?[]:e.all(`SELECT DISTINCT ref_d.relative_path
497
+ WHERE m.symbol_id IN (${t.map(()=>"?").join(",")})
498
+ AND m.role != 1
499
+ GROUP BY m.symbol_id`,...t);return new Map(n.map(i=>[i.symbol_id,i.fan_in]))}function $D(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
550
500
  FROM mentions m
551
501
  JOIN chunks c ON m.chunk_id = c.id
552
502
  JOIN documents ref_d ON c.document_id = ref_d.id
553
- WHERE m.symbol_id = ?
503
+ WHERE m.symbol_id IN (${t.map(()=>"?").join(",")})
554
504
  AND m.role != 1
555
505
  AND ref_d.relative_path NOT IN (${n.map(()=>"?").join(",")})
556
- ${e.pathExclusionsFor("ref_d")}`,t,...n).map(i=>i.relative_path)}function Ql(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 MS(e){return[...e.entries()].map(([t,n])=>({file:t,consumedSymbols:n.size})).sort((t,n)=>n.consumedSymbols-t.consumedSymbols)}function OS(e){return!(ct(e.symbol)||e.parentTypeName!==null&&!ae(e.symbol))}function $S(e,t){return ae(e.symbol)||e.isTypeLike?!0:e.parentTypeName===null&&t>0}import{existsSync as Yl,readFileSync as jS}from"fs";import{join as ls}from"path";var nr=/\.(?:md|mdx|rst|txt)$/i;function BS(e){return/(?:^|\/)(?:docs\/plans|plans|adrs?|rfcs?|decisions|changelogs?|archive|reports?)\//i.test(e)||/(?:^|\/)CHANGELOG\.(?:md|mdx|rst|txt)$/i.test(e)}var HS=3,qS=/[A-Za-z0-9_@-]+(?:\/[A-Za-z0-9_.@-]+)+\.[A-Za-z0-9]{1,6}\b/g;function us(e,t={}){let{doc:n,limit:r=20,minCoupling:i=HS}=t,o=jt(e);if(!o)return{available:!1,commitsAnalyzed:0,docsScanned:0,findings:[]};let s=is(e)??new Set,a=new Map,c=new Map,l=new Set;for(let p of o.commits){let h=[...new Set(p.files)],f=h.filter(R=>nr.test(R)),y=h.filter(R=>!nr.test(R));for(let R of h){l.add(R);let E=a.get(R)??[];E.push(p.timestamp),a.set(R,E)}for(let R of f){let E=c.get(R);E||(E=new Map,c.set(R,E));for(let S of y)E.set(S,(E.get(S)??0)+1)}}let u=[...s].filter(p=>nr.test(p)),m=eu(s),d=[];for(let p of u){if(n!==void 0&&!p.includes(n)||n===void 0&&!Zl(e,p)||n!==void 0&&!Yl(ls(e.config.projectRoot,p)))continue;let h=Math.max(0,...a.get(p)??[]),f=new Map,{resolved:y,broken:R}=tu(e,p,s,m,l);for(let S of y){if(S===p||nr.test(S))continue;let x=(a.get(S)??[]).filter(D=>D>h).length;x!==0&&f.set(S,{file:S,evidence:"reference",coChanges:0,changesSinceDocUpdate:x})}for(let[S,x]of c.get(p)??[]){if(x<i||!s.has(S))continue;let D=(a.get(S)??[]).filter($=>$>h).length;if(D===0)continue;let w=f.get(S);w?(w.evidence="both",w.coChanges=x):f.set(S,{file:S,evidence:"co-change",coChanges:x,changesSinceDocUpdate:D})}if(f.size===0&&R.length===0)continue;let E=[...f.values()].sort((S,x)=>x.changesSinceDocUpdate-S.changesSinceDocUpdate);d.push({doc:p,docLastChangedAt:h,staleness:E.reduce((S,x)=>S+x.changesSinceDocUpdate,0)+R.length*10,subjects:E.slice(0,8),brokenReferences:R})}return d.sort((p,h)=>h.staleness-p.staleness),{available:!0,commitsAnalyzed:o.commits.length,docsScanned:u.length,findings:d.slice(0,r)}}function Xl(e,t){let n=is(e)??new Set,r=eu(n),i=[];for(let o of n){if(!Zl(e,o))continue;let{resolved:s}=tu(e,o,n,r,new Set),a=[...s].filter(c=>t.has(c));a.length>0&&i.push({doc:o,cited:a.sort()})}return i}function Zl(e,t){return nr.test(t)&&!BS(t)&&Yl(ls(e.config.projectRoot,t))}function eu(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 tu(e,t,n,r,i){let o=new Set,s=new Set,a=VS(e,t);if(!a)return{resolved:o,broken:[]};for(let c of a){if(n.has(c)){o.add(c);continue}let l=r.get(c);if(l&&l.length===1){o.add(l[0]);continue}l&&l.length>1||i.has(c)&&s.add(c)}return{resolved:o,broken:[...s]}}function VS(e,t){let n;try{n=jS(ls(e.config.projectRoot,t),"utf-8")}catch{return null}let r=Ct(e,t,n),i=Rr(e,"doc-path-tokens",t,r);if(i!==null)try{return JSON.parse(i)}catch{}let o=[...new Set([...n.matchAll(qS)].map(s=>s[0].replace(/^\.?\//,"")))];return Ir(e,"doc-path-tokens",t,r,JSON.stringify(o)),o}import{existsSync as qx,readFileSync as Vx,writeFileSync as Wx}from"fs";import{isAbsolute as Ux,join as Gx}from"path";var Z={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 rr from"path";function Ht(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 ms(e,t){if(e===t)return"ok";let n=li(e),r=li(t);return n&&r?WS(n,r)?"ok":"violation":US(e,t)}function nu(e,t){let n=li(Ht(e)),r=li(Ht(t));return!!n&&!!r}function li(e){return/^src\/([^/]+)$/.exec(e)?.[1]??null}function WS(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 US(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 qt(e,t){let{scope:n,minDeviation:r=5}=t??{},i=t?.semantic!==!1,s=new _(e).fileDependencyGraph(n),a=XS(e,n);return KS([...GS(e,s,a,{semantic:i}),...JS(s),...zS(s,r)])}function GS(e,t,n,r){let i=[];for(let[o,s]of t){if(et(o))continue;let a=n.get(o)??new Set;for(let c of s)if(!et(c)&&!a.has(c)){if(r.semantic&&ix(e,o,c)||ox(e,o,c)||sx(e,o,c)||rx(c)||cx(e,o,c)||ax(c))continue;i.push({file:o,kind:"unused-import",description:`Depends on ${c} but references none of its symbols`,dep:c})}}return i}function JS(e){let t=[],n=nx(e);for(let[r,i]of e){if(et(r))continue;let o=Ht(r);for(let s of i){if(et(s))continue;let a=Ht(s);if(o===a)continue;(ms(o,a)??n.get(`${o}->${a}`))==="violation"&&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}/`})}}return t}function zS(e,t){let n=[];for(let[r,i]of QS(e)){let o=i.filter(a=>!et(a));if(o.length<t)continue;let s=YS(e,o);for(let a of o)for(let c of e.get(a)??[])et(c)||(s.get(c)??0)===1&&rr.dirname(c)!==r&&rr.dirname(c)!==rr.dirname(r)&&(nu(a,c)||n.push({file:a,kind:"pattern-deviation",description:`Only file in ${r}/ that depends on ${c}`,dep:c}))}return n}function KS(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 QS(e){let t=new Map;for(let n of e.keys()){let r=rr.dirname(n),i=t.get(r);i||(i=[],t.set(r,i)),i.push(n)}return t}function YS(e,t){let n=new Map;for(let r of t)for(let i of e.get(r)??[])et(i)||n.set(i,(n.get(i)??0)+1);return n}function XS(e,t){let n=new Map;return ZS(e,n,t),tx(e,n),n}function ZS(e,t,n){for(let r of ex(e,n))ru(e,t,r.from_file,r.to_file)}function ex(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
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 Um(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 AD(e){return[...e.entries()].map(([t,n])=>({file:t,consumedSymbols:n.size})).sort((t,n)=>n.consumedSymbols-t.consumedSymbols)}function MD(e){return!(Pt(e.symbol)||e.parentTypeName!==null&&!be(e.symbol))}function OD(e,t){return be(e.symbol)||e.isTypeLike?!0:e.parentTypeName===null&&t>0}function yo(e,t){let n=jD(e,t)??BD(e,t)??VD(e,t)??HD(e,t);return qD(e,n,t)}function jD(e,t){let n=-1,i=null;for(let r=0;r<=t;r+=1){let o=Wa(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(Wa(e[r]??"")===i)return{start:n,end:r+1};return{start:n,end:e.length}}function Wa(e){let t=e.match(/^\s*(```+|~~~+)/);return t?t[1].startsWith("`")?"`":"~":null}function BD(e,t){if(!ho(e[t]??""))return null;let n=t;for(;n>0&&ho(e[n-1]??"");)n-=1;let i=t+1;for(;i<e.length&&ho(e[i]??"");)i+=1;return{start:n,end:i}}function ho(e){let t=e.trim();return t.startsWith("|")&&t.endsWith("|")&&t.includes("|")}function VD(e,t){let n=t;for(;n>=0;){let o=e[n]??"";if(bo(o)!==null)break;if(Ga(o)!==null)return null;n-=1}if(n<0)return null;let i=bo(e[n]??"");if(i===null)return null;let r=n+1;for(;r<e.length;){let o=e[r]??"",s=bo(o);if(s!==null){if(s<=i)break;r+=1;continue}if(Ga(o)!==null)break;r+=1}return{start:n,end:r}}function bo(e){let t=e.match(/^(\s*)(?:[-*+]\s+|\d+[.)]\s+)/);return t?t[1].length:null}function HD(e,t){let n=e[t]??"";if(Km(n)||n.trim().length===0)return{start:t,end:t+1};let i=t;for(;i>0&&zm(e[i-1]??"");)i-=1;let r=t+1;for(;r<e.length&&zm(e[r]??"");)r+=1;return{start:i,end:r}}function zm(e){return Ga(e)===null}function Ga(e){return e.trim().length===0?"blank":Km(e)?"heading":Wa(e)?"fence":ho(e)?"table":bo(e)!==null?"list":null}function Km(e){return/^#{1,6}\s+/.test(e.trim())}function qD(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()}...`}import{existsSync as Qm,readFileSync as Ka}from"fs";import{join as Xi}from"path";var Qi=/\.(?:md|mdx|rst|txt)$/i;function UD(e){return/(?:^|\/)(?:docs\/plans|plans|adrs?|rfcs?|decisions|changelogs?|archive|reports?)\//i.test(e)||/(?:^|\/)CHANGELOG\.(?:md|mdx|rst|txt)$/i.test(e)}var WD=3,Xm=/[A-Za-z0-9_@-]+(?:\/[A-Za-z0-9_.@-]+)+\.[A-Za-z0-9]{1,6}\b/g;function Ja(e,t={}){let{doc:n,limit:i=20,minCoupling:r=WD}=t,o=KD(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&&!Zm(e,a)||n!==void 0&&!Qm(Xi(e.config.projectRoot,a)))continue;let c=Math.max(0,...o.changeTimes.get(a)??[]),l=GD(e,a),u=new Map,{resolved:d,broken:m,citations:p}=tp(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||Qi.test(b))continue;let S=(o.changeTimes.get(b)??[]).filter(L=>L>c).length;S!==0&&u.set(b,{file:b,evidence:"reference",coChanges:0,changesSinceDocUpdate:S,...za("reference",l),citationContexts:h.get(b)})}for(let[b,S]of o.coupling.get(a)??[]){if(S<r||!o.tracked.has(b))continue;let L=(o.changeTimes.get(b)??[]).filter(w=>w>c).length;if(L===0)continue;let _=u.get(b);_?(_.evidence="both",_.coChanges=S,Object.assign(_,za("both",l))):u.set(b,{file:b,evidence:"co-change",coChanges:S,changesSinceDocUpdate:L,...za("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 GD(e,t){let n;try{n=Ka(Xi(e.config.projectRoot,t),"utf8").slice(0,6e3)}catch{return{docIntent:"unknown",reasons:["doc text unavailable"]}}let i=`${t}
508
+ ${n}`.toLowerCase(),r=Jm(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=Jm(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 Jm(e,t){return t.filter(n=>e.includes(n))}function za(e,t){return{actionTier:zD(e,t.docIntent),docIntent:t.docIntent,docIntentReasons:t.reasons}}function zD(e,t){return t==="historical-note"?"support":e==="co-change"?"signal":"direct"}function KD(e){let t=bn(e);if(!t)return null;let n=Oa(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=>Qi.test(u)),l=a.filter(u=>!Qi.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=>Qi.test(s)),everSeenInHistory:o,historyCommitCount:t.commits.length,tracked:n,trackedBySuffix:ep(n)}}function Ym(e,t){let n=Oa(e)??new Set,i=ep(n),r=[];for(let o of n){if(!Zm(e,o))continue;let{resolved:s,citations:a}=tp(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:Qa(d.flatMap(m=>m.contexts)).slice(0,3)})}}return r}function Zm(e,t){return Qi.test(t)&&!UD(t)&&Qm(Xi(e.config.projectRoot,t))}function ep(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 tp(e,t,n,i,r){let o=new Set,s=new Set,a=XD(e,t);if(!a)return{resolved:o,broken:[],citations:[]};let c=JD(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,Qa(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 JD(e,t,n){let i;try{i=Ka(Xi(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(Xm)){let l=c[0].replace(/^\.?\//,"");if(!r.has(l))continue;let u=yo(i,s);if(u.length===0)continue;let d=o.get(l)??[];d.push(u),o.set(l,Qa(d).slice(0,3))}}return o}function Qa(e){let t=[];for(let n of new Set(e))t.some(i=>QD(i,n))||t.push(n);return t}function QD(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 XD(e,t){let n;try{n=Ka(Xi(e.config.projectRoot,t),"utf-8")}catch{return null}let i=Wt(e,t,n),r=Cr(e,"doc-path-tokens",t,i);if(r!==null)try{return JSON.parse(r)}catch{}let o=[...new Set([...n.matchAll(Xm)].map(s=>s[0].replace(/^\.?\//,"")))];return vr(e,"doc-path-tokens",t,i,JSON.stringify(o)),o}import{existsSync as uN,readFileSync as dN,writeFileSync as mN}from"fs";import{isAbsolute as pN,join as fN}from"path";var oe={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 Yi from"path";function Sn(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 Xa(e,t){if(e===t)return"ok";let n=So(e),i=So(t);return n&&i?YD(n,i)?"ok":"violation":ZD(e,t)}function np(e,t){let n=So(Sn(e)),i=So(Sn(t));return!!n&&!!i}function So(e){return/^src\/([^/]+)$/.exec(e)?.[1]??null}function YD(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 ZD(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 xn(e,t){let{scope:n,minDeviation:i=5}=t??{},r=t?.semantic!==!1,s=new E(e).fileDependencyGraph(n),a=sI(e,n);return iI([...eI(e,s,a,{semantic:r}),...tI(s),...nI(s,i)])}function eI(e,t,n,i){let r=[];for(let[o,s]of t){if(Rt(o))continue;let a=n.get(o)??new Set;for(let c of s)if(!Rt(c)&&!a.has(c)){if(i.semantic&&mI(e,o,c)||pI(e,o,c)||fI(e,o,c)||dI(c)||hI(e,o,c)||gI(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 tI(e){let t=[],n=uI(e);for(let[i,r]of e){if(Rt(i))continue;let o=Sn(i);for(let s of r){if(Rt(s))continue;let a=Sn(s);if(o===a)continue;let c=Xa(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 nI(e,t){let n=[];for(let[i,r]of rI(e)){let o=r.filter(a=>!Rt(a));if(o.length<t)continue;let s=oI(e,o);for(let a of o)for(let c of e.get(a)??[])Rt(c)||(s.get(c)??0)===1&&Yi.dirname(c)!==i&&Yi.dirname(c)!==Yi.dirname(i)&&(np(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 iI(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 rI(e){let t=new Map;for(let n of e.keys()){let i=Yi.dirname(n),r=t.get(i);r||(r=[],t.set(i,r)),r.push(n)}return t}function oI(e,t){let n=new Map;for(let i of t)for(let r of e.get(i)??[])Rt(r)||n.set(r,(n.get(r)??0)+1);return n}function sI(e,t){let n=new Map;return aI(e,n,t),lI(e,n),n}function aI(e,t,n){for(let i of cI(e,n))ip(e,t,i.from_file,i.to_file)}function cI(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
557
509
  FROM mentions m
558
510
  JOIN chunks c ON m.chunk_id = c.id
559
511
  JOIN documents d1 ON c.document_id = d1.id
@@ -569,31 +521,32 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
569
521
  WHERE d1.id != d2.id
570
522
  AND m.role != 1
571
523
  ${e.pathExclusionsFor("d1","d2")}
572
- ${n}`)}function tx(e,t){new _(e).scanSourceReferences({paths:M(e,{includeIgnored:!1}),includeRustAttributeNames:!0,identifierResolution:"permissive"},r=>{r.target.relativePath!==r.sourceFile&&(e.isIgnored(r.target.relativePath)||ru(e,t,r.sourceFile,r.target.relativePath))})}function ru(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 nx(e){let t=new Map;for(let[r,i]of e){if(et(r))continue;let o=Ht(r);for(let s of i){if(et(s))continue;let a=Ht(s);if(o===a||ms(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 rx(e){return e.includes("types")||e.endsWith(".d.ts")}function ix(e,t,n){let r=Hn(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.some(i=>i.isUsed)}function ox(e,t,n){let r=ie(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.some(i=>i.used)}function sx(e,t,n){let r=ie(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.every(i=>i.isTypeOnly===!0)}function ax(e){return e.endsWith(".vue")}function cx(e,t,n){let r=ie(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 et(e){let t=G(e);return!!(t==="entry"||t==="barrel"||t==="test"||t==="worker"||lx(rr.basename(e)))}function lx(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")}function Vt(e,t){let{scope:n,maxLoc:r=15,limit:i=30,scanLimit:o}=t??{},s=new _(e);return _e({candidates:()=>dx(s,n,r),orderCandidates:ei,scanLimit:o,prepare:a=>s.calleeMap(a,{semantic:t?.semantic!==!1}),evaluate:(a,c)=>ux(e,a,c.get(a.symbolId)??[]),orderResults:(a,c)=>a.loc-c.loc||a.file.localeCompare(c.file),limit:i})}function ux(e,t,n){let r=mx(n);if(r.size!==1||!Ji(e,t.relativePath,t.startLine,t.endLine))return null;let[,i]=[...r.entries()][0];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}}function mx(e){let t=e.some(r=>Y(r.symbol))?e.filter(r=>Y(r.symbol)):e,n=new Map;for(let r of t)n.has(r.symbol)||n.set(r.symbol,r);return n}function dx(e,t,n){return e.productionCallableDefinitions({scope:t,minLoc:3,maxLoc:n,requireFunctionLikeSymbol:!0,excludeRootedSymbols:!0,excludeRustTraitImplMembers:!0})}var px=H("definition-consumer-file-usage",{clearGroups:["whole-project","source-file"]});function ir(e,t,n){return e.callerFileMap(t,{semantic:n.semantic,sourceFallback:n.sourceFallback})}function ui(e,t,n){let r=[],i=0,o=0,s=T(t.symbol);for(let a of n)gx(e,a,t.relativePath,s)?i++:ds(e,a,s)?o++:r.push(a);return{realConsumers:r,barrelConsumers:i,importOnlyConsumers:o}}function ds(e,t,n){if(!n)return!1;let r=B(t);if(!r)return!1;let i=px.get(e,t,()=>fx(e,t,r));return i.importedLeaves.has(n)&&!i.usedLeaves.has(n)}function fx(e,t,n){let r=new Set,i=new Set,o=ue(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 m of c.children)a(m,u)};return a(o.rootNode,!1),{importedLeaves:r,usedLeaves:i}}function gx(e,t,n,r){if(!r)return!1;let i=P(e,t);if(!i)return!1;let o=Sc(e,t);if(o.length===0)return!1;let s=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=new RegExp(`\\b${s}\\b`),c=i.split(`
573
- `),l=0;for(let u=0;u<c.length;u++){if(!a.test(c[u]??""))continue;if(l++,!o.find(d=>d.startLine<=u&&u<=d.endLine))return!1}return l>0}function Wt(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 _(e),u=l.scopedDefinitions(n),m=_x(l,n),d={high:0,medium:1,low:2};return _e({candidates:()=>hx(e,l,u,{minLoc:r,maxLoc:i}),orderCandidates:(p,h)=>q(h)-q(p)||p.relativePath.localeCompare(h.relativePath),scanLimit:a,prepare:p=>({consumerFileMap:yx(l,p,{semantic:c}),singletonBackedClassIds:Cx(e,l,u,p,{semantic:c}),candidateIndex:bx(p)}),evaluate:(p,h)=>{if(h.singletonBackedClassIds.has(p.symbolId))return null;let f=Sx(e,p,h.consumerFileMap,h.candidateIndex);if(f.transitivelyReachable||f.realConsumers.length>1||f.realConsumers.length===0&&f.barrelConsumers>0||!wx(f.definition,f.realConsumers.length,m))return null;let y=xx(e,f);return!s&&y.confidence==="low"?null:y},orderResults:(p,h)=>d[p.confidence]-d[h.confidence]||h.loc-p.loc||p.file.localeCompare(h.file)||p.startLine-h.startLine,limit:o})}function hx(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=>G(i.relativePath)!=="test").filter(i=>!oe(e,i.symbol,i.relativePath)).filter(i=>!Lx(i.symbol)).filter(i=>!t.hasSuppressionComment(i))}function yx(e,t,n){return ir(e,t,{semantic:n.semantic})}function bx(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=T(n.symbol);i&&r.set(i,n)}return t}function Sx(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}=ui(e,t,o),l=Ex(e,t,n,r);return{definition:t,realConsumers:s,barrelConsumers:a+c,transitivelyReachable:l}}function xx(e,t){let n=su(e,t.definition.relativePath,t.definition.startLine),r=ou(t.definition.relativePath)?!0:kx(e,t.definition),{confidence:i,reason:o}=Px(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}}function Cx(e,t,n,r,i){let o=Ix(e,Rx(n),r),s=o.map(l=>l.singleton);if(o.length===0)return new Set;let a=ir(t,s,{semantic:i.semantic}),c=new Set;for(let{singleton:l,classId:u}of o)Dx(e,l,a)&&c.add(u);return c}function Rx(e){let t=new Map;for(let n of e){let r=T(n.symbol);r&&t.set(iu(n.relativePath,r),n)}return t}function Ix(e,t,n){let r=[];for(let i of n){let o=vx(e,t,i);o&&r.push({singleton:o,classId:i.symbolId})}return r}function vx(e,t,n){if(su(e,n.relativePath,n.startLine)!=="class")return null;let r=T(n.symbol);if(!r)return null;let i=Nx(e,n.relativePath,r);return i?t.get(iu(n.relativePath,i))??null:null}function Dx(e,t,n){let r=T(t.symbol),i=n.get(t.symbolId);return!r||!i?!1:[...i].some(o=>o!==t.relativePath&&!e.isIgnored(o)&&!ds(e,o,r))}function iu(e,t){return`${e}\0${t}`}function Nx(e,t,n){let r=P(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 _x(e,t){return new Set(e.scopedDefinitions(t).filter(n=>n.isFunctionLike).map(n=>n.relativePath))}function Lx(e){let t=ne(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 ou(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 wx(e,t,n){return!(ou(e.relativePath)&&t>0||t===0&&n.has(e.relativePath))}function Ex(e,t,n,r){let i=Ki(e,t.relativePath),o=T(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 m of u)if(m!==t.relativePath&&!e.isIgnored(m))return!0}}return!1}function su(e,t,n){let r=P(e,t);if(!r)return"other";let i=r.split(`
574
- `),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 kx(e,t){let n=P(e,t.relativePath);if(!n)return!1;let r=T(t.symbol);if(!r)return!1;let i=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o=new RegExp(`\\b${i}\\b`),s=n.split(`
575
- `);for(let a=0;a<s.length;a++)if(!(a>=t.startLine&&a<=t.endLine)&&o.test(s[a]??""))return!0;return!1}function Px(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 or,extname as mi}from"path";function Ut(e,t){let{scope:n,maxLoc:r=15,limit:i=30,scanLimit:o}=t??{},s=new _(e),a=Bx(s.fileDependencyGraph(n));return _e({candidates:()=>Tx(s,n,r),orderCandidates:ei,scanLimit:o,prepare:c=>({callerFileMap:ir(s,c,{semantic:t?.semantic!==!1}),reverseFanIn:a}),evaluate:(c,l)=>Fx(e,s,c,l),orderResults:(c,l)=>l.callerFanIn-c.callerFanIn||l.loc-c.loc,limit:i})}function Fx(e,t,n,r){let i=Ax(e,t,n,r.callerFileMap);if(i.length!==1)return null;let o=i[0],s=Mx(e,n.symbolId,o);if(!s)return null;let a=Ox(t,e,o,n.symbol,s);if(a&&nn(a.symbol))return null;let{fanIn:c,source:l}=$x(r.callerFileMap,r.reverseFanIn,o,a);return(l==="function"?c<=3:c<=5)?null:{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):or(o),callerFanIn:c}}function Tx(e,t,n){return e.productionCallableDefinitions({scope:t,minLoc:2,maxLoc:n,requireFunctionLikeSymbol:!0,excludeRootedSymbols:!0})}function Ax(e,t,n,r){let i=or(n.relativePath,mi(n.relativePath)),o=[...r.get(n.symbolId)??[]].filter(s=>s!==n.relativePath).filter(s=>or(s,mi(s))!==i).filter(s=>{let a=t.fileKind(s);return a!=="barrel"&&a!=="entry"&&a!=="test"});return ui(e,n,o).realConsumers}function Mx(e,t,n){return e.get(`SELECT c.start_line, c.end_line
524
+ ${n}`)}function lI(e,t){new E(e).scanSourceReferences({paths:M(e,{includeIgnored:!1}),includeRustAttributeNames:!0,identifierResolution:"permissive"},i=>{i.target.relativePath!==i.sourceFile&&(e.isIgnored(i.target.relativePath)||ip(e,t,i.sourceFile,i.target.relativePath))})}function ip(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 uI(e){let t=new Map;for(let[i,r]of e){if(Rt(i))continue;let o=Sn(i);for(let s of r){if(Rt(s))continue;let a=Sn(s);if(o===a||Xa(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 dI(e){return e.includes("types")||e.endsWith(".d.ts")}function mI(e,t,n){let i=_i(e,t).filter(r=>r.sourcePath===n);return i.length>0&&i.some(r=>r.isUsed)}function pI(e,t,n){let i=de(e,t).filter(r=>r.sourcePath===n);return i.length>0&&i.some(r=>r.used)}function fI(e,t,n){let i=de(e,t).filter(r=>r.sourcePath===n);return i.length>0&&i.every(r=>r.isTypeOnly===!0)}function gI(e){return e.endsWith(".vue")}function hI(e,t,n){let i=de(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 Rt(e){let t=K(e);return!!(t==="entry"||t==="barrel"||t==="test"||t==="worker"||bI(Yi.basename(e)))}function bI(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 rp,extname as op}from"path";function xo(e,t,n,i,r,o){let s=new Set;SI(e,t,n,i)&&s.add(r);for(let a of o)a.value&&yI(s,a.label,a.value);return[...s].slice(0,6)}function yI(e,t,n){let i=xI(n);t.endsWith("name")&&CI(i)&&e.add(`${t} has type-guard boundary shape`);for(let r of i){let o=vI.get(r);o&&e.add(`${t} has ${o} term: ${r}`)}}function SI(e,t,n,i){if(n<=0)return!1;let r=Pe(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(gi(s)===i)return!0;if(!s.startsWith("//")&&!s.startsWith("*")&&!s.startsWith("/*")&&!s.startsWith("@")&&!s.startsWith("#"))return!1}}return!1}function xI(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 CI(e){return e.some(t=>RI.has(t))&&e.some(t=>LI.has(t))}var vI=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"]]),RI=new Set(["can","has","is","should"]),LI=new Set(["access","api","auth","collision","expired","input","keyboard","overlap","permission","permissions","policy","projectile","response","route","routes","scope"]);function Cn(e,t){let{scope:n,maxLoc:i=15,limit:r=30,scanLimit:o}=t??{},s=new E(e);return qe({candidates:()=>FI(s,n,i),orderCandidates:ro,scanLimit:o,prepare:a=>s.calleeMap(a,{semantic:t?.semantic!==!1}),evaluate:(a,c)=>wI(e,a,c.get(a.symbolId)??[]),orderResults:(a,c)=>a.loc-c.loc||a.file.localeCompare(c.file),limit:r})}function wI(e,t,n){let i=TI(n);if(i.size!==1||!fs(e,t.relativePath,t.startLine,t.endLine))return null;let[,r]=[...i.entries()][0],o=kI(e,t,r),s=II(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:DI(a,o,s)}}function kI(e,t,n){return xo(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:rp(t.relativePath,op(t.relativePath))},{label:"callee module",value:rp(n.file,op(n.file))}])}function DI(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(PI);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 II(e,t){return NI(e,t)?Kn(e,t.relativePath)?["exported passthrough is declared on the package public surface"]:te(e,t.symbol,t.relativePath)?["exported passthrough matches configured or framework public entry surface"]:[]:[]}function NI(e,t){let n=Pe(e,t.relativePath);if(n.length===0)return!1;let i=n.slice(Math.max(0,t.startLine-2),t.startLine+1).join(`
525
+ `);return $I.test(i)?!0:EI(n,F(t.symbol))}function EI(e,t){if(!t)return!1;let n=new RegExp(`^\\s*export\\s*\\{[^}\\n]*\\b${_I(t)}\\b`);return e.some(i=>n.test(i))}function PI(e){return e.includes("public surface")}function _I(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function TI(e){let t=e.some(i=>re(i.symbol))?e.filter(i=>re(i.symbol)):e,n=new Map;for(let i of t)n.has(i.symbol)||n.set(i.symbol,i);return n}function FI(e,t,n){return e.productionCallableDefinitions({scope:t,minLoc:3,maxLoc:n,requireFunctionLikeSymbol:!0,excludeRustTraitImplMembers:!0})}var $I=/^\s*export\s+(?:default\s+)?(?:(?:async\s+)?function\b|(?:const|let|var)\b)/m;function vn(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 E(e),u=l.scopedDefinitions(n),d=KI(l,n),m={high:0,medium:1,low:2};return qe({candidates:()=>AI(e,l,u,{minLoc:i,maxLoc:r}),orderCandidates:(p,h)=>q(h)-q(p)||p.relativePath.localeCompare(h.relativePath),scanLimit:a,prepare:p=>({consumerFileMap:MI(l,p,{semantic:c}),singletonBackedClassIds:HI(e,l,u,p,{semantic:c}),candidateIndex:OI(p)}),evaluate:(p,h)=>{if(h.singletonBackedClassIds.has(p.symbolId))return null;let g=jI(e,p,h.consumerFileMap,h.candidateIndex);if(g.transitivelyReachable||g.realConsumers.length>1||g.realConsumers.length===0&&g.barrelConsumers>0||!QI(g.definition,g.realConsumers.length,d))return null;let b=BI(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 AI(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=>!te(e,r.symbol,r.relativePath)).filter(r=>!JI(r.symbol)).filter(r=>!t.hasSuppressionComment(r))}function MI(e,t,n){return hn(e,t,{semantic:n.semantic})}function OI(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=F(n.symbol);r&&i.set(r,n)}return t}function jI(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}=co(e,t,o),l=XI(e,t,n,i);return{definition:t,realConsumers:s,barrelConsumers:a+c,transitivelyReachable:l}}function BI(e,t){let n=cp(e,t.definition.relativePath,t.definition.startLine),i=ap(t.definition.relativePath)?!0:YI(e,t.definition),{confidence:r,reason:o}=ZI(t.realConsumers.length,n,i),s=VI(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 VI(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 HI(e,t,n,i,r){let o=UI(e,qI(n),i),s=o.map(l=>l.singleton);if(o.length===0)return new Set;let a=hn(t,s,{semantic:r.semantic}),c=new Set;for(let{singleton:l,classId:u}of o)GI(e,l,a)&&c.add(u);return c}function qI(e){let t=new Map;for(let n of e){let i=F(n.symbol);i&&t.set(sp(n.relativePath,i),n)}return t}function UI(e,t,n){let i=[];for(let r of n){let o=WI(e,t,r);o&&i.push({singleton:o,classId:r.symbolId})}return i}function WI(e,t,n){if(cp(e,n.relativePath,n.startLine)!=="class")return null;let i=F(n.symbol);if(!i)return null;let r=zI(e,n.relativePath,i);return r?t.get(sp(n.relativePath,r))??null:null}function GI(e,t,n){let i=F(t.symbol),r=n.get(t.symbolId);return!i||!r?!1:[...r].some(o=>o!==t.relativePath&&!e.isIgnored(o)&&!Ia(e,o,i))}function sp(e,t){return`${e}\0${t}`}function zI(e,t,n){let i=A(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 KI(e,t){return new Set(e.scopedDefinitions(t).filter(n=>n.isFunctionLike).map(n=>n.relativePath))}function JI(e){let t=ue(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 ap(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 QI(e,t,n){return!(ap(e.relativePath)&&t>0||t===0&&n.has(e.relativePath))}function XI(e,t,n,i){let r=hs(e,t.relativePath),o=F(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 cp(e,t,n){let i=A(e,t);if(!i)return"other";let r=i.split(`
526
+ `),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 YI(e,t){let n=A(e,t.relativePath);if(!n)return!1;let i=F(t.symbol);if(!i)return!1;let r=i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o=new RegExp(`\\b${r}\\b`),s=n.split(`
527
+ `);for(let a=0;a<s.length;a++)if(!(a>=t.startLine&&a<=t.endLine)&&o.test(s[a]??""))return!0;return!1}function ZI(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 ri,extname as Co}from"path";function Rn(e,t){let{scope:n,maxLoc:i=15,limit:r=30,scanLimit:o}=t??{},s=new E(e),a=aN(s.fileDependencyGraph(n));return qe({candidates:()=>tN(s,n,i),orderCandidates:ro,scanLimit:o,prepare:c=>({callerFileMap:hn(s,c,{semantic:t?.semantic!==!1}),reverseFanIn:a}),evaluate:(c,l)=>eN(e,s,c,l),orderResults:(c,l)=>l.callerFanIn-c.callerFanIn||l.loc-c.loc,limit:r})}function eN(e,t,n,i){let r=nN(e,t,n,i.callerFileMap);if(r.length!==1)return null;let o=r[0],s=iN(e,n.symbolId,o);if(!s)return null;let a=rN(t,e,o,n.symbol,s);if(a&&An(a.symbol))return null;let{fanIn:c,source:l}=oN(i.callerFileMap,i.reverseFanIn,o,a);if(l==="function"?c<=3:c<=5)return null;let u=lN(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):ri(o),callerFanIn:c,actionTier:u.length>0?"signal":"direct",boundaryEvidence:u}}function tN(e,t,n){return e.productionCallableDefinitions({scope:t,minLoc:2,maxLoc:n,requireFunctionLikeSymbol:!0,excludeRootedSymbols:!0})}function nN(e,t,n,i){let r=ri(n.relativePath,Co(n.relativePath)),o=[...i.get(n.symbolId)??[]].filter(s=>s!==n.relativePath).filter(s=>ri(s,Co(s))!==r).filter(s=>{let a=t.fileKind(s);return a!=="barrel"&&a!=="entry"&&a!=="test"});return co(e,n,o).realConsumers}function iN(e,t,n){return e.get(`SELECT c.start_line, c.end_line
576
528
  FROM mentions m
577
529
  JOIN chunks c ON m.chunk_id = c.id
578
530
  JOIN documents d ON c.document_id = d.id
579
531
  WHERE m.symbol_id = ? AND m.role != 1 AND d.relative_path = ?
580
- LIMIT 1`,t,n)}function Ox(e,t,n,r,i){let o=e.definitionsForFile(n),s=jx(t,n,r,i.start_line,i.end_line);return Ce(o,s)}function $x(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:Hx(t,n),source:"file"}}function jx(e,t,n,r,i){let o=T(n);if(!o)return r;let s=Ye(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 Bx(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 Hx(e,t){let n=e.get(t)??0;if(n>0)return n;let r=or(t,mi(t)),i=0;for(let[o,s]of e)o!==t&&or(o,mi(o))===r&&s>i&&(i=s);return i}var Jx=75e3,zx=5e3,Kx=2500;function Qx(e){let t=Ee(e);return t.symbols>=Jx||t.documents>=zx?Kx:void 0}var Yx=".scipquery-baseline.json";function di(e,t){return t&&Ux(t)?t:Gx(e.config.projectRoot,t??Yx)}function ps(e,t={}){let{scope:n}=t,r=Qx(e),i=[],o=Xe(e,{scope:n,...Z.dead,scanLimit:r});for(let s of o.symbols)me(e,s.relativePath)||oe(e,s.symbol,s.relativePath)||s.kind==="dead-code"&&i.push(`dead:${s.relativePath}:${s.shortName}`);for(let s of Ot(e,{scope:n,...Z.isolated,scanLimit:r}))me(e,s.relativePath)||oe(e,s.symbol,s.relativePath)||i.push(`isolated:${s.relativePath}:${s.shortName}`);for(let s of Mt(e,{scope:n}))s.kind==="real"&&i.push(`cycle:${Xx(s.path)}`);for(let s of Ze(e,{scope:n,...Z.similar,scanLimit:r}))i.push(`similar:${[s.symbolA,s.symbolB].sort().join("|")}`);for(let s of $t(e,{scope:n,...Z.extract,scanLimit:r}))i.push(`extract:${s.relativePath}:${s.shortName}`);for(let s of Ut(e,{scope:n,...Z.wrappers,scanLimit:r}))i.push(`wrapper:${s.file}:${s.shortName}`);for(let s of Vt(e,{scope:n,...Z.passthroughs,scanLimit:r}))i.push(`passthrough:${s.file}:${s.shortName}`);for(let s of Wt(e,{scope:n,...Z.stale,scanLimit:r}))i.push(`stale:${s.file}:${s.shortName}`);for(let s of qt(e,{scope:n,...Z.drift}).results)s.kind!=="pattern-deviation"&&i.push(`drift:${s.kind}:${s.file}:${s.dep}`);return[...new Set(i)].sort()}function Xx(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 fs(e,t={}){let n=ps(e,{scope:t.scope}),r=di(e,t.path);return Wx(r,JSON.stringify({version:1,findings:n},null,2)+`
581
- `),{path:r,findingCount:n.length}}function sr(e,t={}){let n=di(e,t.path);if(!qx(n))throw new Error(`No baseline found at ${n}. Create one with: scip-query health --write-baseline`);let r=JSON.parse(Vx(n,"utf-8")),i=new Set(r.findings??[]),o=ps(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))}}import{execFileSync as Zx}from"child_process";var eC=5;function ar(e,t={}){let{base:n="HEAD",minContainment:r=.7,minCallees:i=3,maxHelpers:o=Number.POSITIVE_INFINITY,limit:s=20}=t,a=t.semantic!==!1,c=yt(e,{base:n}),l={available:c.note!==cs,base:n,changedFiles:c.changedFiles,helpersChecked:0,skipped:[],findings:[]};if(!l.available||c.changedFiles.length===0)return l;let u=new _(e),m=new Set(c.changedFiles),d=tC(e,u,m,n);if(d.length===0)return l;let p=d.slice(0,o);d.length>o&&(l.note=`helper scoring capped at ${o} of ${d.length} new symbols`);let h=ni(e,{minCallees:Math.min(3,i),semantic:a}),f=u.calleeMap(p,{semantic:a}),y=p.map(S=>({def:S,callees:ri((f.get(S.symbolId)??[]).map(x=>x.symbol))})),R=new Map;for(let S of h)for(let x of S.callees)R.set(x,(R.get(x)??0)+1);let E=Math.max(8,Math.ceil(Math.sqrt(h.length)));for(let{def:S,callees:x}of y){let D=b(S.symbol);if(x.size<i){l.skipped.push({helperShortName:D,helperFile:S.relativePath,reason:`fewer than ${i} meaningful callees \u2014 too small to score`});continue}let w=rC(e,S.symbolId);if(w.length===0){l.skipped.push({helperShortName:D,helperFile:S.relativePath,reason:"no references yet \u2014 covered by the new-dead check"});continue}l.helpersChecked+=1;let $=[];for(let F of h){if(F.symbol===S.symbol||m.has(F.file)||F.callees.has(S.symbol))continue;let se=Al(x,F.callees);if(se<r)continue;let he=[...x].filter(je=>F.callees.has(je));he.some(je=>(R.get(je)??0)<=E)&&$.push({symbol:F.symbol,shortName:b(F.symbol),file:F.file,containment:se,sharedCallees:he.map(b).sort()})}$.length!==0&&($.sort((F,se)=>se.containment-F.containment||F.file.localeCompare(se.file)),l.findings.push({helperSymbol:S.symbol,helperShortName:D,helperFile:S.relativePath,migratedFiles:w.sort(),leftovers:$.slice(0,eC)}))}return l.findings.sort((S,x)=>(x.leftovers[0]?.containment??0)-(S.leftovers[0]?.containment??0)||S.helperFile.localeCompare(x.helperFile)),l.findings=l.findings.slice(0,s),l}function tC(e,t,n,r){let i=new Map;return t.productionCallableDefinitions({requireFunctionLikeSymbol:!0}).filter(o=>{if(!n.has(o.relativePath))return!1;let s=i.get(o.relativePath);return s===void 0&&(s=nC(e.config.projectRoot,r,o.relativePath),i.set(o.relativePath,s)),s===null||!new RegExp(`\\b${iC(o.leaf)}\\b`).test(s)})}function nC(e,t,n){try{return Zx("git",["show",`${t}:./${n}`],{encoding:"utf-8",cwd:e,timeout:1e4,stdio:["ignore","pipe","ignore"]})}catch{return null}}function rC(e,t){return e.all(`SELECT DISTINCT ref_d.relative_path
532
+ LIMIT 1`,t,n)}function rN(e,t,n,i,r){let o=e.definitionsForFile(n),s=sN(t,n,i,r.start_line,r.end_line);return Me(o,s)}function oN(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:cN(t,n),source:"file"}}function sN(e,t,n,i,r){let o=F(n);if(!o)return i;let s=St(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 aN(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 cN(e,t){let n=e.get(t)??0;if(n>0)return n;let i=ri(t,Co(t)),r=0;for(let[o,s]of e)o!==t&&ri(o,Co(o))===i&&s>r&&(r=s);return r}function lN(e,t,n,i){return xo(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):ri(n)},{label:"wrapper path",value:t.relativePath},{label:"caller path",value:n}])}var gN=75e3,hN=5e3,bN=2500;function yN(e){let t=Ae(e);return t.symbols>=gN||t.documents>=hN?bN:void 0}var SN=".scipquery-baseline.json";function vo(e,t){return t&&pN(t)?t:fN(e.config.projectRoot,t??SN)}function Ya(e,t={}){let{scope:n}=t,i=yN(e),r=[],o=xt(e,{scope:n,...oe.dead,scanLimit:i});for(let s of o.symbols)Re(e,s.relativePath)||te(e,s.symbol,s.relativePath)||s.kind==="dead-code"&&r.push(`dead:${s.relativePath}:${s.shortName}`);for(let s of cn(e,{scope:n,...oe.isolated,scanLimit:i}))Re(e,s.relativePath)||te(e,s.symbol,s.relativePath)||r.push(`isolated:${s.relativePath}:${s.shortName}`);for(let s of an(e,{scope:n}))s.kind==="real"&&r.push(`cycle:${xN(s.path)}`);for(let s of Ct(e,{scope:n,...oe.similar,scanLimit:i}))r.push(`similar:${[s.symbolA,s.symbolB].sort().join("|")}`);for(let s of gn(e,{scope:n,...oe.extract,scanLimit:i}))r.push(`extract:${s.relativePath}:${s.shortName}`);for(let s of Rn(e,{scope:n,...oe.wrappers,scanLimit:i}))r.push(`wrapper:${s.file}:${s.shortName}`);for(let s of Cn(e,{scope:n,...oe.passthroughs,scanLimit:i}))r.push(`passthrough:${s.file}:${s.shortName}`);for(let s of vn(e,{scope:n,...oe.stale,scanLimit:i}))r.push(`stale:${s.file}:${s.shortName}`);for(let s of xn(e,{scope:n,...oe.drift}).results)s.kind!=="pattern-deviation"&&r.push(`drift:${s.kind}:${s.file}:${s.dep}`);return[...new Set(r)].sort()}function xN(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 Za(e,t={}){let n=Ya(e,{scope:t.scope}),i=vo(e,t.path);return mN(i,JSON.stringify({version:1,findings:n},null,2)+`
533
+ `),{path:i,findingCount:n.length}}function Zi(e,t={}){let n=vo(e,t.path);if(!uN(n))throw new Error(`No baseline found at ${n}. Create one with: scip-query health --write-baseline`);let i=JSON.parse(dN(n,"utf-8")),r=new Set(i.findings??[]),o=Ya(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 CN=5;function er(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??at(e,{base:n}),u={available:l.note!==Ua,base:n,changedFiles:l.changedFiles,helpersChecked:0,skipped:[],findings:[]};if(!u.available||l.changedFiles.length===0)return u;let d=new E(e),m=new Set(l.changedFiles),p=new Map(l.renamedFiles.map(w=>[w.to,w.from])),h=IN(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=so(e,{minCallees:Math.min(3,r),semantic:c}),S=vN(b),L=d.calleeMap(g,{semantic:c}),_=g.map(w=>({def:w,callees:ao((L.get(w.symbolId)??[]).map(C=>C.symbol))}));for(let{def:w,callees:C}of _){let N=y(w.symbol);if(C.size<r){u.skipped.push({helperShortName:N,helperFile:w.relativePath,reason:`fewer than ${r} meaningful callees \u2014 too small to score`});continue}let V=DN(C,S);if(V===0){u.skipped.push({helperShortName:N,helperFile:w.relativePath,reason:"helper callee pattern is all project-wide infrastructure \u2014 too generic to score"});continue}let B=NN(e,w.symbolId);if(B.length===0){u.skipped.push({helperShortName:N,helperFile:w.relativePath,reason:"no references yet \u2014 covered by the new-dead check"});continue}u.helpersChecked+=1;let he=RN({candidateIndex:S,changed:m,helperCallees:C,helperFile:w.relativePath,helperSymbol:w.symbol,minContainment:i,minSiteCoverage:o,migratedFiles:B});he.length!==0&&(he.sort((ae,Ee)=>lp(Ee.migrationScope)-lp(ae.migrationScope)||Ee.containment-ae.containment||Ee.siteCoverage-ae.siteCoverage||ae.file.localeCompare(Ee.file)),u.findings.push({helperSymbol:w.symbol,helperShortName:N,helperFile:w.relativePath,helperShape:"specific-callee-cluster",helperCalleeCount:C.size,specificHelperCalleeCount:V,migratedFiles:B.sort(),leftovers:he.slice(0,CN)}))}return u.findings.sort((w,C)=>(C.leftovers[0]?.containment??0)-(w.leftovers[0]?.containment??0)||w.helperFile.localeCompare(C.helperFile)),u.findings=u.findings.slice(0,a),u}function vN(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 RN(e){let t=[],n=LN(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=rm(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=wN(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 lp(e){return e==="same-scope"?2:e==="unknown"?1:0}function LN(e,t,n){let i=new Set([...ec(t),...tc(F(e))]);for(let r of n)for(let o of ec(r))i.add(o);return i}function wN(e,t,n){let i=new Set([...ec(n),...tc(F(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 kN=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 ec(e){return tc(e.replace(/\.[^.]+$/,""))}function tc(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(t=>t.length>1&&!kN.has(t))}function DN(e,t){let n=0;for(let i of e)(t.docFreq.get(i)??0)<=t.ubiquityThreshold&&(n+=1);return n}function IN(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=Ji(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
582
534
  FROM mentions m
583
535
  JOIN chunks c ON m.chunk_id = c.id
584
536
  JOIN documents ref_d ON c.document_id = ref_d.id
585
537
  WHERE m.symbol_id = ?
586
538
  AND m.role != 1
587
- ${e.pathExclusionsFor("ref_d")}`,t).map(r=>r.relative_path)}function iC(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function cr(e,t={}){let{scope:n,limit:r=30,scanLimit:i}=t,o=t.files===void 0?null:new Set(t.files),s=new _(e);return _e({candidates:()=>s.productionCallableDefinitions({scope:n,minLoc:2,excludeRootedSymbols:!0,requireFunctionLikeSymbol:!0}).filter(a=>oC(a.relativePath)&&(o===null||o.has(a.relativePath))),scanLimit:i,evaluate:a=>{let c=Q(e,a.relativePath)?.callables.find(m=>m.startLine===a.startLine&&m.endLine===a.endLine);if(!c||c.params.length===0||c.params.some(m=>!m.simple)||c.paramsEndLine>=c.endLine)return null;let l=Ye(e,a.relativePath),u=[];for(let m=c.params.length-1;m>=0;m--){let d=c.params[m];if(d.name===""||d.name.startsWith("_")||sC(l.get(d.name),c.paramsEndLine,c.endLine))break;u.unshift(d.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 oC(e){let t=B(e);return t==="typescript"||t==="tsx"||t==="javascript"}function sC(e,t,n){return e?e.some(r=>r>t&&r<=n):!1}var pi=["echo","incomplete-migration","co-change-partner","doc-reference","unused-params","new-dead","baseline"];function gs(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}=t,c=new Set(t.skip??[]),l=xn(e,{base:n}),u=l.changedFiles,m=new Set(u),d={base:n,changedFiles:u,changedSymbols:l.changedSymbols.length,checksRun:[],skipped:[],findings:[],note:l.summary.note};if(u.length===0)return d;let p=(h,f)=>{if(c.has(h)){d.skipped.push({check:h,reason:"skipped via --skip"});return}f()};return p("echo",()=>aC(e,l.changedSymbols,m,o,a,d)),p("incomplete-migration",()=>cC(e,n,s,d)),p("co-change-partner",()=>lC(e,m,r,i,d)),p("doc-reference",()=>uC(e,m,d)),p("unused-params",()=>mC(e,u,d)),p("new-dead",()=>dC(e,l.changedSymbols,d)),p("baseline",()=>pC(e,d)),d}function aC(e,t,n,r,i,o){o.checksRun.push("echo");for(let s of t.slice(0,r)){let a=Zn(e,s.symbol,{minSimilarity:i,limit:3});for(let c of a){let l=c.fileA===s.file?c.fileB:c.fileA,u=c.fileA===s.file?c.shortNameB:c.shortNameA;n.has(l)||o.findings.push({check:"echo",message:`${s.shortName} (${s.file}) is ${Math.round(c.similarity*100)}% similar to established ${u} (${l})`,remediation:`Extend or reuse ${u} instead of keeping the re-implementation.`})}}t.length>r&&o.skipped.push({check:"echo",reason:`echo check capped at ${r} of ${t.length} changed symbols`})}function cC(e,t,n,r){let i=ar(e,{base:t,maxHelpers:n});if(!i.available){r.skipped.push({check:"incomplete-migration",reason:"no git history"});return}r.checksRun.push("incomplete-migration"),i.note&&r.skipped.push({check:"incomplete-migration",reason:i.note});for(let o of i.findings){let s=o.leftovers.map(a=>`${a.shortName} (${a.file}, ${Math.round(a.containment*100)}%)`).join(", ");r.findings.push({check:"incomplete-migration",message:`new helper ${o.helperShortName} (${o.helperFile}) is wired into ${o.migratedFiles.length} file(s), but ${o.leftovers.length} similar un-migrated site(s) remain: ${s}`,remediation:`Migrate the remaining sites to ${o.helperShortName}, or confirm they are intentionally different.`})}}function lC(e,t,n,r,i){let o=si(e,{minTogether:n,minConfidence:0});if(!o){i.skipped.push({check:"co-change-partner",reason:"no git history"});return}i.checksRun.push("co-change-partner");let s=new Set;for(let a of o){let c=t.has(a.fileA),l=t.has(a.fileB);if(c===l)continue;let u=c?a.fileA:a.fileB,m=c?a.fileB:a.fileA,d=c?a.changesA:a.changesB,p=d>0?a.together/d:0;if(p<r||ss(m)||ss(u)||!au(`${e.config.projectRoot}/${m}`))continue;let h=`${u}|${m}`;s.has(h)||(s.add(h),i.findings.push({check:"co-change-partner",message:`${u} changed, but ${m} did not \u2014 they change together ${a.together}x (${Math.round(p*100)}% of the time)`,remediation:`Update ${m} alongside this change, or confirm the coupling no longer holds.`}))}}function uC(e,t,n){n.checksRun.push("doc-reference");for(let r of Xl(e,t))t.has(r.doc)||n.findings.push({check:"doc-reference",message:`${r.doc} cites ${r.cited.join(", ")} \u2014 changed in this diff, doc untouched`,remediation:`Re-read ${r.doc} and update its claims, or update its citations.`})}function mC(e,t,n){n.checksRun.push("unused-params");for(let r of cr(e,{files:t,limit:50}))n.findings.push({check:"unused-params",message:`${r.shortName} (${r.file}) has trailing unused parameter(s): ${r.unusedTrailing.join(", ")}`,remediation:"Drop the unused trailing parameters and their call-site arguments."})}function dC(e,t,n){n.checksRun.push("new-dead");let r=new _(e);for(let i of t)i.fanIn>0||r.fileKind(i.file)!=="test"&&(me(e,i.file)||oe(e,i.symbol,i.file)||n.findings.push({check:"new-dead",message:`${i.shortName} (${i.file}) was changed but has zero indexed consumers`,remediation:"Wire it up, or remove it before it becomes permanent dead code."}))}function pC(e,t){if(!au(di(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=sr(e);for(let r of n.newFindings)t.findings.push({check:"baseline",message:`new finding vs committed baseline: ${r}`,remediation:"Fix the finding, or knowingly accept it via health --write-baseline."})}function hs(e,t={}){let{windowCommits:n=100,minSimilarity:r=.7,limit:i=30,scope:o,scanLimit:s}=t,a=zl(e);if(!a)return{available:!1,windowCommits:n,findings:[]};let c=Ze(e,{scope:o,minSimilarity:r,limit:i*5,crossFileOnly:!0,scanLimit:s,semantic:t.semantic}),l=[];for(let u of c){let m=a.get(u.fileA)?.commitsAgo??null,d=a.get(u.fileB)?.commitsAgo??null,p=m!==null&&m<=n,h=d!==null&&d<=n;if(!(!p&&!h)){if(p&&h){let f=(m??0)<=(d??0);l.push({kind:"twin",echoSymbol:f?u.shortNameA:u.shortNameB,echoFile:f?u.fileA:u.fileB,echoAgeCommits:(f?m:d)??0,establishedSymbol:f?u.shortNameB:u.shortNameA,establishedFile:f?u.fileB:u.fileA,establishedAgeCommits:f?d:m,similarity:u.similarity,sharedCallees:u.sharedCallees})}else l.push({kind:"echo",echoSymbol:p?u.shortNameA:u.shortNameB,echoFile:p?u.fileA:u.fileB,echoAgeCommits:(p?m:d)??0,establishedSymbol:p?u.shortNameB:u.shortNameA,establishedFile:p?u.fileB:u.fileA,establishedAgeCommits:p?d:m,similarity:u.similarity,sharedCallees:u.sharedCallees});if(l.length>=i)break}}return l.sort((u,m)=>(u.kind===m.kind?0:u.kind==="echo"?-1:1)||m.similarity-u.similarity),{available:!0,windowCommits:n,findings:l}}var fC=/scip-query[\s:-]*ignore[\s:-]*(dead(?:-code)?|stale|wrapper|passthrough|drift|extract|similar)?/gi,gC=te("suppression-inventory",{clearGroups:["whole-project"]});function fi(e){return gC.get(e,()=>hC(e))}function hC(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 Ve(e)){let o=P(e,i);if(!(!o||!o.includes("scip-query")))for(let s of o.matchAll(fC)){r+=1,n.set(i,(n.get(i)??0)+1);let a=yC(s[1]);t[a]+=1}}return{total:r,byCategory:t,byFile:n}}function yC(e){if(!e)return"uncategorized";let t=e.toLowerCase();return t==="dead-code"?"dead":t}import{readFileSync as bC}from"fs";import{join as SC}from"path";function lr(e,t,n={}){let r=A(e,t);if(!r)return null;let i=new _(e),o=vC(CC(e,r.relativePath,r.startLine,r.endLine),xC(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:RC(e,r.symbolId),fanOut:IC(c,r.relativePath)}}function xC(e,t){return e.get("SELECT language FROM documents WHERE relative_path = ?",t)?.language??"unknown"}function CC(e,t,n,r){try{return bC(SC(e.config.projectRoot,t),"utf-8").split(`
588
- `).slice(n,r+1).join(`
589
- `)}catch{return""}}function RC(e,t){return e.get(`SELECT COUNT(DISTINCT c.document_id) AS c
539
+ ${e.pathExclusionsFor("ref_d")}`,t).map(i=>i.relative_path)}function EN(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function tr(e,t={}){let{scope:n,limit:i=30,scanLimit:r}=t,o=t.files===void 0?null:new Set(t.files),s=new E(e);return qe({candidates:()=>s.productionCallableDefinitions({scope:n,minLoc:2,excludeRootedSymbols:!0,requireFunctionLikeSymbol:!0}).filter(a=>PN(a.relativePath)&&(o===null||o.has(a.relativePath))),scanLimit:r,evaluate:a=>{let c=ie(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=St(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 PN(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 wo=["echo","incomplete-migration","co-change-partner","doc-reference","unused-params","new-dead","baseline"];function rc(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=at(e,{base:n}),u=ii(e,{base:n,plan:l}),d=u.changedFiles,m=new Set(d),p=new Set(l.changedFileLines),h=gE(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,L)=>{if(c.has(S)){g.skipped.push({check:S,reason:"skipped via --skip"});return}L()};return b("echo",()=>jN(e,u.changedSymbols,m,h,o,a,g)),b("incomplete-migration",()=>KN(e,n,l,s,g)),b("co-change-partner",()=>JN(e,m,i,r,g)),b("doc-reference",()=>eE(e,m,p,l.changedRanges,g)),b("unused-params",()=>mE(e,d,g)),b("new-dead",()=>pE(e,u.changedSymbols,h,g)),b("baseline",()=>yE(e,g)),MN(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=$N(r.severity,n.severity),r.actionTier=AN(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||Lo(i.severity)-Lo(n.severity)||n.groupKey.localeCompare(i.groupKey))}function $N(e,t){return Lo(t)>Lo(e)?t:e}function Lo(e){return e==="error"?2:e==="warning"?1:0}function AN(e,t){return e?t&&up(t)>up(e)?t:e:t}function up(e){return e==="direct"?2:e==="signal"?1:0}function MN(e,t){if(t.length===0||e.findings.length===0)return;let n=[];for(let i of e.findings){let r=t.find(o=>ON(o,i));r?e.suppressed.push({finding:i,suppression:r}):n.push(i)}e.findings=n}function ON(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 jN(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=Hi(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=Ln("echo",a.symbol,a.file,...l.map(p=>`${p.otherSymbol}|${p.otherFile}`).sort()),m=BN(a,l);s.findings.push({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:WN(a,l),why:GN(a,l),remediation:zN(m,a.shortName,u.otherShort),suppressionHint:`scip-query: ignore echo ${d} -- <reason>`})}t.length>r&&s.skipped.push({check:"echo",reason:`echo check capped at ${r} of ${t.length} changed symbols`})}function BN(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=F(e),i=F(t.otherSymbol);return!n||!i?!1:n===i?!0:UN(t.sharedEvidence)?!1:HN(n,i)}function HN(e,t){let n=dp(e),i=dp(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 dp(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 qN=new Set(["bytes","crypto","hex","num","random","secret","to","token"]);function UN(e){return e.length>=3&&e.every(t=>qN.has(t.toLowerCase()))}function WN(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 GN(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 zN(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 KN(e,t,n,i,r){let o=er(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=Ln("incomplete-migration",s.helperSymbol,s.helperFile,l.join("|"));r.findings.push({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.`,suppressionHint:`scip-query: ignore incomplete-migration ${m} -- <reason>`})}}function JN(e,t,n,i,r){let o=po(e,{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=qa(e);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||Ba(m)||Ba(d)||!ic(`${e.config.projectRoot}/${m}`))continue;let g=`${d}|${m}`;if(s.has(g))continue;s.add(g);let b=Ln("co-change-partner",d,m,String(c.together)),S=Va(d,m),L=Ha({fileA:d,fileB:m,together:c.together,confidence:h,commitScope:c.commitScope,recency:c.recency,subjectContext:c.subjectContext},S,a(d,m)),_=[d,m].sort().join("|");r.findings.push({id:b,check:"co-change-partner",severity:"warning",evidence:"change-graph",actionTier:"signal",groupKey:`co-change-partner:${_}`,confidence:h,file:d,relatedFiles:[m],sourceAnalyzer:"co-change",rootCauseKey:_,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,...L?{declaredCouplingSuggestion:L}:{},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: ${QN(c)}.`,`Subject context: ${XN(c.subjectContext)}.`,...YN(c),`Partner class: ${S.partnerClass} (${S.reasons.join("; ")}).`],remediation:L?`Update ${m} alongside this change, declare the coupling "${L.name}", or confirm the coupling no longer holds.`:`Update ${m} alongside this change, or confirm the coupling no longer holds.`,suppressionHint:`scip-query: ignore co-change-partner ${b} -- <reason>`})}}function QN(e){return`${e.commitScope}/${e.recency}; ${e.focusedTogether} focused, ${e.broadTogether} broad-sweep (${Math.round(e.broadCommitRatio*100)}% broad), ${e.recentTogether} recent, last ${ZN(e.lastTogetherAt)}`}function XN(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 YN(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 ZN(e){return e<=0?"unknown":new Date(e*1e3).toISOString().slice(0,10)}function eE(e,t,n,i,r){r.checksRun.push("doc-reference");let o=sE(e,t,i);if(o.size!==0)for(let s of Ym(e,o)){if(n.has(s.doc))continue;let a=s.citedClaims.length>0?s.citedClaims:nE(e,s.doc,s.cited),c=tE(a),l=Ln("doc-reference",s.doc,s.cited.join("|"));r.findings.push({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 ${rE(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:oE(c.citationKind,s.doc),suppressionHint:`scip-query: ignore doc-reference ${l} -- <reason>`})}}function tE(e){let t=e.join(`
540
+ `).toLowerCase(),n=[],i=nc(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=nc(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=nc(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 nE(e,t,n){let i;try{i=mp(`${e.config.projectRoot}/${t}`,"utf-8").split(/\r?\n/)}catch{return[]}let r=n.flatMap(iE),o=[];for(let s=0;s<i.length;s+=1){let a=i[s]??"";r.some(c=>a.includes(c))&&o.push(yo(i,s))}return o}function iE(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 nc(e,t){return t.filter(n=>e.includes(n))}function rE(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 oE(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 sE(e,t,n){let i=aE(n),r=new Set;for(let o of t)cE(e,o,i.get(o)??[])&&r.add(o);return r}function aE(e){let t=new Map;for(let n of e){let i=t.get(n.file)??[];i.push(n),t.set(n.file,i)}return t}function cE(e,t,n){if(n.length===0)return!1;if(!lE.test(t))return!0;let i=`${e.config.projectRoot}/${t}`;if(!ic(i))return!0;let r=mp(i,"utf-8").split(/\r?\n/),o=uE(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 lE=/\.(?:[cm]?[jt]sx?)$/i;function uE(e){let t=new Set,n=!1;for(let i=0;i<e.length;i+=1){let r=e[i].trim();!n&&dE(r)&&(n=!0),n&&(t.add(i),r.endsWith(";")&&(n=!1))}return t}function dE(e){return/^import(?:\s|$)/.test(e)||/^export(?:\s+type)?\s+(?:\*|\{)/.test(e)}function mE(e,t,n){n.checksRun.push("unused-params");for(let i of tr(e,{files:t,limit:50})){let r=Ln("unused-params",i.symbol,i.file,i.unusedTrailing.join("|"));n.findings.push({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.",suppressionHint:`scip-query: ignore unused-params ${r} -- <reason>`})}}function pE(e,t,n,i){i.checksRun.push("new-dead");let r=new E(e);for(let o of t){if(n(o)||o.fanIn>0||r.fileKind(o.file)==="test"||Re(e,o.file)||te(e,o.symbol,o.file)||fE(o.symbol))continue;let s=Ln("new-dead",o.symbol,o.file);i.findings.push({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.",suppressionHint:`scip-query: ignore new-dead ${s} -- <reason>`})}}function fE(e){if(X(e)!=="type")return!1;let t=F(e);return t.startsWith("_Assert")||t.startsWith("Assert")}function gE(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);if(!s)return!1;let a=F(o.symbol);if(!a)return!1;let c=r.get(s);return c===void 0&&(c=Ji(e,t,s),r.set(s,c)),c!==null&&hE(c,a)}}function hE(e,t){return new RegExp(`\\b${bE(t)}\\b`).test(e)}function bE(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function yE(e,t){if(!ic(vo(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=Zi(e);for(let i of n.newFindings){let r=SE(i),o=Ln("baseline",i);t.findings.push({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,suppressionHint:`scip-query: ignore baseline ${o} -- <reason>`})}}function SE(e){let[t,n]=Ro(e,":"),i=t||"unknown",r=(o={})=>{let s=o.actionTier??xE(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??CE(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]=Ro(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]=Ro(n,":"),[a,c]=Ro(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 xE(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 CE(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 Ro(e,t){let n=e.indexOf(t);return n<0?[e,""]:[e.slice(0,n),e.slice(n+t.length)]}function Ln(e,...t){return`SQ${TN("sha256").update([e,...t].join("\0")).digest("hex").slice(0,12).toUpperCase()}`}var vE=.7,pp=.62,fp=.45;function oc(e,t={}){let{windowCommits:n=100,limit:i=30,scope:r,scanLimit:o}=t,s=$m(e);if(!s)return{available:!1,windowCommits:n,findings:[]};if(i<=0)return{available:!0,windowCommits:n,findings:[]};let c=RE(e,{limit:i,minSimilarity:t.minSimilarity,scanLimit:o,scope:r,semantic:t.semantic}).map(u=>NE(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(EE);return{available:!0,windowCommits:n,findings:l,rootCauseGroups:PE(l)}}function RE(e,t){let n=TE(t.limit);return[...LE(e,{scope:t.scope,minSimilarity:t.minSimilarity??vE,limit:n,scanLimit:t.scanLimit,semantic:t.semantic}),...wE(e,{scope:t.scope,minSimilarity:t.minSimilarity??pp,limit:n,scanLimit:t.scanLimit}),...kE(e,{scope:t.scope,minSimilarity:t.minSimilarity??fp,limit:n,scanLimit:t.scanLimit}),...DE(e,{scope:t.scope,minSimilarity:t.minSimilarity??pp,limit:n,scanLimit:t.scanLimit}),...IE(e,{scope:t.scope,minSimilarity:t.minSimilarity??fp,limit:n,scanLimit:t.scanLimit})]}function LE(e,t){return Ct(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 wE(e,t){return ln(e,{scope:t.scope,minSimilarity:t.minSimilarity,limit:t.limit,scanLimit:t.scanLimit}).filter(n=>n.fileA!==n.fileB).map(n=>({domain:"react-component",basis:"jsx-structure",symbolA:n.componentA,fileA:n.fileA,symbolB:n.componentB,fileB:n.fileB,similarity:n.similarity,sharedEvidence:Do(["component",n.sharedComponents],["tag",n.sharedNativeTags],["prop",n.sharedProps],["event",n.sharedEvents],["binding",n.sharedBindings]),sharedCallees:[]}))}function kE(e,t){return dn(e,{scope:t.scope,minSimilarity:t.minSimilarity,limit:t.limit,scanLimit:t.scanLimit}).filter(n=>n.fileA!==n.fileB).map(n=>({domain:"react-hook",basis:"react-behavior",symbolA:n.componentA,fileA:n.fileA,symbolB:n.componentB,fileB:n.fileB,similarity:n.similarity,sharedEvidence:Do(["hook",n.sharedHooks],["react-hook",n.sharedReactHooks],["effect",n.sharedEffects],["state",n.sharedState],["request",n.sharedRequests],["handler",n.sharedHandlers],["action",n.sharedHandlerVerbs]),sharedCallees:[]}))}function DE(e,t){return mn(e,{scope:t.scope,minSimilarity:t.minSimilarity,limit:t.limit,scanLimit:t.scanLimit}).filter(n=>n.fileA!==n.fileB).map(n=>({domain:"vue-component",basis:"vue-template",symbolA:ko(n.fileA),fileA:n.fileA,symbolB:ko(n.fileB),fileB:n.fileB,similarity:n.similarity,sharedEvidence:Do(["component",n.sharedComponents],["prop",n.sharedProps],["event",n.sharedEvents],["directive",n.sharedDirectives],["slot",n.sharedSlots],["identifier",n.sharedIdentifiers]),sharedCallees:[]}))}function IE(e,t){return fn(e,{scope:t.scope,minSimilarity:t.minSimilarity,limit:t.limit,scanLimit:t.scanLimit}).filter(n=>n.fileA!==n.fileB).map(n=>({domain:"vue-composable",basis:"vue-behavior",symbolA:ko(n.fileA),fileA:n.fileA,symbolB:ko(n.fileB),fileB:n.fileB,similarity:n.similarity,sharedEvidence:Do(["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]),sharedCallees:[]}))}function NE(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 EE(e){let t=gp(e);return{...e,rootCauseKey:t,groupKey:`recent-duplicate:${t}`}}function gp(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 PE(e){let t=new Map;for(let[n,i]of e.entries()){let r=i.rootCauseKey??gp(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:_E(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 _E(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 TE(e){return Number.isFinite(e)?e*5:Number.POSITIVE_INFINITY}function Do(...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 ko(e){return(e.split("/").pop()??e).replace(/\.[^.]+$/,"")}var FE=ce("suppression-inventory",{clearGroups:["whole-project"]});function Io(e){return FE.get(e,()=>$E(e))}function $E(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 we(e)){let o=A(e,r);if(!(!o||!o.includes("scip-query")))for(let s of o.split(/\r?\n/)){let a=gi(s);if(a===null)continue;i+=1,n.set(r,(n.get(r)??0)+1);let c=AE(a);t[c]+=1}}return{total:i,byCategory:t,byFile:n}}function AE(e){if(!e)return"uncategorized";let t=e.toLowerCase();return t==="dead-code"?"dead":t}import{readFileSync as ME}from"fs";import{join as OE}from"path";function nr(e,t,n={}){let i=j(e,t);if(!i)return null;let r=new E(e),o=qE(BE(e,i.relativePath,i.startLine,i.endLine),jE(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:VE(e,i.symbolId),fanOut:HE(c,i.relativePath)}}function jE(e,t){return e.get("SELECT language FROM documents WHERE relative_path = ?",t)?.language??"unknown"}function BE(e,t,n,i){try{return ME(OE(e.config.projectRoot,t),"utf-8").split(`
541
+ `).slice(n,i+1).join(`
542
+ `)}catch{return""}}function VE(e,t){return e.get(`SELECT COUNT(DISTINCT c.document_id) AS c
590
543
  FROM mentions m
591
544
  JOIN chunks c ON m.chunk_id = c.id
592
- WHERE m.symbol_id = ? AND m.role != 1`,t)?.c??0}function IC(e,t){return new Set(e.filter(n=>n.file!==t).map(n=>n.symbol)).size}function vC(e,t){let n=Lt(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 ur(e,t,n={}){let r=A(e,t);if(!r)return null;let i=[{file:r.relativePath,line:r.startLine}],o=ht(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}=DC(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 DC(e,t,n,r){let i=Sn(Se(e,t,{limit:30,semantic:r.semantic}).map(a=>({symbol:a.symbol,file:a.file}))),o=Sn(De(e,t,{limit:30,semantic:r.semantic})),s=o.length>0?o:Sn(n.map(a=>({symbol:a.enclosingSymbol==="(top-level)"?a.file:a.enclosingSymbol,file:a.file})));return{producers:i,consumers:s}}function Cn(e,t,n={}){let{direction:r="backward",maxDepth:i=3}=n,o=A(e,t);return o?r==="backward"?NC(e,o,i,{semantic:n.semantic!==!1}):_C(e,o,{semantic:n.semantic!==!1}):null}function NC(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=Se(e,l,{semantic:r.semantic});for(let m of u){if(o.has(m.symbol))continue;o.add(m.symbol),i.push({symbol:m.symbol,shortName:b(m.symbol),file:m.file,relationship:a===1?"referenced within definition (callee)":`depth ${a} callee`});let d=cn(e,m.symbol);d&&!e.isIgnored(d.relativePath)&&c.push(d)}}s=c}return{symbol:t.symbol,shortName:b(t.symbol),direction:"backward",connectedSymbols:i}}function _C(e,t,n){let r=new Set,i=[],o=new _(e);for(let s of ht(e,t,{semantic:n.semantic})){if(i.length>=30)break;let a=s.enclosingSymbol??Ce(o.definitionsForFile(s.file),s.line)?.symbol??null;if(!a||a===t.symbol)continue;let c=cn(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 ys(e,t,n={}){let r=n.impactDepth??3,i=n.sliceDepth??3,o=n.semantic,s=!wC(t),a=s?Vn(e,t,{semantic:o}):{definitions:[],referencedBy:[]},c=s?Kn(e,t,{semantic:o}):null,l=s?lr(e,t,{semantic:o}):null,u=s?ur(e,t,{semantic:o}):null,m=s?Cn(e,t,{direction:"backward",maxDepth:i,semantic:o}):null,d=s?Cn(e,t,{direction:"forward",maxDepth:i,semantic:o}):null,p=s?er(e,t,{maxDepth:r,scope:n.scope}):[],h=tr(e,t,{semantic:o}),f=Wn(e,t),y=Un(e,t),R=Gn(e,t),E=Jn(e,t),S={symbol:a.definitions.length>0||a.referencedBy.length>0||c!==null||l!==null||u!==null||m!==null||d!==null||p.length>0,file:h!==null||f.length>0||y.length>0,module:R.files.length>0||R.symbols.length>0||E.length>0},x=[];!S.symbol&&!S.file&&!S.module&&x.push("No symbol, file, or module matched target.");let D=h?.file??a.definitions[0]?.relativePath??null;return{target:t,matched:S,history:LC(e,D),trace:a,callGraph:c,complexity:l,dataflow:u,backwardSlice:m,forwardSlice:d,affected:p,changeSurface:h,deps:f,rdeps:y,system:R,surface:E,warnings:x}}function LC(e,t){let n={available:!1,file:t,churn:null,coChangePartners:[],suppressionsInFile:0};if(!t)return n;let r=oi(e);if(!r)return n;let i=Bt(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})),suppressionsInFile:fi(e).byFile.get(t)??0}}function wC(e){return e.includes("/")||e.includes("\\")||/\.[A-Za-z0-9]+(?::\d+(?:-\d+)?)?$/.test(e)}function mr(e,t){let{scope:n,minLoc:r=10,limit:i=30,scanLimit:o}=t??{},s=new _(e);return _e({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)=>EC(a,c,r),orderResults:(a,c)=>c.score-a.score||c.loc-a.loc,limit:i})}function EC(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 lu(e){let t=TC(e),{breakdown:n}=MC(e),r=cu(n,"risk"),i=cu(n,"hygiene");return{score:Math.min(r,i),riskScore:r,hygieneScore:i,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,extractionCandidates:e.extractCount,wrappers:e.wrappers.count,passthroughs:e.passthroughs.count,staleTypes:e.stale.count,driftedFiles:e.drift.count,complexityHotspotCount:e.complexity.extremeCount,hiddenCouplingPairs:e.gitEvidence?.hiddenCoupling.pairCount??null},axes:kC(e),validation:FC(e),suppressions:e.suppressions,actions:t,topComplexity:e.complexity.top,warnings:e.warnings.length>0?e.warnings:void 0}}function kC(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:PC(e),evidenceQuality:{graphFindings:e.dead.count+e.isolated.count+e.realCycleCount,heuristicFindings:e.similarCount+e.extractCount+e.wrappers.count+e.passthroughs.count+e.stale.count+e.drift.count,userSuppressed:e.suppressions?.total??0}}}function PC(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:Rn(n.score*Math.log2(1+r))}}).sort((n,r)=>r.weighted-n.weighted):null}function FC(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??[]},r=new Set(Object.values(n).flat()),i=0,o=0,s=0;for(let[u,m]of Object.entries(t))r.has(u)?i+=m.fixChanges:(o+=m.fixChanges,s+=1);let a=r.size>0?Rn(i/r.size):0,c=s>0?Rn(o/s):0,l={};for(let[u,m]of Object.entries(n)){let d=new Set(m);if(d.size===0)continue;let p=0;for(let f of d)p+=t[f]?.fixChanges??0;let h=Rn(p/d.size);l[u]={flaggedFiles:d.size,fixDensity:h,lift:c>0?Rn(h/c):null}}return{flaggedFiles:r.size,flaggedFixDensity:a,baselineFixDensity:c,ratio:r.size>0&&c>0?Rn(a/c):null,byCategory:l}}function Rn(e){return Math.round(e*100)/100}function TC(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.extractCount>0&&t.push({category:"Extraction candidates",evidence:"heuristic",description:`${e.extractCount} large functions with isolated callee clusters \u2014 extract method opportunities`,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 that could be inlined`,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 premature abstraction`,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(", "),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 dependency edge`+(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 AC={"dead-code":"risk",isolated:"risk",cycles:"risk",complexity:"risk","hidden-coupling":"risk",similar:"hygiene",extract:"hygiene",wrappers:"hygiene",passthroughs:"hygiene","stale-abstractions":"hygiene",drift:"hygiene"};function cu(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 MC(e){let t=Math.max(e.statsResult.documents,1),n=Math.max(e.statsResult.symbols,1),r=[],i=(m,d,p)=>{d>0&&r.push({axis:m,points:d,detail:p,kind:AC[m]??"hygiene"})},o=e.dead.count/n;i("dead-code",Math.min(20,Math.round(o*200)),`${e.dead.count} dead symbols (${e.dead.loc} LOC deletable)`);let s=e.isolated.count/n;i("isolated",Math.min(10,Math.round(s*200)),`${e.isolated.count} isolated symbols (${e.isolated.loc} LOC deletable)`),i("cycles",Math.min(15,e.realCycleCount*5),`${e.realCycleCount} real dependency cycle(s)`);let a=e.similarCount/n*1e3;i("similar",Math.min(10,Math.round(a)),`${e.similarCount} similar function pair(s)`);let c=e.extractCount/n*1e3;i("extract",Math.min(5,Math.round(c/2)),`${e.extractCount} extraction candidate(s)`),i("wrappers",Math.min(3,e.wrappers.count),`${e.wrappers.count} wrapper candidate(s)`),i("passthroughs",Math.min(3,e.passthroughs.count),`${e.passthroughs.count} passthrough candidate(s)`);let l=e.stale.count/Math.max(n*.1,1);i("stale-abstractions",Math.min(8,Math.round(l*10)),`${e.stale.count} stale abstraction(s)`);let u=e.drift.count/t;return i("drift",Math.min(5,Math.round(u*50)),`${e.drift.count} drift finding(s)`),i("complexity",Math.min(5,e.complexity.extremeCount*2),`${e.complexity.extremeCount} extreme complexity hotspot(s)`),e.gitEvidence&&i("hidden-coupling",Math.min(5,e.gitEvidence.hiddenCoupling.pairCount),`${e.gitEvidence.hiddenCoupling.pairCount} co-changing pair(s) without a dependency edge`),{breakdown:r}}import{getHeapStatistics as OC}from"v8";var $C=64*1024*1024;function bs(){let e=globalThis.gc;if(!e)return;let t=OC();t.heap_size_limit-t.used_heap_size<$C||e()}var jC=50,BC=75e3,HC=5e3,uu=2500,dr=["overview","dead","isolated","cycles","similar","extract-candidates","wrapper-candidates","passthrough-candidates","stale-abstractions","drift","complexity-hotspots","git-evidence","suppressions"],qC={overview:(e,t,n,r)=>({phase:"overview",statsResult:r,warnings:n.warnings}),dead:(e,t,n)=>({phase:"dead",dead:UC(e,t,n)}),isolated:(e,t,n)=>({phase:"isolated",isolated:GC(e,t,n)}),cycles:(e,t,n)=>({phase:"cycles",realCycleCount:JC(e,t,n)}),similar:(e,t,n)=>({phase:"similar",similarCount:zC(e,t,n)}),"extract-candidates":(e,t,n)=>({phase:"extract-candidates",extractCount:KC(e,t,n)}),"wrapper-candidates":(e,t,n)=>({phase:"wrapper-candidates",wrappers:QC(e,t,n)}),"passthrough-candidates":(e,t,n)=>({phase:"passthrough-candidates",passthroughs:YC(e,t,n)}),"stale-abstractions":(e,t,n)=>({phase:"stale-abstractions",stale:XC(e,t,n)}),drift:(e,t,n)=>({phase:"drift",drift:tR(e,t,n)}),"complexity-hotspots":(e,t,n)=>({phase:"complexity-hotspots",complexity:nR(e,t,n)}),"git-evidence":(e,t,n)=>({phase:"git-evidence",gitEvidence:ZC(e,n)}),suppressions:(e,t,n)=>({phase:"suppressions",suppressions:eR(e,n)})};function Ss(e,t,n={}){return VC(e,n.full===!0,(r,i)=>qC[t](e,n.scope,i,r))}function VC(e,t,n){let r=Ee(e),i=rR(r,t);try{return n(r,i)}finally{wo(e,{semanticProvider:!0}),bs()}}function xs(e){return lu(WC(e))}function WC(e){let t=Ae(e,"overview");return{statsResult:t.statsResult,warnings:t.warnings,dead:Ae(e,"dead").dead,isolated:Ae(e,"isolated").isolated,realCycleCount:Ae(e,"cycles").realCycleCount,similarCount:Ae(e,"similar").similarCount,extractCount:Ae(e,"extract-candidates").extractCount,wrappers:Ae(e,"wrapper-candidates").wrappers,passthroughs:Ae(e,"passthrough-candidates").passthroughs,stale:Ae(e,"stale-abstractions").stale,drift:Ae(e,"drift").drift,complexity:Ae(e,"complexity-hotspots").complexity,gitEvidence:mu(e,"git-evidence")?.gitEvidence??null,suppressions:mu(e,"suppressions")?.suppressions??null}}function mu(e,t){return e.find(n=>n.phase===t)}function Ae(e,t){let n=e.find(r=>r.phase===t);if(!n)throw new Error(`Missing health phase result: ${t}`);return n}function UC(e,t,n){return Me(e,n,"dead",()=>{let r=Xe(e,{scope:t,...Z.dead,scanLimit:n.candidateScanLimit});return Cs(sR(e,r.symbols))})}function GC(e,t,n){return Me(e,n,"isolated",()=>{let r=Ot(e,{scope:t,...Z.isolated,scanLimit:n.candidateScanLimit});return Cs(aR(e,r))})}function JC(e,t,n){return Me(e,n,"cycles",()=>Mt(e,{scope:t}).filter(i=>i.kind==="real").length)}function zC(e,t,n){return Me(e,n,"similar",()=>Ze(e,{scope:t,...Z.similar,scanLimit:n.candidateScanLimit}).length)}function KC(e,t,n){return Me(e,n,"extract-candidates",()=>$t(e,{scope:t,...Z.extract,scanLimit:n.candidateScanLimit}).length)}function QC(e,t,n){return du(e,n,"wrapper-candidates",()=>Ut(e,{scope:t,...Z.wrappers,scanLimit:n.candidateScanLimit}))}function YC(e,t,n){return du(e,n,"passthrough-candidates",()=>Vt(e,{scope:t,...Z.passthroughs,scanLimit:n.candidateScanLimit}))}function XC(e,t,n){return Me(e,n,"stale-abstractions",()=>{let r=Wt(e,{scope:t,...Z.stale,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 ZC(e,t){return Me(e,t,"git-evidence",()=>{let n=oi(e);if(!n)return null;let r=Bt(e,void 0,{limit:50}),i={};for(let[o,s]of n)i[o]={changes:s.changes,fixChanges:s.fixChanges};return{amplification:Jl(e),hiddenCoupling:{pairCount:r.findings.length,top:r.findings.slice(0,5).map(o=>({fileA:o.fileA,fileB:o.fileB,together:o.together,confidence:o.confidence}))},fileStats:i}})}function eR(e,t){return Me(e,t,"suppressions",()=>{let n=fi(e);return{total:n.total,byCategory:{...n.byCategory}}})}function tR(e,t,n){return Me(e,n,"drift",()=>{let r=qt(e,{scope:t,...Z.drift});return{count:r.unusedImports+r.layerViolations,unusedImports:r.unusedImports,layerViolations:r.layerViolations}})}function nR(e,t,n){return Me(e,n,"complexity-hotspots",()=>{let r=mr(e,{scope:t,minLoc:10,limit:10,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>jC).length}})}function rR(e,t){return e.symbols>=BC||e.documents>=HC?t?{candidateScanLimit:void 0,releaseCachesBetweenPhases:!0,warnings:["Large index detected; running unbounded health analyses because --full was supplied."]}:{candidateScanLimit:uu,releaseCachesBetweenPhases:!0,warnings:[`Large index detected; candidate-style health checks scanned their highest-priority ${uu} symbols. Run "scip-query health --full" for unbounded candidate counts.`]}:{candidateScanLimit:void 0,releaseCachesBetweenPhases:!0,warnings:[]}}function iR(e,t){t.releaseCachesBetweenPhases&&(wo(e),bs())}function Me(e,t,n,r){oR(n);try{return r()}finally{iR(e,t)}}function du(e,t,n,r){return Me(e,t,n,()=>Cs(r()))}function oR(e){process.env.SCIP_QUERY_HEALTH_TRACE==="1"&&console.error(`[health] ${e}`)}function sR(e,t){return t.filter(n=>!me(e,n.relativePath)&&!oe(e,n.symbol,n.relativePath)&&n.kind==="dead-code")}function aR(e,t){return t.filter(n=>!me(e,n.relativePath)&&!oe(e,n.symbol,n.relativePath))}function Cs(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 Rs(e,t,n,r={}){let i=A(e,t),o=A(e,n);if(!i||!o)return null;let s=new Set(Se(e,i,{semantic:r.semantic}).map(y=>y.symbol)),a=new Set(Se(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 m=new Set([...s,...a]),d=m.size>0?c.length/m.size:0,p;m.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=i.endLine-i.startLine+1,f=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:f},similarity:d,sharedCallees:c.map(b),uniqueToA:l.map(b),uniqueToB:u.map(b),consolidationStrategy:p}}import{readFileSync as pu}from"fs";import{extname as cR,join as fu}from"path";function Is(e,t,n={}){let{context:r=0}=n,i=lR(t);if(i)return mR(e,i.filePath,i.startLine,i.endLine,r);let o=A(e,t);return o?uR(e,o,r):null}function lR(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 uR(e,t,n){let r=e.get("SELECT language FROM documents WHERE relative_path = ?",t.relativePath),i=fu(e.config.projectRoot,t.relativePath),o;try{o=pu(i,"utf-8")}catch{return null}let s=o.split(`
545
+ WHERE m.symbol_id = ? AND m.role != 1`,t)?.c??0}function HE(e,t){return new Set(e.filter(n=>n.file!==t).map(n=>n.symbol)).size}function qE(e,t){let n=Yt(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 ir(e,t,n={}){let i=j(e,t);if(!i)return null;let r=[{file:i.relativePath,line:i.startLine}],o=jt(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}=UE(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 UE(e,t,n,i){let r=ei(Fe(e,t,{limit:30,semantic:i.semantic}).map(a=>({symbol:a.symbol,file:a.file}))),o=ei(Ve(e,t,{limit:30,semantic:i.semantic})),s=o.length>0?o:ei(n.map(a=>({symbol:a.enclosingSymbol==="(top-level)"?a.file:a.enclosingSymbol,file:a.file})));return{producers:r,consumers:s}}function oi(e,t,n={}){let{direction:i="backward",maxDepth:r=3}=n,o=j(e,t);return o?i==="backward"?WE(e,o,r,{semantic:n.semantic!==!1}):GE(e,o,{semantic:n.semantic!==!1}):null}function WE(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=Fe(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=Vn(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 GE(e,t,n){let i=new Set,r=[],o=new E(e);for(let s of jt(e,t,{semantic:n.semantic})){if(r.length>=30)break;let a=s.enclosingSymbol??Me(o.definitionsForFile(s.file),s.line)?.symbol??null;if(!a||a===t.symbol)continue;let c=Vn(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 sc(e,t,n={}){let i=n.impactDepth??3,r=n.sliceDepth??3,o=n.semantic,s=!KE(t),a=s?Fi(e,t,{semantic:o}):{definitions:[],referencedBy:[]},c=s?Bi(e,t,{semantic:o}):null,l=s?nr(e,t,{semantic:o}):null,u=s?ir(e,t,{semantic:o}):null,d=s?oi(e,t,{direction:"backward",maxDepth:r,semantic:o}):null,m=s?oi(e,t,{direction:"forward",maxDepth:r,semantic:o}):null,p=s?zi(e,t,{maxDepth:i,scope:n.scope}):[],h=Ki(e,t,{semantic:o}),g=$i(e,t),b=Ai(e,t),S=Mi(e,t),L=Oi(e,t),_={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||L.length>0},w=[];!_.symbol&&!_.file&&!_.module&&w.push("No symbol, file, or module matched target.");let C=h?.file??a.definitions[0]?.relativePath??null;return{target:t,matched:_,history:zE(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:L,warnings:w}}function zE(e,t){let n={available:!1,file:t,churn:null,coChangePartners:[],suppressionsInFile:0};if(!t)return n;let i=mo(e);if(!i)return n;let r=yn(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:Io(e).byFile.get(t)??0}}function KE(e){return e.includes("/")||e.includes("\\")||/\.[A-Za-z0-9]+(?::\d+(?:-\d+)?)?$/.test(e)}function rr(e,t){let{scope:n,minLoc:i=10,limit:r=30,scanLimit:o}=t??{},s=new E(e);return qe({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)=>JE(a,c,i),orderResults:(a,c)=>c.score-a.score||c.loc-a.loc,limit:r})}function JE(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 yp(e){let t=ZE(e),{breakdown:n,pressure:i}=eP(e),r=bp(n,"risk"),o=bp(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:QE(e),validation:YE(e),suppressions:e.suppressions,actions:t,pressure:i,topComplexity:e.complexity.top,warnings:e.warnings.length>0?e.warnings:void 0}}function QE(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:XE(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 XE(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:ct(n.score*Math.log2(1+i))}}).sort((n,i)=>i.weighted-n.weighted):null}function YE(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?ct(r/i.size):0,c=s>0?ct(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=ct(p/m.size);l[u]={flaggedFiles:m.size,fixDensity:h,lift:c>0?ct(h/c):null}}return{flaggedFiles:i.size,flaggedFixDensity:a,baselineFixDensity:c,ratio:i.size>0&&c>0?ct(a/c):null,byCategory:l}}function ct(e){return Math.round(e*100)/100}function Sp(e){return Number.isInteger(e)?String(e):e.toFixed(2).replace(/0+$/,"").replace(/\.$/,"")}function No(e,t="existing shared infrastructure discount"){let n=Lt(e);return Math.abs(n-e.count)<.01?"":` (${Sp(n)} score-weighted after ${t})`}function or(e,t){let n=Lt(e),i=`${e.count} ${t}`;return Math.abs(n-e.count)<.01?i:`${i} (${Sp(n)} score-weighted)`}function ZE(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${No(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${No(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${No(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`+No({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 hp={"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 bp(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 eP(e){let t=Math.max(e.statsResult.documents,1),n=Math.max(e.statsResult.symbols,1),i=[],r=[],o=(C,N,V)=>{N>0&&i.push({axis:C,points:N,detail:V,kind:hp[C]??"hygiene"})},s=(C,N,V,B,he,ae,Ee)=>{let ft=Math.max(B,1);if(V<=ft)return;let os=V/ft,ss=Math.min(he,Math.ceil(Math.log2(os)*ae));if(ss<=0)return;let qh=hp[C]??"hygiene";r.push({axis:C,category:N,kind:qh,count:V,threshold:ct(ft),ratio:ct(os),extraPenalty:ss}),o(C,ss,`${V} ${Ee} exceed pressure threshold ${ct(ft)} (${ct(os)}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)),or(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)),or(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 L=Lt(e.wrappers);o("wrappers",Math.min(3,L),or(e.wrappers,"wrapper candidate(s)"));let _=Lt(e.passthroughs);o("passthroughs",Math.min(3,_),or(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 w=e.drift.direct/t;if(o("drift",Math.min(5,Math.round(w*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)),or({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",L,50,4,2,"wrapper candidate(s)"),s("passthroughs-pressure","Passthrough functions",_,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 tP}from"v8";var nP=64*1024*1024;function ac(){let e=globalThis.gc;if(!e)return;let t=tP();t.heap_size_limit-t.used_heap_size<nP||e()}var iP=50,rP=75e3,oP=5e3,xp=2500,Cp=50,sP=10,sr=["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"],aP={overview:(e,t,n,i)=>({phase:"overview",statsResult:i,warnings:n.warnings}),dead:(e,t,n)=>({phase:"dead",dead:uP(e,t,n)}),isolated:(e,t,n)=>({phase:"isolated",isolated:dP(e,t,n)}),cycles:(e,t,n)=>({phase:"cycles",realCycleCount:mP(e,t,n)}),similar:(e,t,n)=>({phase:"similar",similarCount:pP(e,t,n)}),"react-component-duplicates":(e,t,n)=>({phase:"react-component-duplicates",reactComponentDuplicates:gP(e,t,n)}),"react-hook-candidates":(e,t,n)=>({phase:"react-hook-candidates",reactHookCandidates:hP(e,t,n)}),"react-large-component-pressure":(e,t,n)=>({phase:"react-large-component-pressure",reactLargeComponentPressure:bP(e,t,n)}),"vue-component-duplicates":(e,t,n)=>({phase:"vue-component-duplicates",vueComponentDuplicates:yP(e,t,n)}),"vue-composable-candidates":(e,t,n)=>({phase:"vue-composable-candidates",vueComposableCandidates:SP(e,t,n)}),"vue-large-view-pressure":(e,t,n)=>({phase:"vue-large-view-pressure",vueLargeViewPressure:xP(e,t,n)}),"extract-candidates":(e,t,n)=>({phase:"extract-candidates",extractCount:fP(e,t,n)}),"wrapper-candidates":(e,t,n)=>({phase:"wrapper-candidates",wrappers:CP(e,t,n)}),"passthrough-candidates":(e,t,n)=>({phase:"passthrough-candidates",passthroughs:vP(e,t,n)}),"stale-abstractions":(e,t,n)=>({phase:"stale-abstractions",stale:RP(e,t,n)}),drift:(e,t,n)=>({phase:"drift",drift:kP(e,t,n)}),"complexity-hotspots":(e,t,n)=>({phase:"complexity-hotspots",complexity:DP(e,t,n)}),"git-evidence":(e,t,n)=>({phase:"git-evidence",gitEvidence:LP(e,n)}),suppressions:(e,t,n)=>({phase:"suppressions",suppressions:wP(e,n)})};function cc(e,t,n={}){return cP(e,n.full!==!1,(i,r)=>aP[t](e,n.scope,r,i))}function cP(e,t,n){let i=Ae(e),r=IP(i,t);try{return n(i,r)}finally{Js(e,{semanticProvider:!0}),ac()}}function lc(e){return yp(lP(e))}function lP(e){let t=pe(e,"overview");return{statsResult:t.statsResult,warnings:t.warnings,dead:pe(e,"dead").dead,isolated:pe(e,"isolated").isolated,realCycleCount:pe(e,"cycles").realCycleCount,similarCount:pe(e,"similar").similarCount,reactComponentDuplicates:pe(e,"react-component-duplicates").reactComponentDuplicates,reactHookCandidates:pe(e,"react-hook-candidates").reactHookCandidates,reactLargeComponentPressure:pe(e,"react-large-component-pressure").reactLargeComponentPressure,vueComponentDuplicates:pe(e,"vue-component-duplicates").vueComponentDuplicates,vueComposableCandidates:pe(e,"vue-composable-candidates").vueComposableCandidates,vueLargeViewPressure:pe(e,"vue-large-view-pressure").vueLargeViewPressure,extractCount:pe(e,"extract-candidates").extractCount,wrappers:pe(e,"wrapper-candidates").wrappers,passthroughs:pe(e,"passthrough-candidates").passthroughs,stale:pe(e,"stale-abstractions").stale,drift:pe(e,"drift").drift,complexity:pe(e,"complexity-hotspots").complexity,gitEvidence:vp(e,"git-evidence")?.gitEvidence??null,suppressions:vp(e,"suppressions")?.suppressions??null}}function vp(e,t){return e.find(n=>n.phase===t)}function pe(e,t){let n=e.find(i=>i.phase===t);if(!n)throw new Error(`Missing health phase result: ${t}`);return n}function uP(e,t,n){return se(e,n,"dead",()=>{let i=xt(e,{scope:t,...oe.dead,scanLimit:n.candidateScanLimit});return Eo(PP(e,i.symbols))})}function dP(e,t,n){return se(e,n,"isolated",()=>{let i=cn(e,{scope:t,...oe.isolated,scanLimit:n.candidateScanLimit});return Eo(_P(e,i))})}function mP(e,t,n){return se(e,n,"cycles",()=>an(e,{scope:t}).filter(r=>r.kind==="real").length)}function pP(e,t,n){return se(e,n,"similar",()=>Ct(e,{scope:t,...oe.similar,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit}).length)}function fP(e,t,n){return se(e,n,"extract-candidates",()=>gn(e,{scope:t,...oe.extract,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit}).length)}function gP(e,t,n){return se(e,n,"react-component-duplicates",()=>{let i=ln(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return uc(i)})}function hP(e,t,n){return se(e,n,"react-hook-candidates",()=>{let i=dn(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return wp(i,FP)})}function bP(e,t,n){return se(e,n,"react-large-component-pressure",()=>{let i=Wi(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return TP(i)})}function yP(e,t,n){return se(e,n,"vue-component-duplicates",()=>{let i=mn(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return uc(i)})}function SP(e,t,n){return se(e,n,"vue-composable-candidates",()=>{let i=fn(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return wp(i,$P)})}function xP(e,t,n){return se(e,n,"vue-large-view-pressure",()=>{let i=Gi(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Eo(i)})}function CP(e,t,n){return se(e,n,"wrapper-candidates",()=>{let i=Rn(e,{scope:t,...oe.wrappers,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Lp(i,AP)})}function vP(e,t,n){return se(e,n,"passthrough-candidates",()=>{let i=Cn(e,{scope:t,...oe.passthroughs,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Lp(i,MP)})}function RP(e,t,n){return se(e,n,"stale-abstractions",()=>{let i=vn(e,{scope:t,...oe.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 LP(e,t){return se(e,t,"git-evidence",()=>{let n=mo(e);if(!n)return null;let i=yn(e,void 0,{limit:t.candidateResultLimit}),r={};for(let[o,s]of n)r[o]={changes:s.changes,fixChanges:s.fixChanges};return{amplification:Fm(e),hiddenCoupling:{pairCount:i.findings.length,scoreCount:dc(i.findings.reduce((o,s)=>o+Rp(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:Rp(o),subjectContext:o.subjectContext}))},fileStats:r}})}function wP(e,t){return se(e,t,"suppressions",()=>{let n=Io(e);return{total:n.total,byCategory:{...n.byCategory}}})}function kP(e,t,n){return se(e,n,"drift",()=>{let i=xn(e,{scope:t,...oe.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 DP(e,t,n){return se(e,n,"complexity-hotspots",()=>{let i=rr(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>iP).length}})}function IP(e,t){let n=e.symbols>=rP||e.documents>=oP,i=t?Number.POSITIVE_INFINITY:Cp,r=t?Number.POSITIVE_INFINITY:sP;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:xp,candidateResultLimit:i,complexityResultLimit:r,releaseCachesBetweenPhases:!0,warnings:[`Large index detected; candidate-style health checks scanned their highest-priority ${xp} symbols and reported their top ${Cp} findings. Enable full mode for unbounded candidate counts.`]}}function NP(e,t){t.releaseCachesBetweenPhases&&(Js(e),ac())}function se(e,t,n,i){EP(n);try{return i()}finally{NP(e,t)}}function EP(e){process.env.SCIP_QUERY_HEALTH_TRACE==="1"&&console.error(`[health] ${e}`)}function PP(e,t){return t.filter(n=>!Re(e,n.relativePath)&&!te(e,n.symbol,n.relativePath)&&n.kind==="dead-code")}function _P(e,t){return t.filter(n=>!Re(e,n.relativePath)&&!te(e,n.symbol,n.relativePath))}function Eo(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 Lp(e,t){return{...Eo(e),scoreCount:dc(e.reduce((i,r)=>i+t(r),0))}}function TP(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 uc(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 wp(e,t){return{...uc(e),scoreCount:dc(e.reduce((i,r)=>i+t(r),0))}}function FP(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:Dp(e.sharedState,e.sharedHandlers,e.sharedHandlerVerbs)?.25:n>=2?1:.5}function $P(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:Dp(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=>!Np.has(Ip(t))).length+Math.min(e.functions.length,3)}function Dp(e,t,n){let i=[...e,...t,...n].map(Ip);return i.length>0&&i.every(r=>Np.has(r))}function Ip(e){return e.replace(/^handle/,"").replace(/^is/,"").replace(/^has/,"").toLowerCase()}function AP(e){return e.actionTier==="signal"?.25:1}function MP(e){return e.actionTier==="signal"?.25:1}function Rp(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 dc(e){return Math.round(e*100)/100}var Np=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 mc(e,t,n,i={}){let r=j(e,t),o=j(e,n);if(!r||!o)return null;let s=new Set(Fe(e,r,{semantic:i.semantic}).map(b=>b.symbol)),a=new Set(Fe(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 Ep}from"fs";import{extname as OP,join as Pp}from"path";function pc(e,t,n={}){let{context:i=0}=n,r=jP(t);if(r)return VP(e,r.filePath,r.startLine,r.endLine,i);let o=j(e,t);return o?BP(e,o,i):null}function jP(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 BP(e,t,n){let i=e.get("SELECT language FROM documents WHERE relative_path = ?",t.relativePath),r=Pp(e.config.projectRoot,t.relativePath),o;try{o=Ep(r,"utf-8")}catch{return null}let s=o.split(`
593
546
  `),a=Math.max(0,t.startLine-n),c=Math.min(s.length-1,t.endLine+n),l=s.slice(a,c+1).join(`
594
- `);return{symbol:t.symbol,shortName:b(t.symbol),relativePath:t.relativePath,startLine:a,endLine:c,language:r?.language??gu(t.relativePath),source:l}}function mR(e,t,n,r,i){let o=pe(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=fu(e.config.projectRoot,s.relative_path),c;try{c=pu(a,"utf-8")}catch{return null}let l=c.split(`
595
- `),u=Math.max(0,n-1-i),m=Math.min(l.length-1,r-1+i),d=l.slice(u,m+1).join(`
596
- `);return{symbol:`${s.relative_path}:${n}-${r}`,shortName:`${s.relative_path}:${n}-${r}`,relativePath:s.relative_path,startLine:u,endLine:m,language:s.language??gu(s.relative_path),source:d}}function gu(e){switch(cR(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 vs(e,t={}){let{scope:n,limit:r}=t,i=new _(e),o=xR([...dR(e,n),...gR(e,i,n)]);return CR(o),r?o.slice(0,r):o}function dR(e,t){let n=[];for(let r of pR(e,t)){if(e.isIgnored(r.barrel_path)||e.isIgnored(r.original_path)||po(e,r.barrel_path))continue;let i=fR(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})}return n}function pR(e,t){let n=t?`AND barrel_d.relative_path LIKE '%${t}%'`:"";return e.all(`SELECT DISTINCT
547
+ `);return{symbol:t.symbol,shortName:y(t.symbol),relativePath:t.relativePath,startLine:a,endLine:c,language:i?.language??_p(t.relativePath),source:l}}function VP(e,t,n,i,r){let o=ke(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=Pp(e.config.projectRoot,s.relative_path),c;try{c=Ep(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??_p(s.relative_path),source:m}}function _p(e){switch(OP(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 fc(e,t={}){let{scope:n,limit:i}=t,r=new E(e),o=JP([...HP(e,n),...WP(e,r,n)]);return QP(o),i?o.slice(0,i):o}function HP(e,t){let n=[];for(let i of qP(e,t)){if(e.isIgnored(i.barrel_path)||e.isIgnored(i.original_path)||Ts(e,i.barrel_path)||A(e,i.barrel_path)&&Ur(e,i.barrel_path).length===0)continue;let r=UP(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,...Fp(e,i.barrel_path)})}return n}function qP(e,t){let n=t?`AND barrel_d.relative_path LIKE '%${t}%'`:"";return e.all(`SELECT DISTINCT
597
550
  barrel_d.id AS barrel_doc_id,
598
551
  barrel_d.relative_path AS barrel_path,
599
552
  gs.id AS symbol_id,
@@ -623,7 +576,7 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
623
576
  -- Only function-level symbols (ending with ().), not module-level
624
577
  AND gs.symbol LIKE '%().'
625
578
  ${n}
626
- ORDER BY barrel_d.relative_path, gs.symbol`)}function fR(e,t){return e.get(`SELECT
579
+ ORDER BY barrel_d.relative_path, gs.symbol`)}function UP(e,t){return e.get(`SELECT
627
580
  SUM(CASE WHEN uses_barrel = 1 THEN 1 ELSE 0 END) AS barrel_consumers,
628
581
  SUM(CASE WHEN uses_barrel = 0 THEN 1 ELSE 0 END) AS direct_consumers
629
582
  FROM (
@@ -652,7 +605,7 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
652
605
  AND consumer_d.id != ?
653
606
  ${e.pathExclusionsFor("consumer_d")}
654
607
  GROUP BY consumer_d.id
655
- )`,t.barrel_doc_id,t.symbol_id,t.barrel_doc_id,t.original_doc_id)}function gR(e,t,n){let r=[];for(let i of hR(e,n))hu(e,i,i)>0||r.push(...yR(e,t,i));return r}function hR(e,t){return M(e,{scope:t,includeIgnored:!1}).filter(n=>lo(e,n).length>0)}function yR(e,t,n){return lo(e,n).filter(r=>r.sourcePath&&!e.isIgnored(r.sourcePath)).flatMap(r=>bR(e,t,n,r.sourcePath))}function bR(e,t,n,r){let i=SR(t,r);return i?[{barrelFile:n,symbol:i.symbol,shortName:b(i.symbol),originalFile:r,barrelConsumers:0,directConsumers:hu(e,r,n)}]:[]}function hu(e,t,n){let r=new Set;for(let i of M(e,{includeIgnored:!1}))if(i!==n)for(let o of ie(e,i))o.sourcePath===t&&r.add(i);return r.size}function SR(e,t){let n=e.definitionsForFile(t);return n.find(r=>re(r.symbol)==="method")??n[0]??null}function xR(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 CR(e){e.sort((t,n)=>n.directConsumers-t.directConsumers||t.barrelFile.localeCompare(n.barrelFile)||t.shortName.localeCompare(n.shortName))}function Ns(e,t={}){let{samples:n=50,scope:r,maxDisagreements:i=5}=t,o=new _(e),s=RR(o.productionCallableDefinitions({scope:r,minLoc:2,requireFunctionLikeSymbol:!0}),n);if(s.length===0||!IR(e,s))return{available:!1,sampleSize:s.length,oracleCoverage:0,scores:[],topDisagreements:[]};let a={references:yu(),callees:yu()},c=[],l=0,u=Qr(e,s);for(let m of s){let d=gi(m,Tt(e,m).map(y=>y.file)),p=gi(m,(u.get(m.symbolId)??[]).map(y=>y.file));if(d.size===0&&p.size===0)continue;l+=1;let h=gi(m,At(e,m).map(y=>y.file)),f=gi(m,(o.calleeMap([m],{semantic:!1}).get(m.symbolId)??[]).map(y=>y.file));bu(a.references,m,"references",h,d,c),bu(a.callees,m,"callees",f,p,c)}return c.sort((m,d)=>d.cheapOnly.length+d.oracleOnly.length-(m.cheapOnly.length+m.oracleOnly.length)),{available:!0,sampleSize:s.length,oracleCoverage:s.length>0?Ds(l/s.length):0,scores:["references","callees"].map(m=>DR(m,a[m])),topDisagreements:c.slice(0,i)}}function yu(){return{comparedSymbols:0,agreed:0,cheapTotal:0,oracleTotal:0}}function RR(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 IR(e,t){let n=t[0];if(!n)return!1;try{return Ft(e,n.relativePath).availability().available}catch{return!1}}function gi(e,t){let n=new Set;for(let r of t)r!==e.relativePath&&n.add(r);return n}function bu(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 vR={references:!0,callees:!1};function DR(e,t){let n=t.oracleTotal>0?t.agreed/t.oracleTotal:1,r=t.cheapTotal-t.agreed;return{question:e,comparedSymbols:t.comparedSymbols,precision:vR[e]&&t.cheapTotal>0?Ds(t.agreed/t.cheapTotal):null,recall:Ds(n),unverified:r}}function Ds(e){return Math.round(e*1e3)/1e3}function _s(e,t={}){let{scope:n,minLoc:r=1,limit:i,scanLimit:o}=t,s=t.semantic!==!1,a=_R(e,NR(e,{scope:n,minLoc:r,scanLimit:o}),{semantic:s}),c=wR(a);return i?c.slice(0,i):c}function NR(e,t){let n=He(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)),Ne(n,t.scanLimit)}function _R(e,t,n){let r=new Map;for(let i of t){let o=ER(e,i,n);if(!o)continue;let s=r.get(o)??[];s.push(LR(i)),r.set(o,s)}return r}function LR(e){return{symbol:e.symbol,shortName:b(e.symbol),file:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:q(e)}}function wR(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 ER(e,t,n){if(n.semantic){let o=tl(e,t);if(o)return o}let r=kR(t.documentation),i=r?TR(r):null;return i||AR(PR(e,t.relativePath,t.startLine,t.endLine,t.leaf),t.leaf)}function kR(e){return It(vt(e))}function PR(e,t,n,r,i){let o=P(e,t);if(!o)return null;let s=o.split(/\r?\n/),a=OR(s,n,r,i);for(let c of a){let l=Math.min(s.length-1,Math.max(c,c+4)),u="";for(let m=c;m<=l;m+=1){let d=s[m]?.trim();if(d&&(u=u?`${u} ${d}`:d,FR(u)))return u}if(u&&u.includes("("))return u}return null}function FR(e){let t=e.replace(/\s+/g," ").trim();return!t.includes("(")||An(t)>0?!1:/[;{]$/.test(t)||/\)\s*(?::\s*[^={]+)?\s*(?:=>|=|throws\b|where\b|$)/i.test(t)||/\)\s*As\s+.+$/i.test(t)}function TR(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 AR(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${Su(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=MR(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 MR(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 OR(e,t,n,r){let i=Su(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 m=l;m<=u;m+=1){let d=e[m]??"";(o.test(d)||s.test(d))&&!c.has(m)&&(c.add(m),a.push(m))}for(let m=0;m<e.length;m+=1){let d=e[m]??"";(o.test(d)||s.test(d))&&!c.has(m)&&(c.add(m),a.push(m))}return a}function Su(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}import{existsSync as _u}from"fs";import{join as eI}from"path";import $R from"better-sqlite3";var jR=["node_modules",".git","dist","build","out","coverage","target",".next",".nuxt",".cache",".turbo",".scipquery-cache","__pycache__",".venv","venv"],hi=class{db;config;pathFilter;constructor(t,n){this.config=t,this.pathFilter=n??null,this.db=new $R(t.dbPath,{readonly:!0}),this.db.pragma("busy_timeout = 5000")}isIgnored(t){return this.pathFilter?.isIgnored(t)??!1}get localSymbolPredicate(){return`(
608
+ )`,t.barrel_doc_id,t.symbol_id,t.barrel_doc_id,t.original_doc_id)}function WP(e,t,n){let i=[];for(let r of GP(e,n))$p(e,r,r)>0||i.push(...zP(e,t,r));return i}function GP(e,t){return M(e,{scope:t,includeIgnored:!1}).filter(n=>Ur(e,n).length>0||ki(e,n).length>0)}function zP(e,t,n){let i=Ur(e,n).filter(o=>o.sourcePath&&!e.isIgnored(o.sourcePath)).flatMap(o=>Tp(e,t,n,o.sourcePath)),r=ki(e,n).filter(o=>o.sourcePath&&!e.isIgnored(o.sourcePath)).flatMap(o=>Tp(e,t,n,o.sourcePath));return[...i,...r]}function Tp(e,t,n,i){let r=KP(t,i);return r?[{barrelFile:n,symbol:r.symbol,shortName:y(r.symbol),originalFile:i,barrelConsumers:0,directConsumers:$p(e,i,n),...Fp(e,n)}]:[]}function Fp(e,t){return Kn(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 $p(e,t,n){let i=new Set;for(let r of M(e,{includeIgnored:!1}))if(r!==n)for(let o of de(e,r))o.sourcePath===t&&i.add(r);return i.size}function KP(e,t){let n=e.definitionsForFile(t);return n.find(i=>X(i.symbol)==="method")??n[0]??null}function JP(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 QP(e){e.sort((t,n)=>n.directConsumers-t.directConsumers||t.barrelFile.localeCompare(n.barrelFile)||t.shortName.localeCompare(n.shortName))}function hc(e,t={}){let{samples:n=50,scope:i,maxDisagreements:r=5}=t,o=new E(e),s=XP(o.productionCallableDefinitions({scope:i,minLoc:2,requireFunctionLikeSymbol:!0}),n);if(s.length===0||!YP(e,s))return{available:!1,sampleSize:s.length,oracleCoverage:0,scores:[],topDisagreements:[]};let a={references:Ap(),callees:Ap()},c=[],l=0,u=eo(e,s);for(let d of s){let m=Po(d,on(e,d).map(b=>b.file)),p=Po(d,(u.get(d.symbolId)??[]).map(b=>b.file));if(m.size===0&&p.size===0)continue;l+=1;let h=Po(d,sn(e,d).map(b=>b.file)),g=Po(d,(o.calleeMap([d],{semantic:!1}).get(d.symbolId)??[]).map(b=>b.file));Mp(a.references,d,"references",h,m,c),Mp(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?gc(l/s.length):0,scores:["references","callees"].map(d=>e_(d,a[d])),topDisagreements:c.slice(0,r)}}function Ap(){return{comparedSymbols:0,agreed:0,cheapTotal:0,oracleTotal:0}}function XP(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 YP(e,t){let n=t[0];if(!n)return!1;try{return rn(e,n.relativePath).availability().available}catch{return!1}}function Po(e,t){let n=new Set;for(let i of t)i!==e.relativePath&&n.add(i);return n}function Mp(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 ZP={references:!0,callees:!1};function e_(e,t){let n=t.oracleTotal>0?t.agreed/t.oracleTotal:1,i=t.cheapTotal-t.agreed;return{question:e,comparedSymbols:t.comparedSymbols,precision:ZP[e]&&t.cheapTotal>0?gc(t.agreed/t.cheapTotal):null,recall:gc(n),unverified:i}}function gc(e){return Math.round(e*1e3)/1e3}function bc(e,t={}){let{scope:n,minLoc:i=1,limit:r,scanLimit:o}=t,s=t.semantic!==!1,a=n_(e,t_(e,{scope:n,minLoc:i,scanLimit:o}),{semantic:s}),c=r_(a);return r?c.slice(0,r):c}function t_(e,t){let n=tt(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)),He(n,t.scanLimit)}function n_(e,t,n){let i=new Map;for(let r of t){let o=o_(e,r,n);if(!o)continue;let s=i.get(o)??[];s.push(i_(r)),i.set(o,s)}return i}function i_(e){return{symbol:e.symbol,shortName:y(e.symbol),file:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:q(e)}}function r_(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 o_(e,t,n){if(n.semantic){let o=vd(e,t);if(o)return o}let i=s_(t.documentation),r=i?l_(i):null;return r||u_(a_(e,t.relativePath,t.startLine,t.endLine,t.leaf),t.leaf)}function s_(e){return zt(Kt(e))}function a_(e,t,n,i,r){let o=A(e,t);if(!o)return null;let s=o.split(/\r?\n/),a=m_(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,c_(u)))return u}if(u&&u.includes("("))return u}return null}function c_(e){let t=e.replace(/\s+/g," ").trim();return!t.includes("(")||Li(t)>0?!1:/[;{]$/.test(t)||/\)\s*(?::\s*[^={]+)?\s*(?:=>|=|throws\b|where\b|$)/i.test(t)||/\)\s*As\s+.+$/i.test(t)}function l_(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 u_(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${Op(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=d_(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 d_(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 m_(e,t,n,i){let r=Op(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 Op(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}import{existsSync as Gp}from"fs";import{join as E_}from"path";import p_ from"better-sqlite3";var f_=["node_modules",".git","dist","build","out","coverage","target",".next",".nuxt",".cache",".turbo",".scipquery-cache","__pycache__",".venv","venv"],_o=class{db;config;pathFilter;constructor(t,n){this.config=t,this.pathFilter=n??null,this.db=new p_(t.dbPath,{readonly:!0}),this.db.pragma("busy_timeout = 5000")}isIgnored(t){return this.pathFilter?.isIgnored(t)??!1}get localSymbolPredicate(){return`(
656
609
  EXISTS (
657
610
  SELECT 1
658
611
  FROM defn_enclosing_ranges local_der
@@ -669,8 +622,8 @@ ${d}`,l+=1+d.length,u+=An(d),r+=d.length+1}let m=xg(c);m&&n.push({...m,start:a,e
669
622
  AND local_m.role = 1
670
623
  ${this.pathExclusionsFor("local_d").trimStart()}
671
624
  )
672
- )`}get pathExclusions(){return this.pathExclusionsFor("d")}get symbolNoise(){return this.symbolNoiseFor("gs")}pathExclusionsFor(...t){return t.flatMap(n=>jR.flatMap(r=>[`AND ${n}.relative_path NOT LIKE '${r}/%'`,`AND ${n}.relative_path NOT LIKE '%/${r}/%'`])).join(`
673
- `)}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 BR from"ignore";import{readFileSync as HR,existsSync as Ls}from"fs";import{dirname as ws,isAbsolute as xu,join as Es,relative as qR,resolve as VR}from"path";function In(e){let t=BR(),n=!1,r=WR(e);for(let i of r)try{let o=HR(i,"utf-8");t.add(o),n=!0}catch{}return n||t.add(UR),{isIgnored:i=>Cu(t,e,i),filter:i=>i.filter(o=>!Cu(t,e,o))}}function WR(e){let t=[],n=Es(e,".gitignore");Ls(n)&&t.push(n);let r=ws(e),i=0;for(;r!==ws(r)&&i<5;){let o=Es(r,".gitignore");if(Ls(o)&&t.push(o),Ls(Es(r,".git")))break;r=ws(r),i++}return t}var UR=`
625
+ )`}get pathExclusions(){return this.pathExclusionsFor("d")}get symbolNoise(){return this.symbolNoiseFor("gs")}pathExclusionsFor(...t){return t.flatMap(n=>f_.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 g_ from"ignore";import{readFileSync as h_,existsSync as yc}from"fs";import{dirname as Sc,isAbsolute as jp,join as xc,relative as b_,resolve as y_}from"path";function si(e){let t=g_(),n=!1,i=S_(e);for(let r of i)try{let o=h_(r,"utf-8");t.add(o),n=!0}catch{}return n||t.add(x_),{isIgnored:r=>Bp(t,e,r),filter:r=>r.filter(o=>!Bp(t,e,o))}}function S_(e){let t=[],n=xc(e,".gitignore");yc(n)&&t.push(n);let i=Sc(e),r=0;for(;i!==Sc(i)&&r<5;){let o=xc(i,".gitignore");if(yc(o)&&t.push(o),yc(xc(i,".git")))break;i=Sc(i),r++}return t}var x_=`
674
627
  # Dependencies
675
628
  node_modules/
676
629
  vendor/
@@ -727,27 +680,29 @@ Thumbs.db
727
680
 
728
681
  # Type definitions (often noise in queries)
729
682
  *.d.ts
730
- `;function Cu(e,t,n){let r=GR(t,n);if(!r)return!1;try{return e.ignores(r)}catch{return!1}}function GR(e,t){if(!t||t===".")return null;if(!xu(t)&&!t.startsWith(".."))return t.replaceAll("\\","/");let n=xu(t)?t:VR(e,t),r=qR(e,n).replaceAll("\\","/");return!r||r==="."||r.startsWith("..")?null:r}import{readFileSync as JR,writeFileSync as zR,existsSync as Iu,mkdirSync as KR}from"fs";import{join as Gt,resolve as Ru}from"path";import{createHash as QR}from"crypto";import{homedir as YR}from"os";var vu=".scipquery.json",XR={enabled:!1,debounceMs:3e4,cooldownMs:6e4,ignore:[]};function vn(e){let t=Gt(e,vu);if(!Iu(t))return{};try{let n=JR(t,"utf-8");return JSON.parse(n)}catch{return{}}}function Du(e){return{...XR,...e.watch}}function ZR(e,t){let n=process.env.SCIP_QUERY_CACHE_DIR;if(n)return ks(n);if(t?.dbPath)return ks(Ru(e,t.dbPath));let i=process.env.XDG_CACHE_HOME||Gt(YR(),".cache"),o=QR("sha256").update(Ru(e)).digest("hex").slice(0,12),s=Gt(i,"scip-query","projects",o);return ks(s)}function Dn(e,t){let n=ZR(e,t);return{cacheDir:n,dbPath:Gt(n,"index.db"),indexPath:Gt(n,"index.scip"),metaPath:Gt(n,"meta.json")}}function Nu(e,t){let n=Gt(e,vu);return Iu(n)||zR(n,JSON.stringify({languages:t,watch:{enabled:!1,debounceMs:3e4,cooldownMs:6e4}},null,2)+`
731
- `),n}function ks(e){return KR(e,{recursive:!0}),e}function Oe(){return process.env.SCIP_QUERY_PROJECT_ROOT??process.cwd()}function yi(e=Oe()){let t=vn(e),n=Dn(e,t),r=process.env.SCIP_QUERY_INDEX_DB??(_u(n.dbPath)?n.dbPath:eI(e,"index.db"));return{projectRoot:e,config:t,paths:n,dbPath:r}}function Ps(e){return yi(e).dbPath}function tI(){let{projectRoot:e,config:t,paths:n,dbPath:r}=yi();_u(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},o=In(e);return new hi(i,o)}function nt(e){let t=tI();try{return e(t)}finally{t.close()}}function Fs(e,t){return t.concat([e])}function Nn(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 Lu(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 nI(e)}}function nI(e){throw new Error(`Unhandled watcher status: ${JSON.stringify(e)}`)}import{spawnSync as rI}from"child_process";function Ts(e){let t=rI(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?`:
732
- ${n}`:""}`)}return JSON.parse(t.stdout)}function wu(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function xe(e){return e+1}function de(e,t){return`${xe(e)}-${xe(t)}`}function ce(e,t,n){return`${e}:${de(t,n)}`}var L={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 oI=iI(import.meta.url),{version:bi}=lI(),Si="__health-phase",xi="__diff-impact-batch",sI=10,aI=75e3,cI=5e3,Eu=2500;function lI(){for(let e of["../package.json","../../package.json"])try{return oI(e)}catch{}return{version:"0.0.0"}}function pr(e){console.log(`Heuristic ${e}: review before acting; these are candidates, not exact compiler facts.
733
- `)}function As(e){let t=Ee(e);return t.symbols>=aI||t.documents>=cI}function Pu(e,t,n){return As(e)?n?(console.error(`Large index detected; ${t} is running the unbounded semantic pass because --full was supplied.`),{semantic:!0}):(console.error(`Large index detected; ${t} will scan the highest-priority ${Eu} candidates with semantic enrichment disabled. Run "scip-query ${t} --full" for the unbounded semantic pass.`),{scanLimit:Eu,semantic:!1}):{semantic:!0}}function Fu(e){let t=dr.map(n=>uI(n,e));return xs(t)}function uI(e,t){let n=process.argv[1]??ku(import.meta.url),r=[e];return t.scope&&r.push("--scope",t.scope),t.full&&r.push("--full"),Ts({cliPath:n,command:Si,args:r,label:`Health phase "${e}"`})}function Tu(e,t){if(t){console.log(JSON.stringify(e,null,2));return}if(console.log(`
683
+ `;function Bp(e,t,n){let i=C_(t,n);if(!i)return!1;try{return e.ignores(i)}catch{return!1}}function C_(e,t){if(!t||t===".")return null;if(!jp(t)&&!t.startsWith(".."))return t.replaceAll("\\","/");let n=jp(t)?t:y_(e,t),i=b_(e,n).replaceAll("\\","/");return!i||i==="."||i.startsWith("..")?null:i}import{readFileSync as v_,writeFileSync as Hp,existsSync as To,mkdirSync as R_}from"fs";import{join as ut,resolve as Vp}from"path";import{createHash as L_}from"crypto";import{homedir as w_}from"os";var ar=".scipquery.json",k_={enabled:!1,debounceMs:3e4,cooldownMs:6e4,ignore:[]},D_=["typescript","javascript","java","scala","kotlin","rust","python","ruby","go","cpp","c","csharp","vb","dart","php"];function wt(e){let t=ut(e,ar);if(!To(t))return{};try{let n=v_(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 ${ar} at ${t}: ${i}`,{cause:n}):new Error(`unable to read ${ar} at ${t}: ${i}`,{cause:n})}}function Fo(e,t={}){let n=[],i=new Set(D_);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(!N_(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&&!To(ut(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&&!To(ut(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 qp(e){return{...k_,...e.watch}}function I_(e,t){let n=process.env.SCIP_QUERY_CACHE_DIR;if(n)return Cc(n);if(t?.dbPath)return Cc(Vp(e,t.dbPath));let r=process.env.XDG_CACHE_HOME||ut(w_(),".cache"),o=L_("sha256").update(Vp(e)).digest("hex").slice(0,12),s=ut(r,"scip-query","projects",o);return Cc(s)}function ai(e,t){let n=I_(e,t);return{cacheDir:n,dbPath:ut(n,"index.db"),indexPath:ut(n,"index.scip"),metaPath:ut(n,"meta.json")}}function Up(e,t){let n=ut(e,ar);return To(n)||Hp(n,JSON.stringify({languages:t,watch:{enabled:!1,debounceMs:3e4,cooldownMs:6e4}},null,2)+`
684
+ `),n}function Wp(e,t){let n=ut(e,ar),i=wt(e),r={...i,suppressions:[...i.suppressions??[],t]},o=Fo(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 Hp(n,JSON.stringify(r,null,2)+`
685
+ `),{path:n,suppressionCount:r.suppressions?.length??0}}function Cc(e){return R_(e,{recursive:!0}),e}function N_(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ye(){return process.env.SCIP_QUERY_PROJECT_ROOT??process.cwd()}function $o(e=ye()){let t=wt(e),n=ai(e,t),i=process.env.SCIP_QUERY_INDEX_DB??(Gp(n.dbPath)?n.dbPath:E_(e,"index.db"));return{projectRoot:e,config:t,paths:n,dbPath:i}}function vc(e){return $o(e).dbPath}function P_(){let{projectRoot:e,config:t,paths:n,dbPath:i}=$o();Gp(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=si(e);return new _o(r,o)}function dt(e){let t=P_();try{return e(t)}finally{t.close()}}function Rc(e,t){return t.concat([e])}function ci(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 zp(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 __(e)}}function __(e){throw new Error(`Unhandled watcher status: ${JSON.stringify(e)}`)}import{spawnSync as T_}from"child_process";function Lc(e){let t=T_(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 Kp(e,t){let n=[];for(let i=0;i<e.length;i+=t)n.push(e.slice(i,i+t));return n}function $e(e){return e+1}function Se(e,t){return`${$e(e)}-${$e(t)}`}function fe(e,t,n){return`${e}:${Se(t,n)}`}function Ao(e,t=180){let n=e.replace(/\s+/g," ").trim();return n.length>t?`${n.slice(0,t-3)}...`:n}var D={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 $_=F_(import.meta.url),{version:Mo}=j_(),Oo="__health-phase",jo="__diff-impact-batch",A_=10,M_=75e3,O_=5e3,Jp=2500;function j_(){for(let e of["../package.json","../../package.json"])try{return $_(e)}catch{}return{version:"0.0.0"}}function li(e){console.log(`Heuristic ${e}: review before acting; these are candidates, not exact compiler facts.
687
+ `)}function kc(e){let t=Ae(e);return t.symbols>=M_||t.documents>=O_}function Xp(e,t,n,i={}){return kc(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 ${Jp} candidates with semantic enrichment disabled. Run "scip-query ${t} --full" for the unbounded semantic pass.`),{scanLimit:Jp,semantic:!1}):{semantic:!0}}function Yp(e){let t=sr.map(n=>B_(n,e));return lc(t)}function B_(e,t){let n=process.argv[1]??Qp(import.meta.url),i=[e];return t.scope&&i.push("--scope",t.scope),t.full&&i.push("--full"),Lc({cliPath:n,command:Oo,args:i,label:`Health phase "${e}"`})}function Zp(e,t){if(t){console.log(JSON.stringify(e,null,2));return}if(console.log(`
734
688
  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)
735
- `),console.log(` ${e.overview.documents} files | ${e.overview.symbols} symbols | ${Nn(e.overview.indexSizeBytes)}
736
- `),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.extractionCandidates>0&&console.log(` Extract candidates: ${n.extractionCandidates}`),n.wrappers>0&&console.log(` Wrapper functions: ${n.wrappers}`),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(`
737
- 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(`
738
- Top Complexity Hotspots:`);for(let r of e.topComplexity)console.log(` ${r.score.toFixed(1).padStart(6)} ${r.symbol}`)}if(mI(e),e.scoreBreakdown.length>0){console.log(`
739
- 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(`
740
- No issues found. Codebase is clean.`)}function mI(e){let t=e.axes;if(console.log(`
741
- 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})`)}}function Au(e){return nt(t=>{let n=yt(t,{base:e.base});if(n.note)return xn(t,{base:e.base});if(n.changedFiles.length===0)return xn(t,{base:e.base});let r=[];for(let i of wu(n.changedFiles,sI))r.push(dI(i,e));return ci(n.changedFiles,r)})}function dI(e,t){let n=process.argv[1]??ku(import.meta.url),r=[];return t.base&&r.push("--base",t.base),Ts({cliPath:n,command:xi,args:r,env:{...process.env,SCIP_QUERY_DIFF_IMPACT_FILES:JSON.stringify(e)},label:"Diff-impact batch"})}function Mu(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:"),L.list(e.changedSymbols,t=>` ${t.file} ${t.shortName} (fan-in: ${t.fanIn})`)),e.affectedConsumers.length>0&&(console.log(`
742
- Affected consumer files:`),L.list(e.affectedConsumers,t=>` ${t.file} (${t.consumedSymbols} symbol(s))`))}var Ci=Fs,I=(e=>parseInt(e,10)),Ri=(e=>{let t=parseInt(e,10);if(!Number.isFinite(t)||t<1)throw new Error(`Expected a positive integer, got ${e}`);return t}),Jt=parseFloat,Ms=parseInt;function g(e,t,n,...r){return r.length>0?{flags:e,description:t,parser:n,defaultValue:r[0]}:{flags:e,description:t,parser:n}}function v(e,t=[]){return{category:e,examples:t}}import{existsSync as Bs,mkdirSync as bI,symlinkSync as SI,readlinkSync as xI,unlinkSync as CI}from"fs";import{join as fr,dirname as Bu,resolve as Hs}from"path";import{homedir as qs,platform as RI}from"os";import{fileURLToPath as II}from"url";import{execFileSync as Ou}from"child_process";import{platform as Os,arch as hI}from"os";import{execFileSync as pI}from"child_process";import{platform as fI}from"os";var gI=fI()==="win32";function Le(e){let t=gI?"where":"which";try{return pI(t,[e],{stdio:"pipe"}),!0}catch{return!1}}var $u="v0.7.0";function $s(){return Le("scip")}function yI(){let e=Os(),t=hI(),n,r,i;switch(e){case"darwin":n="darwin",i="tar.gz";break;case"linux":n="linux",i="tar.gz";break;case"win32":n="windows",i="zip";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:`https://github.com/sourcegraph/scip/releases/download/${$u}/${o}`,filename:o}}function js(){let e=yI();console.log("\nThe `scip` CLI is required but not found on PATH.\n"),Os()==="darwin"?(console.log("Install via Homebrew:"),console.log(` brew install sourcegraph/scip/scip
689
+ `),console.log(` ${e.overview.documents} files | ${e.overview.symbols} symbols | ${ci(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: ${wc(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: ${wc(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: ${wc(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(q_(e),H_(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 wc(e,t){return Math.abs(e-t)<.01?String(e):`${e} (${V_(t)} score-weighted)`}function V_(e){return Number.isInteger(e)?String(e):e.toFixed(2).replace(/0+$/,"").replace(/\.$/,"")}function H_(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 q_(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 ef(e){return dt(t=>{let n=at(t,{base:e.base});if(n.note)return ii(t,{base:e.base});if(n.changedFiles.length===0)return ii(t,{base:e.base});let i=[];for(let r of Kp(n.changedFiles,A_))i.push(U_(r,e));return go(n.changedFiles,i)})}function U_(e,t){let n=process.argv[1]??Qp(import.meta.url),i=[];return t.base&&i.push("--base",t.base),Lc({cliPath:n,command:jo,args:i,env:{...process.env,SCIP_QUERY_DIFF_IMPACT_FILES:JSON.stringify(e)},label:"Diff-impact batch"})}function tf(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:"),D.list(e.changedSymbols,t=>` ${t.file} ${t.shortName} (fan-in: ${t.fanIn})`)),e.affectedConsumers.length>0&&(console.log(`
697
+ Affected consumer files:`),D.list(e.affectedConsumers,t=>` ${t.file} (${t.consumedSymbols} symbol(s))`))}var Bo=Rc,x=(e=>parseInt(e,10)),Vo=(e=>{let t=parseInt(e,10);if(!Number.isFinite(t)||t<1)throw new Error(`Expected a positive integer, got ${e}`);return t}),Xe=parseFloat,Dc=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 Ic(){return f("--json","Output as JSON for programmatic consumption")}function T(e=[]){return e.some(t=>t.flags==="--json")?e:[...e,Ic()]}function R(e,t=[]){return{category:e,examples:t}}import{existsSync as _c,mkdirSync as Q_,symlinkSync as X_,readlinkSync as Y_,unlinkSync as Z_}from"fs";import{join as cr,dirname as sf,resolve as Tc}from"path";import{homedir as Fc,platform as eT}from"os";import{fileURLToPath as tT}from"url";import{execFileSync as nf}from"child_process";import{platform as Nc,arch as K_}from"os";import{execFileSync as W_}from"child_process";import{platform as G_}from"os";var z_=G_()==="win32";function Ue(e){let t=z_?"where":"which";try{return W_(t,[e],{stdio:"pipe"}),!0}catch{return!1}}var rf="v0.7.0";function Ec(){return Ue("scip")}function J_(){let e=Nc(),t=K_(),n,i,r;switch(e){case"darwin":n="darwin",r="tar.gz";break;case"linux":n="linux",r="tar.gz";break;case"win32":n="windows",r="zip";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:`https://github.com/sourcegraph/scip/releases/download/${rf}/${o}`,filename:o}}function Pc(){let e=J_();console.log("\nThe `scip` CLI is required but not found on PATH.\n"),Nc()==="darwin"?(console.log("Install via Homebrew:"),console.log(` brew install sourcegraph/scip/scip
743
698
  `),console.log("Or download manually:")):console.log("Download from:"),console.log(e?` ${e.url}
744
- `:` https://github.com/sourcegraph/scip/releases/tag/${$u}
745
- `),console.log("After installing, ensure `scip` is on your PATH and run `scip-query reindex`.")}function ju(e){if(Os()==="darwin"&&Le("brew")){e("Installing scip CLI via Homebrew...");try{if(Ou("brew",["install","sourcegraph/scip/scip"],{stdio:"inherit",timeout:3e5,env:process.env}),Le("scip"))return e("Successfully installed scip CLI via Homebrew"),!0}catch(t){let n=t instanceof Error?t.message:String(t);e(`Homebrew install failed: ${n}`)}}if(Le("go")){e("Installing scip CLI via go install...");try{if(Ou("go",["install","github.com/sourcegraph/scip/cmd/scip@latest"],{stdio:"inherit",timeout:3e5,env:process.env}),Le("scip"))return e("Successfully installed scip CLI via go install"),!0}catch(t){let n=t instanceof Error?t.message:String(t);e(`go install failed: ${n}`)}}return e("Could not auto-install scip CLI."),e("Install manually from: https://github.com/sourcegraph/scip/releases"),!1}var vI=RI()==="win32",Vs=["scip-query","concrete-plan","scip-ai-cleanup","scip-explore","scip-debloat","scip-doc-reconcile","scip-maintainability","scip-verify","scip-language-playbook"];function Hu(e={}){let t=e.quiet?()=>{}:console.log,n=II(import.meta.url),r=Hs(Bu(n),"..","skills"),i=[fr(qs(),".claude","skills"),fr(qs(),".codex","skills"),fr(qs(),".agents","skills")],o={installed:[],skipped:[],alreadyLinked:[]};for(let s of i){let a=Bu(s);if(!Bs(a))continue;bI(s,{recursive:!0});let c=DI(s);for(let l of Vs){let u=fr(r,l),m=fr(s,l);if(!Bs(u)){o.skipped.push(`${c}/${l}`);continue}if(Bs(m)){try{let d=xI(m);if(Hs(d)===Hs(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}CI(m)}SI(u,m,vI?"junction":"dir"),o.installed.push(`${c}/${l}`),t(` done: ${l} \u2192 ${c}`)}}return o}function DI(e){return e.includes(".codex")?"Codex":e.includes(".agents")?"Agents":"Claude"}import{existsSync as Ym}from"fs";import{execFileSync as $D}from"child_process";import{closeSync as jD,existsSync as sa,mkdirSync as Pm,mkdtempSync as BD,openSync as HD,readFileSync as qD,renameSync as aa,rmSync as ca,writeFileSync as Fm}from"fs";import{basename as Ei,dirname as Qt,extname as VD,join as rt}from"path";import NI from"better-sqlite3";import{execFileSync as _I}from"child_process";import{existsSync as LI,readdirSync as wI,readFileSync as EI}from"fs";import{extname as Ii,join as qu}from"path";function bt(e){let t=new Set((e.extensions??Cc).map(o=>o.toLowerCase()));if(t.size===0)return{scanned:0,inserted:0,existing:0};if(!LI(e.dbPath))throw new Error(`SCIP SQLite database not found at ${e.dbPath}`);let n=In(e.projectRoot),r=kI(e.projectRoot,t).filter(o=>!n.isIgnored(o)),i=new NI(e.dbPath);try{let o=FI(i,r),s=i.prepare(`INSERT OR IGNORE INTO documents (language, relative_path, position_encoding, text)
746
- VALUES (?, ?, NULL, ?)`),c=i.transaction(u=>{let m=0;for(let d of u){if(o.has(d))continue;let p=EI(qu(e.projectRoot,d),"utf-8"),h=s.run(TI(d),d,p);m+=Number(h.changes)}return m})(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 kI(e,t){let n=PI(e,t);if(n)return n;let r=[],i=o=>{let s=o?qu(e,o):e,a;try{a=wI(s,{withFileTypes:!0})}catch{return}for(let c of a){if(uo.has(c.name))continue;let l=o?`${o}/${c.name}`:c.name;if(c.isDirectory()){i(l);continue}t.has(Ii(c.name).toLowerCase())&&r.push(l)}};return i(""),r.sort()}function PI(e,t){try{return _I("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}).split(`
747
- `).filter(r=>r&&t.has(Ii(r).toLowerCase())).sort()}catch{return null}}function FI(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 TI(e){return Ii(e).toLowerCase()===".vue"?"vue":Ii(e).replace(/^\./,"").toLowerCase()||"source"}import{execFileSync as AI}from"child_process";import{existsSync as MI,readdirSync as Wu}from"fs";import{extname as Uu,join as Gu}from"path";var OI=new Set([".git",".hg",".svn",".idea",".vscode","node_modules","vendor","dist","build","target","bin","obj",".dart_tool",".gradle",".next",".venv","venv","__pycache__"]),$I=[{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 zt(e){let t=[],n=jI(e),r=VI(e);for(let i of $I){if(BI(e,i.files)){t.push(i.language);continue}if(HI(n,i.globs)){t.push(i.language);continue}UI(r,i.extensions)&&t.push(i.language)}return t.includes("typescript")&&Vu(t,"javascript"),t.includes("cpp")&&!r.has(".c")&&Vu(t,"c"),t}function jI(e){try{return Wu(e)}catch{return[]}}function BI(e,t){return t?.length?t.some(n=>MI(Gu(e,n))):!1}function HI(e,t){return t?.length?e.some(n=>t.some(r=>qI(n,r))):!1}function qI(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 VI(e){let t=WI(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=Wu(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=Gu(i,s.name);if(s.isDirectory()){OI.has(s.name)||r.push(a);continue}let c=Uu(s.name).toLowerCase();c&&n.add(c)}}return n}function WI(e){try{let t=AI("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(`
748
- `)){if(!r)continue;let i=Uu(r).toLowerCase();i&&n.add(i)}return n}catch{return null}}function UI(e,t){return t?.length?t.some(n=>e.has(n)):!1}function Vu(e,t){let n=e.indexOf(t);n!==-1&&e.splice(n,1)}import{existsSync as Ju,readdirSync as GI}from"fs";import{join as Ws}from"path";var JI={typescript:{language:"typescript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,pnpmWorkspaces:t,indexerBinary:n})=>{let r=["index","--infer-tsconfig","--output",e,"--no-progress-bar"];return t&&r.splice(1,0,"--pnpm-workspaces"),{binary:n,args:r}},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",zu(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",zu(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=Ws(e,"vendor","bin","scip-php"),r=Ws(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",Ju(r)?r:Ju(n)?n:t]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function vi(e){return JI[e]}function zu(e,t){let n;try{n=GI(e)}catch{return null}for(let r of n)if(t.some(i=>r.endsWith(i)))return Ws(e,r);return null}import{readFileSync as zI,writeFileSync as KI}from"fs";import{create as Us}from"@bufbuild/protobuf";import{deserializeSCIP as QI,serializeSCIP as YI,DocumentSchema as XI,IndexSchema as ZI,SymbolInformationSchema as ev}from"@c4312/scip";function tv(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let t=nv(e),n=rv(e.flatMap(i=>i.documents??[])),r=Qu(e.flatMap(i=>i.externalSymbols??[]));return Us(ZI,{metadata:t,documents:n,externalSymbols:r})}function Ku(e,t){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let n=e.map(i=>QI(zI(i))),r=tv(n);return KI(t,Buffer.from(YI(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function nv(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 rv(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,Us(XI,{language:r.language||n.language,relativePath:r.relativePath||n.relativePath,occurrences:[...r.occurrences,...n.occurrences],symbols:Qu([...r.symbols,...n.symbols]),text:ov(r.text,n.text),positionEncoding:r.positionEncoding||n.positionEncoding}))}return[...t.values()]}function Qu(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,Us(ev,{symbol:r.symbol,documentation:sv([...r.documentation,...n.documentation]),relationships:iv([...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 iv(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 ov(e,t){return e?t?e.length>=t.length?e:t:e:t}function sv(e){return[...new Set(e)]}import{execFileSync as av}from"child_process";import{createHash as cv}from"crypto";import{readdirSync as lv,readFileSync as uv}from"fs";import{join as Yu}from"path";function mv(e){return(dv(e)??pv(e)).filter(t=>t&&!Xu(t)).sort()}function Di(e){return mv(e).map(t=>{let n=Yu(e,t);try{let r=uv(n);return{path:t,size:r.byteLength,hash:cv("sha256").update(r).digest("hex")}}catch{return{path:t,size:-1,hash:"unreadable"}}})}function dv(e){try{return av("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:50*1024*1024,stdio:["ignore","pipe","ignore"]}).split(`
749
- `).filter(Boolean)}catch{return null}}function pv(e){let t=[],n=[""];for(;n.length>0;){let r=n.pop(),i=r?Yu(e,r):e,o;try{o=lv(i,{withFileTypes:!0})}catch{continue}for(let s of o){let a=r?`${r}/${s.name}`:s.name;if(s.isDirectory()){Xu(a)||n.push(a);continue}t.push(a)}}return t}function Xu(e){return e.split("/").some(n=>fv.has(n))||e.endsWith(".db")||e.endsWith(".db-wal")||e.endsWith(".db-shm")||e.endsWith(".scip")}var fv=new Set([".git","node_modules",".scipquery-cache",".stryker-tmp","dist","build","coverage",".next",".nuxt","target"]);import{readFileSync as gv,writeFileSync as hv}from"fs";import{create as Zu}from"@bufbuild/protobuf";import{deserializeSCIP as yv,DocumentSchema as bv,IndexSchema as Sv,serializeSCIP as xv,SymbolRole as Cv}from"@c4312/scip";function em(e){let t;try{t=yv(gv(e))}catch{return{removedDefinitionOccurrences:0,touchedDocuments:0}}let n=Rv(t);return n.removedDefinitionOccurrences>0&&hv(e,Buffer.from(xv(n.index))),{removedDefinitionOccurrences:n.removedDefinitionOccurrences,touchedDocuments:n.touchedDocuments}}function Rv(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&Cv.Definition)===0||t.has(a.symbol)?!0:(n+=1,!1));if(s.length===o.occurrences.length){i.push(o);continue}r+=1,i.push(Zu(bv,{language:o.language,relativePath:o.relativePath,occurrences:s,symbols:o.symbols,text:o.text,positionEncoding:o.positionEncoding}))}return{index:n===0?e:Zu(Sv,{metadata:e.metadata,documents:i,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:n,touchedDocuments:r}}import{execFile as Iv}from"child_process";import{existsSync as Ni,renameSync as Js,rmSync as zs}from"fs";import{cpus as vv}from"os";import{join as tm}from"path";function Dv(e,t,n){if(!e.defaultOutputPath)return;let r=tm(t,e.defaultOutputPath);n!==r&&Ni(r)&&Js(r,n)}function Nv(e,t,n){if(!e.defaultOutputPath)return null;let r=tm(t,e.defaultOutputPath);if(r===n)return null;let i=`${n}.default-output-backup`;return zs(i,{force:!0}),Ni(r)?(Js(r,i),{defaultOutputPath:r,backupPath:i}):{defaultOutputPath:r,backupPath:null}}function _v(e){e&&(zs(e.defaultOutputPath,{force:!0}),e.backupPath&&Ni(e.backupPath)&&Js(e.backupPath,e.defaultOutputPath))}function Lv(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(2,Math.max(1,vv().length-1));return Math.max(1,Math.min(e,Math.floor(r)))}async function nm(e,t,n,r){let i=e.filter(l=>l.config.defaultOutputPath),o=e.filter(l=>!l.config.defaultOutputPath),s=[],a=Lv(o.length,r),c=await Ev(o,a,l=>Gs(l,t,n));if(a>1){let l=new Map;for(let u of c.filter(m=>m.skipped)){let m=o.find(d=>d.language===u.language);m&&(n(`Retrying ${m.language} indexer serially after parallel failure...`),l.set(m.language,await Gs(m,t,n)))}s.push(...c.map(u=>l.get(u.language)??u))}else s.push(...c);for(let l of i)s.push(await Gs(l,t,n));return s.sort((l,u)=>e.findIndex(m=>m.language===l.language)-e.findIndex(m=>m.language===u.language))}async function Gs(e,t,n){n(`Indexing ${e.language} with ${e.resolvedBinary}...`),zs(e.scipPath,{force:!0});let r=Nv(e.config,t,e.scipPath);try{await wv(e.binary,e.args,{cwd:t,env:e.env,maxBuffer:50*1024*1024}),Dv(e.config,t,e.scipPath)}catch(i){let o=i instanceof Error?i.message:String(i),s=`${e.resolvedBinary} indexer failed: ${o.split(`
750
- `)[0]}`;return n(`Skipping ${e.language}: ${s}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:s}}}finally{_v(r)}if(!Ni(e.scipPath)){let i=`${e.resolvedBinary} indexer completed but did not produce ${e.scipPath}`;return n(`Skipping ${e.language}: ${i}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:i}}}return{language:e.language,scipPath:e.scipPath}}function wv(e,t,n){return new Promise((r,i)=>{Iv(e,[...t],n,o=>{o?i(o):r()})})}async function Ev(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 Qs}from"child_process";import{existsSync as Ks,readFileSync as kv}from"fs";import{createRequire as Pv}from"module";import{platform as Fv}from"os";import{dirname as rm,join as _i}from"path";var Tv=Pv(import.meta.url);function Ys(e){return[e.indexerBinary,...e.binaryAliases??[]]}function Li(e){let t=Ys(e);return t.length===1?t[0]:t.join(" or ")}function _n(e){for(let t of Ys(e))if(Le(t))return t;return Mv(e)}function im(e){return _n(e)!==null||Av(e)}function Av(e){return om(e)!==null}function Mv(e){let t=om(e);if(!t)return null;let r=JSON.parse(kv(t,"utf8")).bin;if(!r)return null;if(typeof r=="string")return _i(rm(t),r);for(let i of Ys(e)){let o=r[i];if(o)return _i(rm(t),o)}return null}function om(e){if(!e.bundledNpmPackage)return null;try{return Tv.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function Xs(e,t){for(let n of e.projectLocalBinaries??[]){let r=_i(t,n);if(Ks(r))return r}return null}function Ov(e,t){return Xs(e,t)??_n(e)}function sm(e,t=process.env,n=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||Zs(n,t))return t;let r=lm(n,t);return r?{...t,DOTNET_ROOT:r}:t}function am(e,t){let n=Li(e),r=t?Ov(e,t):_n(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=$v(r);return{language:e.language,binaryLabel:n,installed:!0,runnable:i.runnable,resolvedBinary:r,installUrl:e.installUrl,note:i.note}}function cm(e,t){let n=e.installMethods,r=Li(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(Le(i.prerequisite)){t(`Installing ${r} via ${i.label}...`);try{Qs(i.binary,i.args,{stdio:"inherit",timeout:3e5,env:process.env});let o=_n(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 $v(e){if(Zs(e,process.env))return{runnable:!0};let t=lm(e,process.env);if(t)return{runnable:!0,note:`using .NET 9 runtime from ${t}`};let n=um(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 lm(e,t){for(let n of um(t))if(Zs(e,{...t,DOTNET_ROOT:n}))return n;return null}function um(e){let t=[],n=e.DOTNET_ROOT;if(n&&Ks(n)&&t.push(n),Fv()==="darwin"&&Le("brew"))try{let r=Qs("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),i=_i(r,"libexec");Ks(i)&&!t.includes(i)&&t.push(i)}catch{}return t}function Zs(e,t){try{return Qs(e,["--version"],{stdio:"pipe",env:t}),!0}catch{return!1}}import bD from"better-sqlite3";import{existsSync as SD,readFileSync as xD,writeFileSync as CD}from"fs";import{dirname as RD,join as ID,resolve as vD}from"path";import{readFileSync as jv,rmSync as Bv,statSync as Hv,mkdtempSync as qv}from"fs";import{cpus as Vv,tmpdir as Wv}from"os";import{join as ea}from"path";import{Worker as Uv}from"worker_threads";function mm(e){return e.length>=8&&pm(e.length)>1}function dm(e){let t=pm(e.vueFiles.length),n=Jv(e.vueFiles),r=Kv(n,t),i=new URL("./augment-vue-worker.js",import.meta.url),o=qv(ea(Wv(),"scip-query-vue-workers-")),s=new SharedArrayBuffer(4),a=new Int32Array(s),c=Gv(),l=Date.now();try{for(let m=0;m<r.length;m++)new Uv(i,{workerData:{projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,tasks:r[m],resultPath:ea(o,`${m}.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((m,d)=>{let p=JSON.parse(jv(ea(o,`${d}.json`),"utf-8"));if(!p.ok)throw new Error(`Vue reference worker failed: ${p.error}`);return p.result});return{occurrences:u.flatMap(m=>m.occurrences),skippedReferences:u.reduce((m,d)=>m+d.skippedReferences,0)}}finally{Bv(o,{recursive:!0,force:!0})}}function pm(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,Vv().length-1));return Math.max(1,Math.min(e,n))}function Gv(){let e=Number(process.env.SCIP_QUERY_AUGMENT_VUE_WORKER_TIMEOUT_MS??0);return Number.isFinite(e)&&e>0?e:3e5}function Jv(e){let t=zv(),n=[];for(let r of e){let i=fm(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 zv(){return Number.POSITIVE_INFINITY}function Kv(e,t){let n=Array.from({length:t},()=>({tasks:[],weight:0})),r=e.map(i=>({task:i,weight:Qv(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 Qv(e){return Number.isFinite(e.endOffset)?Math.max(1,e.endOffset-e.startOffset):Math.max(1,fm(e.fileName)-e.startOffset)}function fm(e){try{return Hv(e).size}catch{return 1}}import{createRequire as Yv}from"module";import{existsSync as Xv,readFileSync as na}from"fs";import{dirname as gm,extname as Zv,join as hm,relative as eD,resolve as tD}from"path";import{pathToFileURL as nD}from"url";function rD(e){e.transaction(()=>{e.prepare(`
699
+ `:` https://github.com/sourcegraph/scip/releases/tag/${rf}
700
+ `),console.log("After installing, ensure `scip` is on your PATH and run `scip-query reindex`.")}function of(e){if(Nc()==="darwin"&&Ue("brew")){e("Installing scip CLI via Homebrew...");try{if(nf("brew",["install","sourcegraph/scip/scip"],{stdio:"inherit",timeout:3e5,env:process.env}),Ue("scip"))return e("Successfully installed scip CLI via Homebrew"),!0}catch(t){let n=t instanceof Error?t.message:String(t);e(`Homebrew install failed: ${n}`)}}if(Ue("go")){e("Installing scip CLI via go install...");try{if(nf("go",["install","github.com/sourcegraph/scip/cmd/scip@latest"],{stdio:"inherit",timeout:3e5,env:process.env}),Ue("scip"))return e("Successfully installed scip CLI via go install"),!0}catch(t){let n=t instanceof Error?t.message:String(t);e(`go install failed: ${n}`)}}return e("Could not auto-install scip CLI."),e("Install manually from: https://github.com/sourcegraph/scip/releases"),!1}var nT=eT()==="win32",$c=["scip-query","scip-query-setup","concrete-plan","scip-ai-cleanup","scip-explore","scip-debloat","scip-doc-reconcile","scip-directory-architecture","scip-maintainability","scip-react-maintainability","scip-vue-maintainability","scip-verify","scip-language-playbook"];function af(e={}){let t=e.quiet?()=>{}:console.log,n=tT(import.meta.url),i=Tc(sf(n),"..","skills"),r=[cr(Fc(),".claude","skills"),cr(Fc(),".codex","skills"),cr(Fc(),".agents","skills")],o={installed:[],skipped:[],alreadyLinked:[]};for(let s of r){let a=sf(s);if(!_c(a))continue;Q_(s,{recursive:!0});let c=iT(s);for(let l of $c){let u=cr(i,l),d=cr(s,l);if(!_c(u)){o.skipped.push(`${c}/${l}`);continue}if(_c(d)){try{let m=Y_(d);if(Tc(m)===Tc(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}Z_(d)}X_(u,d,nT?"junction":"dir"),o.installed.push(`${c}/${l}`),t(` done: ${l} \u2192 ${c}`)}}return o}function iT(e){return e.includes(".codex")?"Codex":e.includes(".agents")?"Agents":"Claude"}import{existsSync as $$}from"fs";import{execFileSync as yF}from"child_process";import{closeSync as SF,copyFileSync as xF,existsSync as zo,mkdirSync as Yc,mkdtempSync as CF,openSync as vF,readFileSync as Zf,renameSync as Zc,rmSync as el,writeFileSync as eg}from"fs";import{basename as Go,dirname as Dt,extname as RF,join as mt}from"path";import rT from"better-sqlite3";import{execFileSync as oT}from"child_process";import{existsSync as sT,readdirSync as aT,readFileSync as cT}from"fs";import{extname as Ho,join as cf}from"path";function Vt(e){let t=new Set((e.extensions??Ul).map(o=>o.toLowerCase()));if(t.size===0)return{scanned:0,inserted:0,existing:0};if(!sT(e.dbPath))throw new Error(`SCIP SQLite database not found at ${e.dbPath}`);let n=si(e.projectRoot),i=lT(e.projectRoot,t).filter(o=>!n.isIgnored(o)),r=new rT(e.dbPath);try{let o=dT(r,i),s=r.prepare(`INSERT OR IGNORE INTO documents (language, relative_path, position_encoding, text)
701
+ VALUES (?, ?, NULL, ?)`),c=r.transaction(u=>{let d=0;for(let m of u){if(o.has(m))continue;let p=cT(cf(e.projectRoot,m),"utf-8"),h=s.run(mT(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 lT(e,t){let n=uT(e,t);if(n)return n;let i=[],r=o=>{let s=o?cf(e,o):e,a;try{a=aT(s,{withFileTypes:!0})}catch{return}for(let c of a){if(ys.has(c.name))continue;let l=o?`${o}/${c.name}`:c.name;if(c.isDirectory()){r(l);continue}t.has(Ho(c.name).toLowerCase())&&i.push(l)}};return r(""),i.sort()}function uT(e,t){try{return oT("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}).split(`
702
+ `).filter(i=>i&&t.has(Ho(i).toLowerCase())).sort()}catch{return null}}function dT(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 mT(e){return Ho(e).toLowerCase()===".vue"?"vue":Ho(e).replace(/^\./,"").toLowerCase()||"source"}import{execFileSync as pT}from"child_process";import{existsSync as fT,readdirSync as uf}from"fs";import{extname as df,join as mf}from"path";var gT=new Set([".git",".hg",".svn",".idea",".vscode","node_modules","vendor","dist","build","target","bin","obj",".dart_tool",".gradle",".next",".venv","venv","__pycache__"]),hT=[{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 kt(e){let t=[],n=bT(e),i=CT(e);for(let r of hT){if(yT(e,r.files)){t.push(r.language);continue}if(ST(n,r.globs)){t.push(r.language);continue}RT(i,r.extensions)&&t.push(r.language)}return t.includes("typescript")&&lf(t,"javascript"),t.includes("cpp")&&!i.has(".c")&&lf(t,"c"),t}function bT(e){try{return uf(e)}catch{return[]}}function yT(e,t){return t?.length?t.some(n=>fT(mf(e,n))):!1}function ST(e,t){return t?.length?e.some(n=>t.some(i=>xT(n,i))):!1}function xT(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 CT(e){let t=vT(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=uf(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=mf(r,s.name);if(s.isDirectory()){gT.has(s.name)||i.push(a);continue}let c=df(s.name).toLowerCase();c&&n.add(c)}}return n}function vT(e){try{let t=pT("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(`
703
+ `)){if(!i)continue;let r=df(i).toLowerCase();r&&n.add(r)}return n}catch{return null}}function RT(e,t){return t?.length?t.some(n=>e.has(n)):!1}function lf(e,t){let n=e.indexOf(t);n!==-1&&e.splice(n,1)}import{existsSync as pf,readdirSync as LT}from"fs";import{join as Ac}from"path";var wT={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",ff(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",ff(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=Ac(e,"vendor","bin","scip-php"),i=Ac(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",pf(i)?i:pf(n)?n:t]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function lr(e){return wT[e]}function ff(e,t){let n;try{n=LT(e)}catch{return null}for(let i of n)if(t.some(r=>i.endsWith(r)))return Ac(e,i);return null}import{readFileSync as kT,writeFileSync as DT}from"fs";import{create as Mc}from"@bufbuild/protobuf";import{deserializeSCIP as IT,serializeSCIP as NT,DocumentSchema as ET,IndexSchema as PT,SymbolInformationSchema as _T}from"@c4312/scip";function TT(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let t=FT(e),n=$T(e.flatMap(r=>r.documents??[])),i=hf(e.flatMap(r=>r.externalSymbols??[]));return Mc(PT,{metadata:t,documents:n,externalSymbols:i})}function gf(e,t){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let n=e.map(r=>IT(kT(r))),i=TT(n);return DT(t,Buffer.from(NT(i))),{documentCount:i.documents.length,externalSymbolCount:i.externalSymbols.length,inputCount:e.length}}function FT(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 $T(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,Mc(ET,{language:i.language||n.language,relativePath:i.relativePath||n.relativePath,occurrences:[...i.occurrences,...n.occurrences],symbols:hf([...i.symbols,...n.symbols]),text:MT(i.text,n.text),positionEncoding:i.positionEncoding||n.positionEncoding}))}return[...t.values()]}function hf(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,Mc(_T,{symbol:i.symbol,documentation:OT([...i.documentation,...n.documentation]),relationships:AT([...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 AT(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 MT(e,t){return e?t?e.length>=t.length?e:t:e:t}function OT(e){return[...new Set(e)]}import{execFileSync as jT}from"child_process";import{createHash as BT}from"crypto";import{readdirSync as VT,readFileSync as HT}from"fs";import{join as yf}from"path";function bf(e){return(UT(e)??WT(e)).filter(t=>t&&!Sf(t)).sort()}function wn(e,t={}){return(t.language?bf(e).filter(i=>qT(i,t.language,t.markerFiles)):bf(e)).map(i=>{let r=yf(e,i);try{let o=HT(r);return{path:i,size:o.byteLength,hash:BT("sha256").update(o).digest("hex")}}catch{return{path:i,size:-1,hash:"unreadable"}}})}function qT(e,t,n){let i=e.split("/").at(-1)??e;if(n?.includes(e)||n?.includes(i)||zT.has(i))return!0;let r=e.includes(".")?`.${e.split(".").at(-1).toLowerCase()}`:"";return(KT[t]??[]).includes(r)}function UT(e){try{return jT("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:50*1024*1024,stdio:["ignore","pipe","ignore"]}).split(`
704
+ `).filter(Boolean)}catch{return null}}function WT(e){let t=[],n=[""];for(;n.length>0;){let i=n.pop(),r=i?yf(e,i):e,o;try{o=VT(r,{withFileTypes:!0})}catch{continue}for(let s of o){let a=i?`${i}/${s.name}`:s.name;if(s.isDirectory()){Sf(a)||n.push(a);continue}t.push(a)}}return t}function Sf(e){return e.split("/").some(n=>GT.has(n))||e.endsWith(".db")||e.endsWith(".db-wal")||e.endsWith(".db-shm")||e.endsWith(".scip")}var GT=new Set([".git","node_modules",".scipquery-cache",".stryker-tmp","dist","build","coverage",".next",".nuxt","target"]),zT=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"]),KT={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 JT,writeFileSync as QT}from"fs";import{create as xf}from"@bufbuild/protobuf";import{deserializeSCIP as XT,DocumentSchema as YT,IndexSchema as ZT,serializeSCIP as e0,SymbolRole as t0}from"@c4312/scip";function Cf(e){let t;try{t=XT(JT(e))}catch{return{removedDefinitionOccurrences:0,touchedDocuments:0}}let n=n0(t);return n.removedDefinitionOccurrences>0&&QT(e,Buffer.from(e0(n.index))),{removedDefinitionOccurrences:n.removedDefinitionOccurrences,touchedDocuments:n.touchedDocuments}}function n0(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&t0.Definition)===0||t.has(a.symbol)?!0:(n+=1,!1));if(s.length===o.occurrences.length){r.push(o);continue}i+=1,r.push(xf(YT,{language:o.language,relativePath:o.relativePath,occurrences:s,symbols:o.symbols,text:o.text,positionEncoding:o.positionEncoding}))}return{index:n===0?e:xf(ZT,{metadata:e.metadata,documents:r,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:n,touchedDocuments:i}}import{execFile as i0}from"child_process";import{existsSync as qo,renameSync as jc,rmSync as Bc}from"fs";import{cpus as r0}from"os";import{join as vf}from"path";function o0(e,t,n){if(!e.defaultOutputPath)return;let i=vf(t,e.defaultOutputPath);n!==i&&qo(i)&&jc(i,n)}function s0(e,t,n){if(!e.defaultOutputPath)return null;let i=vf(t,e.defaultOutputPath);if(i===n)return null;let r=`${n}.default-output-backup`;return Bc(r,{force:!0}),qo(i)?(jc(i,r),{defaultOutputPath:i,backupPath:r}):{defaultOutputPath:i,backupPath:null}}function a0(e){e&&(Bc(e.defaultOutputPath,{force:!0}),e.backupPath&&qo(e.backupPath)&&jc(e.backupPath,e.defaultOutputPath))}function c0(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,r0().length-1));return Math.max(1,Math.min(e,Math.floor(i)))}async function Rf(e,t,n,i){let r=e.filter(l=>l.config.defaultOutputPath),o=e.filter(l=>!l.config.defaultOutputPath),s=[],a=c0(o.length,i),c=await u0(o,a,l=>Oc(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 Oc(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 Oc(l,t,n));return s.sort((l,u)=>e.findIndex(d=>d.language===l.language)-e.findIndex(d=>d.language===u.language))}async function Oc(e,t,n){n(`Indexing ${e.language} with ${e.resolvedBinary}...`),Bc(e.scipPath,{force:!0});let i=s0(e.config,t,e.scipPath);try{await l0(e.binary,e.args,{cwd:t,env:e.env,maxBuffer:50*1024*1024}),o0(e.config,t,e.scipPath)}catch(r){let o=r instanceof Error?r.message:String(r),s=`${e.resolvedBinary} indexer failed: ${o.split(`
705
+ `)[0]}`;return n(`Skipping ${e.language}: ${s}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:s}}}finally{a0(i)}if(!qo(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 l0(e,t,n){return new Promise((i,r)=>{i0(e,[...t],n,o=>{o?r(o):i()})})}async function u0(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{execFileSync as Hc}from"child_process";import{existsSync as Vc,readFileSync as d0}from"fs";import{createRequire as m0}from"module";import{platform as p0}from"os";import{dirname as Lf,join as Uo}from"path";var f0=m0(import.meta.url);function qc(e){return[e.indexerBinary,...e.binaryAliases??[]]}function Wo(e){let t=qc(e);return t.length===1?t[0]:t.join(" or ")}function ui(e){for(let t of qc(e))if(Ue(t))return t;return h0(e)}function wf(e){return ui(e)!==null||g0(e)}function g0(e){return kf(e)!==null}function h0(e){let t=kf(e);if(!t)return null;let i=JSON.parse(d0(t,"utf8")).bin;if(!i)return null;if(typeof i=="string")return Uo(Lf(t),i);for(let r of qc(e)){let o=i[r];if(o)return Uo(Lf(t),o)}return null}function kf(e){if(!e.bundledNpmPackage)return null;try{return f0.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function Uc(e,t){for(let n of e.projectLocalBinaries??[]){let i=Uo(t,n);if(Vc(i))return i}return null}function b0(e,t){return Uc(e,t)??ui(e)}function Df(e,t=process.env,n=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||Wc(n,t))return t;let i=Ef(n,t);return i?{...t,DOTNET_ROOT:i}:t}function If(e,t){let n=Wo(e),i=t?b0(e,t):ui(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=y0(i);return{language:e.language,binaryLabel:n,installed:!0,runnable:r.runnable,resolvedBinary:i,installUrl:e.installUrl,note:r.note}}function Nf(e,t){let n=e.installMethods,i=Wo(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(Ue(r.prerequisite)){t(`Installing ${i} via ${r.label}...`);try{Hc(r.binary,r.args,{stdio:"inherit",timeout:3e5,env:process.env});let o=ui(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 y0(e){if(Wc(e,process.env))return{runnable:!0};let t=Ef(e,process.env);if(t)return{runnable:!0,note:`using .NET 9 runtime from ${t}`};let n=Pf(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 Ef(e,t){for(let n of Pf(t))if(Wc(e,{...t,DOTNET_ROOT:n}))return n;return null}function Pf(e){let t=[],n=e.DOTNET_ROOT;if(n&&Vc(n)&&t.push(n),p0()==="darwin"&&Ue("brew"))try{let i=Hc("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),r=Uo(i,"libexec");Vc(r)&&!t.includes(r)&&t.push(r)}catch{}return t}function Wc(e,t){try{return Hc(e,["--version"],{stdio:"pipe",env:t}),!0}catch{return!1}}import Y0 from"better-sqlite3";import{existsSync as Z0,readFileSync as eF,writeFileSync as tF}from"fs";import{dirname as nF,join as iF,resolve as rF}from"path";import{readFileSync as S0,rmSync as x0,statSync as C0,mkdtempSync as v0}from"fs";import{cpus as R0,tmpdir as L0}from"os";import{join as Gc}from"path";import{Worker as w0}from"worker_threads";function _f(e){return e.length>=8&&Ff(e.length)>1}function Tf(e){let t=Ff(e.vueFiles.length),n=D0(e.vueFiles),i=N0(n,t),r=new URL("./augment-vue-worker.js",import.meta.url),o=v0(Gc(L0(),"scip-query-vue-workers-")),s=new SharedArrayBuffer(4),a=new Int32Array(s),c=k0(),l=Date.now();try{for(let d=0;d<i.length;d++)new w0(r,{workerData:{projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,tasks:i[d],resultPath:Gc(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(S0(Gc(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{x0(o,{recursive:!0,force:!0})}}function Ff(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,R0().length-1));return Math.max(1,Math.min(e,n))}function k0(){let e=Number(process.env.SCIP_QUERY_AUGMENT_VUE_WORKER_TIMEOUT_MS??0);return Number.isFinite(e)&&e>0?e:3e5}function D0(e){let t=I0(),n=[];for(let i of e){let r=$f(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 I0(){return Number.POSITIVE_INFINITY}function N0(e,t){let n=Array.from({length:t},()=>({tasks:[],weight:0})),i=e.map(r=>({task:r,weight:E0(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 E0(e){return Number.isFinite(e.endOffset)?Math.max(1,e.endOffset-e.startOffset):Math.max(1,$f(e.fileName)-e.startOffset)}function $f(e){try{return C0(e).size}catch{return 1}}import{createRequire as P0}from"module";import{existsSync as _0,readFileSync as Kc}from"fs";import{dirname as Af,extname as T0,join as Mf,relative as F0,resolve as $0}from"path";import{pathToFileURL as A0}from"url";function M0(e){e.transaction(()=>{e.prepare(`
751
706
  DELETE FROM mentions
752
707
  WHERE chunk_id IN (
753
708
  SELECT c.id
@@ -762,12 +717,12 @@ Affected consumer files:`),L.list(e.affectedConsumers,t=>` ${t.file} (${t.cons
762
717
  FROM documents
763
718
  WHERE language = 'vue' OR relative_path LIKE '%.vue'
764
719
  )
765
- `).run()})()}function ym(e,t){return e.prepare(`
720
+ `).run()})()}function Of(e,t){return e.prepare(`
766
721
  SELECT relative_path AS relativePath
767
722
  FROM documents
768
723
  WHERE language = 'vue' OR relative_path LIKE '%.vue'
769
724
  ORDER BY relative_path
770
- `).all().map(r=>tD(t,r.relativePath))}function bm(e,t){let{vueCore:n,ts:r,volarTs:i}=iD(e),{parsed:o,vueOptions:s}=oD(n,r,t),a=gm(t),c=n.createVueLanguagePlugin(r,o.options,s,p=>p),l=sD(n,r,c),u=aD(a,o),{languageServiceHost:m}=i.createLanguageServiceHost(r,r.sys,l,p=>p,u),d=r.createLanguageService(m);return{ts:r,language:l,languageService:d,fileNames:o.fileNames,configDir:a}}function iD(e){let t=Yv(nD(hm(e,"package.json")).href);return{vueCore:ta(t,"@vue/language-core",e),ts:ta(t,"typescript",e),volarTs:ta(t,"@volar/typescript",e)}}function oD(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,gm(n),void 0,n,void 0,e.getAllExtensions(o).map(s=>({extension:s.slice(1),isMixedContent:!0,scriptKind:t.ScriptKind.Deferred}))),vueOptions:o}}function sD(e,t,n){let r={},i=e.createLanguage([n],new Map,o=>{if(!Xv(o))return;let s=na(o,"utf-8");r.current?.scripts.set(o,t.ScriptSnapshot.fromString(s),n.getLanguageId(o)??pD(o))});return r.current=i,i}function aD(e,t){return{getCurrentDirectory:()=>e,getCompilationSettings:()=>t.options,getScriptFileNames:()=>t.fileNames,getProjectReferences:()=>t.projectReferences,getProjectVersion:()=>"0"}}function ta(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 Sm(e,t,n){let r=cD(e);return i=>{let o=Kt(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:lD(c.starts,a.line,2)}}function cD(e){let t=e.prepare(`
725
+ `).all().map(i=>$0(t,i.relativePath))}function jf(e,t){let{vueCore:n,ts:i,volarTs:r}=O0(e),{parsed:o,vueOptions:s}=j0(n,i,t),a=Af(t),c=n.createVueLanguagePlugin(i,o.options,s,p=>p),l=B0(n,i,c),u=V0(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 O0(e){let t=P0(A0(Mf(e,"package.json")).href);return{vueCore:zc(t,"@vue/language-core",e),ts:zc(t,"typescript",e),volarTs:zc(t,"@volar/typescript",e)}}function j0(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,Af(n),void 0,n,void 0,e.getAllExtensions(o).map(s=>({extension:s.slice(1),isMixedContent:!0,scriptKind:t.ScriptKind.Deferred}))),vueOptions:o}}function B0(e,t,n){let i={},r=e.createLanguage([n],new Map,o=>{if(!_0(o))return;let s=Kc(o,"utf-8");i.current?.scripts.set(o,t.ScriptSnapshot.fromString(s),n.getLanguageId(o)??z0(o))});return i.current=r,r}function V0(e,t){return{getCurrentDirectory:()=>e,getCompilationSettings:()=>t.options,getScriptFileNames:()=>t.fileNames,getProjectReferences:()=>t.projectReferences,getProjectVersion:()=>"0"}}function zc(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 Bf(e,t,n){let i=H0(e);return r=>{let o=kn(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:q0(c.starts,a.line,2)}}function H0(e){let t=e.prepare(`
771
726
  SELECT
772
727
  d.relative_path AS relativePath,
773
728
  der.start_line AS startLine,
@@ -776,23 +731,23 @@ Affected consumer files:`),L.list(e.affectedConsumers,t=>` ${t.file} (${t.cons
776
731
  FROM defn_enclosing_ranges der
777
732
  JOIN documents d ON d.id = der.document_id
778
733
  ORDER BY d.relative_path, (der.end_line - der.start_line) DESC
779
- `).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 lD(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 xm(e,t,n){let r=hD(t),i=e.prepare("SELECT id FROM global_symbols WHERE symbol = ?"),o=e.prepare(`
734
+ `).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 q0(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 Vf(e,t,n){let i=Q0(t),r=e.prepare("SELECT id FROM global_symbols WHERE symbol = ?"),o=e.prepare(`
780
735
  INSERT OR IGNORE INTO global_symbols (symbol, display_name, kind, documentation)
781
736
  VALUES (?, ?, ?, ?)
782
- `),s=0,a=new Map;return e.transaction(()=>{for(let l of n){let u=Kt(t,l),m=wm(r.name,r.version,u);o.run(m,"default",7,`Vue component|${u}`);let d=yD(i,r,t,l);d&&(s++,a.set(l,d))}})(),{get(l){return a.get(l)??null},syntheticSymbols:s}}function Cm(e,t,n,r,i){return e.transaction(()=>(rD(e),uD(e,t,n,r),mD(e,i)))()}function uD(e,t,n,r){let i=e.prepare("SELECT id FROM documents WHERE relative_path = ?"),o=e.prepare(`
737
+ `),s=0,a=new Map;return e.transaction(()=>{for(let l of n){let u=kn(t,l),d=Qf(i.name,i.version,u);o.run(d,"default",7,`Vue component|${u}`);let m=X0(r,i,t,l);m&&(s++,a.set(l,m))}})(),{get(l){return a.get(l)??null},syntheticSymbols:s}}function Hf(e,t,n,i,r){return e.transaction(()=>(M0(e),U0(e,t,n,i),W0(e,r)))()}function U0(e,t,n,i){let r=e.prepare("SELECT id FROM documents WHERE relative_path = ?"),o=e.prepare(`
783
738
  INSERT INTO chunks (document_id, chunk_index, start_line, end_line, occurrences)
784
739
  VALUES (?, ?, ?, ?, X'00')
785
740
  `),s=e.prepare(`
786
741
  INSERT OR IGNORE INTO mentions (chunk_id, symbol_id, role)
787
742
  VALUES (?, ?, 1)
788
- `);for(let a of n){let c=r.get(a);if(!c)continue;let l=Kt(t,a),u=i.get(l);if(!u)continue;let m=o.run(u.id,-1,0,0);s.run(Number(m.lastInsertRowid),c)}}function Rm(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(ra(a,e.textSpan.start)!==null)return n.get(e.fileName)}return e.fileName.startsWith(i)?n.get(e.fileName):null}return t(e)}function Im(e){let t=new Set,n=[];for(let r of e){let i=vm(r);t.has(i)||(t.add(i),n.push(r))}return n}function vm(e){return[e.sourceFile,e.sourceLine,e.sourceStartChar,e.sourceEndChar,e.symbolId].join(":")}function mD(e,t){let n=gD(e,[...new Set(t.map(c=>c.sourceFile))]),r=e.prepare(`
743
+ `);for(let a of n){let c=i.get(a);if(!c)continue;let l=kn(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 qf(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(Jc(a,e.textSpan.start)!==null)return n.get(e.fileName)}return e.fileName.startsWith(r)?n.get(e.fileName):null}return t(e)}function Uf(e){let t=new Set,n=[];for(let i of e){let r=Wf(i);t.has(r)||(t.add(r),n.push(i))}return n}function Wf(e){return[e.sourceFile,e.sourceLine,e.sourceStartChar,e.sourceEndChar,e.symbolId].join(":")}function W0(e,t){let n=J0(e,[...new Set(t.map(c=>c.sourceFile))]),i=e.prepare(`
789
744
  INSERT INTO chunks (document_id, chunk_index, start_line, end_line, occurrences)
790
745
  VALUES (?, ?, ?, ?, X'00')
791
- `),i=e.prepare(`
746
+ `),r=e.prepare(`
792
747
  INSERT OR IGNORE INTO mentions (chunk_id, symbol_id, role)
793
748
  VALUES (?, ?, 0)
794
- `),o=new Set,s=0,a=0;for(let c of t){let l=vm(c);if(o.has(l))continue;o.add(l);let u=n.get(c.sourceFile);if(!u)continue;let m=r.run(u,a++,c.sourceLine,c.sourceLine),d=i.run(Number(m.lastInsertRowid),c.symbolId);s+=Number(d.changes)}return s}function*Dm(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 Nm(e,t){for(let[n]of e.toGeneratedLocation(t,r=>!!r.navigation))return n;return null}function ra(e,t){let n=e;for(let[r]of n.toSourceLocation(t,i=>!!i.navigation))return r;return null}function dD(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 _m(e,t){return Kt(e,t).startsWith("node_modules/")}function Kt(e,t){return eD(e,t).replaceAll("\\","/")}function pD(e){switch(Zv(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 Lm(){let e=new Map;return{get(t){if(e.has(t))return e.get(t)??null;try{let n=na(t,"utf-8"),r={text:n,lineStarts:fD(n)};return e.set(t,r),r}catch{return e.set(t,null),null}},positionAt:dD}}function fD(e){let t=[0];for(let n=0;n<e.length;n++)e.charCodeAt(n)===10&&t.push(n+1);return t}function gD(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 hD(e){try{let t=JSON.parse(na(hm(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 yD(e,t,n,r){let i=Kt(n,r),o=wm(t.name,t.version,i);return e.get(o)?.id??null}function wm(e,t,n){let r=n.split("/").map(i=>`\`${i.replaceAll("`","")}\``).join("/");return`scip-vue npm ${e} ${t} ${r}/default.`}function ia(e){bt({projectRoot:e.projectRoot,dbPath:e.dbPath});let t=vD(e.projectRoot,e.tsconfig);if(!SD(t))throw new Error(`Vue tsconfig not found at ${t}`);let n=new bD(e.dbPath);try{let r=ym(n,e.projectRoot),i=ID(RD(e.dbPath),"augment-vue-meta.json"),o=Em(n,e.projectRoot,e.tsconfig),s=DD(i,o,e.onStatus);if(s)return s;let a=ND({db:n,projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,configPath:t,vueFiles:r,onStatus:e.onStatus});return wD(i,Em(n,e.projectRoot,e.tsconfig),a),a}finally{n.close()}}function DD(e,t,n){let r=LD(e,t);return r&&n?.(`Vue references unchanged; reused ${r.resolvedReferences} cached resolved references.`),r}function ND(e){let t=xm(e.db,e.projectRoot,e.vueFiles),n=_D(e,t),r=Im(n.occurrences),i=Cm(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 _D(e,t){if(mm(e.vueFiles))return dm({projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,vueFiles:e.vueFiles});let n=ED({db:e.db,projectRoot:e.projectRoot,configPath:e.configPath,vueSymbolLookup:t});return kD({...n,vueFiles:n.context.fileNames.filter(r=>r.endsWith(".vue"))})}function LD(e,t){try{let n=JSON.parse(xD(e,"utf-8"));return JSON.stringify(n.fingerprint)===JSON.stringify(t)?n.result:null}catch{return null}}function wD(e,t,n){CD(e,JSON.stringify({updatedAt:new Date().toISOString(),fingerprint:t,result:n},null,2)+`
795
- `)}function Em(e,t,n){let r=e.prepare(`
749
+ `),o=new Set,s=0,a=0;for(let c of t){let l=Wf(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*Gf(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 zf(e,t){for(let[n]of e.toGeneratedLocation(t,i=>!!i.navigation))return n;return null}function Jc(e,t){let n=e;for(let[i]of n.toSourceLocation(t,r=>!!r.navigation))return i;return null}function G0(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 Kf(e,t){return kn(e,t).startsWith("node_modules/")}function kn(e,t){return F0(e,t).replaceAll("\\","/")}function z0(e){switch(T0(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 Jf(){let e=new Map;return{get(t){if(e.has(t))return e.get(t)??null;try{let n=Kc(t,"utf-8"),i={text:n,lineStarts:K0(n)};return e.set(t,i),i}catch{return e.set(t,null),null}},positionAt:G0}}function K0(e){let t=[0];for(let n=0;n<e.length;n++)e.charCodeAt(n)===10&&t.push(n+1);return t}function J0(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 Q0(e){try{let t=JSON.parse(Kc(Mf(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 X0(e,t,n,i){let r=kn(n,i),o=Qf(t.name,t.version,r);return e.get(o)?.id??null}function Qf(e,t,n){let i=n.split("/").map(r=>`\`${r.replaceAll("`","")}\``).join("/");return`scip-vue npm ${e} ${t} ${i}/default.`}function Qc(e){Vt({projectRoot:e.projectRoot,dbPath:e.dbPath});let t=rF(e.projectRoot,e.tsconfig);if(!Z0(t))throw new Error(`Vue tsconfig not found at ${t}`);let n=new Y0(e.dbPath);try{let i=Of(n,e.projectRoot),r=iF(nF(e.dbPath),"augment-vue-meta.json"),o=Xf(n,e.projectRoot,e.tsconfig),s=oF(r,o,e.onStatus);if(s)return s;let a=sF({db:n,projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,configPath:t,vueFiles:i,onStatus:e.onStatus});return lF(r,Xf(n,e.projectRoot,e.tsconfig),a),a}finally{n.close()}}function oF(e,t,n){let i=cF(e,t);return i&&n?.(`Vue references unchanged; reused ${i.resolvedReferences} cached resolved references.`),i}function sF(e){let t=Vf(e.db,e.projectRoot,e.vueFiles),n=aF(e,t),i=Uf(n.occurrences),r=Hf(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 aF(e,t){if(_f(e.vueFiles))return Tf({projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,vueFiles:e.vueFiles});let n=uF({db:e.db,projectRoot:e.projectRoot,configPath:e.configPath,vueSymbolLookup:t});return dF({...n,vueFiles:n.context.fileNames.filter(i=>i.endsWith(".vue"))})}function cF(e,t){try{let n=JSON.parse(eF(e,"utf-8"));return JSON.stringify(n.fingerprint)===JSON.stringify(t)?n.result:null}catch{return null}}function lF(e,t,n){tF(e,JSON.stringify({updatedAt:new Date().toISOString(),fingerprint:t,result:n},null,2)+`
750
+ `)}function Xf(e,t,n){let i=e.prepare(`
796
751
  SELECT
797
752
  (SELECT COUNT(*) FROM documents) AS documents,
798
753
  (SELECT COUNT(*) FROM global_symbols) AS symbols,
@@ -801,120 +756,170 @@ Affected consumer files:`),L.list(e.affectedConsumers,t=>` ${t.file} (${t.cons
801
756
  (SELECT COUNT(*) FROM defn_enclosing_ranges) AS ranges,
802
757
  (SELECT MAX(id) FROM chunks) AS maxChunkId,
803
758
  (SELECT MAX(id) FROM global_symbols) AS maxSymbolId
804
- `).get();return{version:2,tsconfig:n,files:Di(t),db:r}}function ED(e){let t=Lm();return{projectRoot:e.projectRoot,context:bm(e.projectRoot,e.configPath),symbolLookup:Sm(e.db,e.projectRoot,t),vueSymbolLookup:e.vueSymbolLookup,sourceReader:t}}function kD(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=PD(e,i);t.push(...o.occurrences),n+=o.skippedReferences}return{occurrences:t,skippedReferences:n}}function PD(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=Kt(e.projectRoot,t.fileName),a=[...Dm(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:AD(a),processedStarts:new Set};return FD({...e,fileName:t.fileName,sourceInfo:i,sourceFile:s,map:o,tokenContext:c})}function FD(e){let t=[],n=0;for(let r of e.tokenContext.tokens){if(e.tokenContext.processedStarts.has(r.start))continue;let i=Nm(e.map,r.start);if(i===null)continue;let s=(e.context.languageService.getDefinitionAtPosition(e.fileName,i+1)??[]).find(c=>!_m(e.projectRoot,c.fileName));if(!s){n++;continue}let a=Rm(s,e.symbolLookup,e.vueSymbolLookup,e.context,e.projectRoot);if(a===null){n++;continue}km(t,e.sourceReader,e.sourceInfo,e.sourceFile,r,a),e.tokenContext.processedStarts.add(r.start),TD(t,e,r,i,a)}return{occurrences:t,skippedReferences:n}}function TD(e,t,n,r,i){if(!((t.tokenContext.tokenTextCounts.get(n.text)??0)<=1))for(let o of MD(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&&(km(e,t.sourceReader,t.sourceInfo,t.sourceFile,s,i),t.tokenContext.processedStarts.add(o))}}function km(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 AD(e){let t=new Map;for(let n of e)t.set(n.text,(t.get(n.text)??0)+1);return t}function MD(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=OD(r,l.textSpan.start,o,i.text);u!==null&&a.push(u)}return a}function OD(e,t,n,r){let i=n.get(t);if(i?.text===r)return i.start;let o=ra(e,t);if(o===null)return null;let s=n.get(o);return s?.text===r?s.start:null}async function Tm(e){let{projectRoot:t,maxHeapMb:n=8192,onStatus:r=console.log,skipAutoInstall:i=!1}=e,o=WD(e),s=Date.now();Pm(Qt(o.outputScip),{recursive:!0}),Pm(Qt(o.outputDb),{recursive:!0});let a=e.languages??zt(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=sN(t,a,{pnpmWorkspaces:e.pnpmWorkspaces}),l=iN(rt(Qt(o.outputDb),"index.lock")),u=null;try{let m=UD({opts:e,paths:o,languages:a,fingerprint:c,start:s,onStatus:r});if(m)return m;QD(i,r);let d=GD(o);return u=d.runDir,await JD({opts:e,languages:a,projectRoot:t,paths:o,tempPaths:d,fingerprint:c,start:s,maxHeapMb:n,skipAutoInstall:i,onStatus:r})}finally{u&&ca(u,{recursive:!0,force:!0}),l()}}function WD(e){let t=e.outputScip??rt(e.projectRoot,"index.scip"),n=e.outputDb??rt(e.projectRoot,"index.db");return{outputScip:t,outputDb:n,metaPath:rt(Qt(n),"meta.json")}}function UD(e){if(e.opts.skipIfUnchanged===!1||!sa(e.paths.outputScip)||!sa(e.paths.outputDb)||!aN(e.paths.metaPath,e.fingerprint))return null;bt({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 GD(e){let t=BD(rt(Qt(e.outputDb),"reindex-"));return{runDir:t,tempOutputScip:rt(t,Ei(e.outputScip)),tempOutputDb:rt(t,Ei(e.outputDb)),tempMetaPath:rt(t,Ei(e.metaPath))}}async function JD(e){let t={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},{indexedOutputs:n,skippedLanguages:r}=await zD(e,t);KD(e,t,n,r);let i=Date.now()-e.start;return e.onStatus(`Done in ${(i/1e3).toFixed(1)}s`),{languages:n.map(o=>o.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:i,reused:!1,skipped:r}}async function zD(e,t){let{preparedRuns:n,skippedLanguages:r}=YD({languages:e.languages,tempOutputScip:e.tempPaths.tempOutputScip,projectRoot:e.projectRoot,env:t,skipAutoInstall:e.skipAutoInstall,pnpmWorkspaces:e.opts.pnpmWorkspaces,onStatus:e.onStatus}),i=await nm(n,e.projectRoot,e.onStatus,e.opts.indexerConcurrency),{indexedOutputs:o}=ZD(i,r);return eN(o,r,e.languages,e.opts.allowPartial,e.onStatus),{indexedOutputs:o,skippedLanguages:r}}function KD(e,t,n,r){tN(n,e.tempPaths.tempOutputScip,e.onStatus),nN(e.tempPaths.tempOutputScip,e.tempPaths.tempOutputDb,t,e.onStatus),bt({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),cN(e.tempPaths.tempMetaPath,{version:2,status:r.length===0?"complete":"partial",updatedAt:new Date().toISOString(),fingerprint:e.fingerprint,requestedLanguages:e.languages,indexedLanguages:n.map(i=>i.language),skipped:[...r]}),oN({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 QD(e,t){if(!Le("scip")){if(e)throw new Error(`The scip CLI is required but not found on PATH.
805
- Install from: https://github.com/sourcegraph/scip/releases`);if(t("scip CLI not found on PATH. Attempting auto-install..."),!ju(t))throw new Error(`The scip CLI is required but could not be installed.
806
- Install manually from: https://github.com/sourcegraph/scip/releases`)}}function YD(e){let t=[],n=[],r=e.languages.map((i,o)=>({language:i,scipPath:e.languages.length>1?rN(e.tempOutputScip,i,o):e.tempOutputScip}));for(let{language:i,scipPath:o}of r){let s=XD({...e,language:i,scipPath:o});"skipped"in s?n.push(s.skipped):t.push(s.prepared)}return{preparedRuns:t,skippedLanguages:n}}function XD(e){let t=vi(e.language),n=Li(t),r=Xs(t,e.projectRoot);if(!r&&!im(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...`),!cm(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??_n(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});return{prepared:{language:e.language,scipPath:e.scipPath,config:t,resolvedBinary:i,binary:o,args:s,env:sm(t,e.env,i)}}}function ZD(e,t){let n=[];for(let r of e)r.skipped?t.push(r.skipped):n.push({language:r.language,scipPath:r.scipPath});return{indexedOutputs:n}}function eN(e,t,n,r,i){if(e.length===0){let o=t.map(s=>` - ${s.language}: ${s.reason}`).join(`
759
+ `).get();return{version:2,tsconfig:n,files:wn(t),db:i}}function uF(e){let t=Jf();return{projectRoot:e.projectRoot,context:jf(e.projectRoot,e.configPath),symbolLookup:Bf(e.db,e.projectRoot,t),vueSymbolLookup:e.vueSymbolLookup,sourceReader:t}}function dF(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=mF(e,r);t.push(...o.occurrences),n+=o.skippedReferences}return{occurrences:t,skippedReferences:n}}function mF(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=kn(e.projectRoot,t.fileName),a=[...Gf(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:gF(a),processedStarts:new Set};return pF({...e,fileName:t.fileName,sourceInfo:r,sourceFile:s,map:o,tokenContext:c})}function pF(e){let t=[],n=0;for(let i of e.tokenContext.tokens){if(e.tokenContext.processedStarts.has(i.start))continue;let r=zf(e.map,i.start);if(r===null)continue;let s=(e.context.languageService.getDefinitionAtPosition(e.fileName,r+1)??[]).find(c=>!Kf(e.projectRoot,c.fileName));if(!s){n++;continue}let a=qf(s,e.symbolLookup,e.vueSymbolLookup,e.context,e.projectRoot);if(a===null){n++;continue}Yf(t,e.sourceReader,e.sourceInfo,e.sourceFile,i,a),e.tokenContext.processedStarts.add(i.start),fF(t,e,i,r,a)}return{occurrences:t,skippedReferences:n}}function fF(e,t,n,i,r){if(!((t.tokenContext.tokenTextCounts.get(n.text)??0)<=1))for(let o of hF(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&&(Yf(e,t.sourceReader,t.sourceInfo,t.sourceFile,s,r),t.tokenContext.processedStarts.add(o))}}function Yf(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 gF(e){let t=new Map;for(let n of e)t.set(n.text,(t.get(n.text)??0)+1);return t}function hF(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=bF(i,l.textSpan.start,o,r.text);u!==null&&a.push(u)}return a}function bF(e,t,n,i){let r=n.get(t);if(r?.text===i)return r.start;let o=Jc(e,t);if(o===null)return null;let s=n.get(o);return s?.text===i?s.start:null}async function tg(e){let{projectRoot:t,maxHeapMb:n=8192,onStatus:i=console.log,skipAutoInstall:r=!1}=e,o=LF(e),s=Date.now();Yc(Dt(o.outputScip),{recursive:!0}),Yc(Dt(o.outputDb),{recursive:!0});let a=e.languages??kt(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=HF(t,a,{pnpmWorkspaces:e.pnpmWorkspaces}),l=BF(mt(Dt(o.outputDb),"index.lock")),u=null;try{let d=wF({opts:e,paths:o,languages:a,fingerprint:c,start:s,onStatus:i});if(d)return d;_F(r,i);let m=kF(o);return u=m.runDir,await DF({opts:e,languages:a,projectRoot:t,paths:o,tempPaths:m,fingerprint:c,start:s,maxHeapMb:n,skipAutoInstall:r,onStatus:i})}finally{u&&el(u,{recursive:!0,force:!0}),l()}}function LF(e){let t=e.outputScip??mt(e.projectRoot,"index.scip"),n=e.outputDb??mt(e.projectRoot,"index.db");return{outputScip:t,outputDb:n,metaPath:mt(Dt(n),"meta.json")}}function wF(e){if(e.opts.skipIfUnchanged===!1||!zo(e.paths.outputScip)||!zo(e.paths.outputDb)||!qF(e.paths.metaPath,e.fingerprint))return null;Vt({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 kF(e){let t=CF(mt(Dt(e.outputDb),"reindex-"));return{runDir:t,tempOutputScip:mt(t,Go(e.outputScip)),tempOutputDb:mt(t,Go(e.outputDb)),tempMetaPath:mt(t,Go(e.metaPath))}}async function DF(e){let t={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},{indexedOutputs:n,skippedLanguages:i,reusedLanguages:r}=await IF(e,t);r.length>0&&e.onStatus(`Reused ${r.length} cached language shard(s): ${r.join(", ")}`),NF(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 IF(e,t){let n=EF(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}=TF({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 Rf(r,e.projectRoot,e.onStatus,e.opts.indexerConcurrency),{indexedOutputs:a}=$F(s,o),c=[...n,...a];return AF(c,o,e.languages,e.opts.allowPartial,e.onStatus),{indexedOutputs:c,skippedLanguages:o,reusedLanguages:[...i]}}function NF(e,t,n,i){PF(e.paths.outputDb,n),MF(n,e.tempPaths.tempOutputScip,e.onStatus),OF(e.tempPaths.tempOutputScip,e.tempPaths.tempOutputDb,t,e.onStatus),Vt({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),UF(e.tempPaths.tempMetaPath,{version:3,status:i.length===0?"complete":"partial",updatedAt:new Date().toISOString(),fingerprint:e.fingerprint,languageFingerprints:ng(e.projectRoot,e.languages,{pnpmWorkspaces:e.opts.pnpmWorkspaces}),requestedLanguages:e.languages,indexedLanguages:n.map(r=>r.language),skipped:[...i]}),VF({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 EF(e){let t;try{t=JSON.parse(Zf(e.paths.metaPath,"utf-8"))}catch{return[]}if(t.version!==3||!t.languageFingerprints)return[];let n=[],i=ng(e.projectRoot,e.languages,{pnpmWorkspaces:e.opts.pnpmWorkspaces});for(let r of e.languages){let o=ig(e.paths.outputDb,r);zo(o)&&di(t.languageFingerprints[r])===di(i[r])&&n.push({language:r,scipPath:o})}return n}function PF(e,t){for(let n of t){let i=ig(e,n.language);Yc(Dt(i),{recursive:!0}),n.scipPath!==i&&xF(n.scipPath,i)}}function _F(e,t){if(!Ue("scip")){if(e)throw new Error(`The scip CLI is required but not found on PATH.
760
+ Install from: https://github.com/sourcegraph/scip/releases`);if(t("scip CLI not found on PATH. Attempting auto-install..."),!of(t))throw new Error(`The scip CLI is required but could not be installed.
761
+ Install manually from: https://github.com/sourcegraph/scip/releases`)}}function TF(e){let t=[],n=[],i=e.languages.map((r,o)=>({language:r,scipPath:e.languages.length>1?jF(e.tempOutputScip,r,o):e.tempOutputScip}));for(let{language:r,scipPath:o}of i){let s=FF({...e,language:r,scipPath:o});"skipped"in s?n.push(s.skipped):t.push(s.prepared)}return{preparedRuns:t,skippedLanguages:n}}function FF(e){let t=lr(e.language),n=Wo(t),i=Uc(t,e.projectRoot);if(!i&&!wf(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...`),!Nf(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??ui(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:Df(t,e.env,r)}}}function $F(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 AF(e,t,n,i,r){if(e.length===0){let o=t.map(s=>` - ${s.language}: ${s.reason}`).join(`
807
762
  `);throw new Error(`No language indexers ran successfully. Install at least one indexer for the languages in this project.
808
- `+o)}if(t.length!==0&&(i(`Indexed ${e.length} of ${n.length} languages; skipped ${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.
763
+ `+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.
809
764
  `+t.map(o=>` - ${o.language}: ${o.reason}`).join(`
810
- `))}function tN(e,t,n){e.length>1?(n(`Merging ${e.length} language indexes...`),Ku(e.map(r=>r.scipPath),t)):e[0].scipPath!==t&&aa(e[0].scipPath,t)}function nN(e,t,n,r){if(r("Converting to SQLite..."),!sa(e))throw new Error(`SCIP index not found at ${e} after indexing`);try{let i=em(e);i.removedDefinitionOccurrences>0&&r(`Sanitized ${i.removedDefinitionOccurrences} invalid definition occurrences across ${i.touchedDocuments} documents before SQLite conversion.`),$D("scip",["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 rN(e,t,n){let r=VD(e)||".scip",i=Ei(e,r);return rt(Qt(e),`${i}.${n+1}.${t}${r}`)}function iN(e){let t;try{t=HD(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 ${Qt(e)}.`,{cause:n}):n}return Fm(t,JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()})+`
811
- `),()=>{try{jD(t)}finally{ca(e,{force:!0})}}}function oN(e){oa(e.tempOutputScip,e.outputScip),oa(e.tempOutputDb,e.outputDb),oa(e.tempMetaPath,e.metaPath)}function oa(e,t){ca(`${t}.tmp-replace`,{force:!0}),aa(e,`${t}.tmp-replace`),aa(`${t}.tmp-replace`,t)}function sN(e,t,n){return{version:1,languages:[...t].sort(),pnpmWorkspaces:n.pnpmWorkspaces===!0,files:Di(e)}}function aN(e,t){try{let n=JSON.parse(qD(e,"utf-8"));return n.version===2&&n.status==="complete"&&wi(n.fingerprint)===wi(t)&&wi([...n.indexedLanguages??[]].sort())===wi(t.languages)}catch{return!1}}function cN(e,t){Fm(e,`${JSON.stringify(t,null,2)}
812
- `)}function wi(e){return JSON.stringify(e)}import{createRequire as lN}from"module";var uN=lN(import.meta.url);function Am(e,t=[]){let n=mN(),r=So(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 mN(){try{return uN.resolve("ts-morph"),!0}catch{return!1}}function la(e,t){let n=t.languages??zt(e),r=n.map(o=>{let s=am(vi(o),e);return{...s,language:o,resolvedBinary:s.resolvedBinary??void 0}}),i=n.includes("typescript")?{language:"typescript",...Am(e,t.semantic?.typescript?.tsconfigs)}:void 0;return{languages:n,indexers:r,semantic:i}}import{watch as dN}from"fs";import{existsSync as Mm,renameSync as Om}from"fs";import{join as pN,relative as fN}from"path";import{fork as gN}from"child_process";import hN from"ignore";var ki=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=Du(t.config),this.indexPaths=Dn(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=In(t.projectRoot),this.extraIgnore=hN(),this.watchConfig.ignore.length>0&&this.extraIgnore.add(this.watchConfig.ignore)}start(){this.stopped=!1,this.setStatus({state:"idle"});try{let t=dN(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.setStatus({state:"idle"})}handleFileChange(t){let n=fN(this.projectRoot,pN(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 r=Date.now()+this.watchConfig.debounceMs;this.setStatus({state:"waiting",changedFiles:this.changedFiles,reindexAt:r}),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 r=this.watchConfig.cooldownMs-t;this.dirty=!0;let i=Date.now()+r;this.setStatus({state:"cooldown",until:i,dirty:!0}),this.cooldownTimer=setTimeout(()=>{this.cooldownTimer=null,this.dirty&&!this.stopped&&(this.dirty=!1,this.triggerReindex())},r);return}this.reindexInFlight=!0,this.dirty=!1,this.changedFiles=0;let n=Date.now();this.setStatus({state:"indexing",startedAt:n}),this.runReindex().then(r=>{if(this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onReindexComplete(r),this.dirty&&!this.stopped){let i=Date.now()+this.watchConfig.cooldownMs;this.setStatus({state:"cooldown",until:i,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(r=>{this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onError(r instanceof Error?r:new Error(String(r))),this.setStatus({state:"idle"})})}runReindex(){return new Promise((t,n)=>{let r=Date.now(),i=this.indexPaths.dbPath+".tmp",o=yN(this.indexPaths.indexPath),s=gN(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:i,SCIP_REINDEX_LANGUAGES:this.languages?.join(",")??"",SCIP_REINDEX_PNPM_WORKSPACES:this.pnpmWorkspaces?"1":""},stdio:"pipe"});s.on("exit",a=>{if(a===0)try{Mm(i)&&Om(i,this.indexPaths.dbPath),Mm(o)&&Om(o,this.indexPaths.indexPath),t(Date.now()-r)}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 yN(e){return e.endsWith(".scip")?e.slice(0,-5)+".tmp.scip":e+".tmp.scip"}import{chmodSync as bN,existsSync as Pi,readFileSync as Fi,writeFileSync as Bm}from"fs";import{join as hr}from"path";var gr="<!-- scip-query:agent-setup:begin -->",ua="<!-- scip-query:agent-setup:end -->",$m="# scip-query:agent-setup";function Hm(){if(process.stdin.isTTY)return"";try{return Fi(0,"utf-8")}catch{return""}}function qm(e){if(!e.trim())return!1;try{return JSON.parse(e).stop_hook_active===!0}catch{return!1}}function Vm(e){let t=[`scip-query diff-gate found ${e.findings.length} issue(s) in this diff \u2014 fix or knowingly accept them before finishing:`];for(let n of e.findings)t.push(`- [${n.check}] ${n.message}`),t.push(` -> ${n.remediation}`);return t.join(`
813
- `)}function Wm(e,t={}){let n={written:[],unchanged:[],skipped:[]};return SN(e,n),t.gitHook&&xN(e,n),n}function SN(e,t){let n=[gr,"## 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.",ua].join(`
814
- `);jm(e,"AGENTS.md",n,t);let r=Pi(hr(e,"CLAUDE.md"))?Fi(hr(e,"CLAUDE.md"),"utf-8"):"";if(r.includes("@AGENTS.md")&&!r.includes(gr)){t.unchanged.push("CLAUDE.md");return}let i=[gr,"@AGENTS.md",ua].join(`
815
- `);jm(e,"CLAUDE.md",i,t)}function jm(e,t,n,r){let i=hr(e,t),o=Pi(i)?Fi(i,"utf-8"):"",s;if(o.includes(gr)){let a=new RegExp(`${gr}[\\s\\S]*?${ua}`);s=o.replace(a,n)}else s=o.length>0?`${o.replace(/\n*$/,`
765
+ `))}function MF(e,t,n){e.length>1?(n(`Merging ${e.length} language indexes...`),gf(e.map(i=>i.scipPath),t)):e[0].scipPath!==t&&Zc(e[0].scipPath,t)}function OF(e,t,n,i){if(i("Converting to SQLite..."),!zo(e))throw new Error(`SCIP index not found at ${e} after indexing`);try{let r=Cf(e);r.removedDefinitionOccurrences>0&&i(`Sanitized ${r.removedDefinitionOccurrences} invalid definition occurrences across ${r.touchedDocuments} documents before SQLite conversion.`),yF("scip",["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 jF(e,t,n){let i=RF(e)||".scip",r=Go(e,i);return mt(Dt(e),`${r}.${n+1}.${t}${i}`)}function BF(e){let t;try{t=vF(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 ${Dt(e)}.`,{cause:n}):n}return eg(t,JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()})+`
766
+ `),()=>{try{SF(t)}finally{el(e,{force:!0})}}}function VF(e){Xc(e.tempOutputScip,e.outputScip),Xc(e.tempOutputDb,e.outputDb),Xc(e.tempMetaPath,e.metaPath)}function Xc(e,t){el(`${t}.tmp-replace`,{force:!0}),Zc(e,`${t}.tmp-replace`),Zc(`${t}.tmp-replace`,t)}function HF(e,t,n){return{version:1,languages:[...t].sort(),pnpmWorkspaces:n.pnpmWorkspaces===!0,files:wn(e)}}function ng(e,t,n){return Object.fromEntries(t.map(i=>{let r=lr(i).markerFiles;return[i,{version:1,languages:[i],pnpmWorkspaces:i==="typescript"&&n.pnpmWorkspaces===!0,files:wn(e,{language:i,markerFiles:r})}]}))}function ig(e,t){return mt(Dt(e),"language-indexes",`${t}.scip`)}function qF(e,t){try{let n=JSON.parse(Zf(e,"utf-8"));return(n.version===2||n.version===3)&&n.status==="complete"&&di(n.fingerprint)===di(t)&&di([...n.indexedLanguages??[]].sort())===di(t.languages)}catch{return!1}}function UF(e,t){eg(e,`${JSON.stringify(t,null,2)}
767
+ `)}function di(e){return JSON.stringify(e)}import{existsSync as rg,readFileSync as WF}from"fs";function og(e,t,n){let i=new Date().toISOString();if(!rg(n.dbPath))return{state:"missing",checkedAt:i,metaPath:n.metaPath,reason:"No SQLite index database exists.",remedy:"Run: scip-query reindex"};if(!rg(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(WF(n.metaPath,"utf-8")),o=t.languages??kt(e),s=GF(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 GF(e,t,n){return{version:1,languages:[...t].sort(),pnpmWorkspaces:n.indexer?.typescript?.pnpmWorkspaces===!0,files:wn(e)}}import{execFileSync as m$}from"child_process";import{createRequire as zF}from"module";var KF=zF(import.meta.url);function sg(e,t=[]){let n=JF(),i=js(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 JF(){try{return KF.resolve("ts-morph"),!0}catch{return!1}}import{execFileSync as mi,spawnSync as ug}from"child_process";import{existsSync as It,mkdtempSync as dg,readFileSync as QF,readdirSync as XF,rmSync as mg,symlinkSync as YF,writeFileSync as ZF}from"fs";import{tmpdir as pg}from"os";import{join as We}from"path";var e$=3e5,t$=12;function tl(e,t,n={}){let i=nl(e);if(i.length===0)return{checkers:[],uncoveredFiles:[],baselineErrors:0,dirtyOverlap:[],batches:[]};let r=n$(t,i),o=n.timeoutMs??e$,s=o$(e,t),a=dg(We(pg(),"scip-cleanup-verify-")),c=[],l=new Set;try{mi("git",["-C",e,"worktree","add","--detach","--force",a,"HEAD"],{stdio:"ignore"}),s$(e,a);for(let u of i)for(let d of lg(u,a,o).errorKeys)l.add(d);for(let u of t.batches){gg(a,u);let d=[];for(let m of i){let p=lg(m,a,o);d.push(...p.rawErrors.filter(h=>!l.has(fg(h))))}if(d.length===0)c.push({depth:u.depth,status:"verified"});else{c.push({depth:u.depth,status:"failed",errors:d.slice(0,t$)});break}}}finally{try{mi("git",["-C",e,"worktree","remove","--force",a],{stdio:"ignore"})}catch{mg(a,{recursive:!0,force:!0})}}return{checkers:i.map(u=>u.label),uncoveredFiles:r,baselineErrors:l.size,dirtyOverlap:s,batches:c}}function n$(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 fg(e){return e.replace(/\(\d+,\d+\)|:\d+(?::\d+)?/g,"").trim()}var ag=[".ts",".tsx",".mts",".cts",".js",".jsx",".vue"];function nl(e){let t=[];if(It(We(e,"tsconfig.json"))){let n=We(e,"node_modules",".bin","tsc");t.push(It(n)?{label:"tsc --noEmit",binary:n,args:["--noEmit"],coversExtensions:ag}:{label:"npx tsc --noEmit",binary:"npx",args:["tsc","--noEmit"],coversExtensions:ag})}if(It(We(e,"go.mod"))&&t.push({label:"go build ./...",binary:"go",args:["build","./..."],coversExtensions:[".go"]}),["pyproject.toml","setup.py","requirements.txt"].some(n=>It(We(e,n)))){let n=i$();n&&t.push(n)}for(let n of r$(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:We(e,n,"..","target")}});return t}function i$(){return cg("ruff")?{label:"ruff check --select E9,F821,F822",binary:"ruff",args:["check","--quiet","--select","E9,F821,F822","."],coversExtensions:[".py"]}:cg("python3")?{label:"python3 -m compileall (syntax only)",binary:"python3",args:["-m","compileall","-q","."],coversExtensions:[".py"]}:null}function cg(e){try{return ug(e,["--version"],{stdio:"ignore",timeout:1e4}).status===0}catch{return!1}}function r$(e){let t=[];if(It(We(e,"Cargo.toml")))return t.push("Cargo.toml"),t;let n;try{n=XF(e)}catch{return t}for(let i of n)i==="node_modules"||i.startsWith(".")||It(We(e,i,"Cargo.toml"))&&t.push(`${i}/Cargo.toml`);return t}function o$(e,t){let n;try{n=mi("git",["-C",e,"status","--porcelain"],{encoding:"utf-8"})}catch{return[]}let i=new Set(n.split(`
768
+ `).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 s$(e,t){for(let n of["node_modules"]){let i=We(e,n),r=We(t,n);if(It(i)&&!It(r))try{YF(i,r,"junction")}catch{}}}function gg(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=We(e,i);It(o)&&ZF(o,a$(QF(o,"utf-8"),r,{rust:i.endsWith(".rs")}))}}function il(e,t){for(let n of t)gg(e,n)}function hg(e,t){let n=dg(We(pg(),"scip-cleanup-patch-"));try{return mi("git",["-C",e,"worktree","add","--detach","--force",n,"HEAD"],{stdio:"ignore"}),il(n,t),mi("git",["-C",n,"diff","--binary"],{encoding:"utf-8",maxBuffer:32*1024*1024})}finally{try{mi("git",["-C",e,"worktree","remove","--force",n],{stdio:"ignore"})}catch{mg(n,{recursive:!0,force:!0})}}}function rl(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 ol(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 a$(e,t,n={}){let i=e.split(`
769
+ `),r=(n.rust===!0?c$(e):Yt(e)).split(`
770
+ `),o=new Set;for(let s of t){let a=l$(i,s.start),c=d$(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(`
771
+ `)}function c$(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 l$(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 u$=200;function d$(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>u$)break}return n}function lg(e,t,n){let i=ug(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??""}
772
+ ${i.stderr??""}`.split(`
773
+ `).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(fg))}}var bg={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"]},p$={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 Ko(e,t){let n=t.languages??kt(e),i=n.map(s=>{let a=If(lr(s),e);return{...a,language:s,resolvedBinary:a.resolvedBinary??void 0}}),r=n.includes("typescript")?{language:"typescript",...sg(e,t.semantic?.typescript?.tsconfigs)}:void 0,o=nl(e).map(s=>({label:s.label,coversExtensions:s.coversExtensions}));return{languages:n,indexers:i,semantic:r,checkers:o,gitAvailable:b$(e)}}function sl(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=>f$(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 f$(e,t){let n=e.indexers.find(a=>a.language===t),i=n?.runnable?"available":"unavailable",r=p$[t],o=t==="typescript"?g$(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=h$(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 ${bg[t].join(", ")} files.`}}}function g$(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 h$(e,t){let n=new Set(bg[t]);return e.checkers.filter(i=>i.coversExtensions.some(r=>n.has(r)))}function b$(e){try{return m$("git",["rev-parse","--is-inside-work-tree"],{cwd:e,stdio:"ignore",timeout:1e4}),!0}catch{return!1}}import{watch as y$}from"fs";import{existsSync as yg,renameSync as Sg}from"fs";import{join as S$,relative as x$}from"path";import{fork as C$}from"child_process";import v$ from"ignore";var Jo=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=qp(t.config),this.indexPaths=ai(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=si(t.projectRoot),this.extraIgnore=v$(),this.watchConfig.ignore.length>0&&this.extraIgnore.add(this.watchConfig.ignore)}start(){this.stopped=!1,this.setStatus({state:"idle"});try{let t=y$(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=x$(this.projectRoot,S$(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=R$(this.indexPaths.indexPath),s=C$(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)&&Sg(r,this.indexPaths.dbPath),yg(o)&&Sg(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 R$(e){return e.endsWith(".scip")?e.slice(0,-5)+".tmp.scip":e+".tmp.scip"}import{chmodSync as L$,existsSync as Qo,readFileSync as Xo,writeFileSync as vg}from"fs";import{join as dr}from"path";var ur="<!-- scip-query:agent-setup:begin -->",al="<!-- scip-query:agent-setup:end -->",xg="# scip-query:agent-setup";function Rg(){if(process.stdin.isTTY)return"";try{return Xo(0,"utf-8")}catch{return""}}function Lg(e){if(!e.trim())return!1;try{return JSON.parse(e).stop_hook_active===!0}catch{return!1}}function wg(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(`
774
+ `)}function kg(e,t={}){let n={written:[],unchanged:[],skipped:[]};return w$(e,n),t.gitHook&&k$(e,n),n}function w$(e,t){let n=[ur,"## 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.",al].join(`
775
+ `);Cg(e,"AGENTS.md",n,t);let i=Qo(dr(e,"CLAUDE.md"))?Xo(dr(e,"CLAUDE.md"),"utf-8"):"";if(i.includes("@AGENTS.md")&&!i.includes(ur)){t.unchanged.push("CLAUDE.md");return}let r=[ur,"@AGENTS.md",al].join(`
776
+ `);Cg(e,"CLAUDE.md",r,t)}function Cg(e,t,n,i){let r=dr(e,t),o=Qo(r)?Xo(r,"utf-8"):"",s;if(o.includes(ur)){let a=new RegExp(`${ur}[\\s\\S]*?${al}`);s=o.replace(a,n)}else s=o.length>0?`${o.replace(/\n*$/,`
816
777
 
817
778
  `)}${n}
818
779
  `:`${n}
819
- `;s===o?r.unchanged.push(t):(Bm(i,s),r.written.push(t))}function xN(e,t){let n=hr(e,".git","hooks");if(!Pi(n)){t.skipped.push({target:".git/hooks/pre-commit",reason:"no .git/hooks directory (not a git repository?)"});return}let r=hr(n,"pre-commit"),i=["#!/bin/sh",$m,"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(`
820
- `);if(Pi(r)){let o=Fi(r,"utf-8");if(o.includes($m)){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}}Bm(r,i),bN(r,493),t.written.push(".git/hooks/pre-commit")}function V(e){return(...t)=>{let{args:n,opts:r}=CN(t);nt(i=>e({db:i,args:n,opts:r}))}}function ee(e,t){return V(n=>{let r=Pu(n.db,e,j(n.opts,"full"));t({...n,budget:r})})}function Um(e){return V(t=>Ln(t,e,{kind:"list"}))}function Gm(e){return V(t=>Ln(t,e,{kind:"table",headers:e.headers,dashWidths:e.dashWidths}))}function Jm(e){return V(t=>Ln(t,e,{kind:"grouped",key:e.key}))}function Yt(e){return V(t=>ma(t,e))}function zm(e){return Yt({query:e.query,emptyMessage:e.emptyMessage,heuristicLabel:e.heuristicLabel,before:e.before,render:(t,n)=>L.sectionedReport(e.sections(t,n)),after:e.after})}function yr(e,t){return ee(e,n=>ma(n,t))}function Km(e,t){return yr(e,{query:t.query,emptyMessage:t.emptyMessage,heuristicLabel:t.heuristicLabel,before:t.before,render:(n,r)=>L.sectionedReport(t.sections(n,r)),after:t.after})}function it(e,t){return ee(e,n=>Ln(n,t,{kind:"list"}))}function Ti(e,t){return ee(e,n=>Ln(n,t,{kind:"table",headers:t.headers,dashWidths:t.dashWidths}))}function Ai(e,t){return ee(e,n=>Ln(n,t,{kind:"grouped",key:t.key}))}function O(e,t){return String(e[t])}function Ue(e,t){let n=e[t];return typeof n=="string"?n:void 0}function k(e,t){let n=e[t];return typeof n=="string"?n:void 0}function we(e,t){let n=e[t];return typeof n=="number"?n:void 0}function j(e,t){return!!e[t]}function Qm(e,t){let n=e[t];return Array.isArray(n)&&n.every(r=>typeof r=="string")?n:[]}function C(e,t,n){return we(e,t)??n}function Ln(e,t,n){ma(e,{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"?L.list(r,o=>t.format(o,i)):n.kind==="table"?L.table(n.headers,r.map(o=>t.format(o,i)),n.dashWidths):L.groupedByFile(r,o=>t.format(o,i),n.key?o=>n.key(o,i):void 0)},after:t.after})}function ma(e,t){let n=t.query(e),r=t.emptyMessage?.(n,e);if(r){L.empty(r);return}t.heuristicLabel&&pr(t.heuristicLabel),t.before?.(n,e),t.render(n,e),t.after?.(n,e)}function CN(e){if(e.length===0)return{args:[],opts:{}};let t=e[e.length-1];return{args:e.slice(0,-1),opts:Ge(t)}}function Ge(e){if(!e||typeof e!="object")return{};let t=e;if(typeof t.opts=="function"){let n=t.opts();return n&&typeof n=="object"?n:{}}return e}var RN=new Set(["typescript","javascript","java","scala","kotlin","rust","python","ruby","go","cpp","c","csharp","vb","dart","php"]);function IN(e){return e.filter(t=>RN.has(t))}async function Xm(e){let t=Ge(e),n=Oe(),r=vn(n),i=Dn(n,r);try{let o=IN(Qm(t,"language")),s=await Tm({projectRoot:n,languages:o.length>0?o:r.languages,outputScip:i.indexPath,outputDb:i.dbPath,pnpmWorkspaces:j(t,"pnpmWorkspaces")||r.indexer?.typescript?.pnpmWorkspaces,skipIfUnchanged:!j(t,"force"),allowPartial:j(t,"allowPartial"),indexerConcurrency:we(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 Zm(){let e=Oe(),t=Ps(e);try{let n=bt({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 ed(e){let t=Ge(e),n=Oe(),r=Ps(n);try{let i=ia({projectRoot:n,dbPath:r,tsconfig:k(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 td(e){let t=Ge(e);nt(n=>{let r=JSON.parse(process.env.SCIP_QUERY_DIFF_IMPACT_FILES??"[]"),i=yt(n,{base:k(t,"base")}),o=ai(n,r,i.changedFiles);console.log(JSON.stringify(o))})}function nd(e){let t=Ge(e);try{Mu(Au({base:k(t,"base")}))}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}function rd(e,t){let n=Ge(t);nt(r=>{dr.includes(e)||(console.error(`error: Unknown health phase: ${e}`),process.exit(1));let i=Ss(r,e,{scope:k(n,"scope"),full:j(n,"full")});console.log(JSON.stringify(i))})}function id(e){let t=Ge(e);if(j(t,"writeBaseline")||j(t,"baseline")){vN(t);return}try{let n=Fu({scope:k(t,"scope"),full:j(t,"full"),json:j(t,"json")});Tu(n,j(t,"json"))}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}function vN(e){let t=k(e,"scope");nt(n=>{if(j(e,"writeBaseline")){let i=fs(n,{scope:t});console.log(`Baseline written to ${i.path} (${i.findingCount} finding(s)).`);return}let r=sr(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 od(){let e=Hu(),t=e.installed.length+e.alreadyLinked.length;console.log(`
821
- ${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 sd(){let e=!1;$s()?console.log("scip CLI: installed"):(js(),e=!0);let t=Oe(),n=vn(t),r=la(t,n);if(r.languages.length===0){console.log(`
780
+ `;s===o?i.unchanged.push(t):(vg(r,s),i.written.push(t))}function k$(e,t){let n=dr(e,".git","hooks");if(!Qo(n)){t.skipped.push({target:".git/hooks/pre-commit",reason:"no .git/hooks directory (not a git repository?)"});return}let i=dr(n,"pre-commit"),r=["#!/bin/sh",xg,"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(`
781
+ `);if(Qo(i)){let o=Xo(i,"utf-8");if(o.includes(xg)){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}}vg(i,r),L$(i,493),t.written.push(".git/hooks/pre-commit")}import{existsSync as D$,mkdirSync as I$,writeFileSync as N$}from"fs";import{dirname as E$,join as P$}from"path";function Dg(e,t={}){let n=P$(e,".github","workflows","scip-query.yml"),i=_$();return D$(n)&&!t.force?{path:n,written:!1,skipped:!0,content:i,reason:"Workflow already exists. Re-run with --force to overwrite."}:(t.dryRun||(I$(E$(n),{recursive:!0}),N$(n,i)),{path:n,written:!t.dryRun,skipped:!1,content:i})}function _$(){return`name: scip-query
782
+
783
+ on:
784
+ pull_request:
785
+
786
+ jobs:
787
+ diff-gate:
788
+ runs-on: ubuntu-latest
789
+ steps:
790
+ - uses: actions/checkout@v4
791
+ with:
792
+ fetch-depth: 0
793
+ - uses: actions/setup-node@v4
794
+ with:
795
+ node-version: 22
796
+ - run: npm ci
797
+ - run: npx scip-query reindex
798
+ - run: npx scip-query diff-gate --base "origin/\${{ github.base_ref }}"
799
+ `}var Ig=Symbol("option-value-source");function z(e){return(...t)=>{let{args:n,opts:i}=F$(t);dt(r=>e({db:r,args:n,opts:i}))}}function Q(e,t){return z(n=>{let i=Xp(n.db,e,v(n.opts,"full"),{quiet:v(n.opts,"json")});t({...n,budget:i})})}function Ng(e){return z(t=>pi(t,e,{kind:"list"}))}function Eg(e){return z(t=>pi(t,e,{kind:"table",headers:e.headers,dashWidths:e.dashWidths}))}function Pg(e){return z(t=>pi(t,e,{kind:"grouped",key:e.key}))}function Dn(e){return z(t=>ll(t,e))}function _g(e){return Dn({commandName:e.commandName,query:e.query,emptyMessage:e.emptyMessage,heuristicLabel:e.heuristicLabel,before:e.before,render:(t,n)=>D.sectionedReport(e.sections(t,n)),toJson:e.toJson,after:e.after})}function Ye(e,t){return Q(e,n=>ll(n,{...t,commandName:t.commandName??e}))}function Tg(e,t){return Ye(e,{commandName:t.commandName??e,query:t.query,emptyMessage:t.emptyMessage,heuristicLabel:t.heuristicLabel,before:t.before,render:(n,i)=>D.sectionedReport(t.sections(n,i)),toJson:t.toJson,after:t.after})}function Nt(e,t){return Q(e,n=>pi(n,{...t,commandName:e},{kind:"list"}))}function Yo(e,t){return Q(e,n=>pi(n,{...t,commandName:e},{kind:"table",headers:t.headers,dashWidths:t.dashWidths}))}function Zo(e,t){return Q(e,n=>pi(n,{...t,commandName:e},{kind:"grouped",key:t.key}))}function H(e,t){return String(e[t])}function ge(e,t){let n=e[t];return typeof n=="string"?n:void 0}function P(e,t){let n=e[t];return typeof n=="string"?n:void 0}function Ne(e,t){let n=e[t];return typeof n=="number"?n:void 0}function v(e,t){return!!e[t]}function Fg(e,t){let n=e[t];return Array.isArray(n)&&n.every(i=>typeof i=="string")?n:[]}function I(e,t,n){return Ne(e,t)??n}function O(e,t,n){let i=Ne(e,t),r=i!==void 0&&cl(e,t)!=="default";if(v(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 cl(e,t){return e[Ig]?.(t)}function pi(e,t,n){ll(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"?D.list(i,o=>t.format(o,r)):n.kind==="table"?D.table(n.headers,i.map(o=>t.format(o,r)),n.dashWidths):D.groupedByFile(i,o=>t.format(o,r),n.key?o=>n.key(o,r):void 0)},toJson:t.toJson,after:t.after})}function ll(e,t){let n=t.query(e);if(v(e.opts,"json")){$(t.commandName,e.args,e.opts,t.toJson?t.toJson(n,e):n);return}let i=t.emptyMessage?.(n,e);if(i){D.empty(i);return}t.heuristicLabel&&li(t.heuristicLabel),t.before?.(n,e),t.render(n,e),t.after?.(n,e)}function $(e,t,n,i){console.log(JSON.stringify({command:e,args:T$(t),options:n,result:i},null,2))}function T$(e){return e.filter(t=>typeof t=="string"||typeof t=="number"||typeof t=="boolean")}function F$(e){if(e.length===0)return{args:[],opts:{}};let t=e[e.length-1];return{args:e.slice(0,-1),opts:xe(t)}}function xe(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,Ig,{value:i=>t.getOptionValueSource(i),enumerable:!1}),n)}return e}var A$=new Set(["typescript","javascript","java","scala","kotlin","rust","python","ruby","go","cpp","c","csharp","vb","dart","php"]);function M$(e){return e.filter(t=>A$.has(t))}async function $g(e){let t=xe(e),n=ye(),i=wt(n),r=ai(n,i);try{let o=M$(Fg(t,"language")),s=await tg({projectRoot:n,languages:o.length>0?o:i.languages,outputScip:r.indexPath,outputDb:r.dbPath,pnpmWorkspaces:v(t,"pnpmWorkspaces")||i.indexer?.typescript?.pnpmWorkspaces,skipIfUnchanged:!v(t,"force"),allowPartial:v(t,"allowPartial"),indexerConcurrency:Ne(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 Ag(){let e=ye(),t=vc(e);try{let n=Vt({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 Mg(e){let t=xe(e),n=ye(),i=vc(n);try{let r=Qc({projectRoot:n,dbPath:i,tsconfig:P(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 Og(e){let t=xe(e);dt(n=>{let i=JSON.parse(process.env.SCIP_QUERY_DIFF_IMPACT_FILES??"[]"),r=at(n,{base:P(t,"base")}),o=fo(n,i,r.changedFiles,r.changedRanges);console.log(JSON.stringify(o))})}function jg(e){let t=xe(e);try{tf(ef({base:P(t,"base")}))}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}function Bg(e,t){let n=xe(t);dt(i=>{sr.includes(e)||(console.error(`error: Unknown health phase: ${e}`),process.exit(1));let r=cc(i,e,{scope:P(n,"scope"),full:v(n,"full")});console.log(JSON.stringify(r))})}function Vg(e){let t=xe(e);if(v(t,"writeBaseline")||v(t,"baseline")){O$(t);return}try{let n=Yp({scope:P(t,"scope"),full:!0,json:v(t,"json")});if(v(t,"json")){$("health",[],t,n);return}Zp(n,!1)}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}function O$(e){let t=P(e,"scope");dt(n=>{if(v(e,"writeBaseline")){let r=Za(n,{scope:t});console.log(`Baseline written to ${r.path} (${r.findingCount} finding(s)).`);return}let i=Zi(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 Hg(){let e=af(),t=e.installed.length+e.alreadyLinked.length;console.log(`
800
+ ${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 qg(){let e=!1;Ec()?console.log("scip CLI: installed"):(Pc(),e=!0);let t=ye(),n=wt(t),i=Ko(t,n);if(i.languages.length===0){console.log(`
822
801
  No supported project languages detected in the current directory.`),process.exitCode=e?1:0;return}console.log(`
823
- Detected languages: ${r.languages.join(", ")}`),console.log(`
824
- 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(`
825
- 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 ad(){let e=Oe(),t=zt(e),n=Nu(e,t);console.log(`Config written to ${n}`),console.log(`Detected languages: ${t.join(", ")||"(none)"}`)}function cd(e){let t=Ge(e),n=Oe(),r=Wm(n,{gitHook:j(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(`
826
- 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.")}function ld(e){let t=Ge(e),n=Oe(),r=vn(n),i=we(t,"debounce"),o=we(t,"cooldown");i&&((r.watch??={}).debounceMs=i),o&&((r.watch??={}).cooldownMs=o);let s=new ki({projectRoot:n,config:r,languages:r.languages,onStatus:a=>{process.stdout.write(`\r\x1B[K${Lu(a)}`)},onReindexComplete:a=>{console.log(`
802
+ Detected languages: ${i.languages.join(", ")}`),console.log(`
803
+ 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(`
804
+ 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 Ug(e){Gg(e,"capabilities")}function Wg(e){Gg(e,"capability-matrix")}function Gg(e,t){let n=xe(e),i=ye(),r=wt(i),o=Ko(i,r),s=sl(o);if(v(n,"json")){$(t,[],n,s);return}ul(s)}function zg(){let e=ye(),t=kt(e),n=Up(e,t);console.log(`Config written to ${n}`),console.log(`Detected languages: ${t.join(", ")||"(none)"}`)}function Kg(e){let t=xe(e),n=ye(),i=wt(n),r=Fo(i,{projectRoot:n});if(v(t,"json"))$("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 Jg(e,t){let n=xe(t),i=P(n,"reason");if(!i||i.trim()===""){console.error("error: suppress requires --reason <text>."),process.exitCode=1;return}try{let r=Wp(ye(),{id:String(e),check:P(n,"check"),file:P(n,"file"),reason:i,expiresAt:P(n,"expiresAt")});if(v(n,"json")){$("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 Qg(e){let t=xe(e),{report:n,hasIndexerProblems:i,hasErrors:r}=Xg("doctor");v(t,"json")?$("doctor",[],t,n):j$(n,i),process.exitCode=r?1:0}function Xg(e){let{projectRoot:t,config:n,paths:i,dbPath:r}=$o(),o=Fo(n,{projectRoot:t}),s=Ko(t,n),a=sl(s),c=og(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:$$(r),configDiagnostics:o,readiness:s,freshness:c,capabilities:a,ok:!u},hasIndexerProblems:l,hasErrors:u}}function Yg(e){let t=xe(e),n=ye(),i=kg(n,{gitHook:v(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(`
805
+ 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.")}function Zg(e){let t=xe(e),n=ye(),i=Dg(n,{force:v(t,"force"),dryRun:v(t,"dryRun")});if(v(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 eh(e){let t=xe(e),n=ye(),i=wt(n),r=Ne(t,"debounce"),o=Ne(t,"cooldown");r&&((i.watch??={}).debounceMs=r),o&&((i.watch??={}).cooldownMs=o);let s=new Jo({projectRoot:n,config:i,languages:i.languages,onStatus:a=>{process.stdout.write(`\r\x1B[K${zp(a)}`)},onReindexComplete:a=>{console.log(`
827
806
  Reindex complete in ${(a/1e3).toFixed(1)}s`)},onError:a=>{console.error(`
828
- Watch error: ${a.message}`)}});console.log(`Watching ${n}`),console.log(`Debounce: ${r.watch?.debounceMs??3e4}ms | Cooldown: ${r.watch?.cooldownMs??6e4}ms`),console.log(`Press Ctrl+C to stop.
807
+ 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.
829
808
  `),s.start(),process.on("SIGINT",()=>{s.stop(),console.log(`
830
- Stopped.`),process.exit(0)})}function ud(){let{projectRoot:e,config:t,paths:n,dbPath:r}=yi(),i=la(e,t);if(console.log(`Project: ${e}`),console.log(`DB path: ${r}`),r!==n.dbPath&&console.log(`Config: ${n.dbPath} (fallback to project root index.db)`),i.semantic){let o=i.semantic.available?"available":"fallback",s=i.semantic.tsconfigPaths&&i.semantic.tsconfigPaths.length>1?` (${i.semantic.tsconfigPaths.length} tsconfigs)`:i.semantic.tsconfigPath?` (${i.semantic.tsconfigPath})`:"";console.log(`TS sem: ${o}${s}`),i.semantic.reason&&console.log(`TS note: ${i.semantic.reason}`)}console.log(`Exists: ${Ym(r)?"yes":"no"}`),Ym(r)&&nt(o=>{let s=Ee(o);if(console.log(`Symbols: ${s.symbols}`),console.log(`Files: ${s.documents}`),console.log(`Size: ${Nn(s.indexSizeBytes)}`),s.lastBuilt){let a=Math.round((Date.now()-s.lastBuilt.getTime())/1e3);console.log(`Built: ${a}s ago`)}})}import{execFileSync as da,spawnSync as fd}from"child_process";import{existsSync as ot,mkdtempSync as NN,readFileSync as _N,readdirSync as LN,rmSync as wN,symlinkSync as EN,writeFileSync as kN}from"fs";import{tmpdir as PN}from"os";import{join as $e}from"path";var FN=3e5,TN=12;function gd(e,t,n={}){let r=MN(e);if(r.length===0)return{checkers:[],uncoveredFiles:[],baselineErrors:0,dirtyOverlap:[],batches:[]};let i=AN(t,r),o=n.timeoutMs??FN,s=jN(e,t),a=NN($e(PN(),"scip-cleanup-verify-")),c=[],l=new Set;try{da("git",["-C",e,"worktree","add","--detach","--force",a,"HEAD"],{stdio:"ignore"}),BN(e,a);for(let u of r)for(let m of pd(u,a,o).errorKeys)l.add(m);for(let u of t.batches){HN(a,u);let m=[];for(let d of r){let p=pd(d,a,o);m.push(...p.rawErrors.filter(h=>!l.has(hd(h))))}if(m.length===0)c.push({depth:u.depth,status:"verified"});else{c.push({depth:u.depth,status:"failed",errors:m.slice(0,TN)});break}}}finally{try{da("git",["-C",e,"worktree","remove","--force",a],{stdio:"ignore"})}catch{wN(a,{recursive:!0,force:!0})}}return{checkers:r.map(u=>u.label),uncoveredFiles:i,baselineErrors:l.size,dirtyOverlap:s,batches:c}}function AN(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 hd(e){return e.replace(/\(\d+,\d+\)|:\d+(?::\d+)?/g,"").trim()}var md=[".ts",".tsx",".mts",".cts",".js",".jsx",".vue"];function MN(e){let t=[];if(ot($e(e,"tsconfig.json"))){let n=$e(e,"node_modules",".bin","tsc");t.push(ot(n)?{label:"tsc --noEmit",binary:n,args:["--noEmit"],coversExtensions:md}:{label:"npx tsc --noEmit",binary:"npx",args:["tsc","--noEmit"],coversExtensions:md})}if(ot($e(e,"go.mod"))&&t.push({label:"go build ./...",binary:"go",args:["build","./..."],coversExtensions:[".go"]}),["pyproject.toml","setup.py","requirements.txt"].some(n=>ot($e(e,n)))){let n=ON();n&&t.push(n)}for(let n of $N(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:$e(e,n,"..","target")}});return t}function ON(){return dd("ruff")?{label:"ruff check --select E9,F821,F822",binary:"ruff",args:["check","--quiet","--select","E9,F821,F822","."],coversExtensions:[".py"]}:dd("python3")?{label:"python3 -m compileall (syntax only)",binary:"python3",args:["-m","compileall","-q","."],coversExtensions:[".py"]}:null}function dd(e){try{return fd(e,["--version"],{stdio:"ignore",timeout:1e4}).status===0}catch{return!1}}function $N(e){let t=[];if(ot($e(e,"Cargo.toml")))return t.push("Cargo.toml"),t;let n;try{n=LN(e)}catch{return t}for(let r of n)r==="node_modules"||r.startsWith(".")||ot($e(e,r,"Cargo.toml"))&&t.push(`${r}/Cargo.toml`);return t}function jN(e,t){let n;try{n=da("git",["-C",e,"status","--porcelain"],{encoding:"utf-8"})}catch{return[]}let r=new Set(n.split(`
831
- `).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 BN(e,t){for(let n of["node_modules"]){let r=$e(e,n),i=$e(t,n);if(ot(r)&&!ot(i))try{EN(r,i,"junction")}catch{}}}function HN(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=$e(e,r);ot(o)&&kN(o,qN(_N(o,"utf-8"),i,{rust:r.endsWith(".rs")}))}}function qN(e,t,n={}){let r=e.split(`
832
- `),i=(n.rust===!0?VN(e):Lt(e)).split(`
833
- `),o=new Set;for(let s of t){let a=WN(r,s.start),c=GN(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(`
834
- `)}function VN(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 WN(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 UN=200;function GN(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>UN)break}return n}function pd(e,t,n){let r=fd(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??""}
835
- ${r.stderr??""}`.split(`
836
- `).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(hd))}}function Je({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,...o}){return{...o,renderShape:"list",handler:Um({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i})}}function Mi({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,headers:o,dashWidths:s,...a}){return{...a,renderShape:"table",handler:Gm({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,headers:o,dashWidths:s})}}function yd({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,key:o,...s}){return{...s,renderShape:"grouped-by-file",handler:Jm({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,key:o})}}function bd({query:e,emptyMessage:t,heuristicLabel:n,sections:r,before:i,after:o,...s}){return{...s,renderShape:"sectioned-report",handler:zm({query:e,emptyMessage:t,heuristicLabel:n,before:i,sections:r,after:o})}}function Oi({query:e,emptyMessage:t,heuristicLabel:n,sections:r,before:i,after:o,...s}){return{...s,budget:s.budget??"semantic",renderShape:"sectioned-report",handler:Km(s.id,{query:e,emptyMessage:t,heuristicLabel:n,before:i,sections:r,after:o})}}var JN=ee("dead",({db:e,args:t,opts:n,budget:r})=>{let i={scope:Ue(t,0)||void 0,minLoc:C(n,"minLoc",1),includeTests:j(n,"includeTests"),skipBarrels:j(n,"skipBarrels"),includeMembers:j(n,"includeMembers"),scanLimit:r.scanLimit,semantic:r.semantic},o=Xe(e,i),s=o.symbols.filter(f=>f.kind==="dead-code"),a=o.symbols.filter(f=>f.kind!=="dead-code"),c=!j(n,"onlyInternal"),l=!j(n,"onlyDead"),u=c?s:[],m=l?a:[];if(u.length===0&&m.length===0){L.empty("No matching dead-code symbols found.");return}let d=u.reduce((f,y)=>f+y.loc,0),p=m.reduce((f,y)=>f+y.loc,0);u.length>0&&Sd(u,"DEAD CODE",` Zero references anywhere \u2014 no cross-file callers AND no same-file uses.
837
- Safe to delete.`,d),m.length>0&&(u.length>0&&console.log(""),Sd(m,"FILE-INTERNAL ONLY",` Used only within the same file (no cross-file callers). Could be a
809
+ Stopped.`),process.exit(0)})}function th(e){let t=xe(e),{report:n}=Xg("status");if(v(t,"json")){$("status",[],t,{...n,stats:V$(n.exists)});return}B$(n,{capabilities:v(t,"capabilities")})}function j$(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})`:""}`),ul(e.capabilities)}function B$(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})`:""}`),H$(e.exists),t.capabilities&&(console.log(""),ul(e.capabilities))}function V$(e){if(e)return dt(t=>{let n=Ae(t);return{symbols:n.symbols,files:n.documents,indexSizeBytes:n.indexSizeBytes,lastBuilt:n.lastBuilt?.toISOString()}})}function H$(e){e&&dt(t=>{let n=Ae(t);if(console.log(`Symbols: ${n.symbols}`),console.log(`Files: ${n.documents}`),console.log(`Size: ${ci(n.indexSizeBytes)}`),n.lastBuilt){let i=Math.round((Date.now()-n.lastBuilt.getTime())/1e3);console.log(`Built: ${i}s ago`)}})}function ul(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(`
810
+ 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 mr(e){return{...e,options:T(e.options)}}function pt({query:e,format:t,emptyMessage:n,heuristicLabel:i,after:r,...o}){let s=mr(o);return{...s,renderShape:"list",handler:Ng({commandName:s.id,query:e,format:t,emptyMessage:n,heuristicLabel:i,after:r})}}function es({query:e,format:t,emptyMessage:n,heuristicLabel:i,after:r,headers:o,dashWidths:s,...a}){let c=mr(a);return{...c,renderShape:"table",handler:Eg({commandName:c.id,query:e,format:t,emptyMessage:n,heuristicLabel:i,after:r,headers:o,dashWidths:s})}}function nh({query:e,format:t,emptyMessage:n,heuristicLabel:i,after:r,key:o,...s}){let a=mr(s);return{...a,renderShape:"grouped-by-file",handler:Pg({commandName:a.id,query:e,format:t,emptyMessage:n,heuristicLabel:i,after:r,key:o})}}function ih({query:e,emptyMessage:t,heuristicLabel:n,sections:i,before:r,after:o,...s}){let a=mr(s);return{...a,renderShape:"sectioned-report",handler:_g({commandName:a.id,query:e,emptyMessage:t,heuristicLabel:n,before:r,sections:i,after:o})}}function ts({query:e,emptyMessage:t,heuristicLabel:n,sections:i,before:r,after:o,...s}){let a=mr(s);return{...a,budget:a.budget??"semantic",renderShape:"sectioned-report",handler:Tg(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(` ${Se(l.startLine,l.endLine)} (${l.loc} LOC) ${l.shortName}`)}}var rh=Q("dead",({db:e,args:t,opts:n,budget:i})=>{let r={scope:ge(t,0)||void 0,minLoc:I(n,"minLoc",1),includeTests:v(n,"includeTests"),skipBarrels:v(n,"skipBarrels"),includeMembers:v(n,"includeMembers"),scanLimit:i.scanLimit,semantic:i.semantic},o=xt(e,r),s=o.symbols.filter(b=>b.kind==="dead-code"),a=o.symbols.filter(b=>b.kind!=="dead-code"),c=!v(n,"onlyInternal"),l=!v(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(v(n,"json")){$("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){D.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.
811
+ 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
838
812
  single-use helper, an abstraction-in-progress, or a callback registered
839
813
  through a framework path that static analysis cannot trace (signal
840
814
  handlers, event listeners, dependency injection). NOT necessarily dead \u2014
841
- review case by case.`,p));let h=[];c&&h.push(`${u.length} dead code (${d} LOC)`),l&&h.push(`${m.length} file-internal (${p} LOC)`),console.log(`
842
- \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+m.length} symbols \u2014 ${h.join(" + ")}`)});function Sd(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(` ${de(l.startLine,l.endLine)} (${l.loc} LOC) ${l.shortName}`)}}var zN=it("unused-imports",{query:({db:e,args:t,budget:n})=>Mo(e,O(t,0),{semantic:n.semantic}),format:e=>` ${e.shortName} in ${e.importedIn}`,emptyMessage:()=>"No unused imports found.",after:e=>console.log(`
843
- ${e.length} unused import(s)`)}),KN=Ai("isolated",{query:({db:e,opts:t,budget:n})=>Ot(e,{scope:k(t,"scope"),minLoc:C(t,"minLoc",3),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${de(e.startLine,e.endLine)} (${e.loc} LOC) ${e.shortName}`,emptyMessage:()=>"No isolated symbols found.",after:e=>console.log(`
844
- ${e.length} isolated symbol(s)`)}),QN=ee("extract-candidates",({db:e,opts:t,budget:n})=>{let r=$t(e,{scope:k(t,"scope"),minLoc:C(t,"minLoc",10),minCallees:C(t,"minCallees",6),limit:C(t,"limit",20),scanLimit:n.scanLimit,semantic:n.semantic});if(r.length===0)return L.empty("No extraction candidates found.");pr("extraction candidates");for(let i of r){console.log(`
845
- ${ce(i.relativePath,i.startLine,i.endLine)} ${i.shortName} (${i.loc} LOC, ${i.totalCallees} callees)`);for(let o=0;o<i.clusters.length;o++){let s=i.clusters[o];console.log(` Cluster ${o+1} (${Math.round(s.isolation*100)}% isolated, ${s.callees.length} callees):`);for(let a of s.callees)console.log(` ${a}`)}}console.log(`
846
- ${r.length} extraction candidate(s) found.`)}),YN=it("wrapper-candidates",{query:({db:e,opts:t,budget:n})=>Ut(e,{scope:k(t,"scope"),maxLoc:C(t,"maxLoc",15),limit:C(t,"limit",30),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${ce(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.loc} LOC)
847
- Only called by: ${e.singleCallerShort} (fan-in: ${e.callerFanIn})`,emptyMessage:()=>"No wrapper candidates found.",heuristicLabel:"wrapper candidates",after:e=>console.log(`
848
- ${e.length} wrapper candidate(s).`)}),XN=it("passthrough-candidates",{query:({db:e,opts:t,budget:n})=>Vt(e,{scope:k(t,"scope"),maxLoc:C(t,"maxLoc",15),limit:C(t,"limit",30),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${ce(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.loc} LOC)
849
- Forwards to: ${e.forwardsToShort} (${e.forwardsToFile})`,emptyMessage:()=>"No passthrough candidates found.",heuristicLabel:"passthrough candidates",after:e=>console.log(`
850
- ${e.length} passthrough candidate(s).`)}),ZN=it("stale-abstractions",{query:({db:e,opts:t,budget:n})=>Wt(e,{scope:k(t,"scope"),minLoc:C(t,"minLoc",3),limit:C(t,"limit",30),includeLowConfidence:j(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}] ${ce(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.kind}, ${e.loc} LOC, ${t}${n})
851
- ${e.reason}`},emptyMessage:()=>"No stale abstractions found.",heuristicLabel:"stale abstraction candidates",after:e=>console.log(`
852
- ${e.length} stale abstraction(s).`)}),e_=Ti("complexity-hotspots",{headers:["score"," LOC","fan-in","fan-out","callees","symbol"],query:({db:e,opts:t,budget:n})=>mr(e,{scope:k(t,"scope"),minLoc:C(t,"minLoc",10),limit:C(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]}),t_=yr("similar",{query:({db:e,args:t,opts:n,budget:r})=>{let i=Ue(t,0);return i?{mode:"target",rows:Zn(e,i,{minSimilarity:C(n,"minSimilarity",.4),limit:C(n,"limit",20),scanLimit:r.scanLimit,semantic:r.semantic})}:{mode:"all",rows:Ze(e,{minSimilarity:C(n,"minSimilarity",.4),limit:C(n,"limit",20),scope:k(n,"scope"),minCallees:C(n,"minCallees",4),crossFileOnly:j(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"){L.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=[`
853
- ${Math.round(t.similarity*100)}% similar:`,` A: ${t.shortNameA} (${t.fileA})`,` B: ${t.shortNameB} (${t.fileB})`,` ${r}: ${t.sharedCallees.join(", ")}`];return t.uniqueToA.length&&o.push(` ${i} A: ${t.uniqueToA.join(", ")}`),t.uniqueToB.length&&o.push(` ${i} B: ${t.uniqueToB.join(", ")}`),o.join(`
854
- `)});return}L.list(e.rows,t=>`
815
+ 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(`
816
+ \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(" + ")}`)}),oh=Nt("unused-imports",{query:({db:e,args:t,budget:n})=>na(e,H(t,0),{semantic:n.semantic}),format:e=>` ${e.shortName} in ${e.importedIn}`,emptyMessage:()=>"No unused imports found.",after:e=>console.log(`
817
+ ${e.length} unused import(s)`)}),sh=Zo("isolated",{query:({db:e,opts:t,budget:n})=>cn(e,{scope:P(t,"scope"),minLoc:I(t,"minLoc",3),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${Se(e.startLine,e.endLine)} (${e.loc} LOC) ${e.shortName}`,emptyMessage:()=>"No isolated symbols found.",after:e=>console.log(`
818
+ ${e.length} isolated symbol(s)`)}),ah=Q("extract-candidates",({db:e,args:t,opts:n,budget:i})=>{let r=gn(e,{scope:P(n,"scope"),minLoc:I(n,"minLoc",10),minCallees:I(n,"minCallees",6),limit:O(n,"limit",20),scanLimit:i.scanLimit,semantic:i.semantic});if(v(n,"json")){$("extract-candidates",t,n,r);return}if(r.length===0)return D.empty("No extraction candidates found.");li("extraction candidates");for(let o of r){console.log(`
819
+ ${fe(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(`
820
+ ${r.length} extraction candidate(s) found.`)}),ch=Q("locality-candidates",({db:e,args:t,opts:n,budget:i})=>{let r=_a(e,{target:ge(t,0)||void 0,scope:P(n,"scope"),minConsumers:I(n,"minConsumers",1),limit:O(n,"limit",20),scanLimit:i.scanLimit,semantic:i.semantic,architecturalBoundarySegments:e.config.locality?.architecturalBoundarySegments});if(v(n,"json")){$("locality-candidates",t,n,r);return}if(r.length===0)return D.empty("No locality candidates found.");li("locality candidates");for(let o of r){let s=o.sourceUnit.kind==="symbol"&&o.sourceUnit.startLine!==void 0&&o.sourceUnit.endLine!==void 0?fe(o.sourceUnit.file,o.sourceUnit.startLine,o.sourceUnit.endLine):o.sourceUnit.file;if(console.log(`
821
+ ${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(`
822
+ ${r.length} locality candidate(s) found.`)}),lh=Nt("wrapper-candidates",{query:({db:e,opts:t,budget:n})=>Rn(e,{scope:P(t,"scope"),maxLoc:I(t,"maxLoc",15),limit:O(t,"limit",30),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${fe(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.loc} LOC)
823
+ Only called by: ${e.singleCallerShort} (fan-in: ${e.callerFanIn}, tier: ${e.actionTier})`+(e.boundaryEvidence.length>0?`
824
+ Boundary evidence: ${e.boundaryEvidence.join("; ")}`:""),emptyMessage:()=>"No wrapper candidates found.",heuristicLabel:"wrapper candidates",after:e=>console.log(`
825
+ ${e.length} wrapper candidate(s).`)}),uh=Nt("passthrough-candidates",{query:({db:e,opts:t,budget:n})=>Cn(e,{scope:P(t,"scope"),maxLoc:I(t,"maxLoc",15),limit:O(t,"limit",30),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${fe(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.loc} LOC)
826
+ Forwards to: ${e.forwardsToShort} (${e.forwardsToFile}, tier: ${e.actionTier})
827
+ Recommendation: ${e.recommendation}`+(e.boundaryEvidence.length>0?`
828
+ Boundary evidence: ${e.boundaryEvidence.join("; ")}`:"")+(e.publicFacadeEvidence.length>0?`
829
+ Public facade evidence: ${e.publicFacadeEvidence.join("; ")}`:""),emptyMessage:()=>"No passthrough candidates found.",heuristicLabel:"passthrough candidates",after:e=>console.log(`
830
+ ${e.length} passthrough candidate(s).`)}),dh=Nt("stale-abstractions",{query:({db:e,opts:t,budget:n})=>vn(e,{scope:P(t,"scope"),minLoc:I(t,"minLoc",3),limit:O(t,"limit",30),includeLowConfidence:v(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}] ${fe(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.kind}, ${e.loc} LOC, ${t}${n})
831
+ ${e.reason}
832
+ Kind: ${e.stalenessKind}; tier: ${e.actionTier}
833
+ Recommendation: ${e.recommendation}`},emptyMessage:()=>"No stale abstractions found.",heuristicLabel:"stale abstraction candidates",after:e=>console.log(`
834
+ ${e.length} stale abstraction(s).`)}),mh=Yo("complexity-hotspots",{headers:["score"," LOC","fan-in","fan-out","callees","symbol"],query:({db:e,opts:t,budget:n})=>rr(e,{scope:P(t,"scope"),minLoc:I(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]}),ph=Ye("similar",{query:({db:e,args:t,opts:n,budget:i})=>{let r=ge(t,0);return r?{mode:"target",rows:Hi(e,r,{minSimilarity:I(n,"minSimilarity",.4),limit:O(n,"limit",20),scanLimit:i.scanLimit,semantic:i.semantic})}:{mode:"all",rows:Ct(e,{minSimilarity:I(n,"minSimilarity",.4),limit:O(n,"limit",20),scope:P(n,"scope"),minCallees:I(n,"minCallees",4),crossFileOnly:v(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"){D.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=[`
835
+ ${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(`
836
+ `)});return}D.list(e.rows,t=>`
855
837
  ${Math.round(t.similarity*100)}% similar:
856
838
  A: ${t.shortNameA} (${t.fileA})
857
839
  B: ${t.shortNameB} (${t.fileB})
858
- Shared ${t.similarityBasis==="source-tokens"?"source tokens":"callees"}: ${t.sharedCallees.join(", ")}`),console.log(`
859
- ${e.rows.length} similar pair(s) found.`)}}),n_=Yt({query:({db:e,args:t,opts:n})=>Zo(e,{minSimilarity:C(n,"minSimilarity",.5),limit:C(n,"limit",20),scope:k(n,"scope"),minDeps:we(n,"minDeps"),filePattern:Ue(t,0)}),emptyMessage:e=>e.length===0?"No similar file pairs found.":void 0,heuristicLabel:"similar file candidates",render:e=>{L.list(e,t=>{let n=[`
840
+ Evidence class: ${t.evidenceClass} (tier: ${t.actionTier})
841
+ Recommendation: ${t.recommendation}
842
+ `+(t.evidenceClassReasons.length?` Evidence reasons: ${t.evidenceClassReasons.join("; ")}
843
+ `:"")+` Shared ${t.similarityBasis==="source-tokens"?"source tokens":"callees"}: ${t.sharedCallees.join(", ")}`),console.log(`
844
+ ${e.rows.length} similar pair(s) found.`)}}),fh=Dn({commandName:"similar-files",query:({db:e,args:t,opts:n})=>va(e,{minSimilarity:I(n,"minSimilarity",.5),limit:O(n,"limit",20),scope:P(n,"scope"),minDeps:Ne(n,"minDeps"),filePattern:ge(t,0)}),emptyMessage:e=>e.length===0?"No similar file pairs found.":void 0,heuristicLabel:"similar file candidates",render:e=>{D.list(e,t=>{let n=[`
860
845
  ${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(`
861
846
  `)}),console.log(`
862
- ${e.length} similar pair(s) found.`)}}),r_=Yt({query:({db:e,opts:t})=>es(e,{minSimilarity:C(t,"minSimilarity",.5),limit:C(t,"limit",15),scope:k(t,"scope"),minChainLength:C(t,"minLength",3),maxChainLength:C(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(`
863
- \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(`
864
- ${e.length} similar chain pair(s) found.`)}}),i_=yr("drift",{query:({db:e,args:t,opts:n,budget:r})=>qt(e,{scope:Ue(t,0),minDeviation:C(n,"minDeviation",5),semantic:r.semantic}),emptyMessage:e=>e.results.length===0?"No drift detected.":void 0,heuristicLabel:"drift candidates",render:e=>{console.log(""),L.groupedByFile(e.results,t=>{let r=` [${t.kind==="unused-import"?"UNUSED":t.kind==="layer-violation"?"LAYER":"UNIQUE"}] ${t.description}`;return t.detail?`${r}
865
- ${t.detail}`:r},t=>t.file),console.log(`
866
- ${e.unusedImports} unused import(s), ${e.layerViolations} layer violation(s), ${e.patternDeviations} pattern deviation(s)`)}}),o_=yr("convergence",{query:({db:e,args:t,budget:n})=>Rs(e,O(t,0),O(t,1),{semantic:n.semantic}),emptyMessage:e=>e?void 0:"One or both symbols not found.",render:e=>{if(e){console.log(`
847
+ ${e.length} similar pair(s) found.`)}}),gh=Ye("react-component-duplicates",{query:({db:e,args:t,opts:n,budget:i})=>ln(e,{minSimilarity:I(n,"minSimilarity",.62),minTokens:I(n,"minTokens",8),limit:O(n,"limit",20),scope:P(n,"scope"),scanLimit:i.scanLimit,filePattern:ge(t,0)}),emptyMessage:e=>e.length===0?"No duplicated React component structures found.":void 0,heuristicLabel:"React component duplicate candidates",render:e=>{D.list(e,t=>{let n=[`
848
+ ${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(`
849
+ `)}),console.log(`
850
+ ${e.length} duplicated React component pair(s) found.`)}}),hh=Ye("react-hook-candidates",{query:({db:e,args:t,opts:n,budget:i})=>dn(e,{minSimilarity:I(n,"minSimilarity",.45),minSharedBehaviors:I(n,"minSharedBehaviors",6),limit:O(n,"limit",20),scope:P(n,"scope"),scanLimit:i.scanLimit,filePattern:ge(t,0)}),emptyMessage:e=>e.length===0?"No duplicated React hook behavior candidates found.":void 0,heuristicLabel:"React hook extraction candidates",render:e=>{D.list(e,t=>{let n=[`
851
+ ${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(`
852
+ `)}),console.log(`
853
+ ${e.length} React hook candidate pair(s) found.`)}}),bh=Ye("react-large-component-pressure",{query:({db:e,args:t,opts:n,budget:i})=>Wi(e,{minComponentLines:I(n,"minComponentLines",300),minFileLines:I(n,"minFileLines",800),minJsxTokens:I(n,"minJsxTokens",80),minBehaviorTokens:I(n,"minBehaviorTokens",40),limit:O(n,"limit",20),scope:P(n,"scope"),scanLimit:i.scanLimit,filePattern:ge(t,0)}),emptyMessage:e=>e.length===0?"No large React component pressure found.":void 0,heuristicLabel:"large React component pressure candidates",render:e=>{D.list(e,t=>[`
854
+ ${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(`
855
+ `)),console.log(`
856
+ ${e.length} large React component(s) found.`)}}),yh=Ye("vue-component-duplicates",{query:({db:e,args:t,opts:n,budget:i})=>mn(e,{minSimilarity:I(n,"minSimilarity",.62),minTokens:I(n,"minTokens",8),limit:O(n,"limit",20),scope:P(n,"scope"),scanLimit:i.scanLimit,filePattern:ge(t,0)}),emptyMessage:e=>e.length===0?"No duplicated Vue component structures found.":void 0,heuristicLabel:"Vue component duplicate candidates",render:e=>{D.list(e,t=>{let n=[`
857
+ ${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(`
858
+ `)}),console.log(`
859
+ ${e.length} duplicated Vue component pair(s) found.`)}}),Sh=Ye("vue-composable-candidates",{query:({db:e,args:t,opts:n,budget:i})=>fn(e,{minSimilarity:I(n,"minSimilarity",.45),minSharedBehaviors:I(n,"minSharedBehaviors",6),limit:O(n,"limit",20),scope:P(n,"scope"),scanLimit:i.scanLimit,filePattern:ge(t,0)}),emptyMessage:e=>e.length===0?"No duplicated Vue behavior candidates found.":void 0,heuristicLabel:"Vue composable extraction candidates",render:e=>{D.list(e,t=>{let n=[`
860
+ ${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(`
861
+ `)}),console.log(`
862
+ ${e.length} Vue composable candidate pair(s) found.`)}}),xh=Ye("vue-large-view-pressure",{query:({db:e,args:t,opts:n,budget:i})=>Gi(e,{minTotalLines:v(n,"reviewThresholds")&&cl(n,"minTotalLines")==="default"?300:I(n,"minTotalLines",800),minTemplateLines:I(n,"minTemplateLines",300),minScriptLines:I(n,"minScriptLines",300),minStyleLines:I(n,"minStyleLines",500),limit:O(n,"limit",20),scope:P(n,"scope"),scanLimit:i.scanLimit,filePattern:ge(t,0)}),emptyMessage:e=>e.length===0?"No large Vue view pressure found.":void 0,heuristicLabel:"large Vue view pressure candidates",render:e=>{D.list(e,t=>{let n=[`
863
+ ${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(`
864
+ `)}),console.log(`
865
+ ${e.length} large Vue view pressure file(s) found.`)}}),Ch=Dn({commandName:"similar-chains",query:({db:e,opts:t})=>Da(e,{minSimilarity:I(t,"minSimilarity",.5),limit:O(t,"limit",15),scope:P(t,"scope"),minChainLength:I(t,"minLength",3),maxChainLength:I(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(`
866
+ \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(`
867
+ ${e.length} similar chain pair(s) found.`)}}),vh=Ye("drift",{query:({db:e,args:t,opts:n,budget:i})=>xn(e,{scope:ge(t,0),minDeviation:I(n,"minDeviation",5),semantic:i.semantic}),emptyMessage:e=>e.results.length===0?"No drift detected.":void 0,heuristicLabel:"drift candidates",render:e=>{console.log(""),D.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(`
868
+ `)},t=>t.file),console.log(`
869
+ ${e.unusedImports} unused import(s), ${e.layerViolations} layer violation(s), ${e.patternDeviations} pattern deviation(s)`)}}),Rh=Ye("convergence",{query:({db:e,args:t,budget:n})=>mc(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(`
867
870
  ${Math.round(e.similarity*100)}% callee overlap
868
871
  `),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)
869
872
  `),console.log(` Shared callees (${e.sharedCallees.length}):`);for(let t of e.sharedCallees)console.log(` ${t}`);if(e.uniqueToA.length>0){console.log(`
870
873
  Unique to A (${e.uniqueToA.length}):`);for(let t of e.uniqueToA)console.log(` ${t}`)}if(e.uniqueToB.length>0){console.log(`
871
874
  Unique to B (${e.uniqueToB.length}):`);for(let t of e.uniqueToB)console.log(` ${t}`)}console.log(`
872
- Strategy: ${e.consolidationStrategy}`)}}}),s_=it("similar-signatures",{query:({db:e,opts:t,budget:n})=>_s(e,{scope:k(t,"scope"),minLoc:C(t,"minLoc",3),limit:C(t,"limit",20),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>{let t=`
873
- Signature: ${e.signature} (${e.functions.length} functions)`,n=e.functions.map(r=>` ${ce(r.file,r.startLine,r.endLine)} ${r.shortName} (${r.loc} LOC)`).join(`
875
+ Strategy: ${e.consolidationStrategy}`)}}}),Lh=Nt("similar-signatures",{query:({db:e,opts:t,budget:n})=>bc(e,{scope:P(t,"scope"),minLoc:I(t,"minLoc",3),limit:O(t,"limit",20),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>{let t=`
876
+ Signature: ${e.signature} (${e.functions.length} functions)`,n=e.functions.map(i=>` ${fe(i.file,i.startLine,i.endLine)} ${i.shortName} (${i.loc} LOC)`).join(`
874
877
  `);return`${t}
875
878
  ${n}`},emptyMessage:()=>"No same-shape function groups found.",after:e=>console.log(`
876
- ${e.length} group(s) found.`)});function ze(e){return{docs:v("Cleanup"),...e}}function st({heuristicLabel:e,...t}){return ze({...t,heuristic:{label:e}})}var a_=ee("cleanup-plan",({db:e,opts:t,budget:n})=>{let r=ns(e,{scope:k(t,"scope"),minLoc:C(t,"minLoc",1),maxDepth:C(t,"maxDepth",5),scanLimit:n.scanLimit});if(r.batches.length===0)return L.empty("Nothing deletable found \u2014 no graph-fact dead code to seed a cascade.");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.
877
- `);for(let i of r.batches){let o=i.depth===0?`\u2500\u2500 Batch 0: deletable now (graph-fact, ${i.loc} LOC) \u2500\u2500`:`\u2500\u2500 Batch ${i.depth}: dead once batch ${i.depth-1} lands (cascade, ${i.loc} LOC) \u2500\u2500`;console.log(o);for(let s of i.entries)console.log(` ${s.file}:${s.startLine+1}-${s.endLine+1} ${s.shortName} (${s.loc} LOC)`);i.filesEmptied.length>0&&console.log(` -> empties: ${i.filesEmptied.join(", ")}`),console.log("")}if(r.blocked.length>0){console.log("Cascade blocked (references outside the removal set):");for(let i of r.blocked)console.log(` ${i.shortName} (${i.file}) blocked by ${i.blockingFiles.join(", ")}`)}if(j(t,"verify")){console.log(`
878
- Verifying batches against the project checker (throwaway worktree at HEAD)...`);let i=gd(Oe(),r);if(i.checkers.length===0){console.log(" No checker detected (need tsconfig.json or a Cargo.toml) \u2014 skipped.");return}for(let o of i.checkers)console.log(` Checker: ${o}`);i.uncoveredFiles.length>0&&console.log(` WARNING: no checker covers these plan files (entries there are NOT verified): ${i.uncoveredFiles.join(", ")}`),i.baselineErrors>0&&console.log(` Baseline has ${i.baselineErrors} pre-existing error(s) \u2014 verifying differentially (no NEW errors).`),i.dirtyOverlap.length>0&&console.log(` WARNING: plan files dirty in working tree (verification runs at HEAD): ${i.dirtyOverlap.join(", ")}`);for(let o of i.batches)if(o.status==="verified")console.log(` Batch ${o.depth}: COMPILER-VERIFIED`);else{console.log(` Batch ${o.depth}: FAILED \u2014 the errors below name references the static evidence missed:`);for(let s of o.errors??[])console.log(` ${s}`)}}}),c_=ee("recent-duplicates",({db:e,opts:t,budget:n})=>{let r=hs(e,{windowCommits:C(t,"window",100),minSimilarity:we(t,"minSimilarity")??.7,limit:C(t,"limit",30),scope:k(t,"scope"),scanLimit:n.scanLimit,semantic:n.semantic});if(!r.available)return L.empty("No git history available (not a repository, or git missing).");if(r.findings.length===0)return L.empty(`No recent re-implementations found (window: last ${r.windowCommits} commits).`);console.log(`Recent re-implementations (window: last ${r.windowCommits} commits):
879
- `);for(let i of r.findings)i.kind==="echo"?(console.log(` ${Math.round(i.similarity*100)}% ECHO ${i.echoFile} ${i.echoSymbol} (added ${i.echoAgeCommits} commits ago)`),console.log(` duplicates established ${i.establishedFile} ${i.establishedSymbol}`)):(console.log(` ${Math.round(i.similarity*100)}% TWIN ${i.echoFile} ${i.echoSymbol}`),console.log(` and ${i.establishedFile} ${i.establishedSymbol} (both new \u2014 consolidate before they diverge)`));console.log(`
880
- ${r.findings.length} finding(s). ECHO: prefer extending the established side and deleting the echo.`)}),l_=V(({db:e,args:t,opts:n})=>{let r=us(e,{doc:t[0]===void 0?void 0:O(t,0),limit:C(n,"limit",20),minCoupling:C(n,"minCoupling",3)});if(!r.available)return L.empty("No git history available (not a repository, or git missing).");if(r.findings.length===0)return L.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):
881
- `);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})`)}}console.log(`
882
- Stale standards docs are worse than none \u2014 agents implement to a dead spec.`)}),u_=it("unused-params",{query:({db:e,opts:t,budget:n})=>cr(e,{scope:k(t,"scope"),limit:C(t,"limit",30),scanLimit:n.scanLimit}),format:e=>` ${ce(e.file,e.startLine,e.endLine)} ${e.shortName}
879
+ ${e.length} group(s) found.`)}),wh=Q("cleanup-plan",({db:e,args:t,opts:n,budget:i})=>{let r=lo(e,{scope:P(n,"scope"),minLoc:I(n,"minLoc",1),maxDepth:I(n,"maxDepth",5),scanLimit:i.scanLimit}),o=ye(),s=v(n,"patch"),a=v(n,"json"),c=v(n,"verify")||s;if(s&&!v(n,"verify")){console.error("error: cleanup-plan --patch requires --verify."),process.exitCode=1;return}if(r.batches.length===0){if(a){$("cleanup-plan",t,n,r);return}return D.empty("Nothing deletable found \u2014 no graph-fact dead code to seed a cascade.")}let l=rl(r),u=c?tl(o,r):void 0;if(a){$("cleanup-plan",t,n,{result:r,verification:u});return}if(s){let d=ol(u,l);if(d.length>0){for(let p of d)console.error(`error: ${p}`);process.exitCode=1;return}let m=hg(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.
880
+ `);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(`
881
+ 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}`)}}}),kh=Q("cleanup-apply",({db:e,opts:t,budget:n})=>{if(!v(t,"verified")){console.error("error: cleanup-apply requires --verified so deletions are checked before mutating files."),process.exitCode=1;return}let i=v(t,"all"),r=Ne(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:P(t,"scope"),minLoc:I(t,"minLoc",1),maxDepth:I(t,"maxDepth",5),scanLimit:n.scanLimit});if(o.batches.length===0){D.empty("Nothing deletable found \u2014 no graph-fact dead code to seed a cascade.");return}let s=rl(o,{all:i,batch:r});if(s.length===0){console.error(`error: No cleanup batch ${r} exists.`),process.exitCode=1;return}let a=ye(),c=tl(a,o),l=ol(c,s,{allowDirty:v(t,"forceDirty")});if(l.length>0){for(let m of l)console.error(`error: ${m}`);process.exitCode=1;return}il(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.`)}),Dh=Q("recent-duplicates",({db:e,args:t,opts:n,budget:i})=>{let r=oc(e,{windowCommits:I(n,"window",100),minSimilarity:Ne(n,"minSimilarity"),limit:O(n,"limit",30),scope:P(n,"scope"),scanLimit:i.scanLimit,semantic:i.semantic});if(v(n,"json")){$("recent-duplicates",t,n,r);return}if(!r.available)return D.empty("No git history available (not a repository, or git missing).");if(r.findings.length===0)return D.empty(`No recent re-implementations found (window: last ${r.windowCommits} commits).`);console.log(`Recent re-implementations (window: last ${r.windowCommits} commits):
882
+ `);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(`
883
+ ${r.findings.length} finding(s). ECHO: prefer extending the established side and deleting the echo.`)}),Ih=z(({db:e,args:t,opts:n})=>{let i=Ja(e,{doc:t[0]===void 0?void 0:H(t,0),limit:O(n,"limit",20),minCoupling:I(n,"minCoupling",3)});if(v(n,"json")){$("doc-drift",t,n,i);return}if(!i.available)return D.empty("No git history available (not a repository, or git missing).");if(i.findings.length===0)return D.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):
884
+ `);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: ${Ao(c)}`)}}console.log(`
885
+ Stale standards docs are worse than none \u2014 agents implement to a dead spec.`)}),Nh=Nt("unused-params",{query:({db:e,opts:t,budget:n})=>tr(e,{scope:P(t,"scope"),limit:O(t,"limit",30),scanLimit:n.scanLimit}),format:e=>` ${fe(e.file,e.startLine,e.endLine)} ${e.shortName}
883
886
  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(`
884
- ${e.length} function(s) with trailing unused parameters.`)}),xd=[ze({id:"unused-params",command:"unused-params",description:"Speculative-generality candidates: trailing parameters no body ever uses (TS/JS)",options:[g("-s, --scope <path>","Limit to files matching path"),g("-n, --limit <n>","Maximum findings",I,30),g("--full","Run unbounded analysis on large indexes")],budget:"candidate-scan",heuristic:{label:"unused trailing parameter candidates"},renderShape:"list",docs:v("Cleanup",["scip-query unused-params -s src/services"]),handler:u_}),ze({id:"cleanup-plan",command:"cleanup-plan",description:"Ordered, batched deletion plan: graph-fact dead code plus the cascade candidates it unlocks",options:[g("-s, --scope <path>","Limit to files matching path"),g("--min-loc <n>","Only include symbols >= N lines",I,1),g("--max-depth <n>","Maximum cascade depth",I,5),g("--verify","Apply batches in a throwaway worktree and run the project checker (tsc / cargo check)"),g("--full","Run unbounded analysis on large indexes")],budget:"candidate-scan",renderShape:"custom",docs:v("Cleanup",["scip-query cleanup-plan --min-loc 3","scip-query cleanup-plan --verify"]),handler:a_}),ze({id:"recent-duplicates",command:"recent-duplicates",description:"Directional duplicate candidates: recent code that re-implements established code",options:[g("--window <n>",'How many commits back counts as "recent"',I,100),g("--min-similarity <n>","Minimum similarity (0-1)",Jt,.7),g("-n, --limit <n>","Maximum findings",I,30),g("-s, --scope <path>","Limit to files matching path"),g("--full","Run unbounded semantic analysis on large indexes")],budget:"candidate-scan",heuristic:{label:"recent re-implementation candidates"},renderShape:"custom",docs:v("Cleanup",["scip-query recent-duplicates --window 50"]),handler:c_}),ze({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:[g("-n, --limit <n>","Maximum docs to report",I,20),g("--min-coupling <n>","Minimum historical co-changes to track a subject",I,3)],heuristic:{label:"doc drift candidates"},renderShape:"custom",docs:v("Cleanup",["scip-query doc-drift","scip-query doc-drift AGENTS.md"]),handler:l_}),ze({id:"dead",command:"dead [scope]",description:"Find dead code and file-internal symbols (no cross-file consumers)",options:[g("--min-loc <n>","Only show symbols >= N lines",I,1),g("--include-tests","Include test files"),g("--skip-barrels","Ignore refs from barrel re-export files"),g("--include-members","Include class members"),g("--only-dead","Show only [dead code] symbols (skip [file-internal only])"),g("--only-internal","Show only [file-internal only] symbols (skip [dead code])"),g("--full","Run unbounded semantic analysis on large indexes")],budget:"candidate-scan",renderShape:"custom",docs:v("Cleanup",["scip-query dead --min-loc 10"]),handler:JN}),ze({id:"unused-imports",command:"unused-imports <file>",description:"Find imports not referenced in the same file",options:[g("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",renderShape:"list",handler:zN}),ze({id:"isolated",command:"isolated",description:"Find completely orphaned symbols (no references at all)",options:[g("-s, --scope <path>","Limit to files matching path"),g("--min-loc <n>","Minimum lines of code",I,3),g("--full","Run unbounded semantic analysis on large indexes")],budget:"candidate-scan",renderShape:"grouped-by-file",handler:KN}),st({id:"similar",command:"similar [symbol]",description:"Find heuristic function similarity candidates from callee fingerprints",options:[g("--min-similarity <n>","Minimum Jaccard similarity (0-1)",Jt,.4),g("-n, --limit <n>","Number of results",I,20),g("-s, --scope <path>","Limit to files matching path"),g("--min-callees <n>","Minimum callees to consider",I,4),g("--cross-file-only","Only show cross-file pairs (skip same-file matches)"),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"similarity candidates",budget:"candidate-scan",renderShape:"custom",handler:t_}),st({id:"similar-files",command:"similar-files [file]",description:"Find heuristic similar-file candidates from dependency profiles",options:[g("--min-similarity <n>","Minimum Jaccard similarity (0-1)",Jt,.5),g("-n, --limit <n>","Number of results",I,20),g("-s, --scope <path>","Limit to files matching path"),g("--min-deps <n>","Minimum dependencies to consider",I)],heuristicLabel:"similar file candidates",renderShape:"custom",handler:n_}),st({id:"similar-chains",command:"similar-chains",description:"Find heuristic similar-chain candidates from dependency flows",options:[g("--min-similarity <n>","Minimum chain similarity (0-1)",Jt,.5),g("-n, --limit <n>","Number of results",I,15),g("-s, --scope <path>","Limit to files matching path"),g("--min-length <n>","Minimum chain length",I,3),g("--max-length <n>","Maximum chain length",I,8)],heuristicLabel:"similar chain candidates",renderShape:"custom",handler:r_}),st({id:"extract-candidates",command:"extract-candidates",description:"Find heuristic extraction candidates from isolated callee clusters",options:[g("-s, --scope <path>","Limit to files matching path"),g("--min-loc <n>","Minimum function LOC",I,10),g("--min-callees <n>","Minimum callees to analyze",I,6),g("-n, --limit <n>","Number of results",I,20),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"extraction candidates",budget:"candidate-scan",renderShape:"custom",handler:QN}),st({id:"drift",command:"drift [module]",description:"Detect heuristic drift candidates: unused imports, layer violations, and pattern deviations",options:[g("--min-deviation <n>","Minimum sibling files before reporting unique dependency deviations",Ri,5),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"drift candidates",budget:"semantic",renderShape:"grouped-by-file",handler:i_}),st({id:"wrapper-candidates",command:"wrapper-candidates",description:"Find heuristic wrapper candidates only called by one consumer",options:[g("-s, --scope <path>","Limit to files matching path"),g("--max-loc <n>","Maximum LOC for candidates",I,15),g("-n, --limit <n>","Number of results",I,30),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"wrapper candidates",budget:"candidate-scan",renderShape:"list",handler:YN}),st({id:"passthrough-candidates",command:"passthrough-candidates",description:"Find heuristic passthrough candidates that forward to one callee",options:[g("-s, --scope <path>","Limit to files matching path"),g("--max-loc <n>","Maximum LOC for candidates",I,15),g("-n, --limit <n>","Number of results",I,30),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"passthrough candidates",budget:"candidate-scan",renderShape:"list",handler:XN}),st({id:"stale-abstractions",command:"stale-abstractions",description:"Find heuristic stale abstraction candidates with 0-1 consumers",options:[g("-s, --scope <path>","Limit to files matching path"),g("--min-loc <n>","Minimum LOC",I,3),g("-n, --limit <n>","Number of results",I,30),g("--include-low-confidence","Include 1-consumer classes (usually encapsulation, not stale)",void 0,!1),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"stale abstraction candidates",budget:"candidate-scan",renderShape:"list",handler:ZN}),st({id:"complexity-hotspots",command:"complexity-hotspots",description:"Find heuristic complexity hotspot candidates from LOC x fan-in x fan-out",options:[g("-s, --scope <path>","Limit to files matching path"),g("--min-loc <n>","Minimum LOC",I,10),g("-n, --limit <n>","Number of results",I,20),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"complexity hotspot candidates",budget:"candidate-scan",renderShape:"table",handler:e_}),ze({id:"convergence",command:"convergence <symbol1> <symbol2>",description:"Show what a consolidated version of two similar functions would look like",options:[g("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",renderShape:"custom",handler:o_}),yd({id:"redundant-reexports",command:"redundant-reexports",description:"Find barrel re-exports that nobody imports through",options:[g("-s, --scope <path>","Limit to files matching path"),g("-n, --limit <n>","Number of results",I,30)],docs:v("Cleanup"),query:({db:e,opts:t})=>vs(e,{scope:k(t,"scope"),limit:C(t,"limit",30)}),format:e=>` ${e.shortName} (from ${e.originalFile})
885
- barrel: ${e.barrelConsumers} consumer(s) | direct: ${e.directConsumers} consumer(s)`,key:e=>e.barrelFile,emptyMessage:()=>"No redundant re-exports found.",after:e=>console.log(`
886
- ${e.length} redundant re-export(s).`)}),ze({id:"similar-signatures",command:"similar-signatures",description:"Find functions with near-identical type signatures (same shape)",options:[g("-s, --scope <path>","Limit to files matching path"),g("--min-loc <n>","Minimum LOC per function",I,3),g("-n, --limit <n>","Number of groups",I,20),g("--full","Run unbounded semantic analysis on large indexes")],budget:"candidate-scan",renderShape:"list",handler:s_})];var m_=V(({db:e})=>{let t=Ee(e);console.log(`Documents: ${t.documents}`),console.log(`Symbols: ${t.symbols}`),console.log(`Definitions: ${t.definitions}`),console.log(`References: ${t.references}`),console.log(`Index size: ${Nn(t.indexSizeBytes)}`),t.lastBuilt&&console.log(`Last built: ${t.lastBuilt.toISOString().replace("T"," ").slice(0,19)}`)}),Cd=[{id:"stats",command:"stats",description:"Show index statistics",renderShape:"custom",docs:v("Core"),handler:m_}];var d_=Ti("bottlenecks",{headers:["score","fan-in","fan-out","symbol"],query:({db:e,opts:t,budget:n})=>Uo(e,{limit:C(t,"limit",20),scope:k(t,"scope"),minFanIn:C(t,"minFanIn",2),minFanOut:C(t,"minFanOut",2),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${String(e.score).padStart(5)} ${String(e.fanIn).padStart(6)} ${String(e.fanOut).padStart(7)} ${e.shortName}`,emptyMessage:()=>"No bottlenecks found."}),p_=V(({db:e,args:t,opts:n})=>{let r=Ue(t,0);if(r){let i=jo(e,r);if(i.length===0)return L.empty(`No fan-in for ${r}.`);L.list(i,o=>` ${String(o.count).padStart(4)} files ${o.name}`);return}L.table(["files","symbol"],Ho(e,{limit:C(n,"limit",30),scope:k(n,"scope")}).map(i=>` ${String(i.count).padStart(5)} ${i.name}`))}),f_=V(({db:e,args:t,opts:n})=>{let r=Ue(t,0);if(r){let i=Bo(e,r);if(i.length===0)return L.empty(`No fan-out for ${r}.`);L.list(i,o=>` ${String(o.count).padStart(4)} symbols ${o.name}`);return}L.table(["symbols","file"],qo(e,{limit:C(n,"limit",30),scope:k(n,"scope")}).map(i=>` ${String(i.count).padStart(7)} ${i.name}`))}),g_=V(({db:e,args:t,opts:n})=>{let r=Ue(t,0),i=Ue(t,1);if(r&&i){let o=Vo(e,r,i);console.log(`${o.file1} \u2194 ${o.file2}: ${o.sharedSymbols} shared symbols`);return}L.table(["shared","file1 \u2192 file2"],Wo(e,{limit:C(n,"limit",20),scope:k(n,"scope")}).map(o=>` ${String(o.sharedSymbols).padStart(6)} ${o.file1} \u2192 ${o.file2}`))}),h_=Yt({query:({db:e,opts:t})=>Mt(e,{scope:k(t,"scope"),maxDepth:C(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(`
887
- 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(`
888
- ${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.)`)}}),y_=Yt({query:({db:e,opts:t})=>Qo(e,{limit:C(t,"limit",10),scope:k(t,"scope"),minDepth:C(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(`
889
- Chain ${t+1} (depth ${e[t].depth}):`);for(let n of e[t].chain)console.log(` \u2192 ${n}`)}}}),Rd=[Mi({id:"hotspots",command:"hotspots",description:"Most-referenced symbols in the codebase (choke points)",options:[g("-n, --limit <n>","Number of results",I,30),g("-s, --scope <path>","Limit to files matching path")],docs:v("Graph"),headers:["refs","files","symbol"],query:({db:e,opts:t})=>Fo(e,{limit:C(t,"limit",30),scope:k(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:[g("-n, --limit <n>","Number of results for top mode",I,30),g("-s, --scope <path>","Limit to files matching path")],renderShape:"custom",docs:v("Graph"),handler:p_},{id:"fan-out",command:"fan-out [file]",description:"How many external symbols a file uses (or top fan-out across codebase)",options:[g("-n, --limit <n>","Number of results for top mode",I,30),g("-s, --scope <path>","Limit to files matching path")],renderShape:"custom",docs:v("Graph"),handler:f_},{id:"coupling",command:"coupling [file1] [file2]",description:"Coupling between two files, or top coupled pairs in codebase",options:[g("-n, --limit <n>","Number of results for top mode",I,20),g("-s, --scope <path>","Limit to files matching path")],renderShape:"custom",docs:v("Graph"),handler:g_},{id:"cycles",command:"cycles",description:"Detect circular dependency chains between files",options:[g("-s, --scope <path>","Limit to files matching path"),g("--max-depth <n>","Maximum cycle depth",I,10)],renderShape:"custom",docs:v("Graph"),handler:h_},{id:"bottlenecks",command:"bottlenecks",description:"Find coupling hubs: high fan-in AND high fan-out",options:[g("-n, --limit <n>","Number of results",I,20),g("-s, --scope <path>","Limit to files matching path"),g("--min-fan-in <n>","Minimum fan-in",I,2),g("--min-fan-out <n>","Minimum fan-out",I,2),g("--full","Run unbounded semantic analysis on large indexes")],budget:"candidate-scan",renderShape:"table",docs:v("Graph"),handler:d_},{id:"deep-chains",command:"deep-chains",description:"Find the longest transitive dependency chains",options:[g("-n, --limit <n>","Number of chains to show",I,10),g("-s, --scope <path>","Limit to files matching path"),g("--min-depth <n>","Minimum chain depth",I,3)],renderShape:"custom",docs:v("Graph"),handler:y_},Oi({id:"call-graph",command:"call-graph <symbol>",description:"Show incoming callers and outgoing callees for a symbol",options:[g("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",docs:v("Graph"),query:({db:e,args:t,budget:n})=>Kn(e,String(t[0]),{semantic:n.semantic}),emptyMessage:e=>e?void 0:"Symbol not found.",before:e=>{e&&console.log(`Symbol: ${e.shortName}
890
- `)},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 b_=ee("complexity",({db:e,args:t,budget:n})=>{let r=lr(e,O(t,0),{semantic:n.semantic});if(!r)return L.empty("Symbol not found.");console.log(`${ce(r.relativePath,r.startLine,r.endLine)} ${r.shortName}
891
- `),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}`)}),S_=V(({db:e,opts:t})=>{let n=Ns(e,{samples:C(t,"samples",50),scope:k(t,"scope")});if(!n.available)return L.empty("No semantic provider available to audit against (TypeScript projects only).");console.log(`Sampled ${n.sampleSize} symbols; oracle answered ${Math.round(n.oracleCoverage*100)}%.
892
- `),console.log("Agreement with compiler semantics (file-level):");for(let r of n.scores){let i=r.precision===null?`unverified ${r.unverified} (oracle partial \u2014 no precision claim)`:`precision ${r.precision}`;console.log(` ${r.question.padEnd(11)} ${i} recall ${r.recall} (${r.comparedSymbols} symbols)`)}if(n.topDisagreements.length>0){console.log(`
893
- Top disagreements (debugging targets):`);for(let r of n.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(", ")}`)}}),Id=[{id:"self-audit",command:"self-audit",description:"Score the cheap evidence paths against the TypeScript compiler oracle on sampled symbols",options:[g("--samples <n>","Number of symbols to sample",I,50),g("-s, --scope <path>","Limit sampling to files matching path")],renderShape:"custom",docs:v("Health",["scip-query self-audit --samples 100"]),handler:S_},{id:"complexity",command:"complexity <symbol>",description:"Per-symbol complexity: branches, cyclomatic estimate, fan-in/out, callees",options:[g("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",renderShape:"custom",docs:v("Health"),handler:b_}];var x_=V(({db:e,args:t,opts:n})=>{let r=er(e,O(t,0),{maxDepth:C(n,"maxDepth",5),scope:k(n,"scope")});if(r.length===0)return L.empty("No affected symbols found.");let i=-1;for(let o of r)o.depth!==i&&(console.log(`
894
- \u2500\u2500 Depth ${o.depth} \u2500\u2500`),i=o.depth),console.log(` ${o.file} ${o.shortName}`);console.log(`
895
- ${r.length} affected symbol(s) across ${new Set(r.map(o=>o.file)).size} files.`)}),C_=V(({db:e,args:t,opts:n})=>{let r=t[0]===void 0?void 0:O(t,0),i=Bt(e,r,{minTogether:C(n,"minTogether",4),limit:C(n,"limit",30),includeLinked:n.all===!0});if(!i.available)return L.empty("No git history available (not a repository, or git missing).");if(i.findings.length===0)return L.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):
896
- `:`Hidden coupling \u2014 pairs that co-change with no dependency edge (${i.commitsAnalyzed} commits analyzed):
897
- `);for(let o of i.findings){let s=o.structurallyLinked?" [dep edge]":"";console.log(` ${o.together}x (${Math.round(o.confidence*100)}%) ${o.fileA} <-> ${o.fileB}${s}`)}console.log(`
898
- ${i.findings.length} pair(s). Co-editing one side without the other is how drift starts.`)}),R_=ee("change-surface",({db:e,args:t,budget:n})=>{let r=tr(e,O(t,0),{semantic:n.semantic});if(!r)return L.empty("File not found in index.");console.log(`File: ${r.file}`),console.log(`External consumers: ${r.totalExternalConsumers}
899
- `),L.list(r.symbols,i=>{let o=i.riskLevel==="high"?" *** HIGH RISK ***":i.riskLevel==="medium"?" * medium risk *":"";return` ${de(i.startLine,i.endLine)} ${i.shortName} [${i.externalConsumers} consumers]${o}`})}),I_=V(({db:e,opts:t})=>{let n=ar(e,{base:k(t,"base"),minContainment:C(t,"minContainment",.7),maxHelpers:we(t,"maxHelpers"),limit:C(t,"limit",20)});if(!n.available)return L.empty("No git history available (not a repository, or git missing).");if(n.changedFiles.length===0)return L.empty(`No changes vs ${n.base}.`);console.log(`Incomplete migrations vs ${n.base}: ${n.changedFiles.length} changed file(s), ${n.helpersChecked} new helper(s) scored.`),n.note&&console.log(` note: ${n.note}`);for(let r of n.skipped)console.log(` skipped ${r.helperShortName} (${r.helperFile}): ${r.reason}`);if(n.findings.length===0){console.log(`
900
- No incomplete migrations detected.`);return}for(let r of n.findings){console.log(`
901
- ${r.helperShortName} (${r.helperFile})`),console.log(` wired into: ${r.migratedFiles.join(", ")}`);for(let i of r.leftovers)console.log(` un-migrated: ${Math.round(i.containment*100)}% ${i.shortName} (${i.file})`),console.log(` shared: ${i.sharedCallees.join(", ")}`)}console.log(`
902
- ${n.findings.length} helper(s) with un-migrated sites. Finish the extraction or confirm the sites differ on purpose.`)});function v_(e){let t=Array.isArray(e)?e:[],n=t.filter(r=>!pi.includes(r));return n.length>0&&(console.error(`error: unknown --skip check(s): ${n.join(", ")}. Valid checks: ${pi.join(", ")}`),process.exit(1)),t}var D_=V(({db:e,opts:t})=>{let n=t.hook===!0;if(n&&qm(Hm()))return;!n&&As(e)&&va(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 r=gs(e,{base:k(t,"base"),minTogether:C(t,"minTogether",6),maxEchoChecks:we(t,"maxEchoChecks"),maxHelpers:we(t,"maxHelpers"),skip:v_(t.skip)});if(n){if(r.findings.length===0)return;console.error(Vm(r)),process.exitCode=2;return}if(r.changedFiles.length===0)return L.empty(r.note??`No changes vs ${r.base}.`);console.log(`Diff gate vs ${r.base}: ${r.changedFiles.length} file(s), ${r.changedSymbols} symbol(s) changed.`),console.log(`Checks: ${r.checksRun.join(", ")}
903
- `);for(let i of r.skipped)console.log(` skipped ${i.check}: ${i.reason}`);if(r.findings.length===0){console.log("PASS: this change introduces no gate findings.");return}for(let i of r.findings)console.log(` [${i.check}] ${i.message}`),console.log(` -> ${i.remediation}`);console.log(`
904
- FAIL: ${r.findings.length} finding(s). Fix or knowingly accept before merging.`),process.exitCode=1}),vd=[{id:"affected",command:"affected <symbol>",description:"Transitive closure of symbols that could break if this symbol changes",options:[g("--max-depth <n>","Maximum traversal depth",I,5),g("-s, --scope <path>","Limit to files matching path")],renderShape:"custom",docs:v("Impact"),handler:x_},{id:"change-surface",command:"change-surface <file>",description:"Pre-change briefing: exports, consumers, and blast-radius risk",options:[g("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",renderShape:"list",docs:v("Impact"),handler:R_},{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:[g("--base <ref>","Git ref to diff against (default: HEAD)"),g("--min-together <n>","Minimum historical co-changes for the partner check",I,6),g("--max-echo-checks <n>","Maximum changed symbols to test for echoes (default: all)",I),g("--max-helpers <n>","Maximum new helpers to score for incomplete-migration (default: all)",I),g("--skip <check>","Skip a check (repeatable): echo, incomplete-migration, co-change-partner, doc-reference, unused-params, new-dead, baseline",Ci,[]),g("--hook","Agent Stop-hook mode: silent on pass, exit 2 with findings on stderr to block the stop")],heuristic:{label:"diff gate candidates"},renderShape:"custom",docs:v("Impact",["scip-query diff-gate","scip-query diff-gate --base origin/main"]),handler:D_},{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:[g("--base <ref>","Git ref to diff against (default: HEAD)"),g("--min-containment <n>","Minimum share of helper callees a site must contain (0-1)",Jt,.7),g("--max-helpers <n>","Maximum new helpers to score (default: all)",I),g("-n, --limit <n>","Maximum findings to report",I,20)],heuristic:{label:"incomplete migration candidates"},renderShape:"custom",docs:v("Impact",["scip-query incomplete-migration","scip-query incomplete-migration --base origin/main"]),handler:I_},{id:"co-change",command:"co-change [file]",description:"Files that change together in git history without a dependency edge \u2014 hidden coupling candidates",options:[g("--min-together <n>","Minimum commits where both files changed",I,4),g("-n, --limit <n>","Maximum pairs to report",I,30),g("--all","Include pairs that already have a dependency edge")],heuristic:{label:"co-change candidates"},renderShape:"custom",docs:v("Impact",["scip-query co-change","scip-query co-change src/runtime/config.ts"]),handler:C_}];function N_(e){let t=[];for(let i of e.definitions){let o=i.signature?` \u2014 ${i.signature}`:"";t.push(` ${ce(i.relativePath,i.startLine,i.endLine)}${o}`),i.source&&t.push(i.source.split(`
905
- `).map((s,a)=>` ${xe(i.startLine+a)} ${s}`).join(`
906
- `))}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 ${xe(i.line)} in ${i.enclosingShort}`);return[{title:"DEFINITION",rows:t},{title:"REFERENCED BY",rows:n}]}var __=V(({db:e,args:t,opts:n})=>{let r=O(t,0),i=j(n,"signatures"),o=Oo(e,r);if(o.length===0)return L.empty(`No symbols found for "${r}".`);function s(a,c){for(let l of a){let u=" ".repeat(c),m=i&&l.signature?` - ${L_(l.signature)}`:"";console.log(`${u}${de(l.startLine,l.endLine)} ${l.shortName}${m}`),s(l.children,c+1)}}s(o,0)});function L_(e){return e.length>120?`${e.slice(0,117)}...`:e}var w_=it("imports",{query:({db:e,args:t,budget:n})=>To(e,O(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)."}),E_=Ai("refs",{query:({db:e,args:t,budget:n})=>_o(e,O(t,0),{semantic:n.semantic}),format:e=>` line ${xe(e.line)}`}),k_=V(({db:e,args:t,opts:n})=>{let r=Is(e,O(t,0),{context:C(n,"context",0)});if(!r)return L.empty("Symbol not found or file unreadable.");console.log(`${ce(r.relativePath,r.startLine,r.endLine)} ${r.shortName} [${r.language??"unknown"}]
907
- `);let i=r.source.split(`
908
- `);for(let o=0;o<i.length;o++)console.log(` ${String(xe(r.startLine+o)).padStart(4)} ${i[o]}`)}),P_=ee("dataflow",({db:e,args:t,budget:n})=>{let r=ur(e,O(t,0),{semantic:n.semantic});if(!r)return L.empty("Symbol not found.");if(console.log(`${r.shortName} (${r.relativePath})
909
- `),r.definitionSites.length>0){console.log(" \u2550\u2550\u2550 DEFINED AT \u2550\u2550\u2550");for(let i of r.definitionSites)console.log(` ${i.file}:${xe(i.line)}`)}if(r.usageSites.length>0){console.log(`
910
- \u2550\u2550\u2550 USED AT \u2550\u2550\u2550`);for(let i of r.usageSites)console.log(` ${i.file}:${xe(i.line)} in ${i.enclosingShort}`)}if(r.producers.length>0){console.log(`
911
- \u2550\u2550\u2550 PRODUCERS (feeds into this) \u2550\u2550\u2550`);for(let i of r.producers)console.log(` ${i.file} ${i.shortName}`)}if(r.consumers.length>0){console.log(`
912
- \u2550\u2550\u2550 CONSUMERS (this feeds into) \u2550\u2550\u2550`);for(let i of r.consumers)console.log(` ${i.file} ${i.shortName}`)}}),F_=ee("slice",({db:e,args:t,opts:n,budget:r})=>{let i=j(n,"forward")?"forward":"backward",o=Cn(e,O(t,0),{direction:i,maxDepth:C(n,"depth",3),semantic:r.semantic});if(!o)return L.empty("Symbol not found.");if(console.log(`${o.direction} slice of ${o.shortName}
913
- `),o.connectedSymbols.length===0){console.log(" No connected symbols found.");return}L.list(o.connectedSymbols,s=>` ${s.file} ${s.shortName}
887
+ ${e.length} function(s) with trailing unused parameters.`)});function Ze(e){return{docs:R("Cleanup"),...e}}function Ce({heuristicLabel:e,...t}){return Ze({...t,heuristic:{label:e}})}var ns=[Ze({id:"unused-params",command:"unused-params",description:"Speculative-generality candidates: trailing parameters no body ever uses (TS/JS)",options:T([f("-s, --scope <path>","Limit to files matching path"),f("-n, --limit <n>","Maximum findings",x,30),f("--full","Run unbounded analysis on large indexes")]),budget:"candidate-scan",heuristic:{label:"unused trailing parameter candidates"},renderShape:"list",docs:R("Cleanup",["scip-query unused-params -s src/services"]),handler:Nh}),Ze({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",x,1),f("--max-depth <n>","Maximum cascade depth",x,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:R("Cleanup",["scip-query cleanup-plan --min-loc 3","scip-query cleanup-plan --verify"]),handler:wh}),Ze({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",x,1),f("--max-depth <n>","Maximum cascade depth",x,5),f("--verified","Required: verify the selected cleanup batch before applying it"),f("--batch <n>","Apply one batch depth",x),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:R("Cleanup",["scip-query cleanup-apply --verified --batch 0"]),handler:kh}),Ze({id:"recent-duplicates",command:"recent-duplicates",description:"Directional duplicate candidates: recent code that re-implements established callable, React, or Vue code",options:T([f("--window <n>",'How many commits back counts as "recent"',x,100),f("--min-similarity <n>","Minimum similarity (0-1); omitted uses detector defaults",Xe),f("-n, --limit <n>","Maximum findings",x,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:R("Cleanup",["scip-query recent-duplicates --window 50"]),handler:Dh}),Ze({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:T([f("-n, --limit <n>","Maximum docs to report",x,20),f("--min-coupling <n>","Minimum historical co-changes to track a subject",x,3),f("--full","Run unbounded analysis on large indexes")]),heuristic:{label:"doc drift candidates"},renderShape:"custom",docs:R("Cleanup",["scip-query doc-drift","scip-query doc-drift AGENTS.md"]),handler:Ih}),Ze({id:"dead",command:"dead [scope]",description:"Find dead code and file-internal symbols (no cross-file consumers)",options:T([f("--min-loc <n>","Only show symbols >= N lines",x,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:R("Cleanup",["scip-query dead --min-loc 10"]),handler:rh}),Ze({id:"unused-imports",command:"unused-imports <file>",description:"Find imports not referenced in the same file",options:T([f("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"list",handler:oh}),Ze({id:"isolated",command:"isolated",description:"Find completely orphaned symbols (no references at all)",options:T([f("-s, --scope <path>","Limit to files matching path"),f("--min-loc <n>","Minimum lines of code",x,3),f("--full","Run unbounded semantic analysis on large indexes")]),budget:"candidate-scan",renderShape:"grouped-by-file",handler:sh}),Ce({id:"similar",command:"similar [symbol]",description:"Find heuristic function similarity candidates from callee fingerprints",options:T([f("--min-similarity <n>","Minimum Jaccard similarity (0-1)",Xe,.4),f("-n, --limit <n>","Number of results",x,20),f("-s, --scope <path>","Limit to files matching path"),f("--min-callees <n>","Minimum callees to consider",x,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:ph}),Ce({id:"similar-files",command:"similar-files [file]",description:"Find heuristic similar-file candidates from dependency profiles",options:T([f("--min-similarity <n>","Minimum Jaccard similarity (0-1)",Xe,.5),f("-n, --limit <n>","Number of results",x,20),f("-s, --scope <path>","Limit to files matching path"),f("--min-deps <n>","Minimum dependencies to consider",x),f("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"similar file candidates",renderShape:"custom",handler:fh}),Ce({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:T([f("--min-similarity <n>","Minimum JSX structure similarity (0-1)",Xe,.62),f("--min-tokens <n>","Minimum structural tokens to consider",x,8),f("-n, --limit <n>","Number of results",x,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:gh}),Ce({id:"react-hook-candidates",command:"react-hook-candidates [file]",description:"Find heuristic React hook extraction candidates from shared state, effects, requests, and handlers",options:T([f("--min-similarity <n>","Minimum behavior similarity (0-1)",Xe,.45),f("--min-shared-behaviors <n>","Minimum shared behavior tokens",x,6),f("-n, --limit <n>","Number of results",x,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:hh}),Ce({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:T([f("--min-component-lines <n>","Minimum component lines",x,300),f("--min-file-lines <n>","Minimum file lines",x,800),f("--min-jsx-tokens <n>","Minimum JSX structure tokens",x,80),f("--min-behavior-tokens <n>","Minimum behavior tokens",x,40),f("-n, --limit <n>","Number of results",x,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:bh}),Ce({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:T([f("--min-similarity <n>","Minimum template similarity (0-1)",Xe,.62),f("--min-tokens <n>","Minimum structural tokens to consider",x,8),f("-n, --limit <n>","Number of results",x,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:yh}),Ce({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:T([f("--min-similarity <n>","Minimum behavior similarity (0-1)",Xe,.45),f("--min-shared-behaviors <n>","Minimum shared behavior tokens",x,6),f("-n, --limit <n>","Number of results",x,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:Sh}),Ce({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:T([f("--min-total-lines <n>","Minimum total component lines",x,800),f("--min-template-lines <n>","Minimum template lines",x,300),f("--min-script-lines <n>","Minimum script lines",x,300),f("--min-style-lines <n>","Minimum style lines",x,500),f("--review-thresholds","Use lower review thresholds without changing health scoring"),f("-n, --limit <n>","Number of results",x,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:xh}),Ce({id:"similar-chains",command:"similar-chains",description:"Find heuristic similar-chain candidates from dependency flows",options:T([f("--min-similarity <n>","Minimum chain similarity (0-1)",Xe,.5),f("-n, --limit <n>","Number of results",x,15),f("-s, --scope <path>","Limit to files matching path"),f("--min-length <n>","Minimum chain length",x,3),f("--max-length <n>","Maximum chain length",x,8),f("--full","Run unbounded analysis on large indexes")]),heuristicLabel:"similar chain candidates",renderShape:"custom",handler:Ch}),Ce({id:"extract-candidates",command:"extract-candidates",description:"Find heuristic extraction candidates from isolated callee clusters",options:T([f("-s, --scope <path>","Limit to files matching path"),f("--min-loc <n>","Minimum function LOC",x,10),f("--min-callees <n>","Minimum callees to analyze",x,6),f("-n, --limit <n>","Number of results",x,20),f("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"extraction candidates",budget:"candidate-scan",renderShape:"custom",handler:ah}),Ce({id:"locality-candidates",command:"locality-candidates [symbol-or-file]",description:"Find directory-locality and ancestry candidates from consumer ownership",options:T([f("-s, --scope <path>","Limit scan mode to files matching path"),f("--min-consumers <n>","Minimum consumers in scan mode",x,1),f("-n, --limit <n>","Number of results",x,20),f("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"locality candidates",budget:"candidate-scan",renderShape:"custom",docs:R("Cleanup",["scip-query locality-candidates","scip-query locality-candidates formatName --json","scip-query locality-candidates src/shared/date.ts"]),handler:ch}),Ce({id:"drift",command:"drift [module]",description:"Detect heuristic drift candidates: unused imports, layer violations, and pattern deviations",options:T([f("--min-deviation <n>","Minimum sibling files before reporting unique dependency deviations",Vo,5),f("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"drift candidates",budget:"semantic",renderShape:"grouped-by-file",handler:vh}),Ce({id:"wrapper-candidates",command:"wrapper-candidates",description:"Find heuristic wrapper candidates only called by one consumer",options:T([f("-s, --scope <path>","Limit to files matching path"),f("--max-loc <n>","Maximum LOC for candidates",x,15),f("-n, --limit <n>","Number of results",x,30),f("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"wrapper candidates",budget:"candidate-scan",renderShape:"list",handler:lh}),Ce({id:"passthrough-candidates",command:"passthrough-candidates",description:"Find heuristic passthrough candidates that forward to one callee",options:T([f("-s, --scope <path>","Limit to files matching path"),f("--max-loc <n>","Maximum LOC for candidates",x,15),f("-n, --limit <n>","Number of results",x,30),f("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"passthrough candidates",budget:"candidate-scan",renderShape:"list",handler:uh}),Ce({id:"stale-abstractions",command:"stale-abstractions",description:"Find heuristic stale abstraction candidates with 0-1 consumers",options:T([f("-s, --scope <path>","Limit to files matching path"),f("--min-loc <n>","Minimum LOC",x,3),f("-n, --limit <n>","Number of results",x,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:dh}),Ce({id:"complexity-hotspots",command:"complexity-hotspots",description:"Find heuristic complexity hotspot candidates from LOC x fan-in x fan-out",options:T([f("-s, --scope <path>","Limit to files matching path"),f("--min-loc <n>","Minimum LOC",x,10),f("-n, --limit <n>","Number of results",x,20),f("--full","Run unbounded semantic analysis on large indexes")]),heuristicLabel:"complexity hotspot candidates",budget:"candidate-scan",renderShape:"table",handler:mh}),Ze({id:"convergence",command:"convergence <symbol1> <symbol2>",description:"Show what a consolidated version of two similar functions would look like",options:T([f("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"custom",handler:Rh}),nh({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",x,30),f("--full","Run unbounded analysis on large indexes")],docs:R("Cleanup"),query:({db:e,opts:t})=>fc(e,{scope:P(t,"scope"),limit:O(t,"limit",30)}),format:e=>` ${e.shortName} (from ${e.originalFile})
888
+ barrel: ${e.barrelConsumers} consumer(s) | direct: ${e.directConsumers} consumer(s) | tier: ${e.actionTier}
889
+ Recommendation: ${e.recommendation}`+(e.surfaceEvidence.length>0?`
890
+ Surface evidence: ${e.surfaceEvidence.join("; ")}`:""),key:e=>e.barrelFile,emptyMessage:()=>"No redundant re-exports found.",after:e=>console.log(`
891
+ ${e.length} redundant re-export(s).`)}),Ze({id:"similar-signatures",command:"similar-signatures",description:"Find functions with near-identical type signatures (same shape)",options:T([f("-s, --scope <path>","Limit to files matching path"),f("--min-loc <n>","Minimum LOC per function",x,3),f("-n, --limit <n>","Number of groups",x,20),f("--full","Run unbounded semantic analysis on large indexes")]),budget:"candidate-scan",renderShape:"list",handler:Lh})];var U$=z(({db:e,args:t,opts:n})=>{let i=Ae(e);if(v(n,"json")){$("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: ${ci(i.indexSizeBytes)}`),i.lastBuilt&&console.log(`Last built: ${i.lastBuilt.toISOString().replace("T"," ").slice(0,19)}`)}),Eh=[{id:"stats",command:"stats",description:"Show index statistics",options:[Ic()],renderShape:"custom",docs:R("Core"),handler:U$}];var W$=Yo("bottlenecks",{headers:["tier","risk","score","fan-in","fan-out","symbol"],query:({db:e,opts:t,budget:n})=>da(e,{limit:O(t,"limit",20),scope:P(t,"scope"),minFanIn:I(t,"minFanIn",2),minFanOut:I(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."}),G$=z(({db:e,args:t,opts:n})=>{let i=ge(t,0),r=O(n,"limit",30);if(i){let s=oa(e,i);if(v(n,"json")){$("fan-in",t,n,{mode:"symbol",symbol:i,rows:s});return}if(s.length===0)return D.empty(`No fan-in for ${i}.`);D.list(s,a=>` ${String(a.count).padStart(4)} files ${a.name}`);return}let o=aa(e,{limit:r,scope:P(n,"scope")});if(v(n,"json")){$("fan-in",t,n,{mode:"top",rows:o});return}D.table(["files","symbol"],o.map(s=>` ${String(s.count).padStart(5)} ${s.name}`))}),z$=z(({db:e,args:t,opts:n})=>{let i=ge(t,0),r=O(n,"limit",30);if(i){let s=sa(e,i);if(v(n,"json")){$("fan-out",t,n,{mode:"file",file:i,rows:s});return}if(s.length===0)return D.empty(`No fan-out for ${i}.`);D.list(s,a=>` ${String(a.count).padStart(4)} symbols ${a.name}`);return}let o=ca(e,{limit:r,scope:P(n,"scope")});if(v(n,"json")){$("fan-out",t,n,{mode:"top",rows:o});return}D.table(["symbols","file"],o.map(s=>` ${String(s.count).padStart(7)} ${s.name}`))}),K$=z(({db:e,args:t,opts:n})=>{let i=ge(t,0),r=ge(t,1),o=O(n,"limit",20);if(i&&r){let a=la(e,i,r);if(v(n,"json")){$("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=ua(e,{limit:o,scope:P(n,"scope")});if(v(n,"json")){$("coupling",t,n,{mode:"top",rows:s});return}D.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}`))}),J$=Dn({commandName:"cycles",query:({db:e,opts:t})=>an(e,{scope:P(t,"scope"),maxDepth:I(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(`
892
+ 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(`
893
+ ${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.)`)}}),Q$=Dn({commandName:"deep-chains",query:({db:e,opts:t})=>ha(e,{limit:O(t,"limit",10),scope:P(t,"scope"),minDepth:I(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(`
894
+ 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("; ")}`)}}}),Ph=[es({id:"hotspots",command:"hotspots",description:"Most-referenced symbols in the codebase (choke points)",options:[f("-n, --limit <n>","Number of results",x,30),f("-s, --scope <path>","Limit to files matching path"),f("--full","Run unbounded analysis on large indexes")],docs:R("Graph"),headers:["refs","files","symbol"],query:({db:e,opts:t})=>Zs(e,{limit:O(t,"limit",30),scope:P(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:T([f("-n, --limit <n>","Number of results for top mode",x,30),f("-s, --scope <path>","Limit to files matching path"),f("--full","Run unbounded analysis on large indexes")]),renderShape:"custom",docs:R("Graph"),handler:G$},{id:"fan-out",command:"fan-out [file]",description:"How many external symbols a file uses (or top fan-out across codebase)",options:T([f("-n, --limit <n>","Number of results for top mode",x,30),f("-s, --scope <path>","Limit to files matching path"),f("--full","Run unbounded analysis on large indexes")]),renderShape:"custom",docs:R("Graph"),handler:z$},{id:"coupling",command:"coupling [file1] [file2]",description:"Coupling between two files, or top coupled pairs in codebase",options:T([f("-n, --limit <n>","Number of results for top mode",x,20),f("-s, --scope <path>","Limit to files matching path"),f("--full","Run unbounded analysis on large indexes")]),renderShape:"custom",docs:R("Graph"),handler:K$},{id:"cycles",command:"cycles",description:"Detect circular dependency chains between files",options:T([f("-s, --scope <path>","Limit to files matching path"),f("--max-depth <n>","Maximum cycle depth",x,10)]),renderShape:"custom",docs:R("Graph"),handler:J$},{id:"bottlenecks",command:"bottlenecks",description:"Find coupling hubs: high fan-in AND high fan-out",options:T([f("-n, --limit <n>","Number of results",x,20),f("-s, --scope <path>","Limit to files matching path"),f("--min-fan-in <n>","Minimum fan-in",x,2),f("--min-fan-out <n>","Minimum fan-out",x,2),f("--full","Run unbounded semantic analysis on large indexes")]),budget:"candidate-scan",renderShape:"table",docs:R("Graph"),handler:W$},{id:"deep-chains",command:"deep-chains",description:"Find the longest transitive dependency chains",options:T([f("-n, --limit <n>","Number of chains to show",x,10),f("-s, --scope <path>","Limit to files matching path"),f("--min-depth <n>","Minimum chain depth",x,3),f("--full","Run unbounded analysis on large indexes")]),renderShape:"custom",docs:R("Graph"),handler:Q$},ts({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:R("Graph"),query:({db:e,args:t,budget:n})=>Bi(e,String(t[0]),{semantic:n.semantic}),emptyMessage:e=>e?void 0:"Symbol not found.",before:e=>{e&&console.log(`Symbol: ${e.shortName}
895
+ `)},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 X$=Q("complexity",({db:e,args:t,opts:n,budget:i})=>{let r=nr(e,H(t,0),{semantic:i.semantic});if(v(n,"json")){$("complexity",t,n,r);return}if(!r)return D.empty("Symbol not found.");console.log(`${fe(r.relativePath,r.startLine,r.endLine)} ${r.shortName}
896
+ `),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}`)}),Y$=z(({db:e,args:t,opts:n})=>{let i=hc(e,{samples:I(n,"samples",50),scope:P(n,"scope")});if(v(n,"json")){$("self-audit",t,n,i);return}if(!i.available)return D.empty("No semantic provider available to audit against (TypeScript projects only).");console.log(`Sampled ${i.sampleSize} symbols; oracle answered ${Math.round(i.oracleCoverage*100)}%.
897
+ `),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(`
898
+ 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(", ")}`)}}),_h=[{id:"self-audit",command:"self-audit",description:"Score the cheap evidence paths against the TypeScript compiler oracle on sampled symbols",options:T([f("--samples <n>","Number of symbols to sample",x,50),f("-s, --scope <path>","Limit sampling to files matching path")]),renderShape:"custom",docs:R("Health",["scip-query self-audit --samples 100"]),handler:Y$},{id:"complexity",command:"complexity <symbol>",description:"Per-symbol complexity: branches, cyclomatic estimate, fan-in/out, callees",options:T([f("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"custom",docs:R("Health"),handler:X$}];var Z$=z(({db:e,args:t,opts:n})=>{let i=zi(e,H(t,0),{maxDepth:I(n,"maxDepth",5),scope:P(n,"scope")});if(v(n,"json")){$("affected",t,n,i);return}if(i.length===0)return D.empty("No affected symbols found.");let r=-1;for(let o of i)o.depth!==r&&(console.log(`
899
+ \u2500\u2500 Depth ${o.depth} \u2500\u2500`),r=o.depth),console.log(` ${o.file} ${o.shortName}`);console.log(`
900
+ ${i.length} affected symbol(s) across ${new Set(i.map(o=>o.file)).size} files.`)}),eA=z(({db:e,args:t,opts:n})=>{let i=t[0]===void 0?void 0:H(t,0),r=yn(e,i,{minTogether:I(n,"minTogether",4),limit:O(n,"limit",30),includeLinked:n.all===!0});if(v(n,"json")){$("co-change",t,n,r);return}if(!r.available)return D.empty("No git history available (not a repository, or git missing).");if(r.findings.length===0)return D.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):
901
+ `:`Hidden coupling \u2014 pairs that co-change with no dependency edge (${r.commitsAnalyzed} commits analyzed):
902
+ `);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 ${tA(o.lastTogetherAt)}`),console.log(` subjects: ${nA(o.subjectContext)}`),o.declaredCouplingSuggestion&&console.log(` declare coupling: ${o.declaredCouplingSuggestion.name} (${o.declaredCouplingSuggestion.reason})`)}console.log(`
903
+ ${r.findings.length} pair(s). Co-editing one side without the other is how drift starts.`)});function tA(e){return e<=0?"unknown":new Date(e*1e3).toISOString().slice(0,10)}function nA(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 iA=Q("change-surface",({db:e,args:t,opts:n,budget:i})=>{let r=Ki(e,H(t,0),{semantic:i.semantic});if(v(n,"json")){$("change-surface",t,n,r);return}if(!r)return D.empty("File not found in index.");console.log(`File: ${r.file}`),console.log(`External consumers: ${r.totalExternalConsumers}
904
+ `),D.list(r.symbols,o=>{let s=o.riskLevel==="high"?" *** HIGH RISK ***":o.riskLevel==="medium"?" * medium risk *":"";return` ${Se(o.startLine,o.endLine)} ${o.shortName} [${o.externalConsumers} consumers]${s}`})}),rA=z(({db:e,args:t,opts:n})=>{let i=er(e,{base:P(n,"base"),minContainment:I(n,"minContainment",.7),maxHelpers:Ne(n,"maxHelpers"),limit:O(n,"limit",20)});if(v(n,"json")){$("incomplete-migration",t,n,i),i.available&&i.findings.length>0&&(process.exitCode=1);return}if(!i.available)return D.empty("No git history available (not a repository, or git missing).");if(i.changedFiles.length===0)return D.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(`
905
+ No incomplete migrations detected.`);return}for(let r of i.findings){console.log(`
906
+ ${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(`
907
+ ${i.findings.length} helper(s) with un-migrated sites. Finish the extraction or confirm the sites differ on purpose.`)});function oA(e){let t=Array.isArray(e)?e:[],n=t.filter(i=>!wo.includes(i));return n.length>0&&(console.error(`error: unknown --skip check(s): ${n.join(", ")}. Valid checks: ${wo.join(", ")}`),process.exit(1)),t}var sA=z(({db:e,opts:t})=>{let n=t.hook===!0;if(n&&Lg(Rg()))return;!n&&kc(e)&&Ll(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=rc(e,{base:P(t,"base"),minTogether:I(t,"minTogether",6),maxEchoChecks:Ne(t,"maxEchoChecks"),maxHelpers:Ne(t,"maxHelpers"),skip:oA(t.skip)});if(!n&&v(t,"json")){$("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(wg(i)),process.exitCode=2;return}if(i.changedFiles.length===0)return D.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(", ")}
908
+ `);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: ${Ao(s)}`);o.declaredCouplingSuggestion&&console.log(` declare coupling: ${o.declaredCouplingSuggestion.name} (${o.declaredCouplingSuggestion.reason})`),console.log(` -> ${o.remediation}`)}console.log(`
909
+ 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}),Th=[{id:"affected",command:"affected <symbol>",description:"Transitive closure of symbols that could break if this symbol changes",options:T([f("--max-depth <n>","Maximum traversal depth",x,5),f("-s, --scope <path>","Limit to files matching path")]),renderShape:"custom",docs:R("Impact"),handler:Z$},{id:"change-surface",command:"change-surface <file>",description:"Pre-change briefing: exports, consumers, and blast-radius risk",options:T([f("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"list",docs:R("Impact"),handler:iA},{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",x,6),f("--max-echo-checks <n>","Maximum changed symbols to test for echoes (default: all)",x),f("--max-helpers <n>","Maximum new helpers to score for incomplete-migration (default: all)",x),f("--skip <check>","Skip a check (repeatable): echo, incomplete-migration, co-change-partner, doc-reference, unused-params, new-dead, baseline",Bo,[]),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:R("Impact",["scip-query diff-gate","scip-query diff-gate --base origin/main"]),handler:sA},{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:T([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)",Xe,.7),f("--max-helpers <n>","Maximum new helpers to score (default: all)",x),f("-n, --limit <n>","Maximum findings to report",x,20),f("--full","Run unbounded analysis on large indexes")]),heuristic:{label:"incomplete migration candidates"},renderShape:"custom",docs:R("Impact",["scip-query incomplete-migration","scip-query incomplete-migration --base origin/main"]),handler:rA},{id:"co-change",command:"co-change [file]",description:"Files that change together in git history without a dependency edge \u2014 hidden coupling candidates",options:T([f("--min-together <n>","Minimum commits where both files changed",x,4),f("-n, --limit <n>","Maximum pairs to report",x,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:R("Impact",["scip-query co-change","scip-query co-change src/runtime/config.ts"]),handler:eA}];function aA(e){let t=[];for(let r of e.definitions){let o=r.signature?` \u2014 ${r.signature}`:"";t.push(` ${fe(r.relativePath,r.startLine,r.endLine)}${o}`),r.source&&t.push(r.source.split(`
910
+ `).map((s,a)=>` ${$e(r.startLine+a)} ${s}`).join(`
911
+ `))}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 ${$e(r.line)} in ${r.enclosingShort}`);return[{title:"DEFINITION",rows:t},{title:"REFERENCED BY",rows:n}]}var cA=z(({db:e,args:t,opts:n})=>{let i=H(t,0),r=v(n,"signatures"),o=ia(e,i);if(v(n,"json")){$("outline",t,n,o);return}if(o.length===0)return D.empty(`No symbols found for "${i}".`);function s(a,c){for(let l of a){let u=" ".repeat(c),d=r&&l.signature?` - ${lA(l.signature)}`:"";console.log(`${u}${Se(l.startLine,l.endLine)} ${l.shortName}${d}`),s(l.children,c+1)}}s(o,0)});function lA(e){return e.length>120?`${e.slice(0,117)}...`:e}var uA=Nt("imports",{query:({db:e,args:t,budget:n})=>ea(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)."}),dA=Zo("refs",{query:({db:e,args:t,budget:n})=>zs(e,H(t,0),{semantic:n.semantic}),format:e=>` line ${$e(e.line)}`}),mA=z(({db:e,args:t,opts:n})=>{let i=pc(e,H(t,0),{context:I(n,"context",0)});if(v(n,"json")){$("code",t,n,i);return}if(!i)return D.empty("Symbol not found or file unreadable.");console.log(`${fe(i.relativePath,i.startLine,i.endLine)} ${i.shortName} [${i.language??"unknown"}]
912
+ `);let r=i.source.split(`
913
+ `);for(let o=0;o<r.length;o++)console.log(` ${String($e(i.startLine+o)).padStart(4)} ${r[o]}`)}),pA=Q("dataflow",({db:e,args:t,opts:n,budget:i})=>{let r=ir(e,H(t,0),{semantic:i.semantic});if(v(n,"json")){$("dataflow",t,n,r);return}if(!r)return D.empty("Symbol not found.");if(console.log(`${r.shortName} (${r.relativePath})
914
+ `),r.definitionSites.length>0){console.log(" \u2550\u2550\u2550 DEFINED AT \u2550\u2550\u2550");for(let o of r.definitionSites)console.log(` ${o.file}:${$e(o.line)}`)}if(r.usageSites.length>0){console.log(`
915
+ \u2550\u2550\u2550 USED AT \u2550\u2550\u2550`);for(let o of r.usageSites)console.log(` ${o.file}:${$e(o.line)} in ${o.enclosingShort}`)}if(r.producers.length>0){console.log(`
916
+ \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(`
917
+ \u2550\u2550\u2550 CONSUMERS (this feeds into) \u2550\u2550\u2550`);for(let o of r.consumers)console.log(` ${o.file} ${o.shortName}`)}}),fA=Q("slice",({db:e,args:t,opts:n,budget:i})=>{let r=v(n,"forward")?"forward":"backward",o=oi(e,H(t,0),{direction:r,maxDepth:I(n,"depth",3),semantic:i.semantic});if(v(n,"json")){$("slice",t,n,o);return}if(!o)return D.empty("Symbol not found.");if(console.log(`${o.direction} slice of ${o.shortName}
918
+ `),o.connectedSymbols.length===0){console.log(" No connected symbols found.");return}D.list(o.connectedSymbols,s=>` ${s.file} ${s.shortName}
914
919
  ${s.relationship}`),console.log(`
915
- ${o.connectedSymbols.length} connected symbol(s).`)}),Dd=[Je({id:"files",command:"files <pattern>",description:"Find files matching a pattern",docs:v("Navigation",["scip-query files auth"]),query:({db:e,args:t})=>Bi(e,O(t,0)),format:e=>e.relativePath}),Je({id:"methods",command:"methods <className>",description:"List methods of a class (with line ranges)",docs:v("Navigation"),query:({db:e,args:t})=>No(e,O(t,0)),format:e=>` ${de(e.startLine,e.endLine)} ${e.name}`}),{id:"refs",command:"refs <symbol>",description:"Find all files referencing a symbol",options:[g("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",renderShape:"grouped-by-file",docs:v("Navigation",["scip-query refs login"]),handler:E_},Oi({id:"trace",command:"trace <symbol>",description:"Trace a symbol: definition + all references",options:[g("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",docs:v("Navigation",["scip-query trace parseSymbol"]),query:({db:e,args:t,budget:n})=>Vn(e,O(t,0),{semantic:n.semantic}),sections:N_}),Je({id:"deps",command:"deps <file>",description:"Files this file depends on (internal)",docs:v("Navigation"),query:({db:e,args:t})=>Wn(e,O(t,0)),format:e=>e.relativePath}),Je({id:"rdeps",command:"rdeps <file>",description:"Files that depend on this file/module",docs:v("Navigation"),query:({db:e,args:t})=>Un(e,O(t,0)),format:e=>e.relativePath}),bd({id:"system",command:"system <module>",description:"Full module map: files, symbols, deps in/out",docs:v("Navigation",["scip-query system queries"]),query:({db:e,args:t})=>Gn(e,O(t,0)),sections:e=>[{title:"FILES",rows:e.files},{title:"EXPORTED SYMBOLS",rows:e.symbols.map(t=>` ${de(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}`)}]}),Je({id:"surface",command:"surface <module>",description:"What symbols consumers actually use from this module",docs:v("Navigation"),query:({db:e,args:t})=>Jn(e,O(t,0)),format:e=>` ${e.consumer} \u2192 ${e.shortName}`}),{id:"imports",command:"imports <file>",description:"What symbols does this file import?",options:[g("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",renderShape:"list",docs:v("Navigation"),handler:w_},Je({id:"imported-by",command:"imported-by <symbol>",description:"Which files import this symbol?",docs:v("Navigation"),query:({db:e,args:t})=>Ao(e,O(t,0)),format:e=>` ${e.fromFile}`}),{id:"outline",command:"outline <file>",description:"Tree view of symbols in a file, with line ranges",options:[g("--signatures","Show trimmed symbol signatures")],renderShape:"custom",docs:v("Navigation"),handler:__},Je({id:"members",command:"members <symbol>",description:"All children of a symbol (methods, fields, nested types)",docs:v("Navigation"),query:({db:e,args:t})=>$o(e,O(t,0)),format:e=>` ${de(e.startLine,e.endLine)} [${e.kind}] ${e.shortName}`}),Je({id:"by-kind",command:"by-kind <kind>",description:"Find symbols by SCIP kind (class, interface, enum, function, etc.)",options:[g("-s, --scope <path>","Limit to files matching path"),g("-n, --limit <n>","Number of results",I,100)],docs:v("Navigation"),query:({db:e,args:t,opts:n})=>zo(e,O(t,0),{scope:k(n,"scope"),limit:C(n,"limit",100)}),format:e=>` ${ce(e.relativePath,e.startLine,e.endLine)} [${e.kindName}] ${e.shortName}`,emptyMessage:({args:e})=>`No symbols found for kind "${O(e,0)}". Use "kind-counts" to see available kinds.`,after:e=>console.log(`
916
- ${e.length} symbol(s)`)}),Mi({id:"kind-counts",command:"kind-counts",description:"Histogram of symbol kinds in the codebase",options:[g("-s, --scope <path>","Limit to files matching path")],docs:v("Navigation"),headers:["count","kind"],query:({db:e,opts:t})=>Ko(e,{scope:k(t,"scope")}),format:e=>` ${String(e.count).padStart(5)} ${e.kindName} (${e.kind})`}),Je({id:"hierarchy",command:"hierarchy <symbol>",description:"Show a symbol's ancestry chain (method \u2192 class \u2192 module)",docs:v("Navigation"),query:({db:e,args:t})=>Yo(e,O(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:[g("-C, --context <n>","Extra lines of context above/below",I,0)],renderShape:"custom",docs:v("Navigation"),handler:k_},{id:"dataflow",command:"dataflow <symbol>",description:"Reference-level dataflow: definition sites, usage sites, producers, consumers",options:[g("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",renderShape:"custom",docs:v("Navigation"),handler:P_},{id:"slice",command:"slice <symbol>",description:"Reference-level program slice: what affects this (backward) or what this affects (forward)",options:[g("--forward","Forward slice (what does this affect). Default is backward."),g("--depth <n>","Max transitive depth for backward slice",I,3),g("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",renderShape:"custom",docs:v("Navigation"),handler:F_}];var T_=ee("plan-context",({db:e,args:t,opts:n,budget:r})=>{let i=C(n,"limit",20),o=ys(e,O(t,0),{semantic:r.semantic,impactDepth:C(n,"impactDepth",3),sliceDepth:C(n,"sliceDepth",3),scope:k(n,"scope")});if(o.warnings.length===1&&o.warnings[0]==="No symbol, file, or module matched target.")return L.empty(o.warnings[0]);let s=[{title:"TARGET",rows:A_(o)},{title:"DEFINITIONS",rows:M_(o,i),skipIfEmpty:!0},{title:"REFERENCES",rows:O_(o,i),skipIfEmpty:!0},{title:"CALL GRAPH",rows:$_(o,i),skipIfEmpty:!0},{title:"DATAFLOW",rows:j_(o,i),skipIfEmpty:!0},{title:"DEPENDENCIES",rows:B_(o,i),skipIfEmpty:!0},{title:"SURFACE",rows:H_(o,i),skipIfEmpty:!0},{title:"DOWNSTREAM IMPACT",rows:q_(o,i),skipIfEmpty:!0},{title:"CHANGE RISK",rows:V_(o,i),skipIfEmpty:!0},{title:"HISTORY",rows:W_(o),skipIfEmpty:!0},{title:"PLANNING NOTES",rows:U_(o),skipIfEmpty:!0}];L.sectionedReport(s)}),Nd=[{id:"plan-context",command:"plan-context <target>",description:"Pre-edit planning context for a symbol, file, or module",options:[g("--impact-depth <n>","Maximum affected traversal depth",I,3),g("--slice-depth <n>","Maximum backward slice depth",I,3),g("-s, --scope <path>","Limit downstream impact to files matching path"),g("-n, --limit <n>","Rows per section",I,20),g("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",renderShape:"custom",docs:v("Planning",["scip-query plan-context parseSymbol"]),handler:T_}];function A_(e){return[`Target: ${e.target}`,`Matched: symbol=${pa(e.matched.symbol)} file=${pa(e.matched.file)} module=${pa(e.matched.module)}`]}function M_(e,t){let n=[];for(let r of e.trace.definitions){let i=r.signature?` -- ${r.signature}`:"";n.push(` ${ce(r.relativePath,r.startLine,r.endLine)}${i}`),r.source&&n.push(...r.source.split(`
917
- `).map((o,s)=>` ${String(xe(r.startLine+s)).padStart(4)} ${o}`))}return n.length===0&&n.push(...e.system.symbols.map(r=>` ${de(r.startLine,r.endLine)} ${r.shortName}`)),St(n,t).rows}function O_(e,t){let n=e.trace.referencedBy.map(r=>` ${r.relativePath}:${xe(r.line)} in ${r.enclosingShort}`);return Xt(St(n,t))}function $_(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 Xt(St([...n,...r],t))}function j_(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}:${xe(o.line)} in ${o.enclosingShort}`);return Xt(St([...n,...r,...i],t))}function B_(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 Xt(St(n,t))}function H_(e,t){let n=[...e.system.files.map(r=>` file ${r}`),...e.system.symbols.map(r=>` export ${de(r.startLine,r.endLine)} ${r.shortName}`),...e.surface.map(r=>` use ${r.consumer} -> ${r.shortName}`)];return Xt(St(n,t))}function q_(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 Xt(St(n,t))}function V_(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` ${de(r.startLine,r.endLine)} ${r.shortName} [${r.externalConsumers} consumers]${i}`}))),e.complexity&&(n.push(` Complexity: ${ce(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}`)),Xt(St(n,t))}function W_(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 U_(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 St(e,t){let n=Math.max(1,t);return{rows:e.slice(0,n),omitted:Math.max(0,e.length-n)}}function Xt(e){return e.omitted>0?[...e.rows,` ... ${e.omitted} more`]:e.rows}function pa(e){return e?"yes":"no"}var G_=["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","similar-chains","extract-candidates","affected","change-surface","cleanup-plan","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"],J_=[Cd,Dd,Rd,xd,vd,Nd,Id],_d=J_.flat(),z_=new Map(_d.map(e=>[e.id,e]));for(let e of _d)if(!G_.includes(e.id))throw new Error(`Query command descriptor is not ordered: ${e.id}`);function N(e){let t=z_.get(e);if(!t)throw new Error(`Unknown query command descriptor: ${e}`);return t}var Ld=[{id:"reindex",command:"reindex",description:"Index the codebase and convert to SQLite",options:[g("-l, --language <lang>","Index only this language (can be repeated)",Ci,[]),g("--pnpm-workspaces","Enable pnpm workspace support (TypeScript)"),g("--force","Rebuild even if source inputs are unchanged"),g("--allow-partial","Write an incomplete index when one or more detected languages fail"),g("--indexer-concurrency <n>","Number of language indexers to run at once",Ri)],renderShape:"custom",docs:v("Indexing",["scip-query reindex"]),handler:Xm},{id:"augment-sources",command:"augment-sources",description:"Add source files skipped by upstream SCIP indexers to the SQLite documents table",renderShape:"custom",docs:v("Indexing"),handler:Zm},{id:"augment-vue",command:"augment-vue",description:"Add compiler-resolved Vue SFC references to the SQLite index using Volar",options:[g("--project <tsconfig>","Vue tsconfig path",void 0,"frontend/tsconfig.scip.json")],renderShape:"custom",docs:v("Indexing"),handler:ed},N("stats"),N("files"),N("methods"),N("refs"),N("trace"),N("deps"),N("rdeps"),N("system"),N("surface"),N("dead"),N("hotspots"),N("imports"),N("imported-by"),N("unused-imports"),N("outline"),N("members"),N("fan-in"),N("fan-out"),N("coupling"),N("cycles"),N("bottlenecks"),N("isolated"),N("by-kind"),N("kind-counts"),N("deep-chains"),N("hierarchy"),N("call-graph"),N("similar"),N("similar-files"),N("similar-chains"),N("extract-candidates"),N("affected"),N("change-surface"),N("cleanup-plan"),N("co-change"),N("recent-duplicates"),N("doc-drift"),N("unused-params"),N("diff-gate"),N("incomplete-migration"),N("plan-context"),{id:xi,command:xi,description:"Internal diff-impact batch worker",hidden:!0,options:[g("--base <ref>","Git ref to diff against (default: HEAD)")],renderShape:"custom",handler:td},{id:"diff-impact",command:"diff-impact",description:"Compute changed symbols and downstream consumers from current git diff",options:[g("--base <ref>","Git ref to diff against (default: HEAD)")],renderShape:"custom",docs:v("Impact"),handler:nd},N("drift"),N("wrapper-candidates"),N("passthrough-candidates"),N("stale-abstractions"),N("complexity-hotspots"),N("self-audit"),{id:Si,command:Si,description:"Internal health phase worker",hidden:!0,arguments:[{name:"<phase>"}],options:[g("-s, --scope <path>","Limit to files matching path"),g("--full","Run unbounded candidate analyses on large indexes")],renderShape:"custom",handler:rd},{id:"health",command:"health",description:"Composite codebase health report with prioritized action list",options:[g("-s, --scope <path>","Limit to files matching path"),g("--full","Run unbounded candidate analyses on large indexes"),g("--json","Output as JSON for programmatic consumption"),g("--baseline","Compare findings against the committed baseline; exit 1 on new findings"),g("--write-baseline","Snapshot current finding identities to the baseline file")],renderShape:"custom",docs:v("Health",["scip-query health --json","scip-query health --baseline"]),handler:id},N("convergence"),N("code"),N("complexity"),N("dataflow"),N("slice"),{id:"install-skills",command:"install-skills",description:`Install skills (${Vs.join(", ")}) into Claude Code, Codex, and shared agent roots`,renderShape:"custom",docs:v("Maintenance"),handler:od},{id:"check-deps",command:"check-deps",description:"Check whether scip-query and the detected language indexers are actually runnable",renderShape:"custom",docs:v("Maintenance"),handler:sd},N("redundant-reexports"),N("similar-signatures"),{id:"init",command:"init",description:"Create a .scipquery.json config file for this project",renderShape:"custom",docs:v("Maintenance"),handler:ad},{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:[g("--git-hook","Also install a git pre-commit hook that runs diff-gate")],renderShape:"custom",docs:v("Maintenance",["scip-query setup-agent","scip-query setup-agent --git-hook"]),handler:cd},{id:"watch",command:"watch",description:"Watch for file changes and reindex automatically",options:[g("--debounce <ms>","Ms to wait after last change (default: 30000)",Ms),g("--cooldown <ms>","Min ms between reindexes (default: 60000)",Ms)],renderShape:"custom",docs:v("Maintenance"),handler:ld},{id:"status",command:"status",description:"Show index status for this project",renderShape:"custom",docs:v("Maintenance"),handler:ud}];function wd(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((...i)=>n.handler(...i)),{descriptor:n,command:r}})}import{existsSync as K_,mkdirSync as Q_,readFileSync as Y_,writeFileSync as X_}from"fs";import{homedir as Z_}from"os";import{join as $i}from"path";var eL=1440*60*1e3,kd="update-check.json",tL="https://registry.npmjs.org/scip-query/latest";async function Pd(e={}){let t=e.env??process.env;if(t.SCIP_QUERY_UPDATE_CHECK==="0"||t.NO_UPDATE_NOTIFIER)return;let n=e.cacheDir??iL(t),r=e.now??Date.now(),i=e.currentVersion??bi,o=oL(n),s=o&&r-o.checkedAt<eL?o.latestVersion:await sL(n,e.fetchLatestVersion??cL,r);if(!s||!rL(s,i))return;(e.writeNotice??(c=>console.error(c)))(nL(i,s))}function nL(e,t){return[`scip-query update available: ${e} -> ${t}.`,"Agent: tell your human to update with: npm install -g scip-query@latest",""].join(`
918
- `)}function rL(e,t){let n=Ed(e),r=Ed(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 iL(e){let t=e.XDG_CACHE_HOME||$i(Z_(),".cache");return $i(t,"scip-query")}function oL(e){let t=$i(e,kd);if(!K_(t))return null;try{let n=JSON.parse(Y_(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 sL(e,t,n){let r;try{r=await t()}catch{r=null}return aL(e,{checkedAt:n,latestVersion:r}),r}function aL(e,t){try{Q_(e,{recursive:!0}),X_($i(e,kd),`${JSON.stringify(t,null,2)}
919
- `)}catch{}}async function cL(){let e=await fetch(tL,{signal:AbortSignal.timeout(1e3)});if(!e.ok)return null;let t=await e.json();return typeof t.version=="string"?t.version:null}function Ed(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(e);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}ji.name("scip-query").description("Language-agnostic code intelligence CLI powered by SCIP indexes").version(bi);wd(ji,Ld);ji.hook("preAction",async()=>{await Pd()});uL()&&await ji.parseAsync();function uL(){if(!process.argv[1])return!1;let e=lL(import.meta.url);try{return Fd(e)===Fd(process.argv[1])}catch{return e===process.argv[1]}}export{ji as program,pr as renderHeuristicNotice};
920
+ ${o.connectedSymbols.length} connected symbol(s).`)}),Fh=[pt({id:"files",command:"files <pattern>",description:"Find files matching a pattern",docs:R("Navigation",["scip-query files auth"]),query:({db:e,args:t})=>as(e,H(t,0)),format:e=>e.relativePath}),pt({id:"methods",command:"methods <className>",description:"List methods of a class (with line ranges)",docs:R("Navigation"),query:({db:e,args:t})=>Gs(e,H(t,0)),format:e=>` ${Se(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:R("Navigation",["scip-query refs login"]),handler:dA},ts({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:R("Navigation",["scip-query trace parseSymbol"]),query:({db:e,args:t,budget:n})=>Fi(e,H(t,0),{semantic:n.semantic}),sections:aA}),pt({id:"deps",command:"deps <file>",description:"Files this file depends on (internal)",docs:R("Navigation"),query:({db:e,args:t})=>$i(e,H(t,0)),format:e=>e.relativePath}),pt({id:"rdeps",command:"rdeps <file>",description:"Files that depend on this file/module",docs:R("Navigation"),query:({db:e,args:t})=>Ai(e,H(t,0)),format:e=>e.relativePath}),ih({id:"system",command:"system <module>",description:"Full module map: files, symbols, deps in/out",docs:R("Navigation",["scip-query system queries"]),query:({db:e,args:t})=>Mi(e,H(t,0)),sections:e=>[{title:"FILES",rows:e.files},{title:"EXPORTED SYMBOLS",rows:e.symbols.map(t=>` ${Se(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}`)}]}),pt({id:"surface",command:"surface <module>",description:"What symbols consumers actually use from this module",docs:R("Navigation"),query:({db:e,args:t})=>Oi(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:R("Navigation"),handler:uA},pt({id:"imported-by",command:"imported-by <symbol>",description:"Which files import this symbol?",docs:R("Navigation"),query:({db:e,args:t})=>ta(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:T([f("--signatures","Show trimmed symbol signatures")]),renderShape:"custom",docs:R("Navigation"),handler:cA},pt({id:"members",command:"members <symbol>",description:"All children of a symbol (methods, fields, nested types)",docs:R("Navigation"),query:({db:e,args:t})=>ra(e,H(t,0)),format:e=>` ${Se(e.startLine,e.endLine)} [${e.kind}] ${e.shortName}`}),pt({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",x,100),f("--full","Run unbounded analysis on large indexes")],docs:R("Navigation"),query:({db:e,args:t,opts:n})=>fa(e,H(t,0),{scope:P(n,"scope"),limit:O(n,"limit",100)}),format:e=>` ${fe(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(`
921
+ ${e.length} symbol(s)`)}),es({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:R("Navigation"),headers:["count","kind"],query:({db:e,opts:t})=>ga(e,{scope:P(t,"scope")}),format:e=>` ${String(e.count).padStart(5)} ${e.kindName} (${e.kind})`}),pt({id:"hierarchy",command:"hierarchy <symbol>",description:"Show a symbol's ancestry chain (method \u2192 class \u2192 module)",docs:R("Navigation"),query:({db:e,args:t})=>ba(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:T([f("-C, --context <n>","Extra lines of context above/below",x,0)]),renderShape:"custom",docs:R("Navigation"),handler:mA},{id:"dataflow",command:"dataflow <symbol>",description:"Reference-level dataflow: definition sites, usage sites, producers, consumers",options:T([f("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"custom",docs:R("Navigation"),handler:pA},{id:"slice",command:"slice <symbol>",description:"Reference-level program slice: what affects this (backward) or what this affects (forward)",options:T([f("--forward","Forward slice (what does this affect). Default is backward."),f("--depth <n>","Max transitive depth for backward slice",x,3),f("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"custom",docs:R("Navigation"),handler:fA}];var gA=Q("plan-context",({db:e,args:t,opts:n,budget:i})=>{let r=O(n,"limit",20),o=sc(e,H(t,0),{semantic:i.semantic,impactDepth:I(n,"impactDepth",3),sliceDepth:I(n,"sliceDepth",3),scope:P(n,"scope")});if(o.warnings.length===1&&o.warnings[0]==="No symbol, file, or module matched target."){if(v(n,"json")){$("plan-context",t,n,o);return}return D.empty(o.warnings[0])}if(v(n,"json")){$("plan-context",t,n,o);return}let s=[{title:"TARGET",rows:hA(o)},{title:"DEFINITIONS",rows:bA(o,r),skipIfEmpty:!0},{title:"REFERENCES",rows:yA(o,r),skipIfEmpty:!0},{title:"CALL GRAPH",rows:SA(o,r),skipIfEmpty:!0},{title:"DATAFLOW",rows:xA(o,r),skipIfEmpty:!0},{title:"DEPENDENCIES",rows:CA(o,r),skipIfEmpty:!0},{title:"SURFACE",rows:vA(o,r),skipIfEmpty:!0},{title:"DOWNSTREAM IMPACT",rows:RA(o,r),skipIfEmpty:!0},{title:"CHANGE RISK",rows:LA(o,r),skipIfEmpty:!0},{title:"HISTORY",rows:wA(o),skipIfEmpty:!0},{title:"PLANNING NOTES",rows:kA(o),skipIfEmpty:!0}];D.sectionedReport(s)}),$h=[{id:"plan-context",command:"plan-context <target>",description:"Pre-edit planning context for a symbol, file, or module",options:T([f("--impact-depth <n>","Maximum affected traversal depth",x,3),f("--slice-depth <n>","Maximum backward slice depth",x,3),f("-s, --scope <path>","Limit downstream impact to files matching path"),f("-n, --limit <n>","Rows per section",x,20),f("--full","Run unbounded semantic analysis on large indexes")]),budget:"semantic",renderShape:"custom",docs:R("Planning",["scip-query plan-context parseSymbol"]),handler:gA}];function hA(e){return[`Target: ${e.target}`,`Matched: symbol=${ml(e.matched.symbol)} file=${ml(e.matched.file)} module=${ml(e.matched.module)}`]}function bA(e,t){let n=[];for(let i of e.trace.definitions){let r=i.signature?` -- ${i.signature}`:"";n.push(` ${fe(i.relativePath,i.startLine,i.endLine)}${r}`),i.source&&n.push(...i.source.split(`
922
+ `).map((o,s)=>` ${String($e(i.startLine+s)).padStart(4)} ${o}`))}return n.length===0&&n.push(...e.system.symbols.map(i=>` ${Se(i.startLine,i.endLine)} ${i.shortName}`)),Ht(n,t).rows}function yA(e,t){let n=e.trace.referencedBy.map(i=>` ${i.relativePath}:${$e(i.line)} in ${i.enclosingShort}`);return In(Ht(n,t))}function SA(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 In(Ht([...n,...i],t))}function xA(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}:${$e(o.line)} in ${o.enclosingShort}`);return In(Ht([...n,...i,...r],t))}function CA(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 In(Ht(n,t))}function vA(e,t){let n=[...e.system.files.map(i=>` file ${i}`),...e.system.symbols.map(i=>` export ${Se(i.startLine,i.endLine)} ${i.shortName}`),...e.surface.map(i=>` use ${i.consumer} -> ${i.shortName}`)];return In(Ht(n,t))}function RA(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 In(Ht(n,t))}function LA(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` ${Se(i.startLine,i.endLine)} ${i.shortName} [${i.externalConsumers} consumers]${r}`}))),e.complexity&&(n.push(` Complexity: ${fe(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}`)),In(Ht(n,t))}function wA(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 kA(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 Ht(e,t){let n=Math.max(1,t);return{rows:e.slice(0,n),omitted:Math.max(0,e.length-n)}}function In(e){return e.omitted>0?[...e.rows,` ... ${e.omitted} more`]:e.rows}function ml(e){return e?"yes":"no"}var DA=["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"],IA=[Eh,Fh,Ph,ns,Th,$h,_h],Ah=IA.flat(),NA=new Map(Ah.map(e=>[e.id,e]));for(let e of Ah)if(!DA.includes(e.id))throw new Error(`Query command descriptor is not ordered: ${e.id}`);function k(e){let t=NA.get(e);if(!t)throw new Error(`Unknown query command descriptor: ${e}`);return t}var Mh=[{id:"reindex",command:"reindex",description:"Index the codebase and convert to SQLite",options:[f("-l, --language <lang>","Index only this language (can be repeated)",Bo,[]),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",Vo)],renderShape:"custom",docs:R("Indexing",["scip-query reindex"]),handler:$g},{id:"augment-sources",command:"augment-sources",description:"Add source files skipped by upstream SCIP indexers to the SQLite documents table",renderShape:"custom",docs:R("Indexing"),handler:Ag},{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:R("Indexing"),handler:Mg},k("stats"),k("files"),k("methods"),k("refs"),k("trace"),k("deps"),k("rdeps"),k("system"),k("surface"),k("dead"),k("hotspots"),k("imports"),k("imported-by"),k("unused-imports"),k("outline"),k("members"),k("fan-in"),k("fan-out"),k("coupling"),k("cycles"),k("bottlenecks"),k("isolated"),k("by-kind"),k("kind-counts"),k("deep-chains"),k("hierarchy"),k("call-graph"),k("similar"),k("similar-files"),k("react-component-duplicates"),k("react-hook-candidates"),k("react-large-component-pressure"),k("vue-component-duplicates"),k("vue-composable-candidates"),k("vue-large-view-pressure"),k("similar-chains"),k("extract-candidates"),k("locality-candidates"),k("affected"),k("change-surface"),k("cleanup-plan"),k("cleanup-apply"),k("co-change"),k("recent-duplicates"),k("doc-drift"),k("unused-params"),k("diff-gate"),k("incomplete-migration"),k("plan-context"),{id:jo,command:jo,description:"Internal diff-impact batch worker",hidden:!0,options:[f("--base <ref>","Git ref to diff against (default: HEAD)")],renderShape:"custom",handler:Og},{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:R("Impact"),handler:jg},k("drift"),k("wrapper-candidates"),k("passthrough-candidates"),k("stale-abstractions"),k("complexity-hotspots"),k("self-audit"),{id:Oo,command:Oo,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:Bg},{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:R("Health",["scip-query health --json","scip-query health --baseline"]),handler:Vg},k("convergence"),k("code"),k("complexity"),k("dataflow"),k("slice"),{id:"install-skills",command:"install-skills",description:`Install skills (${$c.join(", ")}) into Claude Code, Codex, and shared agent roots`,renderShape:"custom",docs:R("Maintenance"),handler:Hg},{id:"check-deps",command:"check-deps",description:"Check whether scip-query and the detected language indexers are actually runnable",renderShape:"custom",docs:R("Maintenance"),handler:qg},{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:R("Maintenance"),handler:Ug},{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:R("Maintenance"),handler:Wg},k("redundant-reexports"),k("similar-signatures"),{id:"init",command:"init",description:"Create a .scipquery.json config file for this project",renderShape:"custom",docs:R("Maintenance"),handler:zg},{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:R("Maintenance",["scip-query config-validate"]),handler:Kg},{id:"suppress",command:"suppress <id>",description:"Record an accepted finding in .scipquery.json with a required reason",options:T([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:R("Maintenance",['scip-query suppress SQABC123DEF456 --reason "intentional boundary"']),handler:Jg},{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:R("Maintenance"),handler:Qg},{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:R("Maintenance",["scip-query setup-agent","scip-query setup-agent --git-hook"]),handler:Yg},{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:R("Maintenance",["scip-query setup-ci"]),handler:Zg},{id:"watch",command:"watch",description:"Watch for file changes and reindex automatically",options:[f("--debounce <ms>","Ms to wait after last change (default: 30000)",Dc),f("--cooldown <ms>","Min ms between reindexes (default: 60000)",Dc)],renderShape:"custom",docs:R("Maintenance"),handler:eh},{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:R("Maintenance"),handler:th}];function Oh(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){EA(o)}}),{descriptor:n,command:i}})}function EA(e){let t=e instanceof Error?e.message:String(e);console.error(`error: ${t}`),process.exitCode=1}import{existsSync as PA,mkdirSync as _A,readFileSync as TA,writeFileSync as FA}from"fs";import{homedir as $A}from"os";import{join as is}from"path";var AA=1440*60*1e3,Bh="update-check.json",MA="https://registry.npmjs.org/scip-query/latest";async function Vh(e={}){let t=e.env??process.env;if(t.SCIP_QUERY_UPDATE_CHECK==="0"||t.NO_UPDATE_NOTIFIER)return;let n=e.cacheDir??BA(t),i=e.now??Date.now(),r=e.currentVersion??Mo,o=VA(n),s=o&&i-o.checkedAt<AA?o.latestVersion:await HA(n,e.fetchLatestVersion??UA,i);if(!s||!jA(s,r))return;(e.writeNotice??(c=>console.error(c)))(OA(r,s))}function OA(e,t){return[`scip-query update available: ${e} -> ${t}.`,"Agent: tell your human to update with: npm install -g scip-query@latest",""].join(`
923
+ `)}function jA(e,t){let n=jh(e),i=jh(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 BA(e){let t=e.XDG_CACHE_HOME||is($A(),".cache");return is(t,"scip-query")}function VA(e){let t=is(e,Bh);if(!PA(t))return null;try{let n=JSON.parse(TA(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 HA(e,t,n){let i;try{i=await t()}catch{i=null}return qA(e,{checkedAt:n,latestVersion:i}),i}function qA(e,t){try{_A(e,{recursive:!0}),FA(is(e,Bh),`${JSON.stringify(t,null,2)}
924
+ `)}catch{}}async function UA(){let e=await fetch(MA,{signal:AbortSignal.timeout(1e3)});if(!e.ok)return null;let t=await e.json();return typeof t.version=="string"?t.version:null}function jh(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(e);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}rs.name("scip-query").description("Language-agnostic code intelligence CLI powered by SCIP indexes").version(Mo);Oh(rs,Mh);rs.hook("preAction",async()=>{await Vh()});GA()&&await rs.parseAsync();function GA(){if(!process.argv[1])return!1;let e=WA(import.meta.url);try{return Hh(e)===Hh(process.argv[1])}catch{return e===process.argv[1]}}export{rs as program,li as renderHeuristicNotice};
920
925
  //# sourceMappingURL=cli.js.map