scip-query 0.7.2 → 0.8.1

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 (174) hide show
  1. package/README.md +179 -221
  2. package/dist/augment-vue-worker.js +1 -1
  3. package/dist/{chunk-OPWOX7NT.js → chunk-2EC4JTHC.js} +2 -2
  4. package/dist/{chunk-SVSLAUSJ.js → chunk-46ILZVMX.js} +2 -2
  5. package/dist/chunk-4A4JFNWG.js +2 -0
  6. package/dist/{chunk-QBXTQODK.js → chunk-4B7YLRXX.js} +2 -2
  7. package/dist/chunk-64UY7VTR.js +63 -0
  8. package/dist/chunk-66ORT3LS.js +2 -0
  9. package/dist/{chunk-VMS5YTBS.js → chunk-6G76D2YM.js} +2 -2
  10. package/dist/{chunk-PEU24CSY.js → chunk-6P5W4U6G.js} +2 -2
  11. package/dist/chunk-6ZFKI5EP.js +40 -0
  12. package/dist/{chunk-EVXQF7DM.js → chunk-7I6KNKE3.js} +2 -2
  13. package/dist/{chunk-EIGCLVKK.js → chunk-7TYJD45F.js} +2 -2
  14. package/dist/chunk-7UZWNW4E.js +2 -0
  15. package/dist/{chunk-GIRI7FHW.js → chunk-AGW2MVIO.js} +2 -2
  16. package/dist/chunk-APLCSDXL.js +4 -0
  17. package/dist/{chunk-JDFWJ7VK.js → chunk-BCFED24F.js} +2 -2
  18. package/dist/chunk-CVRXOP6M.js +3 -0
  19. package/dist/{chunk-2QNKEJ7R.js → chunk-D43L5PQF.js} +2 -2
  20. package/dist/chunk-DJTJ3DLZ.js +7 -0
  21. package/dist/chunk-EAU4RDFG.js +2 -0
  22. package/dist/{chunk-BI4F6GXI.js → chunk-EKP7XJ6L.js} +2 -2
  23. package/dist/{chunk-LLL7THVV.js → chunk-EM2PPDN7.js} +2 -2
  24. package/dist/{chunk-6QC7SCKV.js → chunk-FIPE5AQT.js} +2 -2
  25. package/dist/chunk-FTBT4RP2.js +7 -0
  26. package/dist/{chunk-TB2OYNRS.js → chunk-GD7XRHSV.js} +2 -2
  27. package/dist/{chunk-XDXZP3BE.js → chunk-GMEBYEMU.js} +2 -2
  28. package/dist/chunk-GTZAU7OL.js +2 -0
  29. package/dist/chunk-HVGNOUYP.js +2 -0
  30. package/dist/chunk-HVXIXDLV.js +2 -0
  31. package/dist/{chunk-5TB4N27G.js → chunk-I7OTKWNY.js} +2 -2
  32. package/dist/{chunk-RFCR2BRD.js → chunk-JAMU6FLN.js} +2 -2
  33. package/dist/chunk-JTCEWV7Q.js +2 -0
  34. package/dist/chunk-K4Z3FCUJ.js +6 -0
  35. package/dist/{chunk-WJQFABZN.js → chunk-K6YIGVL7.js} +2 -2
  36. package/dist/chunk-MKE7SEEX.js +2 -0
  37. package/dist/chunk-N5D5ZCBW.js +7 -0
  38. package/dist/{chunk-ROZNBWIF.js → chunk-NGLRXEWN.js} +2 -2
  39. package/dist/{chunk-IFGEPTH5.js → chunk-NK7TQQG4.js} +2 -2
  40. package/dist/chunk-NOVKLH2F.js +2 -0
  41. package/dist/chunk-OIMM7KMI.js +2 -0
  42. package/dist/chunk-OQSV6OS2.js +2 -0
  43. package/dist/chunk-PBGTMPJ7.js +2 -0
  44. package/dist/{chunk-YH6TTQEI.js → chunk-PCMVXWDC.js} +4 -4
  45. package/dist/{chunk-U75WH4XG.js → chunk-PE4EJOLN.js} +2 -2
  46. package/dist/chunk-PLFYFZX3.js +2 -0
  47. package/dist/{chunk-HTVLH3NL.js → chunk-QYQXPPDI.js} +2 -2
  48. package/dist/{chunk-P7UMQ7R7.js → chunk-RCRK4E7E.js} +2 -2
  49. package/dist/chunk-RIXOMSOR.js +20 -0
  50. package/dist/chunk-SB6I6O3P.js +2 -0
  51. package/dist/{chunk-X2JB54QF.js → chunk-SDGCKEB7.js} +2 -2
  52. package/dist/chunk-SLOIQKY7.js +2 -0
  53. package/dist/{chunk-4VYIZV3S.js → chunk-SOGLYIJ4.js} +4 -4
  54. package/dist/chunk-SSINY7HL.js +4 -0
  55. package/dist/{chunk-FU5WRWAN.js → chunk-TFO4OMJZ.js} +2 -2
  56. package/dist/chunk-TH4JVC34.js +71 -0
  57. package/dist/chunk-TQTVM27C.js +6 -0
  58. package/dist/{chunk-QP6FLI6D.js → chunk-TR5AU6A5.js} +2 -2
  59. package/dist/{chunk-4LKJMRT5.js → chunk-UQE3DSXY.js} +2 -2
  60. package/dist/{chunk-LXJTDFOV.js → chunk-UUDYI3FF.js} +2 -2
  61. package/dist/chunk-VDZL45XI.js +2 -0
  62. package/dist/{chunk-XANDY7N5.js → chunk-VN6B6HFB.js} +2 -2
  63. package/dist/{chunk-SDPP5KVQ.js → chunk-WC43FMAB.js} +2 -2
  64. package/dist/chunk-WEJYUS5O.js +2 -0
  65. package/dist/chunk-WQFOZIID.js +4 -0
  66. package/dist/chunk-XBFLIGWU.js +3 -0
  67. package/dist/{chunk-TGNL3ZKZ.js → chunk-XSZ5NC4O.js} +2 -2
  68. package/dist/{chunk-4T35WUCX.js → chunk-Z2AJQ7VA.js} +2 -2
  69. package/dist/{chunk-S5VMVNFM.js → chunk-ZIIQ55VK.js} +2 -2
  70. package/dist/chunk-ZJ737ZMD.js +2 -0
  71. package/dist/cli.js +171 -173
  72. package/dist/health-C6r2VgpA.d.ts +234 -0
  73. package/dist/index.d.ts +11 -18
  74. package/dist/index.js +1 -1
  75. package/dist/postinstall.js +4 -4
  76. package/dist/queries/affected.js +1 -1
  77. package/dist/queries/bottlenecks.js +1 -1
  78. package/dist/queries/by-kind.js +1 -1
  79. package/dist/queries/call-graph.js +1 -1
  80. package/dist/queries/change-surface.js +1 -1
  81. package/dist/queries/cleanup-plan.d.ts +66 -0
  82. package/dist/queries/cleanup-plan.js +2 -0
  83. package/dist/queries/co-change.d.ts +42 -0
  84. package/dist/queries/co-change.js +2 -0
  85. package/dist/queries/code.js +1 -1
  86. package/dist/queries/complexity-hotspots.js +1 -1
  87. package/dist/queries/complexity.js +1 -1
  88. package/dist/queries/convergence.js +1 -1
  89. package/dist/queries/coupling.js +1 -1
  90. package/dist/queries/cycles.js +1 -1
  91. package/dist/queries/dataflow.js +1 -1
  92. package/dist/queries/dead.js +1 -1
  93. package/dist/queries/deep-chains.js +1 -1
  94. package/dist/queries/deps.js +1 -1
  95. package/dist/queries/diff-gate.d.ts +52 -0
  96. package/dist/queries/diff-gate.js +2 -0
  97. package/dist/queries/diff-impact.js +1 -1
  98. package/dist/queries/doc-drift.d.ts +69 -0
  99. package/dist/queries/doc-drift.js +2 -0
  100. package/dist/queries/drift.js +1 -1
  101. package/dist/queries/extract-candidates.js +1 -1
  102. package/dist/queries/fan.js +1 -1
  103. package/dist/queries/health.d.ts +1 -1
  104. package/dist/queries/health.js +1 -1
  105. package/dist/queries/hierarchy.js +1 -1
  106. package/dist/queries/hotspots.js +1 -1
  107. package/dist/queries/imports.js +1 -1
  108. package/dist/queries/index.d.ts +38 -2
  109. package/dist/queries/index.js +1 -1
  110. package/dist/queries/isolated.js +1 -1
  111. package/dist/queries/members.js +1 -1
  112. package/dist/queries/methods.js +1 -1
  113. package/dist/queries/outline.d.ts +1 -0
  114. package/dist/queries/outline.js +1 -1
  115. package/dist/queries/passthrough-candidates.js +1 -1
  116. package/dist/queries/plan-context.d.ts +65 -0
  117. package/dist/queries/plan-context.js +2 -0
  118. package/dist/queries/recent-duplicates.d.ts +48 -0
  119. package/dist/queries/recent-duplicates.js +2 -0
  120. package/dist/queries/redundant-reexports.js +1 -1
  121. package/dist/queries/refs.js +1 -1
  122. package/dist/queries/self-audit.d.ts +58 -0
  123. package/dist/queries/self-audit.js +2 -0
  124. package/dist/queries/similar-chains.js +1 -1
  125. package/dist/queries/similar-files.d.ts +6 -0
  126. package/dist/queries/similar-files.js +1 -1
  127. package/dist/queries/similar-signatures.js +1 -1
  128. package/dist/queries/similar.js +1 -1
  129. package/dist/queries/slice.js +1 -1
  130. package/dist/queries/stale-abstractions.js +1 -1
  131. package/dist/queries/surface.js +1 -1
  132. package/dist/queries/symbols.js +1 -1
  133. package/dist/queries/system.js +1 -1
  134. package/dist/queries/trace.js +1 -1
  135. package/dist/queries/unused-params.d.ts +38 -0
  136. package/dist/queries/unused-params.js +2 -0
  137. package/dist/queries/wrapper-candidates.js +1 -1
  138. package/dist/reindex-worker.js +1 -1
  139. package/dist/reindex.js +1 -1
  140. package/dist/runtime.d.ts +3 -2
  141. package/dist/runtime.js +2 -2
  142. package/package.json +33 -1
  143. package/skills/concrete-plan/SKILL.md +37 -7
  144. package/skills/scip-ai-cleanup/SKILL.md +145 -0
  145. package/skills/scip-debloat/SKILL.md +37 -7
  146. package/skills/scip-doc-reconcile/SKILL.md +100 -0
  147. package/skills/scip-explore/SKILL.md +22 -9
  148. package/skills/scip-language-playbook/SKILL.md +4 -4
  149. package/skills/scip-maintainability/SKILL.md +264 -0
  150. package/skills/scip-verify/SKILL.md +2 -2
  151. package/dist/chunk-3X43EYFU.js +0 -3
  152. package/dist/chunk-4GPWGSOE.js +0 -40
  153. package/dist/chunk-5RGK4YA5.js +0 -63
  154. package/dist/chunk-5TT47UMX.js +0 -44
  155. package/dist/chunk-6QH2L26C.js +0 -71
  156. package/dist/chunk-6SR4UNWI.js +0 -2
  157. package/dist/chunk-6XEWA6FX.js +0 -2
  158. package/dist/chunk-7WHNTKSD.js +0 -2
  159. package/dist/chunk-BOVNTAKQ.js +0 -3
  160. package/dist/chunk-D62LLANH.js +0 -2
  161. package/dist/chunk-EDXML2HI.js +0 -4
  162. package/dist/chunk-EZQOVY3C.js +0 -2
  163. package/dist/chunk-IODTPF5H.js +0 -20
  164. package/dist/chunk-KJ6CW6EK.js +0 -2
  165. package/dist/chunk-NBUINPSH.js +0 -2
  166. package/dist/chunk-NHDPYW7O.js +0 -2
  167. package/dist/chunk-NKJKI6SE.js +0 -2
  168. package/dist/chunk-OPZQIJZU.js +0 -7
  169. package/dist/chunk-P3PVY6TX.js +0 -2
  170. package/dist/chunk-QE6MGGUY.js +0 -2
  171. package/dist/chunk-QVPYMZUJ.js +0 -6
  172. package/dist/chunk-RCJEFQOK.js +0 -4
  173. package/dist/chunk-UHMJYNTK.js +0 -2
  174. package/dist/health-x7B4Xu_6.d.ts +0 -119
package/dist/cli.js CHANGED
@@ -1,60 +1,20 @@
1
1
  #!/usr/bin/env node
2
- import{program as zr}from"commander";import{realpathSync as Dm}from"fs";import{fileURLToPath as s_}from"url";import{createRequire as XS}from"module";import{fileURLToPath as Ol}from"url";import{statSync as Nm}from"fs";function Te(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,...Lm(e.config.dbPath)}}function Lm(e){try{let t=Nm(e);return{indexSizeBytes:t.size,lastBuilt:t.mtime}}catch{return{indexSizeBytes:0,lastBuilt:null}}}function k(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 Di}from"commander";import{realpathSync as sd}from"fs";import{fileURLToPath as QN}from"url";import{createRequire as YC}from"module";import{fileURLToPath as mu}from"url";import{statSync as ad}from"fs";function Ne(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,...cd(e.config.dbPath)}}function cd(e){try{let t=ad(e);return{indexSizeBytes:t.size,lastBuilt:t.mtime}}catch{return{indexSizeBytes:0,lastBuilt:null}}}function T(e,t={}){let n=t.scope?"AND relative_path LIKE ?":"",r=t.like?"AND relative_path LIKE ?":"",i=[...t.scope?[`%${t.scope}%`]:[],...t.like?[t.like]:[]],o=e.all(`SELECT relative_path
3
3
  FROM documents
4
4
  WHERE 1 = 1
5
5
  ${e.pathExclusionsFor("documents")}
6
6
  ${n}
7
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 Em(e){return/[*?]/.test(e)?e.replace(/\*\*/g,"%").replace(/\*/g,"%").replace(/\?/g,"_"):`%${e}%`}function Gr(e,t){let n=Em(t);return k(e,{like:n,includeIgnored:!1}).map(r=>({relativePath:r}))}import{extname as Rs}from"path";var wm={".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 P(e){return wm[Rs(e).toLowerCase()]??null}function st(e){return Rs(e).toLowerCase()===".vue"}var km=new Set(["function_item","function_signature_item"]),Pm=new Set(["function_definition"]),Tm=new Set(["function_declaration","method_definition","arrow_function","function_expression"]);function en(e){switch(e){case"rust":return km;case"python":return Pm;default:return Tm}}function H(e){let t=new WeakMap,n=r=>{let i=t.get(r);return i||(i=new Map,t.set(r,i)),i};return{get(r,i,o){let s=n(r);if(s.has(i))return s.get(i);let a=o();return s.set(i,a),a},invalidate(r,i){t.get(r)?.delete(i)},invalidateAll(r){t.delete(r)},size(r){return t.get(r)?.size??0}}}function Ve(e){let t=new WeakMap;return{get(n,r){let i=t.get(n);if(i)return i.value;let o=r();return t.set(n,{value:o}),o},invalidate(n){t.delete(n)},has(n){return t.has(n)}}}function $n(e){let t=new WeakMap,n=r=>{let i=t.get(r);return i||(i=new Map,t.set(r,i)),i};return{get(r,i,o,s){let a=n(r),c=a.get(i);if(c&&c.source===o)return c.value;let l=s();return a.set(i,{source:o,value:l}),l},invalidate(r,i){t.get(r)?.delete(i)},invalidateAll(r){t.delete(r)}}}import{createRequire as Mm}from"module";var ne=Mm(import.meta.url),jn=null,Is=!1;function Ds(){if(Is)return null;if(jn)return jn;try{return jn=ne("tree-sitter"),jn}catch{return Is=!0,null}}var _s=new Map,Qr=new Set;function Ns(e){if(Qr.has(e))return null;let t=_s.get(e);if(t)return t;let n;try{switch(e){case"rust":n=ne("tree-sitter-rust");break;case"typescript":n=ne("tree-sitter-typescript").typescript;break;case"tsx":n=ne("tree-sitter-typescript").tsx;break;case"javascript":n=ne("tree-sitter-javascript");break;case"python":n=ne("tree-sitter-python");break;case"java":n=ne("tree-sitter-java");break;case"kotlin":n=ne("tree-sitter-kotlin");break;case"scala":n=ne("tree-sitter-scala");break;case"ruby":n=ne("tree-sitter-ruby");break;case"c":n=ne("tree-sitter-c");break;case"cpp":n=ne("tree-sitter-cpp");break;case"csharp":n=ne("tree-sitter-c-sharp");break;case"php":n=ne("tree-sitter-php").php;break;case"vb":{let r=ne("tree-sitter-vb-dotnet");n=r.language??r;break}}}catch{return Qr.add(e),null}return _s.set(e,n),n}var vs=new Map;function Om(e){let t=vs.get(e);if(t)return t;let n=Ns(e);if(!n)return null;let r=Ds();if(!r)return null;let i=new r;try{i.setLanguage(n)}catch{return Qr.add(e),null}return vs.set(e,i),i}function Fm(e,t){return e.parse(r=>r>=t.length?null:t.slice(r,Math.min(t.length,r+16384)))}function Kr(e,t){let n=Om(e);if(!n)return null;try{return Fm(n,t)}catch{return null}}var Dt=new Map;function Ls(e,t){let n=`${e}::${t}`;if(Dt.has(n))return Dt.get(n)??null;let r=Ns(e);if(!r)return Dt.set(n,null),null;let i=Ds();if(!i)return Dt.set(n,null),null;try{let o=new i.Query(r,t);return Dt.set(n,o),o}catch{return Dt.set(n,null),null}}import{existsSync as Am,readFileSync as $m}from"fs";import{join as jm}from"path";var Yr=H("source-text");function T(e,t){let n=t.replace(/\\/g,"/");return Yr.get(e,n,()=>{let r=jm(e.config.projectRoot,n);return Am(r)?$m(r,"utf-8"):""})}function Es(e){Yr.invalidateAll(e)}function ws(e,t){Yr.invalidate(e,t.replace(/\\/g,"/"))}var Bm=/scip-query[\s:-]*ignore[\s:-]*(?:dead(?:-code)?|stale|wrapper|passthrough|drift|extract)?/i;function Xr(e,t,n){if(n<=0)return!1;let r=T(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(Bm.test(s))return!0;if(!s.startsWith("//")&&!s.startsWith("*")&&!s.startsWith("/*")&&!s.startsWith("@")&&!s.startsWith("#"))return!1}}return!1}function ks(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:Hm(e,r.openIdx),language:s}}function Hm(e,t){let n=0;for(let r=0;r<t&&r<e.length;r++)e.charCodeAt(r)===10&&n++;return n}var Bn=$n("ast-trees");function Zr(e){Bn.invalidateAll(e)}function ei(e,t){Bn.invalidate(e,t)}function B(e,t){if(st(t))return Vm(e,t);let n=P(t);if(!n)return null;let r=T(e,t);return r?Bn.get(e,t,r,()=>Kr(n,r)):null}function Vm(e,t){let n=T(e,t);return n?Bn.get(e,t,n,()=>{let r=ks(n);if(!r)return null;let i=`
10
- `.repeat(r.startLine)+r.body;return Kr(r.language,i)}):null}var Wm={rust:`
11
- (function_item name: (identifier) @name) @def
12
- (function_signature_item name: (identifier) @name) @def
13
- `,typescript:`
14
- (function_declaration name: (identifier) @name) @def
15
- (method_definition name: (property_identifier) @name) @def
16
- (method_signature name: (property_identifier) @name) @def
17
- (function_signature name: (identifier) @name) @def
18
- (variable_declarator name: (identifier) @name value: (arrow_function)) @def
19
- (variable_declarator name: (identifier) @name value: (function_expression)) @def
20
- (public_field_definition name: (property_identifier) @name value: (arrow_function)) @def
21
- `,tsx:`
22
- (function_declaration name: (identifier) @name) @def
23
- (method_definition name: (property_identifier) @name) @def
24
- (method_signature name: (property_identifier) @name) @def
25
- (function_signature name: (identifier) @name) @def
26
- (variable_declarator name: (identifier) @name value: (arrow_function)) @def
27
- (variable_declarator name: (identifier) @name value: (function_expression)) @def
28
- (public_field_definition name: (property_identifier) @name value: (arrow_function)) @def
29
- `,javascript:`
30
- (function_declaration name: (identifier) @name) @def
31
- (method_definition name: (property_identifier) @name) @def
32
- (variable_declarator name: (identifier) @name value: (arrow_function)) @def
33
- (variable_declarator name: (identifier) @name value: (function_expression)) @def
34
- `,python:`
35
- (function_definition name: (identifier) @name) @def
36
- `},qm=new WeakMap;function ti(e,t){return ri(e,t,qm,Wm,n=>{let r=[];for(let i of n){let o=null,s=null;for(let a of i.captures)a.name==="name"?o=a.node.text:a.name==="def"&&(s={startLine:a.node.startPosition.row,endLine:a.node.endPosition.row});o&&s&&r.push({name:o,startLine:s.startLine,endLine:s.endLine})}return r})}var Um={rust:`
37
- (call_expression function: (_) @target) @call
38
- (macro_invocation macro: (_) @target) @call
39
- `,typescript:`
40
- (call_expression function: (_) @target) @call
41
- (new_expression constructor: (_) @target) @call
42
- `,tsx:`
43
- (call_expression function: (_) @target) @call
44
- (new_expression constructor: (_) @target) @call
45
- `,javascript:`
46
- (call_expression function: (_) @target) @call
47
- (new_expression constructor: (_) @target) @call
48
- `,python:`
49
- (call function: (_) @target) @call
50
- `},Jm=new WeakMap;function Lt(e,t){return ri(e,t,Jm,Um,n=>{let r=[];for(let i of n){let o=null,s=null;for(let c of i.captures)c.name==="target"?o=c.node:c.name==="call"&&(s=c.node);if(!o||!s)continue;let a=Nt(o);a&&r.push({calleeLeaf:a,memberAccess:zm(o),line:s.startPosition.row})}return r})}function zm(e){switch(e.type){case"field_expression":case"member_expression":case"attribute":return!0;default:return!1}}var Gm=new WeakMap;function ni(e,t){return tn(e,t,Gm,()=>new Map,(n,r,i)=>{let o=(c,l)=>{if(c===l)return;let u=i.get(c);u||(u=new Set,i.set(c,u)),u.add(l)},s=r==="python"?new Set(["identifier"]):new Set(["type_identifier"]),a=(c,l)=>{let u=m=>{s.has(m.type)&&m.text!==l&&o(m.text,l);for(let d of m.children)u(d)};for(let m of c.children)u(m)};if(r==="rust")for(let c of n.rootNode.descendantsOfType(["struct_item","enum_item","union_item","type_item"])){let l=c.namedChildren.find(m=>m.type==="type_identifier")?.text;if(!l)continue;let u=c.namedChildren.find(m=>m.type==="field_declaration_list"||m.type==="enum_variant_list"||m.type==="ordered_field_declaration_list");u&&a(u,l),c.type==="type_item"&&a(c,l)}else if(r==="python")for(let c of n.rootNode.descendantsOfType("class_definition")){let l=c.namedChildren.find(m=>m.type==="identifier")?.text;if(!l)continue;let u=c.namedChildren.find(m=>m.type==="block");if(u)for(let m of u.descendantsOfType("type"))for(let d of m.descendantsOfType("identifier"))d.text!==l&&o(d.text,l)}else for(let c of n.rootNode.descendantsOfType(["interface_declaration","type_alias_declaration","class_declaration"])){let l=c.namedChildren.find(u=>u.type==="type_identifier")?.text;l&&a(c,l)}})??new Map}function tn(e,t,n,r,i){let o=P(t);if(!o)return null;let s=B(e,t);if(!s)return null;let a=n.get(s);if(a)return a;let c=r();return i(s,o,c),n.set(s,c),c}function ri(e,t,n,r,i){let o=P(t);if(!o)return null;let s=r[o];if(!s)return null;let a=B(e,t);if(!a)return null;let c=n.get(a);if(c)return c;let l=Ls(o,s);if(!l)return null;let u=i(l.matches(a.rootNode));return n.set(a,u),u}function Nt(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?Nt(t):null}case"scoped_identifier":{let t=e.childForFieldName("name")??e.namedChild(e.namedChildCount-1);return t?Nt(t):null}case"super":case"self":case"this":return null;default:return null}}var Qm={"/":"namespace","#":"type",".":"term","[":"type-param",":":"meta","!":"macro"};function K(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=Km(i);return{scheme:n,manager:r,packageName:o,version:s,descriptors:c,raw:e}}function Le(e){let t=K(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 Km(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||Ps(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&&!Ps(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=Qm[i];o&&t.push({name:r,suffix:o}),n+=1}}return t}function Ps(e){return e==="/"||e==="#"||e==="."||e==="("||e==="["||e===":"||e==="!"}function h(e){let t=K(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=Ym(i);o&&r.push(o)}return r.join(":")}function Ym(e){let t=e.suffix==="namespace"?Xm(e.name):e.name;return t?e.suffix==="method"?`${t}()`:t:""}function Xm(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 L(e){let t=K(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 Y(e){let t=K(e);if("kind"in t&&t.kind==="local")return null;let n=t;return n.descriptors[n.descriptors.length-1]?.suffix??null}function Z(e){return e.endsWith("().")||Y(e)==="method"}function Q(e){let t=Y(e);return t==="method"||t==="term"}function We(e){return Y(e)==="namespace"}var Zm=/^rust-analyzer\b.*[\s/]impl#\[[^\]]+\]\[[^\]]+\]/;function Hn(e){return Zm.test(e)}var ed=new Set(["test","tests","_tests"]);function qe(e){let t=K(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&&ed.has(r.name))return!0}return!1}function Ts(e,t){let n=K(e),r=K(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 Ms(e,t){let n=K(e),r=K(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 Et(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
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 ld(e){return/[*?]/.test(e)?e.replace(/\*\*/g,"%").replace(/\*/g,"%").replace(/\?/g,"_"):`%${e}%`}function Ni(e,t){let n=ld(t);return T(e,{like:n,includeIgnored:!1}).map(r=>({relativePath:r}))}import{extname as Qs}from"path";var ud={".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 $(e){return ud[Qs(e).toLowerCase()]??null}function ht(e){return Qs(e).toLowerCase()===".vue"}var Ks=[];function rt(e){e.groups.length>0&&Ks.push(e)}function Li(e,t){let n=new Set(t.groups);for(let r of Ks)r.groups.some(i=>n.has(i))&&(t.file!==void 0&&r.clearFile?r.clearFile(e,t.file):r.clearAll(e))}function Ys(){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 W(e,t){let{cache:n,ensure:r}=Ys(),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 rt({name:e,groups:t.clearGroups,clearAll:o=>i.invalidateAll(o),clearFile:(o,s)=>i.invalidate(o,s)}),i}function re(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 rt({name:e,groups:t.clearGroups,clearAll:i=>r.invalidate(i)}),r}function ur(e,t){let{cache:n,ensure:r}=Ys(),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 rt({name:e,groups:t.clearGroups,clearAll:o=>i.invalidateAll(o),clearFile:(o,s)=>i.invalidate(o,s)}),i}import{createRequire as md}from"module";var ae=md(import.meta.url),mr=null,Xs=!1;function dd(){if(Xs)return null;if(mr)return mr;try{return mr=ae("tree-sitter"),mr}catch{return Xs=!0,null}}var Zs=new Map,_i=new Set;function pd(e){if(_i.has(e))return null;let t=Zs.get(e);if(t)return t;let n;try{switch(e){case"rust":n=ae("tree-sitter-rust");break;case"typescript":n=ae("tree-sitter-typescript").typescript;break;case"tsx":n=ae("tree-sitter-typescript").tsx;break;case"javascript":n=ae("tree-sitter-javascript");break;case"python":n=ae("tree-sitter-python");break;case"java":n=ae("tree-sitter-java");break;case"kotlin":n=ae("tree-sitter-kotlin");break;case"scala":n=ae("tree-sitter-scala");break;case"ruby":n=ae("tree-sitter-ruby");break;case"c":n=ae("tree-sitter-c");break;case"cpp":n=ae("tree-sitter-cpp");break;case"csharp":n=ae("tree-sitter-c-sharp");break;case"php":n=ae("tree-sitter-php").php;break;case"vb":{let r=ae("tree-sitter-vb-dotnet");n=r.language??r;break}}}catch{return _i.add(e),null}return Zs.set(e,n),n}var ea=new Map;function fd(e){let t=ea.get(e);if(t)return t;let n=pd(e);if(!n)return null;let r=dd();if(!r)return null;let i=new r;try{i.setLanguage(n)}catch{return _i.add(e),null}return ea.set(e,i),i}function gd(e,t){return e.parse(r=>r>=t.length?null:t.slice(r,Math.min(t.length,r+16384)))}function wi(e,t){let n=fd(e);if(!n)return null;try{return gd(n,t)}catch{return null}}import{existsSync as hd,readFileSync as yd}from"fs";import{join as bd}from"path";var Sd=W("source-text",{clearGroups:["whole-project","source-file"]});function A(e,t){let n=t.replace(/\\/g,"/");return Sd.get(e,n,()=>{let r=bd(e.config.projectRoot,n);return hd(r)?yd(r,"utf-8"):""})}var xd=/scip-query[\s:-]*ignore[\s:-]*(?:dead(?:-code)?|stale|wrapper|passthrough|drift|extract)?/i;function Ei(e,t,n){if(n<=0)return!1;let r=A(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(xd.test(s))return!0;if(!s.startsWith("//")&&!s.startsWith("*")&&!s.startsWith("/*")&&!s.startsWith("@")&&!s.startsWith("#"))return!1}}return!1}function ta(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:Cd(e,r.openIdx),language:s}}function Cd(e,t){let n=0;for(let r=0;r<t&&r<e.length;r++)e.charCodeAt(r)===10&&n++;return n}var na=ur("ast-trees",{clearGroups:["whole-project","source-file"]});function ce(e,t){if(ht(t))return Rd(e,t);let n=$(t);if(!n)return null;let r=A(e,t);return r?na.get(e,t,r,()=>wi(n,r)):null}function Rd(e,t){let n=A(e,t);return n?na.get(e,t,n,()=>{let r=ta(n);if(!r)return null;let i=`
10
+ `.repeat(r.startLine)+r.body;return wi(r.language,i)}):null}function ra(e,t){let n=Id(e,t);if(!n)return null;let r=zt(n);return r?{calleeLeaf:r,memberAccess:vd(n),line:e.startPosition.row}:null}function Id(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 vd(e){switch(e.type){case"field_expression":case"member_expression":case"attribute":return!0;default:return!1}}function zt(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?zt(t):null}case"scoped_identifier":{let t=e.childForFieldName("name")??e.namedChild(e.namedChildCount-1);return t?zt(t):null}case"super":case"self":case"this":return null;default:return null}}function In(e){return e.type==="comment"||e.type==="line_comment"||e.type==="block_comment"}var Dd=new Set(["function_declaration","method_definition","method_signature","function_signature"]);function ca(e,t){let n=Ld(e,t);if(n)return{name:n.name,startLine:n.definitionNode.startPosition.row,endLine:n.definitionNode.endPosition.row,paramCount:sa(n.functionNode),params:ia(n.functionNode),paramsEndLine:oa(n.functionNode),isLiteralPassthrough:aa(n.functionNode,t)};if(!Nd(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:sa(e),params:ia(e),paramsEndLine:oa(e),isLiteralPassthrough:aa(e,t)}:null}function la(e){return e.namedChildren.find(t=>t.type==="parameters"||t.type==="formal_parameters")}function ia(e){let t=la(e);if(!t)return[];let n=[];for(let r of t.namedChildren){if(In(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 oa(e){let t=la(e);return t?t.endPosition.row:e.startPosition.row}function Nd(e,t){return t==="rust"?e==="function_item"||e==="function_signature_item":t==="python"?e==="function_definition":t==="typescript"||t==="tsx"||t==="javascript"?Dd.has(e):!1}function Ld(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 sa(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)In(r)||(n+=1);return n}function aa(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=>!In(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=>!In(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 _d=new Set(["identifier","type_identifier","field_identifier"]),wd=new Set(["identifier"]),Ed=new Set(["identifier","property_identifier","type_identifier","shorthand_property_identifier","shorthand_property_identifier_pattern"]),kd=new Set(["rust","python"]),Pd=/\{([^{}]*)\}/g,Fd=/\b([A-Za-z_][\w]*)\b/g;function ua(e,t){return Td(t).has(e.type)}function ma(e,t){return kd.has(t)&&e.type==="string_content"}function da(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 Td(e){return e==="rust"?_d:e==="python"?wd:Ed}function pa(e,t){let n=e.startPosition.row;for(let r of e.text.matchAll(Pd)){let i=r[1]??"";for(let o of i.matchAll(Fd))o[1]&&t(o[1],n)}}var Ad=[/\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],Md=/^#!?\[\s*serde\s*\(/,Od=/^#!?\[\s*schemars\s*\(/,$d=/^#!?\[\s*validate\s*\(/,jd=new Set(["invoke","invokeTauriCommand","listen","once","emit","subscribe","dispatch","sendCommand","callRust"]);function fa(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=zt(r);if(!i||!jd.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 ga(e,t){let n=Md.test(e),r=Od.test(e),i=$d.test(e);if(!(!n&&!r&&!i))for(let o of Ad){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 ha(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 ya=new WeakMap;function K(e,t){let n=$(t);if(!n)return null;let r=ce(e,t);if(!r)return null;let i=ya.get(r);if(i)return i;let o=Hd(r,n);return ya.set(r,o),o}function ki(e,t,n,r){let i=K(e,t);return i?Bd(i,n,r)?.isLiteralPassthrough??!0:!0}function Bd(e,t,n){return e.callables.find(r=>r.startLine===t&&r.endLine===n)??null}function Hd(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=ca(l,t);u&&n.push(u);let m=ra(l,t);m&&r.push(m),fa(l,t,o),t==="rust"&&(l.type==="attribute_item"||l.type==="inner_attribute_item")&&ga(l.text,i),ua(l,t)&&a(l.text,l.startPosition.row),ma(l,t)&&pa(l,a);for(let d of l.children)c(d)};return c(e.rootNode),{language:t,callables:n,callSites:r,typeContainerMap:ha(e,t),identifierLineMap:s,identifiersByLine:da(s),fileIdentifiers:new Set(s.keys()),rustAttrReferencedNames:i,crossLanguageDispatchNames:o}}var ba=new Set(["rust","typescript","tsx","javascript","python"]);function Pi(e,t){let n=K(e,t);return!n||!ba.has(n.language)?null:n.callables.map(r=>({name:r.name,startLine:r.startLine,endLine:r.endLine}))}function Qt(e,t){let n=K(e,t);return!n||!ba.has(n.language)?null:n.callSites}function Fi(e,t){return K(e,t)?.typeContainerMap??new Map}function yt(e,t,n={}){let r=K(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 qd={"/":"namespace","#":"type",".":"term","[":"type-param",":":"meta","!":"macro"};function Z(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=Vd(i);return{scheme:n,manager:r,packageName:o,version:s,descriptors:c,raw:e}}function Ae(e){let t=Z(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 Vd(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||Sa(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&&!Sa(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=qd[i];o&&t.push({name:r,suffix:o}),n+=1}}return t}function Sa(e){return e==="/"||e==="#"||e==="."||e==="("||e==="["||e===":"||e==="!"}function b(e){let t=Z(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=Wd(i);o&&r.push(o)}return r.join(":")}function Wd(e){let t=e.suffix==="namespace"?Ud(e.name):e.name;return t?e.suffix==="method"?`${t}()`:t:""}function Ud(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 P(e){let t=Z(e);if("kind"in t&&t.kind==="local")return t.id;let n=t;return n.descriptors.length===0?"":n.descriptors[n.descriptors.length-1].name}function ee(e){let t=Z(e);if("kind"in t&&t.kind==="local")return null;let n=t;return n.descriptors[n.descriptors.length-1]?.suffix??null}function ie(e){return e.endsWith("().")||ee(e)==="method"}function Y(e){let t=ee(e);return t==="method"||t==="term"}function it(e){return ee(e)==="namespace"}var Gd=/^rust-analyzer\b.*[\s/]impl#\[[^\]]+\]\[[^\]]+\]/;function dr(e){return Gd.test(e)}var Jd=new Set(["test","tests","_tests"]);function Kt(e){let t=Z(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&&Jd.has(r.name))return!0}return!1}function xa(e,t){let n=Z(e),r=Z(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 Ca(e,t){let n=Z(e),r=Z(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 Yt(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
51
11
  FROM global_symbols gs
52
12
  JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
53
13
  JOIN documents d ON der.document_id = d.id
54
14
  WHERE ${t.where}
55
15
  ${e.pathExclusionsFor("d")}
56
- ${Fs(t.orderBy)}
57
- ${As(t.limit)}`,...t.params??[])}function wt(e,t){return e.all(`SELECT
16
+ ${Ia(t.orderBy)}
17
+ ${va(t.limit)}`,...t.params??[])}function Xt(e,t){return e.all(`SELECT
58
18
  gs.id,
59
19
  gs.symbol,
60
20
  c.document_id,
@@ -71,8 +31,8 @@ import{program as zr}from"commander";import{realpathSync as Dm}from"fs";import{f
71
31
  AND ${t.where}
72
32
  ${e.pathExclusionsFor("d")}
73
33
  GROUP BY gs.id, gs.symbol, c.document_id, d.relative_path, gs.display_name, gs.documentation
74
- ${Fs(t.orderBy)}
75
- ${As(t.limit)}`,...t.params??[])}function Fs(e){return e?`ORDER BY ${e}`:""}function As(e){return typeof e=="number"?`LIMIT ${e}`:""}function at(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 ct(e){if(!e)return null;let t=Os(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(Os(r)??r).replace(/\n/g," ")}function Os(e){return/^```(?:\w+)?\s*\n?([\s\S]*?)\n?```/.exec(e.trimStart())?.[1]?.trim()||null}function td(e){if(Le(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 kt(e,t,n={}){let r=new Map;for(let o of t)e.length>0&&!td(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 js=H("file-definitions");function Bs(e,t){js.invalidate(e,t)}function W(e,t){return js.get(e,t,()=>{let n=kt(nd(e,t),rd(e,t),{sort:!0});return od(e,t,n.map(id))})}function nd(e,t){return e.all(`SELECT
34
+ ${Ia(t.orderBy)}
35
+ ${va(t.limit)}`,...t.params??[])}function Ia(e){return e?`ORDER BY ${e}`:""}function va(e){return typeof e=="number"?`LIMIT ${e}`:""}function bt(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 St(e){if(!e)return null;let t=Ra(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(Ra(r)??r).replace(/\n/g," ")}function Ra(e){return/^```(?:\w+)?\s*\n?([\s\S]*?)\n?```/.exec(e.trimStart())?.[1]?.trim()||null}function zd(e){if(Ae(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 Zt(e,t,n={}){let r=new Map;for(let o of t)e.length>0&&!zd(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 Qd=W("file-definitions",{clearGroups:["definition-catalog"]});function H(e,t){return Qd.get(e,t,()=>{let n=Zt(Kd(e,t),Yd(e,t),{sort:!0});return Zd(e,t,n.map(Xd))})}function Kd(e,t){return e.all(`SELECT
76
36
  gs.id,
77
37
  gs.symbol,
78
38
  der.document_id,
@@ -88,7 +48,7 @@ import{program as zr}from"commander";import{realpathSync as Dm}from"fs";import{f
88
48
  JOIN documents d ON der.document_id = d.id
89
49
  WHERE d.relative_path = ?
90
50
  ${e.symbolNoiseFor("gs")}
91
- ORDER BY der.start_line, der.end_line`,t)}function rd(e,t){return e.all(`SELECT
51
+ ORDER BY der.start_line, der.end_line`,t)}function Yd(e,t){return e.all(`SELECT
92
52
  gs.id,
93
53
  gs.symbol,
94
54
  c.document_id,
@@ -107,11 +67,10 @@ import{program as zr}from"commander";import{realpathSync as Dm}from"fs";import{f
107
67
  AND m.role = 1
108
68
  ${e.symbolNoiseFor("gs")}
109
69
  GROUP BY gs.id, gs.symbol, c.document_id, d.relative_path
110
- ORDER BY start_line, end_line`,t)}function id(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:L(e.symbol),parentTypeName:Le(e.symbol),isFunctionLike:Q(e.symbol),isTypeLike:Y(e.symbol)==="type",kind:e.kind??null,documentation:e.documentation??null,enclosingSymbol:e.enclosing_symbol??null}}function Ee(e,t={}){return ii(e,t.scope)}function ii(e,t){return k(e,{scope:t,includeIgnored:!1}).flatMap(n=>W(e,n)).filter(n=>!e.isIgnored(n.relativePath))}function Pt(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:h(i.symbol),signature:at(ct(i.documentation)),relativePath:i.relativePath,enclosingSymbol:i.enclosingSymbol}))}function de(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 lt(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 od(e,t,n){let r=T(e,t),i=ti(e,t);return i?md(n,i,r):r?sd(n,r):n}function sd(e,t){let n=t.split(/\r?\n/),r=ad(e,n),i=cd(e,r),o=ld(i,n);return ud(e,o)}function ad(e,t){let n=e.some(i=>Vn(i.symbol))?fd(t):null,r=new Map;for(let i of e)r.set(i.symbolId,pd(t,n,i));return r}function cd(e,t){return e.filter(n=>Vn(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 ld(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:gd(t,i.definition,i.startLine,s)})}return n}function ud(e,t){return e.map(n=>{let r=t.get(n.symbolId);return r?{...n,startLine:r.startLine,endLine:r.endLine}:n})}function md(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(!dd(i)||!i.leaf)return $s(i,n);let o=r.get(i.leaf);if(!o||o.length===0)return $s(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 dd(e){return Vn(e.symbol)?!0:Y(e.symbol)==="term"&&Le(e.symbol)===null}function $s(e,t){if(!t||!e.leaf||Y(e.symbol)!=="term"||Le(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 pd(e,t,n){if(!Vn(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 fd(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 gd(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=hd(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 hd(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 Vn(e){return e.includes("().")}function Wn(e){let t=K(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 wd}from"fs";import{basename as Hs,isAbsolute as kd,join as Pd}from"path";function w(e,t){let n=Mt(e,t.trim());if(n)return n;let r=Rd(e,t);if(r)return r;let i=yd(e,t);return i||Cd(e,t)}function yd(e,t){let n=si(t),r=oi(n);if(!r)return null;let i=`%${r.path}%`,o=r.leaf,a=bd(e,i,o,n)[0];return a?lt(e,a):null}function bd(e,t,n,r){let i=kt([],[...Sd(e,t,n),...xd(e,t,n)]).filter(o=>!e.isIgnored(o.relative_path)).filter(o=>Tt(o,r)>1);return i.sort((o,s)=>Tt(s,r)-Tt(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 Sd(e,t,n){return Et(e,{where:"d.relative_path LIKE ? AND (gs.display_name = ? OR gs.symbol LIKE ?)",params:[t,n,`%/${n}.%`]})}function xd(e,t,n){return wt(e,{where:"d.relative_path LIKE ? AND (gs.display_name = ? OR gs.symbol LIKE ?)",params:[t,n,`%/${n}.%`]})}function Cd(e,t){let n=si(t),r=Ld(t),i=Dd(e,r),o=Ed(i,t,n);if(o&&!e.isIgnored(o.relative_path))return lt(e,o);let s=null;for(let a of i){if(e.isIgnored(a.relative_path))continue;let c=Nd(a,t,n,r);c<=0||(!s||c>s.score)&&(s={row:a,score:c})}return s?lt(e,s.row):null}function Rd(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=Id(e,r,s,a)??_d(e,r,s,a);return c&&!e.isIgnored(c.relative_path)?lt(e,c):null}function Id(e,t,n,r){return Et(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 _d(e,t,n,r){return wt(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 Mt(e,t){let r=Et(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, der.start_line",limit:1})[0]??wt(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, start_line",limit:1})[0];return!r||e.isIgnored(r.relative_path)?null:lt(e,r)}function qn(e,t){if("symbol"in t&&"relativePath"in t)return t;let n=vd(e,t.symbolId)[0];return n?lt(e,n):null}function vd(e,t){let n=Et(e,{where:"gs.id = ?",params:[t],orderBy:"der.start_line, der.end_line"}),r=wt(e,{where:"gs.id = ?",params:[t],orderBy:"start_line, end_line"});return kt(n,r)}function Dd(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(`
111
- AND `),o=Et(e,{where:i,params:r,limit:200}),s=wt(e,{where:i,params:r,limit:200});return kt(o,s)}function Nd(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=h(e.symbol),d=L(e.symbol),p=e.display_name??"",y=e.symbol.toLowerCase(),f=m.toLowerCase(),b=d.toLowerCase(),E=p.toLowerCase(),x=e.relative_path.toLowerCase(),$=/[/:.]/.test(n),O=oi(n),I=O?.leaf.toLowerCase(),_=0;return(u===i||u===o)&&(_+=1150),(m===i||m===o)&&(_+=1100),p===s&&(_+=1180),d===s&&(_+=1160),(`${d}()`===i||`${d}()`===o)&&(_+=955),(y===a||y===c)&&(_+=1e3),(f===a||f===c)&&(_+=950),(x===a||x===c)&&(_+=925),(x.endsWith(`/${c}`)||x.endsWith(`/${a}`))&&(_+=875),E===l&&(_+=850),b===l&&(_+=825),(`${b}()`===a||`${b}()`===c)&&(_+=820),(f.endsWith(`:${c}`)||f.endsWith(`:${l}`)||f.endsWith(`:${l}()`))&&(_+=800),y.includes(c)&&(_+=120),f.includes(c)&&(_+=140),x.includes(c)&&(_+=140),E.includes(c)&&(_+=110),r.every(G=>{let A=G.toLowerCase();return y.includes(A)||f.includes(A)||x.includes(A)||E.includes(A)})&&(_+=100+r.length*15),O&&x.includes(O.path.toLowerCase())&&(_+=360,I&&(b===I||`${b}()`===I||`${b}()`==`${I}()`)&&(_+=700),Z(e.symbol)&&(_+=180)),Q(e.symbol)&&b===l&&(_+=60),!$&&We(e.symbol)&&(_-=160),_-=Math.min(50,Math.max(0,e.end_line-e.start_line)),_}function oi(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 si(e){return e.trim().replace(/\(\)$/,"").replace(/\(.*$/,"")}function Ld(e){let t=si(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 Ed(e,t,n){let r=t.trim(),i=e.filter(o=>{let s=h(o.symbol),a=(o.display_name??"").trim();return o.symbol===r||s===r||s===n||a===r||a===n||`${a}()`===r||Tt(o,n)>1||o.relative_path===r});return i.length===0?null:(i.sort((o,s)=>Tt(s,n)-Tt(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 Tt(e,t){let n=oi(t);if(!n)return 0;let r=e.relative_path.toLowerCase(),i=L(e.symbol).toLowerCase(),o=n.path.toLowerCase(),s=n.leaf.toLowerCase();return r.includes(o)?i!==s?1:Z(e.symbol)?Le(e.symbol)===null?5:4:Le(e.symbol)===null?3:2:0}function re(e,t){let n=Vs(e,t,{allowMultiple:!1})[0]?.relativePath;return n||Td(e,t)}function Ue(e,t){return Vs(e,t,{allowMultiple:!0}).map(n=>n.relativePath)}function Td(e,t){if(!t)return null;let n=t.replace(/\\/g,"/").replace(/^\.\//,""),r=kd(n)&&n.startsWith(e.config.projectRoot)?n.slice(e.config.projectRoot.length).replace(/^\/+/,""):n,i=Pd(e.config.projectRoot,r);return wd(i)?r:null}function Vs(e,t,n){let r=Ws(t);if(!r)return[];let i=k(e,{includeIgnored:!1}).map(a=>({relativePath:a,score:Md(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=w(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 Md(e,t){let n=Ws(e),r=Hs(n),i=Hs(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 Ws(e){return e.trim().replace(/\\/g,"/").replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"")}function ai(e,t){let n=Ue(e,t);return Pt(e,n).map(({relativePath:r,...i})=>i)}import{basename as Ug}from"path";import{existsSync as Un}from"fs";import{basename as Od,dirname as Je,extname as Me,join as Ce,relative as nn,resolve as pe}from"path";var Fd=Ve("indexed-paths"),ut=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs",".vue"],Jn=[".py",".pyi"],ce=[".java",".scala",".kt",".kts"],zn=[".rs"],Gn=[".rb"],Qn=[".c",".h",".cc",".cpp",".cxx",".hpp",".hh",".hxx"],ze=[".cs",".vb"],Kn=[".dart"],mt=[".php"],Ad=new Set(ut),ci=new Set(Jn),qs=new Set(ce),li=new Set(zn),ui=new Set(Gn),Us=new Set(Qn),Js=new Set(ze),mi=new Set(Kn),zs=new Set(mt),$d=[{extensions:ut,lookup:Ad},{extensions:Jn,lookup:ci},{extensions:ce,lookup:qs},{extensions:zn,lookup:li},{extensions:Gn,lookup:ui},{extensions:Qn,lookup:Us},{extensions:ze,lookup:Js},{extensions:Kn,lookup:mi},{extensions:mt,lookup:zs}];function Ge(e,t){return t.has(Me(e).toLowerCase())}function jd(e){return Ge(e,ci)}function Bd(e){return Ge(e,qs)}function Hd(e){return Ge(e,li)}function Vd(e){return Ge(e,ui)}function Wd(e){return Ge(e,Us)}function qd(e){return Ge(e,Js)}function Gs(e){return Me(e).toLowerCase()===".vb"}function Ud(e){return Ge(e,mi)}function Jd(e){return Ge(e,zs)}function di(e){let t=Me(e).toLowerCase();for(let n of $d)if(n.lookup.has(t))return n.extensions;return ut}function zd(e){return Bd(e)||qd(e)||Jd(e)}function Re(e,t,n){return jd(t)?Ot(e,t,n):Hd(t)?Oe(e,t,n):Vd(t)?Yn(e,t,n):Wd(t)?Xn(e,t,n):zd(t)?q(e,n.replace(/\\/g,"."),di(t)):Ud(t)?Zn(e,t,n):Gd(e,t,n)}function Gd(e,t,n){if(!n.startsWith(".")&&!n.startsWith("/"))return null;let r=Je(Ce(e.config.projectRoot,t)),i=pe(r,n),o=rn(e);for(let s of Zd(i)){let a=fe(nn(e.config.projectRoot,s));if(o.has(a)||Un(s))return a}return fe(nn(e.config.projectRoot,i))}function Ot(e,t,n){let r=rn(e),i;if(n.startsWith(".")){let o=n.match(/^(\.+)(.*)$/);if(!o)return null;let s=o[1].length,a=o[2].replace(/^\./,""),c=Je(Ce(e.config.projectRoot,t));for(let l=1;l<s;l++)c=Je(c);i=a?pe(c,a.replace(/\./g,"/")):c}else i=pe(e.config.projectRoot,n.replace(/\./g,"/"));for(let o of Qd(i)){let s=fe(nn(e.config.projectRoot,o));if(r.has(s)||Un(o))return s}return null}function Oe(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=Je(Ce(e.config.projectRoot,t)),o;return r.startsWith("crate::")?o=pe(e.config.projectRoot,"src",r.slice(7).replace(/::/g,"/")):r.startsWith("self::")?o=pe(i,r.slice(6).replace(/::/g,"/")):o=pe(Je(i),r.slice(7).replace(/::/g,"/")),pi(e,Kd(o))}function Yn(e,t,n){let r=Je(Ce(e.config.projectRoot,t)),i=pe(r,n);return pi(e,Yd(i))}function Xn(e,t,n){let r=Je(Ce(e.config.projectRoot,t)),i=[pe(r,n),pe(e.config.projectRoot,n),pe(e.config.projectRoot,"include",n),pe(e.config.projectRoot,"src",n)];return pi(e,i)}function q(e,t,n){let r=rn(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=>Od(u)===`${s}${c}`);if(l)return l}let a=[...r].filter(c=>n.includes(Me(c).toLowerCase())).filter(c=>c.includes(`/${o}/`)||c.includes(`/${s}/`)).sort((c,l)=>c.localeCompare(l));return a.length===1?a[0]:null}function Zn(e,t,n){let r=rn(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=fe(c.startsWith("lib/")?c:`lib/${c}`);return r.has(l)?l:null}let i=Je(Ce(e.config.projectRoot,t)),o=pe(i,n);for(let s of Xd(o)){let a=fe(nn(e.config.projectRoot,s));if(r.has(a)||Un(s))return a}return null}function Qd(e){let t=Me(e);return ci.has(t)?[e]:[`${e}.py`,`${e}.pyi`,Ce(e,"__init__.py"),Ce(e,"__init__.pyi")]}function pi(e,t){let n=rn(e);for(let r of t){let i=fe(nn(e.config.projectRoot,r));if(n.has(i)||Un(r))return i}return null}function Kd(e){let t=Me(e);return li.has(t)?[e]:[`${e}.rs`,Ce(e,"mod.rs")]}function Yd(e){let t=Me(e);return ui.has(t)?[e]:[`${e}.rb`,Ce(e,"index.rb")]}function Xd(e){let t=Me(e);return mi.has(t)?[e]:[`${e}.dart`,e]}function Zd(e){let t=Me(e),n=new Set;if(t){n.add(e);for(let r of ut)n.add(e.slice(0,-t.length)+r)}else for(let r of ut)n.add(`${e}${r}`),n.add(Ce(e,`index${r}`));return[...n]}function rn(e){return Fd.get(e,()=>new Set(k(e,{includeIgnored:!1}).map(fe)))}function fe(e){return e.replace(/\\/g,"/")}import{basename as Xs}from"path";function Ft(e){return e.replace(/'''[\s\S]*?'''/g,Qe).replace(/"""[\s\S]*?"""/g,Qe).replace(/#.*$/gm,Qe).replace(/\/\/.*$/gm,Qe).replace(/\/\*[\s\S]*?\*\//g,Qe).replace(/`(?:\\[\s\S]|[^`])*`/g,Qe).replace(/'(?:\\.|[^'\\\r\n])*'/g,Qe).replace(/"(?:\\.|[^"\\\r\n])*"/g,Qe)}function Qe(e){return e.replace(/[^\r\n]/g," ")}var fi=$n("stripped-lines");function Qs(e,t,n){return fi.get(e,t,n,()=>Ft(n).split(`
112
- `))}function Ks(e){fi.invalidateAll(e),er=null,on=""}function Ys(e,t){fi.invalidate(e,t),er=null,on=""}var er=null,on="";function ep(e){return er===e||(er=e,on=Ft(e)),on}function Ke(e,t,n){let r=ep(e);return`${r.slice(0,t)}${" ".repeat(n-t)}${r.slice(n)}`}function ie(e,t){return new RegExp(`\\b${tr(t)}\\b`,"m").test(e)}function At(e,t){let n=new Set,r=new RegExp(`\\b${tr(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 tr(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function sn(e){let t=0;for(let n of e)n==="("&&(t+=1),n===")"&&(t-=1);return t}var tp=new Set(["identifier","type_identifier","property_identifier","shorthand_property_identifier","field_identifier"]);function oe(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 le(e,t){for(let n of e.namedChildren)if(n.type===t)return n;return null}function U(e,t){let n=new Set,r=(i,o)=>{let s=o||t.has(i.type);!s&&tp.has(i.type)&&n.add(i.text);for(let a of i.children)r(a,s)};return r(e.rootNode,!1),n}function we(e,t,n,r,i,o,s){return{importedName:i,localName:o,sourcePath:s??q(e,r,di(t)),kind:"named",used:ie(n,o),usedMembers:[]}}function V(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 $t(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 dt(e,t){return{importedName:e,localName:null,sourcePath:t,kind:"side-effect",used:!0,usedMembers:[]}}function pt(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 ge(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=Ke(e,i.index,i.index+o.length);for(let a of n(i,s))r.push(a)}return r}function he(e,t,n,r){let i=B(e,t);if(i){let o=n(i);if(o)return o}return r()}function nr(e,t,n,r){let i=B(e,t),o=P(t),s=o?n[o]:void 0;return i&&s?s(i):r()}function Zs(e,t,n){return he(e,t,r=>rp(e,t,r),()=>np(e,t,n))}function np(e,t,n){return ge(n,/^[ \t]*#include\s+[<"]([^">]+)[">]\s*$/gm,(r,i)=>{let o=r[1]?.trim();if(!o)return[];let s=Xs(o).replace(/\.[^.]+$/,"");return[$t(o,s,Xn(e,t,o),ie(i,s))]})}function rp(e,t,n){let r=U(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=Xs(s).replace(/\.[^.]+$/,"");i.push(V(s,a,Xn(e,t,s),r))}return i}function ea(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=Ke(n,i.index,i.index+a.length);r.push({importedName:o,localName:s,sourcePath:Zn(e,t,o),kind:s?"namespace":"side-effect",used:s?ie(c,s):!0,usedMembers:s?At(c,s):[]})}return r}function ta(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:Zn(e,t,o)})}return r}function na(e,t,n){return nr(e,t,{csharp:r=>op(e,t,r),vb:r=>ip(e,t,r)},()=>{let r=Gs(t)?/^[ \t]*Imports\s+(.+?)\s*$/gm:/^[ \t]*using\s+(.+?)\s*;$/gm;return ge(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[we(e,t,o,u,m,d,q(e,u,ze))]})})}function ip(e,t,n){let r=U(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(V(u,m,q(e,l,ze),r,c?"namespace":"named"))}return i}function op(e,t,n){let r=U(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(V(u,m,q(e,l,ze),r,a?"namespace":"named"))}return i}var sp=H("vue-non-script-identifiers");function ra(e,t){return sp.get(e,t,()=>{let n=new Set,r=T(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 gi(e,t,n){return he(e,t,r=>cp(e,t,r),()=>ap(e,t,n))}function ap(e,t,n){return Sp(n).flatMap(r=>xp(e,t,r.clause,r.specifier,r.start,r.end,n))}function cp(e,t,n){let r=lp(e,t,n),i=[];for(let o of n.rootNode.descendantsOfType("import_statement"))i.push(...up(e,t,n,o,r));return i}function lp(e,t,n){let r=U(n,new Set(["import_statement"]));if(st(t))for(let i of ra(e,t))r.add(i);return r}function up(e,t,n,r,i){let o=gp(r);if(!o)return[];let s=Re(e,t,o),a=le(r,"import_clause");return a?mp(n,a,s,i,hp(r.text)):[dt("*",s)]}function mp(e,t,n,r,i){let o=[];for(let s of t.namedChildren)if(s.type==="identifier")o.push(dp(s.text,n,r,i));else if(s.type==="namespace_import"){let a=pp(e,s,n,r,i);a&&o.push(a)}else s.type==="named_imports"&&o.push(...fp(s,n,r,i));return o}function dp(e,t,n,r){return V("default",e,t,n,"default",{isTypeOnly:r})}function pp(e,t,n,r,i){let s=le(t,"identifier")?.text??"";if(!s)return null;let a=bp(e,s);return pt("*",n,{localName:s,usedMembers:a,isTypeOnly:i,used:a.length>0||r.has(s)})}function fp(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(V(c,l,t,n,"named",{isTypeOnly:r||yp(o.text)}))}return i}function gp(e){let t=le(e,"string");if(!t)return null;let n=le(t,"string_fragment");return n?n.text:null}function hp(e){return/^\s*import\s+type\b/.test(e)}function yp(e){return/^\s*type\b/.test(e.trim())}function bp(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 Sp(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 xp(e,t,n,r,i,o,s){let a=Re(e,t,r),c=Ke(s,i,o);return n?Cp(n).map(u=>({...u,sourcePath:a})).map(u=>{if(u.kind==="namespace"){let m=At(c,u.localName);return pt(u.importedName,u.sourcePath,{localName:u.localName,usedMembers:m,used:m.length>0||ie(c,u.localName),isTypeOnly:u.isTypeOnly})}return u.kind==="side-effect"?dt(u.importedName,u.sourcePath):$t(u.importedName,u.localName??"",u.sourcePath,u.localName?ie(c,u.localName):!1,u.kind,[],{isTypeOnly:u.isTypeOnly})}):[dt("*",a)]}function Cp(e){let t=e.trim(),n=/^type\b/.test(t),r=t.replace(/^type\s+/,""),[i,o]=Rp(r),s=[];return i&&s.push(...ia(i,n)),o&&s.push(...ia(o,n)),s}function ia(e,t){let n=e.trim();if(!n)return[];if(n.startsWith("{")){let r=n.slice(1,-1).trim();return r?oe(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 Rp(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 hi(e,t,n){let r=B(e,t);return r?Lp(e,t,r):Ip(e,t,n)}function Ip(e,t,n){return[..._p(e,t,n),...vp(e,t,n),...Dp(e,t,n)]}function _p(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=oe(s).map(m=>Np(m.trim())).filter(m=>!!m),l=jt(n,o.index),u=jt(n,o.index+o[0].length-1);r.push({kind:"named",sourcePath:Re(e,t,a),names:c,startLine:l,endLine:u})}return r}function vp(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=jt(n,o.index),c=jt(n,o.index+o[0].length-1);r.push({kind:"star-as",sourcePath:Re(e,t,s),names:[],startLine:a,endLine:c})}return r}function Dp(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=jt(n,o.index),c=jt(n,o.index+o[0].length-1);r.push({kind:"star",sourcePath:Re(e,t,s),names:[],startLine:a,endLine:c})}return r}function Np(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 jt(e,t){let n=0;for(let r=0;r<t&&r<e.length;r++)e.charCodeAt(r)===10&&n++;return n}function Lp(e,t,n){let r=[];for(let i of n.rootNode.descendantsOfType("export_statement")){let o=Ep(e,t,i);if(o===void 0)continue;let s=i.startPosition.row,a=i.endPosition.row,c=wp(i,o,s,a);r.push(c)}return r}function Ep(e,t,n){let r=le(n,"string");if(!r)return;let i=le(r,"string_fragment");if(i)return Re(e,t,i.text)}function wp(e,t,n,r){let i=le(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 le(e,"namespace_export")?{kind:"star-as",sourcePath:t,names:[],startLine:n,endLine:r}:{kind:"star",sourcePath:t,names:[],startLine:n,endLine:r}}function oa(e,t,n){return nr(e,t,{java:r=>kp(e,t,r),kotlin:r=>Pp(e,t,r),scala:r=>Tp(e,t,r)},()=>ge(n,/^[ \t]*import\s+(?:static\s+)?(.+?)\s*;?$/gm,(r,i)=>{let o=r[1]?.trim();return o?Mp(e,t,o,i):[]}))}function kp(e,t,n){let r=U(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(pt("*",q(e,l,ce)));continue}let u=l.split(".").pop()??l;i.push(V(u,u,q(e,l,ce),r))}return i}function Pp(e,t,n){let r=U(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(pt("*",q(e,s.text,ce)));continue}let l=s.text,u=l.split(".").pop()??l,d=c?.namedChild(0)?.text??u;i.push(V(u,d,q(e,l,ce),r))}return i}function Tp(e,t,n){let r=U(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(pt("*",q(e,c,ce)));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 y=d.text,f=p?.text??y;if(y==="_")continue;i.push(V(y,f,q(e,`${c}.${y}`,ce),r))}else if(m.type==="identifier"){let d=m.text;i.push(V(d,d,q(e,`${c}.${d}`,ce),r))}continue}let l=a[a.length-1]?.text??c,u=a.slice(0,-1).map(m=>m.text).join(".")||c;i.push(V(l,l,q(e,u&&a.length>1?`${u}.${l}`:c,ce),r))}return i}function Mp(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 oe(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[we(e,t,r,d,u,m)]})}return[we(e,t,r,n,n.split(".").pop()??n,n.split(".").pop()??n)]}function aa(e,t,n){return he(e,t,r=>Op(e,t,r),()=>ge(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(r,i)=>{let o=r[1]?.trim();return o?oe(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[we(e,t,i,u,m,d,q(e,u.replace(/\\/g,"."),mt))]}):[]}))}function Op(e,t,n){let r=U(n,new Set(["namespace_use_declaration"])),i=[],o=(s,a,c)=>{i.push(V(a,c,q(e,s.replace(/\\/g,"."),mt),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}=sa(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}=sa(c,"");l&&o(m,l,u)}}return i}function sa(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 la(e,t,n){return he(e,t,r=>Fp(e,t,r),()=>$p(n).flatMap(r=>Bp(e,t,r,n)))}function Fp(e,t,n){let r=U(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=ca(s);if(!a)continue;let c=Ot(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=Ap(s);if(a===null)continue;let c=Ot(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=ca(u);m&&i.push({importedName:m.qualifiedName,localName:m.localName,sourcePath:c,kind:"named",used:r.has(m.localName),usedMembers:[]})}}return i}function ca(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 Ap(e){if(e.type==="dotted_name")return e.text;if(e.type==="relative_import"){let t=le(e,"import_prefix")?.text??"",n=le(e,"dotted_name")?.text??"";return`${t}${n}`}return null}function $p(e){let t=e.split(`
113
- `),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=sn(o);for(;i+1<t.length&&(u>0||c.trimEnd().endsWith("\\"));){i++;let d=t[i];c+=`
114
- ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,end:l})}return n}function jp(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 Bp(e,t,n,r){let i=Ke(r,n.start,n.end),o=n.clause.replace(/\n/g," ").trim();if(n.kind==="import")return oe(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(),y=Ot(e,t,d),f=At(i,p);return[{importedName:d,localName:p,sourcePath:y,kind:"namespace",used:ie(i,p)||f.length>0,usedMembers:f}]});let s=n.module?Ot(e,t,n.module):null,a=[];for(let c of oe(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:ie(i,d),usedMembers:[]})}return a}import{basename as Hp}from"path";function ua(e,t,n){return he(e,t,r=>Wp(e,t,r),()=>Vp(e,t,n))}function Vp(e,t,n){return ge(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"?Yn(e,t,s):null;if(a){let c=ma(s);return[$t(c,c,a,ie(i,c))]}return[dt(s,a)]})}function Wp(e,t,n){let r=U(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"?Yn(e,t,m):null;if(d){let p=ma(m);i.push(V(p,p,d,r))}else i.push(dt(m,d))}return i}function ma(e){return Hp(e).replace(/\.[^.]+$/,"").split("_").filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}function da(e,t,n){return he(e,t,r=>qp(e,t,r),()=>ge(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(r,i)=>{let o=r[1]?.trim();return o?Up(e,t,o,i):[]}))}function qp(e,t,n){let r=U(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 an(s,"")){if(!a.importedName||a.importedName==="*")continue;let c=Oe(e,t,a.qualifiedName)??Oe(e,t,a.qualifiedName.split("::").slice(0,-1).join("::"));i.push(V(a.importedName,a.localName,c,r))}}return i}function an(e,t){switch(e.type){case"identifier":case"super":case"self":case"crate":{let n=e.text;return[{qualifiedName:rr(t,n),importedName:n,localName:n}]}case"scoped_identifier":{let n=e.text,r=n.split("::").pop()??n;return[{qualifiedName:rr(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=rr(t,n.text),o=[];for(let s of r.namedChildren)o.push(...an(s,i));return o}case"use_list":{let n=[];for(let r of e.namedChildren)n.push(...an(r,t));return n}case"use_as_clause":{let n=e.namedChild(0),r=e.namedChild(1);if(!n||!r)return[];let i=an(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:rr(t,`${r}::*`),importedName:"*",localName:"*"}]}default:return[]}}function rr(e,t){return e?t?`${e}::${t}`:e:t}function Up(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 oe(m).flatMap(d=>{let p=d.trim();if(!p||p==="self")return[];let[y,f]=p.split(/\s+as\s+/),b=y?.trim();if(!b)return[];let E=(f??b.split("::").pop()??b).trim(),x=`${u}::${b}`.replace(/::::/g,"::");return[we(e,t,r,x,b.split("::").pop()??b,E,Oe(e,t,u))]})}let[o,s]=i.split(/\s+as\s+/),a=o?.trim()??i,c=(s??a.split("::").pop()??a).trim(),l=Oe(e,t,a)??Oe(e,t,a.split("::").slice(0,-1).join("::"));return[we(e,t,r,a,a.split("::").pop()??a,c,l)]}function pa(e,t,n){let r=B(e,t);if(r)return Jp(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(...Gp(e,t,s))}return i}function Jp(e,t,n){let r=[];for(let i of n.rootNode.descendantsOfType("use_declaration")){if(!zp(i))continue;let o=i.namedChildren.find(s=>s.type!=="visibility_modifier");if(o)for(let s of an(o,""))s.importedName&&r.push(yi(e,t,s.qualifiedName))}return r}function zp(e){for(let t of e.children)if(t.type==="visibility_modifier"&&t.text.startsWith("pub"))return!0;return!1}function Gp(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 oe(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[yi(e,t,l)]})}return[yi(e,t,r)]}function yi(e,t,n){return{specifier:n,sourcePath:Oe(e,t,n)??Oe(e,t,n.split("::").slice(0,-1).join("::"))}}function ft({language:e,extensions:t,imports:n,parseImports:r}){return{language:e,extensions:t,capabilities:{imports:n},parseImports:r}}function fa(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 Qp={language:"javascript",extensions:ut,capabilities:{imports:"ast-with-regex-fallback",reExports:"ast-with-regex-fallback"},parseImports:gi,parseReExports:hi},Kp=ft({language:"python",extensions:Jn,imports:"ast-with-regex-fallback",parseImports:la}),Yp=ft({language:"jvm",extensions:ce,imports:"ast-dispatch-with-regex-fallback",parseImports:oa}),Xp={language:"rust",extensions:zn,capabilities:{imports:"ast-with-regex-fallback",exports:"ast-with-regex-fallback"},parseImports:da,parseExports:pa},Zp=ft({language:"ruby",extensions:Gn,imports:"ast-with-regex-fallback",parseImports:ua}),ef=ft({language:"c/cpp",extensions:Qn,imports:"ast-with-regex-fallback",parseImports:Zs}),tf=ft({language:"dotnet",extensions:ze,imports:"ast-dispatch-with-regex-fallback",parseImports:na}),nf={language:"dart",extensions:Kn,capabilities:{imports:"regex-only",exports:"regex-only"},parseImports:ea,parseExports:ta},rf=ft({language:"php",extensions:mt,imports:"ast-with-regex-fallback",parseImports:aa}),of=[Qp,Kp,Yp,Xp,Zp,ef,tf,nf,rf];function ir(e){return fa(of,e)}var bi=H("source-imports"),Si=H("source-exports"),xi=H("source-reexports");function ga(e,t){let n=fe(t);return xi.get(e,n,()=>{let r=ir(n);if(!r?.parseReExports)return[];let i=T(e,n);return i?r.parseReExports(e,n,i):[]})}function X(e,t){let n=fe(t);return bi.get(e,n,()=>{let r=ir(n);if(!r)return[];let i=T(e,n);return i?r.parseImports(e,n,i):[]})}function Ci(e,t){let n=fe(t);return Si.get(e,n,()=>{let r=ir(n);if(!r?.parseExports)return[];let i=T(e,n);return i?r.parseExports(e,n,i):[]})}function ha(e){bi.invalidateAll(e),Si.invalidateAll(e),xi.invalidateAll(e)}function ya(e,t){let n=fe(t);bi.invalidate(e,n),Si.invalidate(e,n),xi.invalidate(e,n)}var ba=H("file-dep-graph");function se(e,t){return ba.get(e,t??"",()=>{let n=new Map,r=new Set(k(e,{includeIgnored:!1})),i=(o,s)=>af(e,n,r,o,s);for(let o of sf(e,t))i(o.from_file,o.to_file);for(let o of r)if(!(t&&!o.includes(t)))for(let s of X(e,o))s.sourcePath&&i(o,s.sourcePath);return n})}function sf(e,t){let n=t?`AND d1.relative_path LIKE '%${t}%'`:"";return e.all(`SELECT DISTINCT
70
+ ORDER BY start_line, end_line`,t)}function Xd(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:P(e.symbol),parentTypeName:Ae(e.symbol),isFunctionLike:Y(e.symbol),isTypeLike:ee(e.symbol)==="type",kind:e.kind??null,documentation:e.documentation??null,enclosingSymbol:e.enclosing_symbol??null}}function Me(e,t={}){return Ti(e,t.scope)}function Ti(e,t){return T(e,{scope:t,includeIgnored:!1}).flatMap(n=>H(e,n)).filter(n=>!e.isIgnored(n.relativePath))}function pr(e,t,n={}){if(t.length===0)return[];let r=t.flatMap(i=>H(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:bt(St(i.documentation)),relativePath:i.relativePath,enclosingSymbol:i.enclosingSymbol}))}function be(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 xt(e,t){let n=H(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 Zd(e,t,n){let r=A(e,t),i=Pi(e,t);return i?op(n,i,r):r?ep(n,r):n}function ep(e,t){let n=t.split(/\r?\n/),r=tp(e,n),i=np(e,r),o=rp(i,n);return ip(e,o)}function tp(e,t){let n=e.some(i=>fr(i.symbol))?cp(t):null,r=new Map;for(let i of e)r.set(i.symbolId,ap(t,n,i));return r}function np(e,t){return e.filter(n=>fr(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 rp(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:lp(t,i.definition,i.startLine,s)})}return n}function ip(e,t){return e.map(n=>{let r=t.get(n.symbolId);return r?{...n,startLine:r.startLine,endLine:r.endLine}:n})}function op(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(!sp(i)||!i.leaf)return Da(i,n);let o=r.get(i.leaf);if(!o||o.length===0)return Da(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 sp(e){return fr(e.symbol)?!0:ee(e.symbol)==="term"&&Ae(e.symbol)===null}function Da(e,t){if(!t||!e.leaf||ee(e.symbol)!=="term"||Ae(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 ap(e,t,n){if(!fr(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 cp(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 lp(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=up(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 up(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 fr(e){return e.includes("().")}function gr(e){let t=Z(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 vp}from"fs";import{basename as Na,isAbsolute as Dp,join as Np}from"path";function F(e,t){let n=tn(e,t.trim());if(n)return n;let r=hp(e,t);if(r)return r;let i=mp(e,t);return i||gp(e,t)}function mp(e,t){let n=Mi(t),r=Ai(n);if(!r)return null;let i=`%${r.path}%`,o=r.leaf,a=dp(e,i,o,n)[0];return a?xt(e,a):null}function dp(e,t,n,r){let i=Zt([],[...pp(e,t,n),...fp(e,t,n)]).filter(o=>!e.isIgnored(o.relative_path)).filter(o=>en(o,r)>1);return i.sort((o,s)=>en(s,r)-en(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 pp(e,t,n){return Yt(e,{where:"d.relative_path LIKE ? AND (gs.display_name = ? OR gs.symbol LIKE ?)",params:[t,n,`%/${n}.%`]})}function fp(e,t,n){return Xt(e,{where:"d.relative_path LIKE ? AND (gs.display_name = ? OR gs.symbol LIKE ?)",params:[t,n,`%/${n}.%`]})}function gp(e,t){let n=Mi(t),r=Rp(t),i=xp(e,r),o=Ip(i,t,n);if(o&&!e.isIgnored(o.relative_path))return xt(e,o);let s=null;for(let a of i){if(e.isIgnored(a.relative_path))continue;let c=Cp(a,t,n,r);c<=0||(!s||c>s.score)&&(s={row:a,score:c})}return s?xt(e,s.row):null}function hp(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=yp(e,r,s,a)??bp(e,r,s,a);return c&&!e.isIgnored(c.relative_path)?xt(e,c):null}function yp(e,t,n,r){return Yt(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 bp(e,t,n,r){return Xt(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 tn(e,t){let r=Yt(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, der.start_line",limit:1})[0]??Xt(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, start_line",limit:1})[0];return!r||e.isIgnored(r.relative_path)?null:xt(e,r)}function hr(e,t){if("symbol"in t&&"relativePath"in t)return t;let n=Sp(e,t.symbolId)[0];return n?xt(e,n):null}function Sp(e,t){let n=Yt(e,{where:"gs.id = ?",params:[t],orderBy:"der.start_line, der.end_line"}),r=Xt(e,{where:"gs.id = ?",params:[t],orderBy:"start_line, end_line"});return Zt(n,r)}function xp(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(`
71
+ AND `),o=Yt(e,{where:i,params:r,limit:200}),s=Xt(e,{where:i,params:r,limit:200});return Zt(o,s)}function Cp(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=P(e.symbol),p=e.display_name??"",h=e.symbol.toLowerCase(),f=m.toLowerCase(),y=d.toLowerCase(),C=p.toLowerCase(),E=e.relative_path.toLowerCase(),N=/[/:.]/.test(n),I=Ai(n),v=I?.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),C===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),C.includes(c)&&(w+=110),r.every(V=>{let O=V.toLowerCase();return h.includes(O)||f.includes(O)||E.includes(O)||C.includes(O)})&&(w+=100+r.length*15),I&&E.includes(I.path.toLowerCase())&&(w+=360,v&&(y===v||`${y}()`===v||`${y}()`==`${v}()`)&&(w+=700),ie(e.symbol)&&(w+=180)),Y(e.symbol)&&y===l&&(w+=60),!N&&it(e.symbol)&&(w-=160),w-=Math.min(50,Math.max(0,e.end_line-e.start_line)),w}function Ai(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 Mi(e){return e.trim().replace(/\(\)$/,"").replace(/\(.*$/,"")}function Rp(e){let t=Mi(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 Ip(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||en(o,n)>1||o.relative_path===r});return i.length===0?null:(i.sort((o,s)=>en(s,n)-en(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 en(e,t){let n=Ai(t);if(!n)return 0;let r=e.relative_path.toLowerCase(),i=P(e.symbol).toLowerCase(),o=n.path.toLowerCase(),s=n.leaf.toLowerCase();return r.includes(o)?i!==s?1:ie(e.symbol)?Ae(e.symbol)===null?5:4:Ae(e.symbol)===null?3:2:0}function me(e,t){let n=La(e,t,{allowMultiple:!1})[0]?.relativePath;return n||Lp(e,t)}function nn(e,t){return La(e,t,{allowMultiple:!0}).map(n=>n.relativePath)}function Lp(e,t){if(!t)return null;let n=t.replace(/\\/g,"/").replace(/^\.\//,""),r=Dp(n)&&n.startsWith(e.config.projectRoot)?n.slice(e.config.projectRoot.length).replace(/^\/+/,""):n,i=Np(e.config.projectRoot,r);return vp(i)?r:null}function La(e,t,n){let r=_a(t);if(!r)return[];let i=T(e,{includeIgnored:!1}).map(a=>({relativePath:a,score:_p(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=F(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 _p(e,t){let n=_a(e),r=Na(n),i=Na(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 _a(e){return e.trim().replace(/\\/g,"/").replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"")}import{basename as Th}from"path";import{existsSync as yr}from"fs";import{basename as wp,dirname as ot,extname as We,join as Le,relative as vn,resolve as Se}from"path";var Ep=re("indexed-paths",{clearGroups:[]}),Ct=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs",".vue"],br=[".py",".pyi"],fe=[".java",".scala",".kt",".kts"],Sr=[".rs"],xr=[".rb"],Cr=[".c",".h",".cc",".cpp",".cxx",".hpp",".hh",".hxx"],st=[".cs",".vb"],Rr=[".dart"],Rt=[".php"],kp=new Set(Ct),Oi=new Set(br),wa=new Set(fe),$i=new Set(Sr),ji=new Set(xr),Ea=new Set(Cr),ka=new Set(st),Bi=new Set(Rr),Pa=new Set(Rt),Pp=[{extensions:Ct,lookup:kp},{extensions:br,lookup:Oi},{extensions:fe,lookup:wa},{extensions:Sr,lookup:$i},{extensions:xr,lookup:ji},{extensions:Cr,lookup:Ea},{extensions:st,lookup:ka},{extensions:Rr,lookup:Bi},{extensions:Rt,lookup:Pa}];function at(e,t){return t.has(We(e).toLowerCase())}function Fp(e){return at(e,Oi)}function Tp(e){return at(e,wa)}function Ap(e){return at(e,$i)}function Mp(e){return at(e,ji)}function Op(e){return at(e,Ea)}function $p(e){return at(e,ka)}function Fa(e){return We(e).toLowerCase()===".vb"}function jp(e){return at(e,Bi)}function Bp(e){return at(e,Pa)}function Hi(e){let t=We(e).toLowerCase();for(let n of Pp)if(n.lookup.has(t))return n.extensions;return Ct}function Hp(e){return Tp(e)||$p(e)||Bp(e)}function we(e,t,n){return Fp(t)?rn(e,t,n):Ap(t)?Ue(e,t,n):Mp(t)?Ir(e,t,n):Op(t)?vr(e,t,n):Hp(t)?J(e,n.replace(/\\/g,"."),Hi(t)):jp(t)?Dr(e,t,n):qp(e,t,n)}function qp(e,t,n){if(!n.startsWith(".")&&!n.startsWith("/"))return null;let r=ot(Le(e.config.projectRoot,t)),i=Se(r,n),o=Dn(e);for(let s of Jp(i)){let a=_e(vn(e.config.projectRoot,s));if(o.has(a)||yr(s))return a}return _e(vn(e.config.projectRoot,i))}function rn(e,t,n){let r=Dn(e),i;if(n.startsWith(".")){let o=n.match(/^(\.+)(.*)$/);if(!o)return null;let s=o[1].length,a=o[2].replace(/^\./,""),c=ot(Le(e.config.projectRoot,t));for(let l=1;l<s;l++)c=ot(c);i=a?Se(c,a.replace(/\./g,"/")):c}else i=Se(e.config.projectRoot,n.replace(/\./g,"/"));for(let o of Vp(i)){let s=_e(vn(e.config.projectRoot,o));if(r.has(s)||yr(o))return s}return null}function Ue(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=ot(Le(e.config.projectRoot,t)),o;return r.startsWith("crate::")?o=Se(e.config.projectRoot,"src",r.slice(7).replace(/::/g,"/")):r.startsWith("self::")?o=Se(i,r.slice(6).replace(/::/g,"/")):o=Se(ot(i),r.slice(7).replace(/::/g,"/")),qi(e,Wp(o))}function Ir(e,t,n){let r=ot(Le(e.config.projectRoot,t)),i=Se(r,n);return qi(e,Up(i))}function vr(e,t,n){let r=ot(Le(e.config.projectRoot,t)),i=[Se(r,n),Se(e.config.projectRoot,n),Se(e.config.projectRoot,"include",n),Se(e.config.projectRoot,"src",n)];return qi(e,i)}function J(e,t,n){let r=Dn(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=>wp(u)===`${s}${c}`);if(l)return l}let a=[...r].filter(c=>n.includes(We(c).toLowerCase())).filter(c=>c.includes(`/${o}/`)||c.includes(`/${s}/`)).sort((c,l)=>c.localeCompare(l));return a.length===1?a[0]:null}function Dr(e,t,n){let r=Dn(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=_e(c.startsWith("lib/")?c:`lib/${c}`);return r.has(l)?l:null}let i=ot(Le(e.config.projectRoot,t)),o=Se(i,n);for(let s of Gp(o)){let a=_e(vn(e.config.projectRoot,s));if(r.has(a)||yr(s))return a}return null}function Vp(e){let t=We(e);return Oi.has(t)?[e]:[`${e}.py`,`${e}.pyi`,Le(e,"__init__.py"),Le(e,"__init__.pyi")]}function qi(e,t){let n=Dn(e);for(let r of t){let i=_e(vn(e.config.projectRoot,r));if(n.has(i)||yr(r))return i}return null}function Wp(e){let t=We(e);return $i.has(t)?[e]:[`${e}.rs`,Le(e,"mod.rs")]}function Up(e){let t=We(e);return ji.has(t)?[e]:[`${e}.rb`,Le(e,"index.rb")]}function Gp(e){let t=We(e);return Bi.has(t)?[e]:[`${e}.dart`,e]}function Jp(e){let t=We(e),n=new Set;if(t){n.add(e);for(let r of Ct)n.add(e.slice(0,-t.length)+r)}else for(let r of Ct)n.add(`${e}${r}`),n.add(Le(e,`index${r}`));return[...n]}function Dn(e){return Ep.get(e,()=>new Set(T(e,{includeIgnored:!1}).map(_e)))}function _e(e){return e.replace(/\\/g,"/")}import{basename as Aa}from"path";function It(e){return e.replace(/'''[\s\S]*?'''/g,ct).replace(/"""[\s\S]*?"""/g,ct).replace(/#.*$/gm,ct).replace(/\/\/.*$/gm,ct).replace(/\/\*[\s\S]*?\*\//g,ct).replace(/`(?:\\[\s\S]|[^`])*`/g,ct).replace(/'(?:\\.|[^'\\\r\n])*'/g,ct).replace(/"(?:\\.|[^"\\\r\n])*"/g,ct)}function ct(e){return e.replace(/[^\r\n]/g," ")}var D_=ur("stripped-lines",{clearGroups:["whole-project","source-file"]});rt({name:"stripped-source-singleton",groups:["whole-project","source-file"],clearAll:()=>{Nr=null,Nn=""},clearFile:()=>{Nr=null,Nn=""}});var Nr=null,Nn="";function zp(e){return Nr===e||(Nr=e,Nn=It(e)),Nn}function lt(e,t,n){let r=zp(e);return`${r.slice(0,t)}${" ".repeat(n-t)}${r.slice(n)}`}function de(e,t){return new RegExp(`\\b${Ta(t)}\\b`,"m").test(e)}function on(e,t){let n=new Set,r=new RegExp(`\\b${Ta(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 Ta(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ln(e){let t=0;for(let n of e)n==="("&&(t+=1),n===")"&&(t-=1);return t}var Qp=new Set(["identifier","type_identifier","property_identifier","shorthand_property_identifier","field_identifier"]);function pe(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 ge(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&&Qp.has(i.type)&&n.add(i.text);for(let a of i.children)r(a,s)};return r(e.rootNode,!1),n}function Oe(e,t,n,r,i,o,s){return{importedName:i,localName:o,sourcePath:s??J(e,r,Hi(t)),kind:"named",used:de(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 sn(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 vt(e,t){return{importedName:e,localName:null,sourcePath:t,kind:"side-effect",used:!0,usedMembers:[]}}function Dt(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 xe(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=lt(e,i.index,i.index+o.length);for(let a of n(i,s))r.push(a)}return r}function Ce(e,t,n,r){let i=ce(e,t);if(i){let o=n(i);if(o)return o}return r()}function Lr(e,t,n,r){let i=ce(e,t),o=$(t),s=o?n[o]:void 0;return i&&s?s(i):r()}function Ma(e,t,n){return Ce(e,t,r=>Yp(e,t,r),()=>Kp(e,t,n))}function Kp(e,t,n){return xe(n,/^[ \t]*#include\s+[<"]([^">]+)[">]\s*$/gm,(r,i)=>{let o=r[1]?.trim();if(!o)return[];let s=Aa(o).replace(/\.[^.]+$/,"");return[sn(o,s,vr(e,t,o),de(i,s))]})}function Yp(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=Aa(s).replace(/\.[^.]+$/,"");i.push(U(s,a,vr(e,t,s),r))}return i}function Oa(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=lt(n,i.index,i.index+a.length);r.push({importedName:o,localName:s,sourcePath:Dr(e,t,o),kind:s?"namespace":"side-effect",used:s?de(c,s):!0,usedMembers:s?on(c,s):[]})}return r}function $a(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:Dr(e,t,o)})}return r}function ja(e,t,n){return Lr(e,t,{csharp:r=>Zp(e,t,r),vb:r=>Xp(e,t,r)},()=>{let r=Fa(t)?/^[ \t]*Imports\s+(.+?)\s*$/gm:/^[ \t]*using\s+(.+?)\s*;$/gm;return xe(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[Oe(e,t,o,u,m,d,J(e,u,st))]})})}function Xp(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,st),r,c?"namespace":"named"))}return i}function Zp(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,st),r,a?"namespace":"named"))}return i}var ef=W("vue-non-script-identifiers",{clearGroups:["whole-project","source-file"]});function Ba(e,t){return ef.get(e,t,()=>{let n=new Set,r=A(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 Vi(e,t,n){return Ce(e,t,r=>nf(e,t,r),()=>tf(e,t,n))}function tf(e,t,n){return ff(n).flatMap(r=>gf(e,t,r.clause,r.specifier,r.start,r.end,n))}function nf(e,t,n){let r=rf(e,t,n),i=[];for(let o of n.rootNode.descendantsOfType("import_statement"))i.push(...of(e,t,n,o,r));return i}function rf(e,t,n){let r=z(n,new Set(["import_statement"]));if(ht(t))for(let i of Ba(e,t))r.add(i);return r}function of(e,t,n,r,i){let o=uf(r);if(!o)return[];let s=we(e,t,o),a=ge(r,"import_clause");return a?sf(n,a,s,i,mf(r.text)):[vt("*",s)]}function sf(e,t,n,r,i){let o=[];for(let s of t.namedChildren)if(s.type==="identifier")o.push(af(s.text,n,r,i));else if(s.type==="namespace_import"){let a=cf(e,s,n,r,i);a&&o.push(a)}else s.type==="named_imports"&&o.push(...lf(s,n,r,i));return o}function af(e,t,n,r){return U("default",e,t,n,"default",{isTypeOnly:r})}function cf(e,t,n,r,i){let s=ge(t,"identifier")?.text??"";if(!s)return null;let a=pf(e,s);return Dt("*",n,{localName:s,usedMembers:a,isTypeOnly:i,used:a.length>0||r.has(s)})}function lf(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||df(o.text)}))}return i}function uf(e){let t=ge(e,"string");if(!t)return null;let n=ge(t,"string_fragment");return n?n.text:null}function mf(e){return/^\s*import\s+type\b/.test(e)}function df(e){return/^\s*type\b/.test(e.trim())}function pf(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 ff(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 gf(e,t,n,r,i,o,s){let a=we(e,t,r),c=lt(s,i,o);return n?hf(n).map(u=>({...u,sourcePath:a})).map(u=>{if(u.kind==="namespace"){let m=on(c,u.localName);return Dt(u.importedName,u.sourcePath,{localName:u.localName,usedMembers:m,used:m.length>0||de(c,u.localName),isTypeOnly:u.isTypeOnly})}return u.kind==="side-effect"?vt(u.importedName,u.sourcePath):sn(u.importedName,u.localName??"",u.sourcePath,u.localName?de(c,u.localName):!1,u.kind,[],{isTypeOnly:u.isTypeOnly})}):[vt("*",a)]}function hf(e){let t=e.trim(),n=/^type\b/.test(t),r=t.replace(/^type\s+/,""),[i,o]=yf(r),s=[];return i&&s.push(...Ha(i,n)),o&&s.push(...Ha(o,n)),s}function Ha(e,t){let n=e.trim();if(!n)return[];if(n.startsWith("{")){let r=n.slice(1,-1).trim();return r?pe(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 yf(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 Wi(e,t,n){let r=ce(e,t);return r?If(e,t,r):bf(e,t,n)}function bf(e,t,n){return[...Sf(e,t,n),...xf(e,t,n),...Cf(e,t,n)]}function Sf(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=pe(s).map(m=>Rf(m.trim())).filter(m=>!!m),l=an(n,o.index),u=an(n,o.index+o[0].length-1);r.push({kind:"named",sourcePath:we(e,t,a),names:c,startLine:l,endLine:u})}return r}function xf(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=an(n,o.index),c=an(n,o.index+o[0].length-1);r.push({kind:"star-as",sourcePath:we(e,t,s),names:[],startLine:a,endLine:c})}return r}function Cf(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=an(n,o.index),c=an(n,o.index+o[0].length-1);r.push({kind:"star",sourcePath:we(e,t,s),names:[],startLine:a,endLine:c})}return r}function Rf(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 an(e,t){let n=0;for(let r=0;r<t&&r<e.length;r++)e.charCodeAt(r)===10&&n++;return n}function If(e,t,n){let r=[];for(let i of n.rootNode.descendantsOfType("export_statement")){let o=vf(e,t,i);if(o===void 0)continue;let s=i.startPosition.row,a=i.endPosition.row,c=Df(i,o,s,a);r.push(c)}return r}function vf(e,t,n){let r=ge(n,"string");if(!r)return;let i=ge(r,"string_fragment");if(i)return we(e,t,i.text)}function Df(e,t,n,r){let i=ge(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 ge(e,"namespace_export")?{kind:"star-as",sourcePath:t,names:[],startLine:n,endLine:r}:{kind:"star",sourcePath:t,names:[],startLine:n,endLine:r}}function qa(e,t,n){return Lr(e,t,{java:r=>Nf(e,t,r),kotlin:r=>Lf(e,t,r),scala:r=>_f(e,t,r)},()=>xe(n,/^[ \t]*import\s+(?:static\s+)?(.+?)\s*;?$/gm,(r,i)=>{let o=r[1]?.trim();return o?wf(e,t,o,i):[]}))}function Nf(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(Dt("*",J(e,l,fe)));continue}let u=l.split(".").pop()??l;i.push(U(u,u,J(e,l,fe),r))}return i}function Lf(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(Dt("*",J(e,s.text,fe)));continue}let l=s.text,u=l.split(".").pop()??l,d=c?.namedChild(0)?.text??u;i.push(U(u,d,J(e,l,fe),r))}return i}function _f(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(Dt("*",J(e,c,fe)));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}`,fe),r))}else if(m.type==="identifier"){let d=m.text;i.push(U(d,d,J(e,`${c}.${d}`,fe),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,fe),r))}return i}function wf(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 pe(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[Oe(e,t,r,d,u,m)]})}return[Oe(e,t,r,n,n.split(".").pop()??n,n.split(".").pop()??n)]}function Wa(e,t,n){return Ce(e,t,r=>Ef(e,t,r),()=>xe(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(r,i)=>{let o=r[1]?.trim();return o?pe(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[Oe(e,t,i,u,m,d,J(e,u.replace(/\\/g,"."),Rt))]}):[]}))}function Ef(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,"."),Rt),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}=Va(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}=Va(c,"");l&&o(m,l,u)}}return i}function Va(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 Ga(e,t,n){return Ce(e,t,r=>kf(e,t,r),()=>Ff(n).flatMap(r=>Af(e,t,r,n)))}function kf(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=Ua(s);if(!a)continue;let c=rn(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=Pf(s);if(a===null)continue;let c=rn(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=Ua(u);m&&i.push({importedName:m.qualifiedName,localName:m.localName,sourcePath:c,kind:"named",used:r.has(m.localName),usedMembers:[]})}}return i}function Ua(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 Pf(e){if(e.type==="dotted_name")return e.text;if(e.type==="relative_import"){let t=ge(e,"import_prefix")?.text??"",n=ge(e,"dotted_name")?.text??"";return`${t}${n}`}return null}function Ff(e){let t=e.split(`
72
+ `),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=Ln(o);for(;i+1<t.length&&(u>0||c.trimEnd().endsWith("\\"));){i++;let d=t[i];c+=`
73
+ ${d}`,l+=1+d.length,u+=Ln(d),r+=d.length+1}let m=Tf(c);m&&n.push({...m,start:a,end:l})}return n}function Tf(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 Af(e,t,n,r){let i=lt(r,n.start,n.end),o=n.clause.replace(/\n/g," ").trim();if(n.kind==="import")return pe(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=rn(e,t,d),f=on(i,p);return[{importedName:d,localName:p,sourcePath:h,kind:"namespace",used:de(i,p)||f.length>0,usedMembers:f}]});let s=n.module?rn(e,t,n.module):null,a=[];for(let c of pe(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:de(i,d),usedMembers:[]})}return a}import{basename as Mf}from"path";function Ja(e,t,n){return Ce(e,t,r=>$f(e,t,r),()=>Of(e,t,n))}function Of(e,t,n){return xe(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"?Ir(e,t,s):null;if(a){let c=za(s);return[sn(c,c,a,de(i,c))]}return[vt(s,a)]})}function $f(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"?Ir(e,t,m):null;if(d){let p=za(m);i.push(U(p,p,d,r))}else i.push(vt(m,d))}return i}function za(e){return Mf(e).replace(/\.[^.]+$/,"").split("_").filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}function Qa(e,t,n){return Ce(e,t,r=>jf(e,t,r),()=>xe(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(r,i)=>{let o=r[1]?.trim();return o?Bf(e,t,o,i):[]}))}function jf(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 _n(s,"")){if(!a.importedName||a.importedName==="*")continue;let c=Ue(e,t,a.qualifiedName)??Ue(e,t,a.qualifiedName.split("::").slice(0,-1).join("::"));i.push(U(a.importedName,a.localName,c,r))}}return i}function _n(e,t){switch(e.type){case"identifier":case"super":case"self":case"crate":{let n=e.text;return[{qualifiedName:_r(t,n),importedName:n,localName:n}]}case"scoped_identifier":{let n=e.text,r=n.split("::").pop()??n;return[{qualifiedName:_r(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=_r(t,n.text),o=[];for(let s of r.namedChildren)o.push(..._n(s,i));return o}case"use_list":{let n=[];for(let r of e.namedChildren)n.push(..._n(r,t));return n}case"use_as_clause":{let n=e.namedChild(0),r=e.namedChild(1);if(!n||!r)return[];let i=_n(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:_r(t,`${r}::*`),importedName:"*",localName:"*"}]}default:return[]}}function _r(e,t){return e?t?`${e}::${t}`:e:t}function Bf(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 pe(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 C=(f??y.split("::").pop()??y).trim(),E=`${u}::${y}`.replace(/::::/g,"::");return[Oe(e,t,r,E,y.split("::").pop()??y,C,Ue(e,t,u))]})}let[o,s]=i.split(/\s+as\s+/),a=o?.trim()??i,c=(s??a.split("::").pop()??a).trim(),l=Ue(e,t,a)??Ue(e,t,a.split("::").slice(0,-1).join("::"));return[Oe(e,t,r,a,a.split("::").pop()??a,c,l)]}function Ka(e,t,n){let r=ce(e,t);if(r)return Hf(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(...Vf(e,t,s))}return i}function Hf(e,t,n){let r=[];for(let i of n.rootNode.descendantsOfType("use_declaration")){if(!qf(i))continue;let o=i.namedChildren.find(s=>s.type!=="visibility_modifier");if(o)for(let s of _n(o,""))s.importedName&&r.push(Ui(e,t,s.qualifiedName))}return r}function qf(e){for(let t of e.children)if(t.type==="visibility_modifier"&&t.text.startsWith("pub"))return!0;return!1}function Vf(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 pe(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[Ui(e,t,l)]})}return[Ui(e,t,r)]}function Ui(e,t,n){return{specifier:n,sourcePath:Ue(e,t,n)??Ue(e,t,n.split("::").slice(0,-1).join("::"))}}function Nt({language:e,extensions:t,imports:n,parseImports:r}){return{language:e,extensions:t,capabilities:{imports:n},parseImports:r}}function Ya(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 Wf={language:"javascript",extensions:Ct,capabilities:{imports:"ast-with-regex-fallback",reExports:"ast-with-regex-fallback"},parseImports:Vi,parseReExports:Wi},Uf=Nt({language:"python",extensions:br,imports:"ast-with-regex-fallback",parseImports:Ga}),Gf=Nt({language:"jvm",extensions:fe,imports:"ast-dispatch-with-regex-fallback",parseImports:qa}),Jf={language:"rust",extensions:Sr,capabilities:{imports:"ast-with-regex-fallback",exports:"ast-with-regex-fallback"},parseImports:Qa,parseExports:Ka},zf=Nt({language:"ruby",extensions:xr,imports:"ast-with-regex-fallback",parseImports:Ja}),Qf=Nt({language:"c/cpp",extensions:Cr,imports:"ast-with-regex-fallback",parseImports:Ma}),Kf=Nt({language:"dotnet",extensions:st,imports:"ast-dispatch-with-regex-fallback",parseImports:ja}),Yf={language:"dart",extensions:Rr,capabilities:{imports:"regex-only",exports:"regex-only"},parseImports:Oa,parseExports:$a},Xf=Nt({language:"php",extensions:Rt,imports:"ast-with-regex-fallback",parseImports:Wa}),Zf=[Wf,Uf,Gf,Jf,zf,Qf,Kf,Yf,Xf];function wr(e){return Ya(Zf,e)}var Gi={clearGroups:["whole-project","source-file"]},eg=W("source-imports",Gi),tg=W("source-exports",Gi),ng=W("source-reexports",Gi);function Xa(e,t){let n=_e(t);return ng.get(e,n,()=>{let r=wr(n);if(!r?.parseReExports)return[];let i=A(e,n);return i?r.parseReExports(e,n,i):[]})}function te(e,t){let n=_e(t);return eg.get(e,n,()=>{let r=wr(n);if(!r)return[];let i=A(e,n);return i?r.parseImports(e,n,i):[]})}function Ji(e,t){let n=_e(t);return tg.get(e,n,()=>{let r=wr(n);if(!r?.parseExports)return[];let i=A(e,n);return i?r.parseExports(e,n,i):[]})}var rg=W("file-dep-graph",{clearGroups:["whole-project"]});function oe(e,t){return rg.get(e,t??"",()=>{let n=new Map,r=new Set(T(e,{includeIgnored:!1})),i=(o,s)=>og(e,n,r,o,s);for(let o of ig(e,t))i(o.from_file,o.to_file);for(let o of r)if(!(t&&!o.includes(t)))for(let s of te(e,o))s.sourcePath&&i(o,s.sourcePath);return n})}function ig(e,t){let n=t?`AND d1.relative_path LIKE '%${t}%'`:"";return e.all(`SELECT DISTINCT
115
74
  d1.relative_path AS from_file,
116
75
  d2.relative_path AS to_file
117
76
  FROM mentions m
@@ -129,7 +88,11 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
129
88
  WHERE d1.id != d2.id
130
89
  AND m.role != 1
131
90
  ${e.pathExclusionsFor("d1","d2")}
132
- ${n}`)}function af(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)}function Sa(e){ba.invalidateAll(e)}import{readdirSync as cf}from"fs";import{extname as xa,join as lf}from"path";var uf=[".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"],Ca=[".vue"],Ra=new Set(uf.map(e=>e.toLowerCase())),mf=[...Ra].sort().join(","),Ri=new Set(["node_modules",".git","target","dist","build",".next",".nuxt",".cache",".turbo","out","coverage",".scipquery-cache","__pycache__",".venv","venv",".idea",".vscode"]);function Ye(e,t={}){let n=t.includeIndexed??!0,r=t.includeAuxiliary??!0,i=t.extensions?.map(c=>c.toLowerCase()),o=i?new Set(i):Ra,s=i?[...o].sort().join(","):mf,a=`${n?"1":"0"}|${r?"1":"0"}|${s}`;return df.get(e,a,()=>{let c=new Set;if(n)for(let l of k(e,{includeIgnored:!1}))o.has(xa(l).toLowerCase())&&c.add(l);if(r)for(let l of pf(e.config.projectRoot,o))e.isIgnored(l)||c.add(l);return[...c].sort()})}var df=H("source-files");function pf(e,t){let n=new Set,r=i=>{let o=i?lf(e,i):e,s;try{s=cf(o,{withFileTypes:!0})}catch{return}for(let a of s)if(!Ri.has(a.name)){if(a.isDirectory()){r(i?`${i}/${a.name}`:a.name);continue}t.has(xa(a.name).toLowerCase())&&n.add(i?`${i}/${a.name}`:a.name)}};return r(""),n}function ue(e){let t=cn(e);return gf(t)?"test":hf(t)?"worker":yf(t)?"entry":bf(t)?"barrel":"source"}function or(e){return ue(e)==="barrel"}function _a(e){return ff.get(e,()=>{let t=se(e),n=Ye(e).filter(o=>{let s=ue(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),ue(o)==="barrel"&&i.add(o);for(let s of t.get(o)??[])r.has(s)||n.push(s)}}return i})}var ff=Ve("live-barrels");function Ii(e,t){return _a(e).has(cn(t))}function va(e){let t=_a(e);return Ye(e).filter(n=>or(n)&&!t.has(n))}function gt(e,t){let n=ue(t);return n==="entry"||n==="worker"||Ii(e,t)}function ln(e,t,n){let r=e.config.entryRoots;if(!r)return!1;let i=cn(n);return!!(r.files?.some(o=>cn(o)===i)||r.pathPrefixes?.some(o=>i.startsWith(cn(o)))||r.qualifiedVars?.some(o=>Sf(t,o))||r.symbolPatterns?.some(o=>{try{return new RegExp(o).test(t)}catch{return!1}}))}var Da=["%/__tests__/%","%.test.%","%.spec.%","%/test/%","%/tests/%","%_test.%","%_spec.%","%/test_%.%","%/spec_%.%"],Na=["%/test-utils/%"];function gf(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 hf(e){return/(?:^|\/)[^/]*worker\.(?:ts|tsx|js|mjs|cjs|rs|py|go)$/.test(e)}function yf(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 bf(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 cn(e){return e.replace(/\\/g,"/")}function Sf(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(Ia(r)+"/")&&e.includes(Ia(i)+".")}function Ia(e){return/^[A-Za-z0-9_$+-]+$/.test(e)?e:"`"+e.replace(/`/g,"``")+"`"}var un=new WeakMap;function wa(e,t){let n=P(t);return n==="rust"?_f(e,t):n==="typescript"||n==="tsx"||n==="javascript"?Cf(e,t):[]}var xf=new Set(["describe","it","test","fdescribe","fit","xdescribe","xit","beforeEach","afterEach","beforeAll","afterAll","before","after","suite","bench","benchmark"]);function Cf(e,t){let n=B(e,t);if(!n)return[];let r=un.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&&xf.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,y=d.namedChild(1);p&&(y?.type==="arrow_function"||y?.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(...ka(n,new Set(["function_declaration","method_definition","class_declaration","interface_declaration","type_alias_declaration","enum_declaration","variable_declarator","export_statement"]),new Set(["comment"]))),un.set(n,c),c}var Rf=/scip-query[\s:-]*ignore[\s:-]*(?:dead(?:-code)?|stale)?/i;function If(e){return Rf.test(e)}function ka(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(If(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 _f(e,t){let n=B(e,t);if(!n)return[];let r=un.get(n);if(r)return r;let i=[],o=vf(n);return o?(un.set(n,o),o):(Pa(n.rootNode,i,!1,!1),i.push(...ka(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(...kf(n.rootNode)),un.set(n,i),i)}function vf(e){return Pf(e.rootNode)?[{startLine:0,endLine:e.rootNode.endPosition.row,reason:"generated file (@generated header)"}]:null}function Pa(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"?Df(e,t,n,r):r&&wf(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"?Nf(e,t,n):e.type==="mod_item"&&_i(e).some(s=>/#\[\s*cfg\s*\(\s*test\s*\)/.test(s))&&(i=!0);for(let s of e.namedChildren)Pa(s,t,i,o)}function Df(e,t,n,r){let i=_i(e),o=null;r?o="trait impl method (dynamic dispatch)":n&&(o="inside #[cfg(test)] mod");for(let s of i){let a=Lf(s);if(a){o=a;break}if(Ta(s)){o="#[allow(dead_code)]";break}}o&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:o})}function Nf(e,t,n){let r=_i(e),i=e.namedChildren.find(o=>o.type==="type_identifier")?.text;r.some(Ef)&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"#[derive(<reflective>)] \u2014 fields accessed via macro/reflection",containerName:i}),r.some(Ta)&&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 _i(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}function Lf(e){return/#\[\s*tauri::command\b/.test(e)?"#[tauri::command]":/#\[\s*command\b/.test(e)?"#[command]":/#\[\s*test\b/.test(e)?"#[test]":/#\[\s*bench\b/.test(e)?"#[bench]":/#\[\s*tokio::test\b/.test(e)?"#[tokio::test]":/#\[\s*async_std::test\b/.test(e)?"#[async_std::test]":/#\[\s*wasm_bindgen\b/.test(e)?"#[wasm_bindgen]":/#\[\s*no_mangle\b/.test(e)?"#[no_mangle]":/#\[\s*napi\b/.test(e)?"#[napi]":/#\[\s*pyfunction\b/.test(e)?"#[pyfunction]":/#\[\s*pymethod\b/.test(e)?"#[pymethod]":/#\[\s*pyo3\b/.test(e)?"#[pyo3]":/#\[\s*cfg\s*\(\s*test\s*\)/.test(e)?"#[cfg(test)]":/#\[\s*doc\s*\(\s*hidden\s*\)/.test(e)?"#[doc(hidden)]":null}function Ef(e){return/#\[\s*derive\s*\(/.test(e)?/\bSerialize\b/.test(e)||/\bDeserialize\b/.test(e)||/\bFromRow\b/.test(e)||/\bDeriveEntityModel\b/.test(e)||/\bIntoSchema\b/.test(e)||/\bToSchema\b/.test(e)||/\bDeriveValueType\b/.test(e)||/\bsqlx::FromRow\b/.test(e)||/\bError\b/.test(e)||/\bthiserror::Error\b/.test(e):!1}function Ta(e){return/#\[\s*allow\s*\(\s*dead_code\s*\)/.test(e)}function wf(e){return e.type==="const_item"||e.type==="type_item"||e.type==="static_item"||e.type==="associated_type"}function kf(e){let t=Af(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 Pf(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 Tf=[{key:"default",re:/\bdefault\s*=\s*"([^"]+)"/g},{key:"with",re:/\bwith\s*=\s*"([^"]+)"/g},{key:"serialize_with",re:/\bserialize_with\s*=\s*"([^"]+)"/g},{key:"deserialize_with",re:/\bdeserialize_with\s*=\s*"([^"]+)"/g},{key:"skip_serializing_if",re:/\bskip_serializing_if\s*=\s*"([^"]+)"/g},{key:"getter",re:/\bgetter\s*=\s*"([^"]+)"/g},{key:"rename_all_with",re:/\brename_all_with\s*=\s*"([^"]+)"/g},{key:"schema_with",re:/\bschema_with\s*=\s*"([^"]+)"/g}],Ma=/^#!?\[\s*serde\s*\(/,Mf=/^#!?\[\s*schemars\s*\(/,Of=/^#!?\[\s*validate\s*\(/,La=/\bwith\s*=\s*"([^"]+)"/g;function Bt(e,t){return tn(e,t,Ff,()=>new Set,(n,r,i)=>{if(r==="rust"){for(let o of n.rootNode.descendantsOfType("attribute_item"))Ea(o.text,i);for(let o of n.rootNode.descendantsOfType("inner_attribute_item"))Ea(o.text,i)}})??new Set}var Ff=new WeakMap;function Ea(e,t){let n=Ma.test(e),r=Mf.test(e),i=Of.test(e);if(!(!n&&!r&&!i))for(let{re:o}of Tf){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 Af(e){let t=new Set;for(let n of e.descendantsOfType("attribute_item")){if(!Ma.test(n.text))continue;La.lastIndex=0;let r;for(;(r=La.exec(n.text))!==null;){let i=r[1],o=i.split("::").pop()??i;o&&t.add(o)}}return t}var $f=new Set(["invoke","invokeTauriCommand","listen","once","emit","subscribe","dispatch","sendCommand","callRust"]);function Oa(e,t){return tn(e,t,jf,()=>new Set,(n,r,i)=>{if(!(r!=="typescript"&&r!=="tsx"&&r!=="javascript"))for(let o of n.rootNode.descendantsOfType("call_expression")){let s=o.namedChild(0);if(!s)continue;let a=Nt(s);if(!a||!$f.has(a))continue;let c=o.namedChildren.find(m=>m.type==="arguments");if(!c)continue;let l=c.namedChild(0);if(!l||l.type!=="string")continue;let u=l.namedChildren.find(m=>m.type==="string_fragment");u&&i.add(u.text)}})??new Set}var jf=new WeakMap;var Bf=new Set(["identifier","type_identifier","field_identifier"]),Hf=new Set(["identifier"]),Vf=new Set(["identifier","property_identifier","type_identifier"]),Wf=new Set(["rust","python"]),qf=/\{([^{}]*)\}/g,Uf=/\b([A-Za-z_][\w]*)\b/g;function sr(e,t,n,r={}){if(!n)return[];let i=T(e,t);if(!i)return[];if(i.indexOf(n)===-1)return[];if(P(t))return(ht(e,t).get(n)??[]).filter(u=>!Fa(u,r));let o=Qs(e,t,i),s=new RegExp(`\\b${tr(n)}\\b`),a=[];for(let c=0;c<o.length;c++)Fa(c,r)||s.test(o[c]??"")&&a.push(c);return a}function Fa(e,t){return typeof t.excludeStartLine=="number"&&typeof t.excludeEndLine=="number"&&e>=t.excludeStartLine&&e<=t.excludeEndLine}var vi=H("file-identifiers");function Aa(e,t){return vi.get(e,t,()=>new Set(ht(e,t).keys()))}var Di=H("file-ident-lines");function ht(e,t){return Di.get(e,t,()=>Jf(e,t))}var Ni=H("file-idents-by-line");function $a(e,t){return Ni.get(e,t,()=>{let n=ht(e,t),r=0;for(let o of n.values()){let s=o[o.length-1];s!==void 0&&s>r&&(r=s)}let i=new Array(r+1);for(let o=0;o<=r;o+=1)i[o]=new Set;for(let[o,s]of n)for(let a of s)i[a].add(o);return i})}function ja(e){vi.invalidateAll(e),Di.invalidateAll(e),Ni.invalidateAll(e)}function Ba(e,t){vi.invalidate(e,t),Di.invalidate(e,t),Ni.invalidate(e,t)}function Jf(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)};if(P(t)){let a=B(e,t);if(a){let c=P(t),l=c==="rust"?Bf:c==="python"?Hf:Vf,u=m=>{if(l.has(m.type)&&r(m.text,m.startPosition.row),c&&Wf.has(c)&&m.type==="string_content"){let d=m.startPosition.row;for(let p of m.text.matchAll(qf)){let y=p[1]??"";for(let f of y.matchAll(Uf))f[1]&&r(f[1],d)}}for(let d of m.children)u(d)};return u(a.rootNode),n}}let i=T(e,t);if(!i)return n;let o=Ft(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 Ha(e,t){return Li(e,t,n=>{let r=n?`AND m.symbol_id IN (${n.map(()=>"?").join(",")})`:"";return e.all(`SELECT
91
+ ${n}`)}function og(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 sg}from"fs";import{extname as Za,join as ag}from"path";var cg=[".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"],ec=[".vue"],tc=new Set(cg.map(e=>e.toLowerCase())),lg=[...tc].sort().join(","),zi=new Set(["node_modules",".git","target","dist","build",".next",".nuxt",".cache",".turbo","out","coverage",".scipquery-cache","__pycache__",".venv","venv",".idea",".vscode"]);function $e(e,t={}){let n=t.includeIndexed??!0,r=t.includeAuxiliary??!0,i=t.extensions?.map(c=>c.toLowerCase()),o=i?new Set(i):tc,s=i?[...o].sort().join(","):lg,a=`${n?"1":"0"}|${r?"1":"0"}|${s}`;return ug.get(e,a,()=>{let c=new Set;if(n)for(let l of T(e,{includeIgnored:!1}))o.has(Za(l).toLowerCase())&&c.add(l);if(r)for(let l of mg(e.config.projectRoot,o))e.isIgnored(l)||c.add(l);return[...c].sort()})}var ug=W("source-files",{clearGroups:[]});function mg(e,t){let n=new Set,r=i=>{let o=i?ag(e,i):e,s;try{s=sg(o,{withFileTypes:!0})}catch{return}for(let a of s)if(!zi.has(a.name)){if(a.isDirectory()){r(i?`${i}/${a.name}`:a.name);continue}t.has(Za(a.name).toLowerCase())&&n.add(i?`${i}/${a.name}`:a.name)}};return r(""),n}import{readFileSync as dg}from"fs";import{join as pg}from"path";var fg={files:new Set,pathPrefixes:[]},Qi=/^(?:dist|build|lib|out|output|esm|cjs|umd)\//,gg=/\.(?:d\.ts|d\.mts|d\.cts|ts|tsx|mts|cts|js|jsx|mjs|cjs)$/,hg=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"],yg=re("package-surface",{clearGroups:["whole-project"]});function bg(e){return yg.get(e,()=>Sg(e.config.projectRoot))}function rc(e,t){let n=bg(e);return n.files.has(t)?!0:n.pathPrefixes.some(r=>t.startsWith(r))}function Sg(e){let t=xg(e);if(!t)return fg;let n=new Set,r=[];for(let i of Cg(t))Rg(i,n,r);return{files:n,pathPrefixes:r}}function xg(e){try{let t=dg(pg(e,"package.json"),"utf-8"),n=JSON.parse(t);return n&&typeof n=="object"?n:null}catch{return null}}function Cg(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 ic(e.exports,t),t}function ic(e,t){if(typeof e=="string"){t.push(e);return}if(!(!e||typeof e!="object"))for(let n of Object.values(e))ic(n,t)}function Rg(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 nc(s))a!==""&&n.push(a);return}let o=r.replace(gg,"");for(let s of nc(o)){s===o&&s===r&&t.add(r);for(let a of hg)t.add(s+a)}t.add(r)}function nc(e){let t=[e];return Qi.test(e)&&(t.push(e.replace(Qi,"src/")),t.push(e.replace(Qi,""))),t}function G(e){let t=cn(e);return Dg(t)?"test":Ng(t)?"worker":Lg(t)?"entry":_g(t)?"barrel":"source"}function Er(e){return G(e)==="barrel"}function sc(e){return Ig.get(e,()=>{let t=oe(e),n=$e(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 Ig=re("live-barrels",{clearGroups:["whole-project"]});function Ki(e,t){return sc(e).has(cn(t))}function ac(e){let t=sc(e);return $e(e).filter(n=>Er(n)&&!t.has(n)&&!vg(e,n))}function vg(e,t){let n=cn(t),r=K(e,n)?.callables;return r&&r.length>0?!0:(e.get(`SELECT COUNT(*) AS n
92
+ FROM defn_enclosing_ranges der
93
+ JOIN documents d ON d.id = der.document_id
94
+ WHERE d.relative_path = ?
95
+ AND der.end_line - der.start_line >= 2`,n)?.n??0)>0}function le(e,t){let n=G(t);return n==="entry"||n==="worker"||Ki(e,t)}function ne(e,t,n){let r=cn(n);if(rc(e,r))return!0;let i=e.config.entryRoots;return i?!!(i.files?.some(o=>cn(o)===r)||i.pathPrefixes?.some(o=>r.startsWith(cn(o)))||i.qualifiedVars?.some(o=>wg(t,o))||i.symbolPatterns?.some(o=>{try{return new RegExp(o).test(t)}catch{return!1}})):!1}function Dg(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 Ng(e){return/(?:^|\/)[^/]*worker\.(?:ts|tsx|js|mjs|cjs|rs|py|go)$/.test(e)}function Lg(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 _g(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 cn(e){return e.replace(/\\/g,"/")}function wg(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(oc(r)+"/")&&e.includes(oc(i)+".")}function oc(e){return/^[A-Za-z0-9_$+-]+$/.test(e)?e:"`"+e.replace(/`/g,"``")+"`"}function kr(e,t,n,r={}){if(!n)return[];let i=A(e,t);return i?i.indexOf(n)===-1?[]:(Ge(e,t).get(n)??[]).filter(s=>!Eg(s,r)):[]}function Eg(e,t){return typeof t.excludeStartLine=="number"&&typeof t.excludeEndLine=="number"&&e>=t.excludeStartLine&&e<=t.excludeEndLine}var kg=W("file-identifiers",{clearGroups:["whole-project","source-file"]});function cc(e,t){let n=K(e,t);return n?n.fileIdentifiers:kg.get(e,t,()=>new Set(Ge(e,t).keys()))}var Pg=W("file-ident-lines",{clearGroups:["whole-project","source-file"]});function Ge(e,t){let n=K(e,t);return n?n.identifierLineMap:Pg.get(e,t,()=>Tg(e,t))}var Fg=W("file-idents-by-line",{clearGroups:["whole-project","source-file"]});function lc(e,t){let n=K(e,t);return n?n.identifiersByLine:Fg.get(e,t,()=>{let r=Ge(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 Tg(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=A(e,t);if(!i)return n;let o=It(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 uc(e,t){return Yi(e,t,n=>{let r=n?`AND m.symbol_id IN (${n.map(()=>"?").join(",")})`:"";return e.all(`SELECT
133
96
  m.symbol_id,
134
97
  d.relative_path,
135
98
  COUNT(*) AS ref_count
@@ -139,13 +102,13 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
139
102
  WHERE m.role != 1
140
103
  ${r}
141
104
  ${e.pathExclusionsFor("d")}
142
- GROUP BY m.symbol_id, d.relative_path`,...n??[])})}function Va(e,t){return Li(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
105
+ GROUP BY m.symbol_id, d.relative_path`,...n??[])})}function mc(e,t){return Yi(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
143
106
  FROM mentions m
144
107
  JOIN chunks c ON m.chunk_id = c.id
145
108
  JOIN documents d ON c.document_id = d.id
146
109
  WHERE m.role != 1
147
110
  ${r}
148
- ${e.pathExclusionsFor("d")}`,...n??[])}).filter(n=>n.symbol_id!==null)}function ar(e,t){return Li(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,
111
+ ${e.pathExclusionsFor("d")}`,...n??[])}).filter(n=>n.symbol_id!==null)}function Pr(e,t){return Yi(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,
149
112
  c.start_line AS chunk_start, c.end_line AS chunk_end
150
113
  FROM mentions m
151
114
  JOIN chunks c ON m.chunk_id = c.id
@@ -153,7 +116,7 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
153
116
  WHERE m.role != 1
154
117
  ${r}
155
118
  ${e.pathExclusionsFor("d")}
156
- ORDER BY d.relative_path, c.start_line`,...n??[])})}function Li(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 Wa(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function Xe(e,t){return Wa(e)===Wa(t)}function cr(e,t){let n=qa(e);return n?t.filter(r=>qa(r.file)===n):t}function lr(e,t,n,r){let i=n.find(o=>o.file===t);if(i)return i;if(r){let o=new Set(X(e,t).map(s=>s.sourcePath).filter(s=>!!s));for(let s of n)for(let a of o)if(Xe(a,s.file))return s;return null}return n.length===1?n[0]:null}function qa(e){let t=P(e);return t?t==="typescript"||t==="tsx"||t==="javascript"?"javascript-family":t:null}var Ua=Ve("global-leaf-index");function yt(e){return Ua.get(e,()=>{let t=e.all(`SELECT gs.id, gs.symbol,
119
+ ORDER BY d.relative_path, c.start_line`,...n??[])})}function Yi(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 dc(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function ut(e,t){return dc(e)===dc(t)}function Fr(e,t){let n=pc(e);return n?t.filter(r=>pc(r.file)===n):t}function Tr(e,t,n,r){let i=n.find(o=>o.file===t);if(i)return i;if(r){let o=new Set(te(e,t).map(s=>s.sourcePath).filter(s=>!!s));for(let s of n)for(let a of o)if(ut(a,s.file))return s;return null}return n.length===1?n[0]:null}function pc(e){let t=$(e);return t?t==="typescript"||t==="tsx"||t==="javascript"?"javascript-family":t:null}var Ag=re("global-leaf-index",{clearGroups:["whole-project"]});function Lt(e){return Ag.get(e,()=>{let t=e.all(`SELECT gs.id, gs.symbol,
157
120
  COALESCE(der_doc.relative_path, mention_doc.relative_path) AS relative_path
158
121
  FROM global_symbols gs
159
122
  LEFT JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
@@ -167,8 +130,8 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
167
130
  GROUP BY m.symbol_id
168
131
  ) mention_doc ON mention_doc.symbol_id = gs.id
169
132
  WHERE 1 = 1
170
- ${e.symbolNoiseFor("gs")}`),n=new Map;for(let r of t){if(!r.relative_path||e.isIgnored(r.relative_path))continue;let i=L(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 Ja(e){Ua.invalidate(e)}function Ie(e,t,n){if(e.has(t))return e.get(t);let r=n();return e.set(t,r),r}import za from"path";function zf(e,t){return e.getReferences().map(n=>{let r=n.getNode();return Ka(r,t)})}function Gf(e){let t=e;return typeof t.findReferences=="function"?t.findReferences():[]}function Ga(e,t,n,r){let i=[];for(let o of Gf(e))for(let s of zf(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 ur(i)}function Qa(e,t,n,r){let i=[],o=n?.getStart();for(let s of e.getReferences()){let a=s.getNode();mn(r,a.getSourceFile().getFilePath())===t&&(o!==void 0&&a.getStart()===o||i.push({location:Ka(a,r),node:a}))}return i}function Ka(e,t){let n=e.getSourceFile(),r=n.getLineAndColumnAtPos(e.getStart());return{file:mn(t,n.getFilePath())??n.getBaseName(),line:r.line-1,column:r.column-1}}function Ya(e,t,n){let r=e.getSourceFile(),i=Ht(r,e),o=e.getText(),s=new RegExp(`\\b${Qf(o)}\\b`,"g"),a=r.getFullText().split(`
171
- `),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 ur(c.filter(l=>mn(n,za.join(n,l.file))===t))}function Ei(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 Ht(e,t){return e.getLineAndColumnAtPos(t.getStart()).line-1}function ur(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 mn(e,t){let n=za.relative(e||process.cwd(),t).replace(/\\/g,"/");return!n||n.startsWith("..")?null:n}function Qf(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Xa(e,t,n,r){let i=Kf(t,r);return i.size===0?new Map:Yf(e,n,i)}function Kf(e,t){let n=new Map;for(let r of W(e,t)){let i=L(r.symbol)??r.leaf;if(!i)continue;let o=n.get(i);o||(o=[],n.set(i,o)),o.push(r)}return n}function Yf(e,t,n){let r=new Map,i=new Map;return t.forEachDescendant(o=>{for(let s of Xf(e,o)){let a=n.get(s);if(!a)continue;let c=Ht(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 Xf(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 Za(e,t,n,r){return e.all(`SELECT
133
+ ${e.symbolNoiseFor("gs")}`),n=new Map;for(let r of t){if(!r.relative_path||e.isIgnored(r.relative_path))continue;let i=P(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 Ee(e,t,n){if(e.has(t))return e.get(t);let r=n();return e.set(t,r),r}import fc from"path";function Mg(e,t){return e.getReferences().map(n=>{let r=n.getNode();return yc(r,t)})}function Og(e){let t=e;return typeof t.findReferences=="function"?t.findReferences():[]}function gc(e,t,n,r){let i=[];for(let o of Og(e))for(let s of Mg(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 Ar(i)}function hc(e,t,n,r){let i=[],o=n?.getStart();for(let s of e.getReferences()){let a=s.getNode();wn(r,a.getSourceFile().getFilePath())===t&&(o!==void 0&&a.getStart()===o||i.push({location:yc(a,r),node:a}))}return i}function yc(e,t){let n=e.getSourceFile(),r=n.getLineAndColumnAtPos(e.getStart());return{file:wn(t,n.getFilePath())??n.getBaseName(),line:r.line-1,column:r.column-1}}function bc(e,t,n){let r=e.getSourceFile(),i=ln(r,e),o=e.getText(),s=new RegExp(`\\b${$g(o)}\\b`,"g"),a=r.getFullText().split(`
134
+ `),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 Ar(c.filter(l=>wn(n,fc.join(n,l.file))===t))}function Xi(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 ln(e,t){return e.getLineAndColumnAtPos(t.getStart()).line-1}function Ar(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 wn(e,t){let n=fc.relative(e||process.cwd(),t).replace(/\\/g,"/");return!n||n.startsWith("..")?null:n}function $g(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Sc(e,t,n,r){let i=jg(t,r);return i.size===0?new Map:Bg(e,n,i)}function jg(e,t){let n=new Map;for(let r of H(e,t)){let i=P(r.symbol)??r.leaf;if(!i)continue;let o=n.get(i);o||(o=[],n.set(i,o)),o.push(r)}return n}function Bg(e,t,n){let r=new Map,i=new Map;return t.forEachDescendant(o=>{for(let s of Hg(e,o)){let a=n.get(s);if(!a)continue;let c=ln(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 Hg(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 xc(e,t,n,r){return e.all(`SELECT
172
135
  gs.id AS symbolId,
173
136
  gs.symbol,
174
137
  d.relative_path AS relativePath,
@@ -188,7 +151,7 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
188
151
  WHERE d.relative_path = ?
189
152
  AND COALESCE(gs.display_name, gs.symbol) LIKE ?
190
153
  ORDER BY ABS(COALESCE(der.start_line, c.start_line) - ?)
191
- LIMIT 5`,t,`%${r}%`,n)[0]??null}function ec(e,t){let n=e.all(`SELECT
154
+ LIMIT 5`,t,`%${r}%`,n)[0]??null}function Cc(e,t){let n=e.all(`SELECT
192
155
  d.id AS documentId,
193
156
  gs.id AS symbolId,
194
157
  gs.symbol,
@@ -228,7 +191,7 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
228
191
  WHERE d.relative_path = ?
229
192
  AND m.role = 1
230
193
  GROUP BY gs.id, gs.symbol, d.id, d.relative_path, gs.display_name, gs.kind, gs.documentation, gs.enclosing_symbol
231
- 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||L(o.symbol);!s||i.has(s)||i.set(s,{...o,leaf:s})}return i}import Zf from"path";var dn=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"];function mr(e){let t=e.toLowerCase();return dn.some(n=>t.endsWith(n))}function tc(e,t){let n=new Map,r=i=>mr(i)?Ie(n,i,()=>{let o=Zf.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:()=>k(e,{extensions:dn})}}import Ze from"path";import{existsSync as dr,readdirSync as eg,readFileSync as nc}from"fs";function rc(e){let t=Ze.join(e,"package.json");if(!dr(t))return[];let n;try{n=JSON.parse(nc(t,"utf8"))}catch{return[]}return(Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages??[]).flatMap(i=>tg(e,i)).flatMap(i=>ng(e,i))}function tg(e,t){if(!t||t.startsWith("!")||t.includes("node_modules"))return[];if(!t.includes("*")){let s=Ze.join(e,t);return dr(Ze.join(s,"package.json"))?[s]:[]}let n=t.indexOf("*"),r=t.slice(0,n).replace(/\/$/,""),i=t.slice(n+1).replace(/^\//,""),o=Ze.join(e,r||".");if(!dr(o))return[];try{return eg(o).map(s=>Ze.join(o,s,i)).filter(s=>dr(Ze.join(s,"package.json")))}catch{return[]}}function ng(e,t){try{let n=JSON.parse(nc(Ze.join(t,"package.json"),"utf8"));if(!n.name)return[];let r=Ze.relative(e,t).replace(/\\/g,"/");return[{name:n.name,rootRelative:r,sourceRootRelative:`${r}/src`}]}catch{return[]}}function ic(e,t){for(let n of e)if(t===n.name||t.startsWith(`${n.name}/`))return n.name;return null}function oc(e){return[`${e.sourceRootRelative}/index.ts`,`${e.sourceRootRelative}/index.tsx`,`${e.sourceRootRelative}/index.mts`,`${e.sourceRootRelative}/index.cts`]}import{existsSync as pn,readFileSync as rg,readdirSync as ig,statSync as og}from"fs";import J from"path";var ki=["tsconfig.json","tsconfig.app.json","tsconfig.node.json","tsconfig.base.json"];function Pi(e,t){let r=t?J.dirname(J.join(e,t)):e,i=J.resolve(e);for(;r.startsWith(i);){for(let s of ki){let a=J.join(r,s);if(pn(a))return a}let o=J.dirname(r);if(o===r)break;r=o}for(let o of ki){let s=J.join(e,o);if(pn(s))return s}return null}function sc(e){let t=e.config.projectRoot,n=new Set(Ti(t,e.config.semantic?.typescript?.tsconfigs)),r=k(e,{includeIgnored:!1,extensions:dn});for(let i of r){let o=Pi(t,i);o&&n.add(J.resolve(o))}if(n.size===0){let i=Pi(t);i&&n.add(J.resolve(i))}return[...n].filter(i=>!ac(t,i)).sort((i,o)=>i.localeCompare(o))}function Ti(e,t=[]){let n=new Set;for(let r of t){let i=J.isAbsolute(r)?r:J.join(e,r);pn(i)&&n.add(J.resolve(i))}for(let r of sg(e))for(let i of ki){let o=J.join(r,i);pn(o)&&n.add(J.resolve(o))}if(n.size===0){let r=Pi(e);r&&n.add(J.resolve(r))}return[...n].filter(r=>!ac(e,r)).sort((r,i)=>r.localeCompare(i))}function sg(e){let t=J.join(e,"package.json");if(!pn(t))return[];let n;try{n=JSON.parse(rg(t,"utf8"))}catch{return[]}return(Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages??[]).flatMap(i=>ag(e,i))}function ag(e,t){if(!t||t.startsWith("!")||t.includes("node_modules"))return[];if(!t.includes("*")){let s=J.join(e,t);return wi(s)?[s]:[]}let n=t.indexOf("*"),r=t.slice(0,n).replace(/\/$/,""),i=t.slice(n+1).replace(/^\//,""),o=J.join(e,r||".");return wi(o)?ig(o).map(s=>J.join(o,s,i)).filter(wi):[]}function wi(e){try{return og(e).isDirectory()}catch{return!1}}function ac(e,t){let n=J.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 cg}from"module";var lg=cg(import.meta.url),fn;function cc(){if(fn!==void 0)return fn;try{fn=lg("ts-morph")}catch{fn=null}return fn}function lc(e,t){return t.map(n=>({tsconfigPath:n,project:new e.Project({tsConfigFilePath:n,skipFileDependencyResolution:!1})}))}function pr(e,t,n){return{language:"typescript",availability:()=>({available:!1,reason:e,tsconfigPath:t,tsconfigPaths:n}),importUsage:()=>[],referencesFor:()=>[],calleesFor:()=>[],signatureFor:()=>null}}function dc(e,t){let n=cc();if(!n)return pr("ts-morph is not installed");let r=sc(e);if(r.length===0)return pr("no tsconfig found");try{let i=lc(n,r);return new Mi(e,n,i)}catch(i){return pr(i instanceof Error?i.message:String(i),r[0],r)}}var Mi=class{constructor(t,n,r){this.db=t;this.tsMorph=n;this.projects=r;this.workspacePackages=rc(t.config.projectRoot),this.sourceFiles=tc(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 Ie(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 Ie(this.referencesCache,t.symbolId,()=>{let n=this.nodeForDefinition(t),r=this.packageImportReferencesForDefinition(t);return n?Ga(n,t,r,this.db.config.projectRoot):r})}calleesFor(t){return Ie(this.calleesCache,t.symbolId,()=>Ie(this.fileCalleesCache,t.relativePath,()=>this.calleeMapForFile(t.relativePath)).get(t.symbolId)??[])}signatureFor(t){return Ie(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 mc(c)}),o=r.getReturnType().getText(n);return`(${i.join(",")})=>${mc(o)}`})}importUsageForDeclaration(t,n){let r=Re(this.db,t,n.getModuleSpecifierValue()),i=uc(n);return n.getImportClause()?.isTypeOnly()?i.map(o=>ug(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 Qa(l,t,r.identifier,this.db.config.projectRoot))o.push(u);let s=o.some(l=>!Ei(l.node)),a=o.some(l=>Ei(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,ur(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=ic(this.workspacePackages,i.getModuleSpecifierValue());if(!o)return;let s=n.get(o);if(s)for(let a of uc(i)){if(a.kind!=="named"||!a.identifier)continue;let c=s.get(a.importedName);if(!c||c.size===0)continue;let l=Ya(a.identifier,r,this.db.config.projectRoot);l.length>0&&pg(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 oc(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?Re(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 y=r.get(d);y||(y=new Set,r.set(d,y)),y.add(p.symbolId)}}}indexedDefinitionByLeaf(t,n){return Ie(this.indexedDefinitionLeafCache,t,()=>ec(this.db,t)).get(n)??null}nodeForDefinition(t){return Ie(this.definitionNodeCache,t.symbolId,()=>this.definitionNodesForFile(t.relativePath).get(t.symbolId)??null)}definitionNodesForFile(t){return Ie(this.fileDefinitionNodeCache,t,()=>{let n=this.sourceFiles.sourceFile(t);return n?Xa(this.tsMorph,this.db,n,t):new Map})}definitionFromSymbol(t){let n=t.getDeclarations();for(let r of n){let i=r.getSourceFile(),o=mn(this.db.config.projectRoot,i.getFilePath());if(!o||this.db.isIgnored(o))continue;let s=Ht(i,r),a=Za(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&&mg(i,s.callerId,s.target)});for(let[o,s]of i)i.set(o,fg(s));return i}semanticCalleeForCallNode(t,n,r){let i=dg(n,Ht(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 uc(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 ug(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 mg(e,t,n){let r=e.get(t);r||(r=[],e.set(t,r)),r.push(n)}function dg(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 pg(e,t,n){for(let r of t){let i=e.get(r)??[];i.push(...n),e.set(r,i)}}function fg(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 mc(e){return e.replace(/\s+/g," ").replace(/\bimport\("[^"]+"\)\./g,"").trim()}var Oi=new WeakMap;function Fi(e,t){let n=`${e.config.projectRoot}:typescript-workspace`,r=Oi.get(e);r||(r=new Map,Oi.set(e,r));let i=r.get(n);if(i)return i;let o=dc(e,t);return r.set(n,o),o}function Ai(e){Oi.delete(e)}function gn(e,t){let n=fr(e,t);return n?n.importUsage(t):[]}function hn(e,t){let n=fr(e,t.relativePath);return n?n.referencesFor(t):[]}function Vt(e,t){let n=new Map;for(let r of t)for(let i of hn(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 pc(e,t){let n=new Map;for(let r of t){let i=fr(e,r.relativePath);if(!i)continue;let o=i.calleesFor(r);o.length>0&&n.set(r.symbolId,o)}return n}function fc(e,t){let n=fr(e,t.relativePath);return n?n.signatureFor(t):null}function fr(e,t){if(!mr(t))return null;let n=Fi(e,t);return n.availability().available?n:null}function gr(e,t){let n=new Map;for(let r of X(e,t)){if(!r.sourcePath)continue;let i=r.localName??r.importedName;if(i&&gc(n,i,r.sourcePath),r.kind==="namespace")for(let o of r.usedMembers)gc(n,o,r.sourcePath)}return n}function gc(e,t,n){let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)}function Wt(e,t,n){let r=yt(e).get(n);if(!r||r.length===0)return[];if(r.length===1)return[yn(r[0])];let i=r.filter(c=>c.file===t);if(i.length>0)return i.map(yn);let o=gr(e,t),s=o.get(n);if(s)for(let c of s){let l=r.filter(u=>Xe(c,u.file));if(l.length>0)return l.map(yn)}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=>Xe(c,u.file));if(l.length>0&&l.length===r.length)return l.map(yn)}return[]}function yc(e,t,n){let r=Wt(e,t,n);if(r.length>0)return r;let i=yt(e).get(n);return!i||i.length===0?[]:i.map(yn)}function bc(e,t,n={}){let r=qn(e,t);if(!r)return[];let i=L(r.symbol);if(!i)return[];if(n.semantic!==!1){let s=hn(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 hc(e,a)}}let o=new Map;for(let s of Ye(e)){let a=T(e,s);if(!a||a.indexOf(i)===-1||s!==r.relativePath&&!Wt(e,s,i).some(u=>u.symbolId===r.symbolId))continue;let c=sr(e,s,i,s===r.relativePath?{excludeStartLine:r.startLine,excludeEndLine:r.endLine}:{});c.length>0&&o.set(s,c)}return hc(e,o)}function Sc(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 Ye(e)){let s=Aa(e,o);if(s.size!==0){for(let a of s)if(n.has(a))for(let c of Wt(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 yn(e){return{symbolId:e.symbolId,symbol:e.symbol,relativePath:e.file}}function hc(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=de(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 $i(e,t){let n=xg(e,t);return n?Cg(e,hg(e,n.match,n.identifier)):[]}function et(e,t,n={}){return gg(e,t,n).map(r=>({file:r.file,line:r.line,enclosingSymbol:r.enclosingSymbol}))}function gg(e,t,n={}){let r=bc(e,t,{semantic:n.semantic}),i=r.length>0?xc(r,"source-attribution"):xc($i(e,t),"scip-reference-chunk");return n.includeIgnored===!0?i:i.filter(o=>!e.isIgnored(o.file))}function xc(e,t){return e.map(n=>({...n,provenance:t}))}function hg(e,t,n){let r=new Map;for(let[i,o]of yg(e,t.symbolId))r.set(i,bg(e,i,o,t,n));return r}function yg(e,t){let n=new Map;for(let r of ar(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 bg(e,t,n,r,i){let o=t===r.relativePath?{excludeStartLine:r.startLine,excludeEndLine:r.endLine}:{},s=i?sr(e,t,i,o):[];return n.flatMap(a=>Sg(s,a))}function Sg(e,t){let n=e.filter(r=>r>=t.start_line&&r<=t.end_line);return n.length>0?n:[t.start_line]}function xg(e,t){let n=qn(e,t);return n?{match:n,identifier:L(n.symbol)||null}:null}function Cg(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=de(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 me(e,t,n={}){let r=hr(e,[t],{additive:n.additive,semantic:n.semantic}),i=n.callableOnly?(r.get(t.symbolId)??[]).filter(o=>Z(o.symbol)):r.get(t.symbolId)??[];return typeof n.limit=="number"?i.slice(0,n.limit):i}function Cc(e,t,n={}){let r=Ig(e)?vg(e,t,{semantic:n.semantic!==!1}):_g(e).get(t.symbolId)??[];return typeof n.limit=="number"?r.slice(0,n.limit):r}var Rc=Ve("caller-rows"),Rg=2e4;function Ig(e){return(e.get("SELECT COUNT(*) AS count FROM global_symbols")?.count??0)>Rg}function _g(e){return Rc.get(e,()=>{let t=Ee(e),n=hr(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 vg(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 $i(e,t))a.file!==t.relativePath&&o({symbol:a.enclosingSymbol??a.file,file:a.file,source:"resolved-reference"});let s=n.semantic?Dg(e,t):null;if(s)for(let a of hn(e,s)){if(a.file===t.relativePath||e.isIgnored(a.file))continue;let c=de(W(e,a.file),a.line);o({symbol:c?.symbol??a.file,file:a.file,source:"semantic-reference"})}return r}function Dg(e,t){return e.get(`SELECT
194
+ 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||P(o.symbol);!s||i.has(s)||i.set(s,{...o,leaf:s})}return i}import qg from"path";var En=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"];function Mr(e){let t=e.toLowerCase();return En.some(n=>t.endsWith(n))}function Rc(e,t){let n=new Map,r=i=>Mr(i)?Ee(n,i,()=>{let o=qg.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:()=>T(e,{extensions:En})}}import mt from"path";import{existsSync as Or,readdirSync as Vg,readFileSync as Ic}from"fs";function vc(e){let t=mt.join(e,"package.json");if(!Or(t))return[];let n;try{n=JSON.parse(Ic(t,"utf8"))}catch{return[]}return(Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages??[]).flatMap(i=>Wg(e,i)).flatMap(i=>Ug(e,i))}function Wg(e,t){if(!t||t.startsWith("!")||t.includes("node_modules"))return[];if(!t.includes("*")){let s=mt.join(e,t);return Or(mt.join(s,"package.json"))?[s]:[]}let n=t.indexOf("*"),r=t.slice(0,n).replace(/\/$/,""),i=t.slice(n+1).replace(/^\//,""),o=mt.join(e,r||".");if(!Or(o))return[];try{return Vg(o).map(s=>mt.join(o,s,i)).filter(s=>Or(mt.join(s,"package.json")))}catch{return[]}}function Ug(e,t){try{let n=JSON.parse(Ic(mt.join(t,"package.json"),"utf8"));if(!n.name)return[];let r=mt.relative(e,t).replace(/\\/g,"/");return[{name:n.name,rootRelative:r,sourceRootRelative:`${r}/src`}]}catch{return[]}}function Dc(e,t){for(let n of e)if(t===n.name||t.startsWith(`${n.name}/`))return n.name;return null}function Nc(e){return[`${e.sourceRootRelative}/index.ts`,`${e.sourceRootRelative}/index.tsx`,`${e.sourceRootRelative}/index.mts`,`${e.sourceRootRelative}/index.cts`]}import{existsSync as kn,readFileSync as Gg,readdirSync as Jg,statSync as zg}from"fs";import Q from"path";var eo=["tsconfig.json","tsconfig.app.json","tsconfig.node.json","tsconfig.base.json"];function to(e,t){let r=t?Q.dirname(Q.join(e,t)):e,i=Q.resolve(e);for(;r.startsWith(i);){for(let s of eo){let a=Q.join(r,s);if(kn(a))return a}let o=Q.dirname(r);if(o===r)break;r=o}for(let o of eo){let s=Q.join(e,o);if(kn(s))return s}return null}function Lc(e){let t=e.config.projectRoot,n=new Set(no(t,e.config.semantic?.typescript?.tsconfigs)),r=T(e,{includeIgnored:!1,extensions:En});for(let i of r){let o=to(t,i);o&&n.add(Q.resolve(o))}if(n.size===0){let i=to(t);i&&n.add(Q.resolve(i))}return[...n].filter(i=>!_c(t,i)).sort((i,o)=>i.localeCompare(o))}function no(e,t=[]){let n=new Set;for(let r of t){let i=Q.isAbsolute(r)?r:Q.join(e,r);kn(i)&&n.add(Q.resolve(i))}for(let r of Qg(e))for(let i of eo){let o=Q.join(r,i);kn(o)&&n.add(Q.resolve(o))}if(n.size===0){let r=to(e);r&&n.add(Q.resolve(r))}return[...n].filter(r=>!_c(e,r)).sort((r,i)=>r.localeCompare(i))}function Qg(e){let t=Q.join(e,"package.json");if(!kn(t))return[];let n;try{n=JSON.parse(Gg(t,"utf8"))}catch{return[]}return(Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages??[]).flatMap(i=>Kg(e,i))}function Kg(e,t){if(!t||t.startsWith("!")||t.includes("node_modules"))return[];if(!t.includes("*")){let s=Q.join(e,t);return Zi(s)?[s]:[]}let n=t.indexOf("*"),r=t.slice(0,n).replace(/\/$/,""),i=t.slice(n+1).replace(/^\//,""),o=Q.join(e,r||".");return Zi(o)?Jg(o).map(s=>Q.join(o,s,i)).filter(Zi):[]}function Zi(e){try{return zg(e).isDirectory()}catch{return!1}}function _c(e,t){let n=Q.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 Yg}from"module";var Xg=Yg(import.meta.url),Pn;function wc(){if(Pn!==void 0)return Pn;try{Pn=Xg("ts-morph")}catch{Pn=null}return Pn}function Ec(e,t){return t.map(n=>({tsconfigPath:n,project:new e.Project({tsConfigFilePath:n,skipFileDependencyResolution:!1})}))}function $r(e,t,n){return{language:"typescript",availability:()=>({available:!1,reason:e,tsconfigPath:t,tsconfigPaths:n}),importUsage:()=>[],referencesFor:()=>[],calleesFor:()=>[],signatureFor:()=>null}}function Fc(e,t){let n=wc();if(!n)return $r("ts-morph is not installed");let r=Lc(e);if(r.length===0)return $r("no tsconfig found");try{let i=Ec(n,r);return new ro(e,n,i)}catch(i){return $r(i instanceof Error?i.message:String(i),r[0],r)}}var ro=class{constructor(t,n,r){this.db=t;this.tsMorph=n;this.projects=r;this.workspacePackages=vc(t.config.projectRoot),this.sourceFiles=Rc(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 Ee(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 Ee(this.referencesCache,t.symbolId,()=>{let n=this.nodeForDefinition(t),r=this.packageImportReferencesForDefinition(t);return n?gc(n,t,r,this.db.config.projectRoot):r})}calleesFor(t){return Ee(this.calleesCache,t.symbolId,()=>Ee(this.fileCalleesCache,t.relativePath,()=>this.calleeMapForFile(t.relativePath)).get(t.symbolId)??[])}signatureFor(t){return Ee(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 Pc(c)}),o=r.getReturnType().getText(n);return`(${i.join(",")})=>${Pc(o)}`})}importUsageForDeclaration(t,n){let r=we(this.db,t,n.getModuleSpecifierValue()),i=kc(n);return n.getImportClause()?.isTypeOnly()?i.map(o=>Zg(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 hc(l,t,r.identifier,this.db.config.projectRoot))o.push(u);let s=o.some(l=>!Xi(l.node)),a=o.some(l=>Xi(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,Ar(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=Dc(this.workspacePackages,i.getModuleSpecifierValue());if(!o)return;let s=n.get(o);if(s)for(let a of kc(i)){if(a.kind!=="named"||!a.identifier)continue;let c=s.get(a.importedName);if(!c||c.size===0)continue;let l=bc(a.identifier,r,this.db.config.projectRoot);l.length>0&&nh(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 Nc(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?we(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 Ee(this.indexedDefinitionLeafCache,t,()=>Cc(this.db,t)).get(n)??null}nodeForDefinition(t){return Ee(this.definitionNodeCache,t.symbolId,()=>this.definitionNodesForFile(t.relativePath).get(t.symbolId)??null)}definitionNodesForFile(t){return Ee(this.fileDefinitionNodeCache,t,()=>{let n=this.sourceFiles.sourceFile(t);return n?Sc(this.tsMorph,this.db,n,t):new Map})}definitionFromSymbol(t){let n=t.getDeclarations();for(let r of n){let i=r.getSourceFile(),o=wn(this.db.config.projectRoot,i.getFilePath());if(!o||this.db.isIgnored(o))continue;let s=ln(i,r),a=xc(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=H(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&&eh(i,s.callerId,s.target)});for(let[o,s]of i)i.set(o,rh(s));return i}semanticCalleeForCallNode(t,n,r){let i=th(n,ln(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 kc(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 Zg(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 eh(e,t,n){let r=e.get(t);r||(r=[],e.set(t,r)),r.push(n)}function th(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 nh(e,t,n){for(let r of t){let i=e.get(r)??[];i.push(...n),e.set(r,i)}}function rh(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 Pc(e){return e.replace(/\s+/g," ").replace(/\bimport\("[^"]+"\)\./g,"").trim()}var io=new WeakMap;rt({name:"semantic-provider",groups:["semantic-provider"],clearAll:e=>io.delete(e)});function Fn(e,t){let n=`${e.config.projectRoot}:typescript-workspace`,r=io.get(e);r||(r=new Map,io.set(e,r));let i=r.get(n);if(i)return i;let o=Fc(e,t);return r.set(n,o),o}function Tn(e,t){let n=Br(e,t);return n?n.importUsage(t):[]}function _t(e,t){let n=Br(e,t.relativePath);return n?n.referencesFor(t):[]}function un(e,t){let n=new Map;for(let r of t)for(let i of _t(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 jr(e,t){let n=new Map;for(let r of t){let i=Br(e,r.relativePath);if(!i)continue;let o=i.calleesFor(r);o.length>0&&n.set(r.symbolId,o)}return n}function Tc(e,t){let n=Br(e,t.relativePath);return n?n.signatureFor(t):null}function Br(e,t){if(!Mr(t))return null;let n=Fn(e,t);return n.availability().available?n:null}function Hr(e,t){let n=new Map;for(let r of te(e,t)){if(!r.sourcePath)continue;let i=r.localName??r.importedName;if(i&&Ac(n,i,r.sourcePath),r.kind==="namespace")for(let o of r.usedMembers)Ac(n,o,r.sourcePath)}return n}function Ac(e,t,n){let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)}function mn(e,t,n){let r=Lt(e).get(n);if(!r||r.length===0)return[];if(r.length===1)return[An(r[0])];let i=r.filter(c=>c.file===t);if(i.length>0)return i.map(An);let o=Hr(e,t),s=o.get(n);if(s)for(let c of s){let l=r.filter(u=>ut(c,u.file));if(l.length>0)return l.map(An)}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=>ut(c,u.file));if(l.length>0&&l.length===r.length)return l.map(An)}return[]}function Oc(e,t,n){let r=mn(e,t,n);if(r.length>0)return r;let i=Lt(e).get(n);return!i||i.length===0?[]:i.map(An)}function $c(e,t,n={}){let r=hr(e,t);if(!r)return[];let i=P(r.symbol);if(!i)return[];if(n.semantic!==!1){let s=_t(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 Mc(e,a)}}let o=new Map;for(let s of $e(e)){let a=A(e,s);if(!a||a.indexOf(i)===-1||s!==r.relativePath&&!mn(e,s,i).some(u=>u.symbolId===r.symbolId))continue;let c=kr(e,s,i,s===r.relativePath?{excludeStartLine:r.startLine,excludeEndLine:r.endLine}:{});c.length>0&&o.set(s,c)}return Mc(e,o)}function jc(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 $e(e)){let s=cc(e,o);if(s.size!==0){for(let a of s)if(n.has(a))for(let c of mn(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 An(e){return{symbolId:e.symbolId,symbol:e.symbol,relativePath:e.file}}function Mc(e,t){let n=[],r=new Set;for(let[i,o]of t){let s=H(e,i);for(let a of o){let c=be(s,a),l=`${i}|${a}|${c?.symbol??""}`;r.has(l)||(r.add(l),n.push({file:i,line:a,enclosingSymbol:c?.symbol??null}))}}return n}function wt(e,t){let n=lh(e,t);return n?uh(e,oh(e,n.match,n.identifier)):[]}function dt(e,t,n={}){return ih(e,t,n).map(r=>({file:r.file,line:r.line,enclosingSymbol:r.enclosingSymbol}))}function ih(e,t,n={}){let r=$c(e,t,{semantic:n.semantic}),i=r.length>0?Bc(r,"source-attribution"):Bc(wt(e,t),"scip-reference-chunk");return n.includeIgnored===!0?i:i.filter(o=>!e.isIgnored(o.file))}function Bc(e,t){return e.map(n=>({...n,provenance:t}))}function oh(e,t,n){let r=new Map;for(let[i,o]of sh(e,t.symbolId))r.set(i,ah(e,i,o,t,n));return r}function sh(e,t){let n=new Map;for(let r of Pr(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 ah(e,t,n,r,i){let o=t===r.relativePath?{excludeStartLine:r.startLine,excludeEndLine:r.endLine}:{},s=i?kr(e,t,i,o):[];return n.flatMap(a=>ch(s,a))}function ch(e,t){let n=e.filter(r=>r>=t.start_line&&r<=t.end_line);return n.length>0?n:[t.start_line]}function lh(e,t){let n=hr(e,t);return n?{match:n,identifier:P(n.symbol)||null}:null}function uh(e,t){let n=[],r=new Set;for(let[i,o]of t){let s=H(e,i);for(let a of o){let c=be(s,a),l=`${i}|${a}|${c?.symbol??""}`;r.has(l)||(r.add(l),n.push({file:i,line:a,enclosingSymbol:c?.symbol??null}))}}return n}function he(e,t,n={}){let r=qr(e,[t],{additive:n.additive,semantic:n.semantic}),i=n.callableOnly?(r.get(t.symbolId)??[]).filter(o=>ie(o.symbol)):r.get(t.symbolId)??[];return typeof n.limit=="number"?i.slice(0,n.limit):i}function Hc(e,t,n={}){let r=ph(e)?gh(e,t,{semantic:n.semantic!==!1}):fh(e).get(t.symbolId)??[];return typeof n.limit=="number"?r.slice(0,n.limit):r}var mh=re("caller-rows",{clearGroups:["whole-project"]}),dh=2e4;function ph(e){return(e.get("SELECT COUNT(*) AS count FROM global_symbols")?.count??0)>dh}function fh(e){return mh.get(e,()=>{let t=Me(e),n=qr(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 gh(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 wt(e,t))a.file!==t.relativePath&&o({symbol:a.enclosingSymbol??a.file,file:a.file,source:"resolved-reference"});let s=n.semantic?hh(e,t):null;if(s)for(let a of _t(e,s)){if(a.file===t.relativePath||e.isIgnored(a.file))continue;let c=be(H(e,a.file),a.line);o({symbol:c?.symbol??a.file,file:a.file,source:"semantic-reference"})}return r}function hh(e,t){return e.get(`SELECT
232
195
  d.id AS documentId,
233
196
  gs.id AS symbolId,
234
197
  gs.symbol,
@@ -247,7 +210,7 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
247
210
  LEFT JOIN chunks c ON c.document_id = der.document_id
248
211
  JOIN documents d ON d.id = COALESCE(der.document_id, c.document_id)
249
212
  WHERE gs.id = ?
250
- LIMIT 1`,t.symbolId)??null}function hr(e,t,n={}){if(t.length===0)return new Map;let r=n.additive??!1,i=[],o=[];for(let u of t)P(u.relativePath)&&Lt(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 y=a.get(m);y||(y=new Set,a.set(m,y));for(let f of d){let b=`${f.symbol}|${f.chunkId}`;y.has(b)||(y.add(b),p.push(f))}}};i.length>0&&c(Ng(e,i)),n.semantic!==!1&&c(Pg(pc(e,t)));let l=r?t:o;return l.length>0&&c(kg(e,l)),s}function Ng(e,t){let n=new Map,r=Lg(t,n),i=yt(e);for(let[o,s]of r){let a=Lt(e,o);if(a)for(let c of a){let l=Eg(s,c.line);if(!l)continue;let u=wg(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 Lg(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 Eg(e,t){return e.find(n=>t>=n.startLine&&t<=n.endLine)??null}function wg(e,t,n,r,i){let o=cr(t,n.get(r)??[]);return o.length===0?null:lr(e,t,o,i)}function kg(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
213
+ LIMIT 1`,t.symbolId)??null}function qr(e,t,n={}){if(t.length===0)return new Map;let r=n.additive??!1,i=[],o=[];for(let u of t)$(u.relativePath)&&Qt(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(yh(e,i)),n.semantic!==!1&&c(Rh(jr(e,t)));let l=r?t:o;return l.length>0&&c(Ch(e,l)),s}function yh(e,t){let n=new Map,r=bh(t,n),i=Lt(e);for(let[o,s]of r){let a=Qt(e,o);if(a)for(let c of a){let l=Sh(s,c.line);if(!l)continue;let u=xh(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 bh(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 Sh(e,t){return e.find(n=>t>=n.startLine&&t<=n.endLine)??null}function xh(e,t,n,r,i){let o=Fr(t,n.get(r)??[]);return o.length===0?null:Tr(e,t,o,i)}function Ch(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
251
214
  FROM mentions m
252
215
  JOIN chunks c ON m.chunk_id = c.id
253
216
  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,
@@ -260,10 +223,10 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
260
223
  JOIN chunks c ON m.chunk_id = c.id
261
224
  WHERE m.role = 1
262
225
  GROUP BY m.symbol_id
263
- ) 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,y=()=>{if(p)return p;let f=c.get(l.documentId)??"",b=new Set;if(f){let E=$a(e,f),x=Math.max(0,l.startLine),$=Math.min(E.length-1,l.endLine);for(let O=x;O<=$;O+=1)for(let I of E[O])b.add(I)}return p=b,b};for(let f of u){if(f.symbol_id===l.symbolId)continue;let b=o.get(f.symbol_id);if(!b)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 O=L(b.symbol);if(!O||!y().has(O))continue}let x=`${b.symbol}|${f.chunk_id}`;m.has(x)||(m.add(x),d.push({...b,chunkId:f.chunk_id,source:"scip-chunk"}))}a.set(l.symbolId,d)}return a}function Pg(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 Ic(e){Rc.invalidate(e)}function _c(e,t,n={}){let r=new Map;if(t&&t.length===0)return r;let i=k(e,{includeIgnored:!1}),o=yt(e),s=t??Ee(e),a=new Set(s.map(c=>c.symbolId));return Tg(e,r,i,o,a),Mg(e,r,s,a),$g(e,r,i,o,a),n.semantic!==!1&&Bg(r,Vt(e,jg(s))),r}function Tg(e,t,n,r,i){for(let o of n){if(!P(o))continue;let s=Lt(e,o);if(s)for(let a of s){let c=cr(o,r.get(a.calleeLeaf)??[]);if(!c||c.length===0)continue;let l=lr(e,o,c,a.memberAccess);l&&i.has(l.symbolId)&&l.file!==o&&ji(t,l.symbolId,o)}}}function Mg(e,t,n,r){let i=Fg(n);for(let o of Og(e,r))e.isIgnored(o.relative_path)||Ag(o,i.get(o.symbol_id))||ji(t,o.symbol_id,o.relative_path)}function Og(e,t){return ar(e,t?[...t]:void 0)}function Fg(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 Ag(e,t){return!!t&&t.docId===e.document_id&&e.chunk_start>=t.startLine&&e.chunk_end<=t.endLine}function $g(e,t,n,r,i){for(let o of n){if(P(o)!=="rust")continue;let s=Bt(e,o);if(s.size!==0)for(let a of s){let c=r.get(a);if(c)for(let l of c)i.has(l.symbolId)&&l.file!==o&&ji(t,l.symbolId,o)}}}function ji(e,t,n){let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)}function jg(e){return e.filter(t=>"relativePath"in t&&"symbol"in t&&"leaf"in t)}function Bg(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 ye(e,t,n={}){return Cc(e,t,n)}function Bi(e,t,n={}){return _c(e,t,n)}function Hi(e,t){return Sc(e,t)}function vc(e,t,n={}){let r=Bi(e,t,{semantic:n.semantic});return n.sourceFallback===!1?r:Hg(r,Hi(e,t))}function Hg(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}var Dc=new WeakMap;function Nc(e,t,n,r){let i=P(t);if(!i)return null;let o=B(e,t);if(!o)return null;let s=Dc.get(o);return s||(s=Vg(o,i),Dc.set(o,s)),s.get(`${n}:${r}`)??null}function Vg(e,t){let n=en(t),r=new Map,i=o=>{if(n.has(o.type)){let s=o.namedChildren.find(c=>c.type==="parameters"||c.type==="formal_parameters"),a=0;if(s)for(let c of s.namedChildren)c.type==="comment"||c.type==="line_comment"||c.type==="block_comment"||(a+=1);r.set(`${o.startPosition.row}:${o.endPosition.row}`,{paramCount:a})}for(let s of o.children)i(s)};return i(e.rootNode),r}function Lc(e,t,n){let r=t.identifierResolution==="strict"?Wt:yc;for(let i of t.paths){let o=P(i);if(!(!o&&!(t.includeVueSfc&&st(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=ht(e,i);for(let[c,l]of a)s(c,"identifier",l.length,()=>r(e,i,c));if(t.includeCrossLanguageDispatchNames)for(let c of Oa(e,i))s(c,"cross-language-dispatch",1,()=>Wt(e,i,c));if(t.includeRustAttributeNames&&o==="rust")for(let c of Bt(e,i))s(c,"rust-attribute",1,()=>r(e,i,c))}finally{t.afterPath?.(i)}}}var v=class{constructor(t){this.db=t}db;scopedDefinitions(t){return ii(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,requireFunctionLikeSymbol:c=!1,requireCallableSymbol:l=!1,excludeRustTraitImplMembers:u=!1,includeSuppressed:m=!1,sortByLocDesc:d=!1}=t,p=[];for(let y of this.scopedDefinitions(n)){let f=y.relativePath;if(this.db.isIgnored(f)||s&&gt(this.db,f)||!Wg(y,{requireFunctionLikeSymbol:c,requireCallableSymbol:l})||o!==void 0&&y.symbol===o)continue;let b=Vi(y);b<r||b>i||a&&qg(f)||u&&Hn(y.symbol)||ue(f)!=="test"&&(qe(y.symbol)||!m&&Xr(this.db,f,y.startLine)||p.push(y))}return d?p.sort((y,f)=>Vi(f)-Vi(y)):p}calleeMap(t,n={}){return hr(this.db,t,n)}crossFileCallerMap(t,n={}){return Bi(this.db,t,n)}sourceFallbackCallerFiles(t){return Hi(this.db,t)}callerFileMap(t,n={}){return vc(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 k(this.db,{includeIgnored:!1}))if(P(i)==="rust")for(let o of Bt(this.db,i))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 se(this.db,t)}fileKind(t){return ue(t)}hasSuppressionComment(t){return Xr(this.db,t.relativePath,t.startLine)}sourceFiles(){return Ye(this.db)}scanSourceReferences(t,n){Lc(this.db,t,n)}callableSignature(t){return Nc(this.db,t.relativePath,t.startLine,t.endLine)}};function Wg(e,t){return t.requireCallableSymbol?Z(e.symbol):t.requireFunctionLikeSymbol?Q(e.symbol):e.isFunctionLike}function Vi(e){return e.endLine-e.startLine+1}function qg(e){return(e.split("/").pop()??"").includes("types")}function Wi(e,t){let n=w(e,t);if(!n)return[];let r=L(n.symbol),o=new v(e).definitionsForFile(n.relativePath).filter(c=>Z(c.symbol)),s=o.filter(c=>c.parentTypeName===r||c.symbol.includes(r));return(s.length>0?s:Jg(Ug(n.relativePath))===r?o.filter(c=>c.symbol.includes("<invalid-global-code>")):[]).map(c=>({startLine:c.startLine,endLine:c.endLine,name:L(c.symbol)}))}function Jg(e){return e.replace(/\.[^.]+$/,"")}function qi(e,t,n={}){let r=w(e,t);if(!r)return[];let o=!Q(r.symbol)&&!e.isIgnored(r.relativePath)?[{relativePath:r.relativePath,line:r.startLine}]:[],s=et(e,r,{semantic:n.semantic}).map(u=>({relativePath:u.file,line:u.line})),a=zg(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 zg(e,t){if(!t.relativePath.endsWith(".rb"))return[];let n=Gg(t.symbol);if(n.length===0)return[];let r=[];for(let i of k(e,{extensions:[".rb"],includeIgnored:!1})){let o=T(e,i);if(!o)continue;let s=o.split(`
264
- `);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 Gg(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 Ui(e,t,n={}){let r=w(e,t);if(!r)return{definitions:[],referencedBy:[]};let i=e.get("SELECT display_name, documentation FROM global_symbols WHERE id = ?",r.symbolId),o=ct(i?.documentation??null),s=e.isIgnored(r.relativePath)?[]:[{relativePath:r.relativePath,startLine:r.startLine,endLine:r.endLine,signature:Kg(o,i?.display_name??null,r.symbol),source:Qg(e,r.relativePath,r.startLine,r.endLine)}],a=et(e,r,{semantic:n.semantic}).map(c=>({relativePath:c.file,line:c.line,enclosingSymbol:c.enclosingSymbol,enclosingShort:c.enclosingSymbol?h(c.enclosingSymbol):"(top-level)"}));return{definitions:s,referencedBy:a}}function Qg(e,t,n,r){let i=T(e,t);if(!i)return null;let s=i.split(`
226
+ ) 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 C=lc(e,f),E=Math.max(0,l.startLine),N=Math.min(C.length-1,l.endLine);for(let I=E;I<=N;I+=1)for(let v of C[I])y.add(v)}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 I=P(y.symbol);if(!I||!h().has(I))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 Rh(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 qc(e,t,n={}){let r=new Map;if(t&&t.length===0)return r;let i=T(e,{includeIgnored:!1}),o=Lt(e),s=t??Me(e),a=new Set(s.map(c=>c.symbolId));return Ih(e,r,i,o,a),vh(e,r,s,a),_h(e,r,i,o,a),n.semantic!==!1&&Eh(r,un(e,wh(s))),r}function Ih(e,t,n,r,i){for(let o of n){if(!$(o))continue;let s=Qt(e,o);if(s)for(let a of s){let c=Fr(o,r.get(a.calleeLeaf)??[]);if(!c||c.length===0)continue;let l=Tr(e,o,c,a.memberAccess);l&&i.has(l.symbolId)&&l.file!==o&&oo(t,l.symbolId,o)}}}function vh(e,t,n,r){let i=Nh(n);for(let o of Dh(e,r))e.isIgnored(o.relative_path)||Lh(o,i.get(o.symbol_id))||oo(t,o.symbol_id,o.relative_path)}function Dh(e,t){return Pr(e,t?[...t]:void 0)}function Nh(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 Lh(e,t){return!!t&&t.docId===e.document_id&&e.chunk_start>=t.startLine&&e.chunk_end<=t.endLine}function _h(e,t,n,r,i){for(let o of n){if($(o)!=="rust")continue;let s=yt(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&&oo(t,l.symbolId,o)}}}function oo(e,t,n){let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)}function wh(e){return e.filter(t=>"relativePath"in t&&"symbol"in t&&"leaf"in t)}function Eh(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 Re(e,t,n={}){return Hc(e,t,n)}function so(e,t,n={}){return qc(e,t,n)}function ao(e,t){return jc(e,t)}function Vc(e,t,n={}){let r=so(e,t,{semantic:n.semantic});return n.sourceFallback===!1?r:kh(r,ao(e,t))}function kh(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 Wc(e,t,n){let r=t.identifierResolution==="strict"?mn:Oc;for(let i of t.paths)if(!(!$(i)&&!(t.includeVueSfc&&ht(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=Ge(e,i);for(let[c,l]of a)s(c,"identifier",l.length,()=>r(e,i,c));for(let c of yt(e,i,{includeCrossLanguageDispatchNames:t.includeCrossLanguageDispatchNames,includeRustAttributeNames:t.includeRustAttributeNames})){let l=c.kind==="cross-language-dispatch"?()=>mn(e,i,c.name):()=>r(e,i,c.name);s(c.name,c.kind,c.occurrences,l)}}finally{t.afterPath?.(i)}}var L=class{constructor(t){this.db=t}db;scopedDefinitions(t){return Ti(this.db,t)}definitionsForFile(t){return H(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&&le(this.db,y)||!Ph(f,{requireFunctionLikeSymbol:l,requireCallableSymbol:u})||o!==void 0&&f.symbol===o)continue;let C=co(f);C<r||C>i||a&&Fh(y)||c&&ne(this.db,f.symbol,y)||m&&dr(f.symbol)||G(y)!=="test"&&(Kt(f.symbol)||!d&&Ei(this.db,y,f.startLine)||h.push(f))}return p?h.sort((f,y)=>co(y)-co(f)):h}calleeMap(t,n={}){return qr(this.db,t,n)}crossFileCallerMap(t,n={}){return so(this.db,t,n)}sourceFallbackCallerFiles(t){return ao(this.db,t)}callerFileMap(t,n={}){return Vc(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 T(this.db,{includeIgnored:!1}))if($(i)==="rust")for(let{name:o}of yt(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 oe(this.db,t)}fileKind(t){return G(t)}hasSuppressionComment(t){return Ei(this.db,t.relativePath,t.startLine)}sourceFiles(){return $e(this.db)}scanSourceReferences(t,n){Wc(this.db,t,n)}callableSignature(t){let n=K(this.db,t.relativePath)?.callables.find(r=>r.startLine===t.startLine&&r.endLine===t.endLine);return n?{paramCount:n.paramCount}:null}};function Ph(e,t){return t.requireCallableSymbol?ie(e.symbol):t.requireFunctionLikeSymbol?Y(e.symbol):e.isFunctionLike}function co(e){return e.endLine-e.startLine+1}function Fh(e){return(e.split("/").pop()??"").includes("types")}function lo(e,t){let n=F(e,t);if(!n)return[];let r=P(n.symbol),o=new L(e).definitionsForFile(n.relativePath).filter(c=>ie(c.symbol)),s=o.filter(c=>c.parentTypeName===r||c.symbol.includes(r));return(s.length>0?s:Ah(Th(n.relativePath))===r?o.filter(c=>c.symbol.includes("<invalid-global-code>")):[]).map(c=>({startLine:c.startLine,endLine:c.endLine,name:P(c.symbol)}))}function Ah(e){return e.replace(/\.[^.]+$/,"")}function uo(e,t,n={}){let r=F(e,t);if(!r)return[];let o=!Y(r.symbol)&&!e.isIgnored(r.relativePath)?[{relativePath:r.relativePath,line:r.startLine}]:[],s=dt(e,r,{semantic:n.semantic}).map(u=>({relativePath:u.file,line:u.line})),a=Mh(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 Mh(e,t){if(!t.relativePath.endsWith(".rb"))return[];let n=Oh(t.symbol);if(n.length===0)return[];let r=[];for(let i of T(e,{extensions:[".rb"],includeIgnored:!1})){let o=A(e,i);if(!o)continue;let s=o.split(`
227
+ `);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 Oh(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 Mn(e,t,n={}){let r=F(e,t);if(!r)return{definitions:[],referencedBy:[]};let i=e.get("SELECT display_name, documentation FROM global_symbols WHERE id = ?",r.symbolId),o=St(i?.documentation??null),s=e.isIgnored(r.relativePath)?[]:[{relativePath:r.relativePath,startLine:r.startLine,endLine:r.endLine,signature:jh(o,i?.display_name??null,r.symbol),source:$h(e,r.relativePath,r.startLine,r.endLine)}],a=dt(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 $h(e,t,n,r){let i=A(e,t);if(!i)return null;let s=i.split(`
265
228
  `).slice(n,r+1).join(`
266
- `).trimEnd();return s.length>0?s:null}function Kg(e,t,n){let r=at(e);if(r&&!Yg(r))return r;let i=(t??"").trim();return i?Q(n)&&!i.endsWith("()")?`${i}()`:i:h(n)}function Yg(e){return e.startsWith("undefined")||e.includes("|")||e.includes("```")}function Ji(e,t){let n=re(e,t);return n?e.all(`SELECT DISTINCT d2.relative_path
229
+ `).trimEnd();return s.length>0?s:null}function jh(e,t,n){let r=bt(e);if(r&&!Bh(r))return r;let i=(t??"").trim();return i?Y(n)&&!i.endsWith("()")?`${i}()`:i:b(n)}function Bh(e){return e.startsWith("undefined")||e.includes("|")||e.includes("```")}function On(e,t){let n=me(e,t);return n?e.all(`SELECT DISTINCT d2.relative_path
267
230
  FROM mentions m
268
231
  JOIN chunks c ON m.chunk_id = c.id
269
232
  JOIN documents d1 ON c.document_id = d1.id
@@ -279,7 +242,7 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
279
242
  WHERE d1.relative_path = ?
280
243
  AND d2.relative_path <> d1.relative_path
281
244
  AND ${e.localSymbolPredicate}
282
- ORDER BY d2.relative_path`,n).filter(i=>!e.isIgnored(i.relative_path)).map(i=>({relativePath:i.relative_path})):[]}function zi(e,t){let n=re(e,t);return n?e.all(`SELECT DISTINCT d1.relative_path
245
+ ORDER BY d2.relative_path`,n).filter(i=>!e.isIgnored(i.relative_path)).map(i=>({relativePath:i.relative_path})):[]}function $n(e,t){let n=me(e,t);return n?e.all(`SELECT DISTINCT d1.relative_path
283
246
  FROM mentions m
284
247
  JOIN chunks c ON m.chunk_id = c.id
285
248
  JOIN documents d1 ON c.document_id = d1.id
@@ -294,9 +257,9 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
294
257
  JOIN documents d2 ON sym_def.document_id = d2.id
295
258
  WHERE d2.relative_path = ?
296
259
  AND d1.relative_path != ?
297
- ORDER BY d1.relative_path`,n,n).filter(i=>!e.isIgnored(i.relative_path)).map(i=>({relativePath:i.relative_path})):[]}function Gi(e,t){let n=Ue(e,t);if(n.length===0)return{files:[],symbols:[],dependsOn:[],dependedOnBy:[]};let r=n.map(()=>"?").join(", "),o=e.all(`SELECT relative_path FROM documents
260
+ ORDER BY d1.relative_path`,n,n).filter(i=>!e.isIgnored(i.relative_path)).map(i=>({relativePath:i.relative_path})):[]}function jn(e,t){let n=nn(e,t);if(n.length===0)return{files:[],symbols:[],dependsOn:[],dependedOnBy:[]};let r=n.map(()=>"?").join(", "),o=e.all(`SELECT relative_path FROM documents
298
261
  WHERE relative_path IN (${r})
299
- ORDER BY relative_path`,...n).map(m=>m.relative_path).filter(m=>!e.isIgnored(m)),s=Pt(e,o,{onlyDocumented:!0,sort:!0}).map(({relativePath:m,...d})=>d),c=e.all(`SELECT DISTINCT d2.relative_path
262
+ ORDER BY relative_path`,...n).map(m=>m.relative_path).filter(m=>!e.isIgnored(m)),s=pr(e,o,{onlyDocumented:!0,sort:!0}).map(({relativePath:m,...d})=>d),c=e.all(`SELECT DISTINCT d2.relative_path
300
263
  FROM mentions m
301
264
  JOIN chunks c ON m.chunk_id = c.id
302
265
  JOIN documents d1 ON c.document_id = d1.id
@@ -327,7 +290,7 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
327
290
  JOIN documents d2 ON sym_def.document_id = d2.id
328
291
  WHERE d2.relative_path IN (${r})
329
292
  AND d1.relative_path NOT IN (${r})
330
- 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 Qi(e,t){let n=Ue(e,t);return n.length===0?[]:eh([...Xg(e,n),...Zg(e,n)]).filter(r=>!e.isIgnored(r.relative_path)).map(th)}function Xg(e,t){let n=t.map(()=>"?").join(", ");return e.all(`SELECT DISTINCT d1.relative_path, gs.symbol
293
+ 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 Bn(e,t){let n=nn(e,t);return n.length===0?[]:Vh([...Hh(e,n),...qh(e,n)]).filter(r=>!e.isIgnored(r.relative_path)).map(Wh)}function Hh(e,t){let n=t.map(()=>"?").join(", ");return e.all(`SELECT DISTINCT d1.relative_path, gs.symbol
331
294
  FROM mentions m
332
295
  JOIN chunks c ON m.chunk_id = c.id
333
296
  JOIN documents d1 ON c.document_id = d1.id
@@ -354,7 +317,7 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
354
317
  AND m.role != 1
355
318
  AND ${e.localSymbolPredicate}
356
319
  ${e.pathExclusionsFor("d1")}
357
- ORDER BY d1.relative_path`,...t,...t,...t)}function Zg(e,t){let n=new v(e);return t.flatMap(r=>n.definitionsForFile(r).filter(i=>Z(i.symbol)).map(i=>({relative_path:r,symbol:i.symbol})))}function eh(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 th(e){return{consumer:e.relative_path,symbol:e.symbol,shortName:h(e.symbol)}}function Ec(e){let t=new Map,n=r=>{let i=t.get(r);if(i)return i;let o=wa(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 Wn(o))if(a.containers.has(c))return!0;return!1}}function wc(e){Sa(e),Ic(e),Ja(e)}var nh=[{kind:"symbol-evidence",clearDatabase:wc},{kind:"semantic-provider",clearDatabase:Ai},{kind:"identifier-index",clearDatabase:ja,clearFile:Ba},{kind:"language-parser",clearDatabase:ha,clearFile:ya},{kind:"source-stripper",clearDatabase:Ks,clearFile:Ys},{kind:"ast-tree",clearDatabase:Zr,clearFile:ei},{kind:"source-text",clearDatabase:Es,clearFile:ws},{kind:"definition-catalog",clearFile:Bs}],kc=["symbol-evidence","identifier-index","language-parser","source-stripper","ast-tree","source-text"],Pc=["identifier-index","language-parser","source-stripper","ast-tree","source-text"];function Tc(e,t){let n=new Set(t.kinds);for(let r of nh)n.has(r.kind)&&(t.scope.kind==="database"?r.clearDatabase?.(e):r.clearFile?.(e,rh(t.scope.relativePath)))}function Ki(e,t={}){Tc(e,{scope:{kind:"database"},kinds:t.semanticProvider===!0?[...kc,"semantic-provider"]:kc})}function Yi(e,t,n={}){Tc(e,{scope:{kind:"file",relativePath:t},kinds:n.definitions===!0?[...Pc,"definition-catalog"]:Pc})}function rh(e){return e.replace(/\\/g,"/")}function Oc(e,t){return t.isIgnoredPath(e.relativePath)?ke("ignored-file"):We(e.symbol)?ke("module-like-symbol"):Mc(e.symbol)?!e.isFunctionLike&&e.enclosingSymbol&&Mc(e.enclosingSymbol)?ke("nested-non-callable-value"):!t.includeTests&&!Xi(e.relativePath)?ke("test-file"):!t.includeTests&&t.isExcludedRegion(e.relativePath,e.startLine,e.symbol,e.parentTypeName)?ke("excluded-file-region"):Hn(e.symbol)?ke("rust-trait-impl-member"):qe(e.symbol)?ke("rust-test-module"):!t.includeMembers&&!oh(e)?ke("member"):e.endLine-e.startLine+1<t.minLoc?ke("below-min-loc"):{accepted:!0}:ke("non-value-symbol")}function Xi(e){return[...new Set([...Da,...Na])].every(n=>!ih(e,n))}function ke(e){return{accepted:!1,rejectionReason:e}}function ih(e,t){return new RegExp(`^${t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/%/g,".*").replace(/_/g,".")}$`).test(e)}function Mc(e){return Q(e)||e.endsWith("().")||e.endsWith(".")}function oh(e){return Z(e.symbol)||Wn(e.symbol).length===0}function j(e){return e.endLine-e.startLine+1}function yr(e,t){return j(e)-j(t)||e.relativePath.localeCompare(t.relativePath)}function ee(e,t){return typeof t!="number"||t<=0||e.length<=t?e:e.slice(0,t)}function qt(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 Fc(){return new Map}function Ac(e,t,n){let r=new Map;for(let i of Ha(e,n))e.isIgnored(i.relative_path)||t.has(i.relative_path)||br(r,i.symbol_id,i.relative_path,i.ref_count,"scip-mention");return r}function $c(e,t,n){let r=new Set;for(let i of Va(e,t))e.isIgnored(i.relative_path)||n.has(i.relative_path)||r.add(i.symbol_id);return r}function Zi(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 jc(e){return e?.occurrences??0}function br(e,t,n,r,i="source-fallback"){if(r<=0)return;let o=Hc(e,t,n);o.occurrences+=r,o.sources.add(i)}function Bc(e,t,n,r,i){if(r<=0)return;let o=Hc(e,t,n);o.occurrences=Math.max(r,o.occurrences),o.sources.add(i)}function Hc(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 bn(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=ee(sh(e,{scope:n,minLoc:r,includeTests:i,includeMembers:s}),c),m=o?new Set(va(e)):new Set,d=a?Fc():Ac(e,m,u.map(E=>E.symbolId)),p=a?$c(e,u.map(E=>E.symbolId),m):new Set,y=a?u.filter(E=>!p.has(E.symbolId)):u;a?mh(e,y,d,m):uh(e,y,d,m);let f=a?y.filter(E=>!Zi(d,E.symbolId)):u;hh(e,f,d,{includeTests:i,inactiveBarrelPaths:m,includeSemantic:!a&&l});let b=a?y.filter(E=>!Zi(d,E.symbolId)):u;return lh(e,ah(b,d))}function sh(e,t){let n=Ec(e),r=[];for(let i of k(e,{scope:t.scope}))try{for(let o of W(e,i))Oc(o,{minLoc:t.minLoc,includeTests:t.includeTests,includeMembers:t.includeMembers,isIgnoredPath:a=>e.isIgnored(a),isExcludedRegion:n}).accepted&&r.push(o)}finally{Yi(e,i,{definitions:!0})}return r}function ah(e,t){return e.map(n=>ch(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 ch(e,t){let n=t.get(e.symbolId)??new Map,r=jc(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 lh(e,t){let n=[],r=0,i=0,o=0;for(let s of t){if(e.isIgnored(s.relative_path)||gt(e,s.relative_path)||ln(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:h(s.symbol),sameFileRefs:s.same_file_refs,kind:a})}return{symbols:n,totalCount:n.length,deadCodeCount:r,fileInternalCount:i,totalLoc:o}}function uh(e,t,n,r){if(t.length===0)return;let i=new v(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 k(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)&&(fh(e,c)||br(n,c.target.symbolId,c.sourceFile,gh(c),"source-fallback"))})}function mh(e,t,n,r){if(t.length===0)return;let i=new v(e),o=dh(t),s=new Set(i.sourceFiles());for(let u of k(e))s.add(u);let a=new Set(o.keys()),c=new Map,l=u=>{let m=c.get(u);return m||(m=gr(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?ph(u,m,p,l(u),{permissive:d!=="cross-language-dispatch"}):[]},afterPath:u=>{c.delete(u),Yi(e,u)}},u=>{let m=u.kind==="identifier"&&u.sourceFile===u.target.relativePath?Math.max(0,u.occurrences-1):u.occurrences;u.kind==="identifier"&&Vc(e,{sourceFile:u.sourceFile,name:u.name,target:u.target,occurrences:m})||br(n,u.target.symbolId,u.sourceFile,m,"source-fallback")})}function dh(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 ph(e,t,n,r,i){let o=n.filter(c=>c.relativePath===e);if(o.length>0)return o;let s=r.get(t);if(s)for(let c of s){let l=n.filter(u=>Xe(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=>Xe(c,u.relativePath));if(l.length>0&&l.length===n.length)return l}return i.permissive?[...n]:[]}function fh(e,t){return t.kind==="cross-language-dispatch"&&t.target.relativePath===t.sourceFile?!0:t.kind==="identifier"&&Vc(e,t)}function gh(e){return e.kind==="identifier"&&e.target.relativePath===e.sourceFile?Math.max(0,e.occurrences-1):e.occurrences}function Vc(e,t){return t.occurrences>1?!1:X(e,t.sourceFile).some(n=>n.used||n.sourcePath!==t.target.relativePath?!1:n.importedName===t.name||n.localName===t.name)}function hh(e,t,n,r){for(let i of t){let o=ye(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&&!Xi(a)||Bc(n,i.symbolId,a,1,"caller-map")}}}function eo(e,t={}){let{limit:n=30,scope:r}=t,i=r?`AND def_d.relative_path LIKE '%${r}%'`:"",s=e.all(`SELECT
320
+ ORDER BY d1.relative_path`,...t,...t,...t)}function qh(e,t){let n=new L(e);return t.flatMap(r=>n.definitionsForFile(r).filter(i=>ie(i.symbol)).map(i=>({relative_path:r,symbol:i.symbol})))}function Vh(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 Wh(e){return{consumer:e.relative_path,symbol:e.symbol,shortName:b(e.symbol)}}var Hn=new WeakMap;function Gc(e,t){let n=$(t);return n==="rust"?Qh(e,t):n==="typescript"||n==="tsx"||n==="javascript"?Gh(e,t):[]}var Uh=new Set(["describe","it","test","fdescribe","fit","xdescribe","xit","beforeEach","afterEach","beforeAll","afterAll","before","after","suite","bench","benchmark"]);function Gh(e,t){let n=ce(e,t);if(!n)return[];let r=Hn.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&&Uh.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(...Jc(n,new Set(["function_declaration","method_definition","class_declaration","interface_declaration","type_alias_declaration","enum_declaration","variable_declarator","export_statement"]),new Set(["comment"]))),Hn.set(n,c),c}var Jh=/scip-query[\s:-]*ignore[\s:-]*(?:dead(?:-code)?|stale)?/i;function zh(e){return Jh.test(e)}function Jc(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(zh(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 Qh(e,t){let n=ce(e,t);if(!n)return[];let r=Hn.get(n);if(r)return r;let i=[],o=Kh(n);return o?(Hn.set(n,o),o):(zc(n.rootNode,i,!1,!1),i.push(...Jc(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(...iy(n.rootNode)),Hn.set(n,i),i)}function Kh(e){return oy(e.rootNode)?[{startLine:0,endLine:e.rootNode.endPosition.row,reason:"generated file (@generated header)"}]:null}function zc(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"?Yh(e,t,n,r):r&&ry(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"?Xh(e,t,n):e.type==="mod_item"&&mo(e).some(s=>/#\[\s*cfg\s*\(\s*test\s*\)/.test(s))&&(i=!0);for(let s of e.namedChildren)zc(s,t,i,o)}function Yh(e,t,n,r){let i=mo(e),o=null;r?o="trait impl method (dynamic dispatch)":n&&(o="inside #[cfg(test)] mod");for(let s of i){let a=ey(s);if(a){o=a;break}if(Qc(s)){o="#[allow(dead_code)]";break}}o&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:o})}function Xh(e,t,n){let r=mo(e),i=e.namedChildren.find(o=>o.type==="type_identifier")?.text;r.some(ny)&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"#[derive(<reflective>)] \u2014 fields accessed via macro/reflection",containerName:i}),r.some(Qc)&&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 mo(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 Zh=[{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 ey(e){return Zh.find(({re:t})=>t.test(e))?.reason??null}var ty=[/\bSerialize\b/,/\bDeserialize\b/,/\bFromRow\b/,/\bsqlx::FromRow\b/,/\bDeriveEntityModel\b/,/\bIntoSchema\b/,/\bToSchema\b/,/\bDeriveValueType\b/,/\bError\b/,/\bthiserror::Error\b/];function ny(e){return/#\[\s*derive\s*\(/.test(e)?ty.some(t=>t.test(e)):!1}function Qc(e){return/#\[\s*allow\s*\(\s*dead_code\s*\)/.test(e)}function ry(e){return e.type==="const_item"||e.type==="type_item"||e.type==="static_item"||e.type==="associated_type"}function iy(e){let t=ay(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 oy(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 sy=/^#!?\[\s*serde\s*\(/,Uc=/\bwith\s*=\s*"([^"]+)"/g;function ay(e){let t=new Set;for(let n of e.descendantsOfType("attribute_item")){if(!sy.test(n.text))continue;Uc.lastIndex=0;let r;for(;(r=Uc.exec(n.text))!==null;){let i=r[1],o=i.split("::").pop()??i;o&&t.add(o)}}return t}function Kc(e){let t=new Map,n=r=>{let i=t.get(r);if(i)return i;let o=Gc(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 gr(o))if(a.containers.has(c))return!0;return!1}}function po(e,t={}){Li(e,{groups:t.semanticProvider===!0?["whole-project","semantic-provider"]:["whole-project"]})}function fo(e,t,n={}){Li(e,{groups:n.definitions===!0?["source-file","definition-catalog"]:["source-file"],file:t.replace(/\\/g,"/")})}function Xc(e,t){return t.isIgnoredPath(e.relativePath)?je("ignored-file"):it(e.symbol)?je("module-like-symbol"):Yc(e.symbol)?!e.isFunctionLike&&e.enclosingSymbol&&Yc(e.enclosingSymbol)?je("nested-non-callable-value"):!t.includeTests&&!go(e.relativePath)?je("test-file"):!t.includeTests&&t.isExcludedRegion(e.relativePath,e.startLine,e.symbol,e.parentTypeName)?je("excluded-file-region"):dr(e.symbol)?je("rust-trait-impl-member"):Kt(e.symbol)?je("rust-test-module"):!t.includeMembers&&!cy(e)?je("member"):e.endLine-e.startLine+1<t.minLoc?je("below-min-loc"):{accepted:!0}:je("non-value-symbol")}function go(e){return G(e)!=="test"}function je(e){return{accepted:!1,rejectionReason:e}}function Yc(e){return Y(e)||e.endsWith("().")||e.endsWith(".")}function cy(e){return ie(e.symbol)||gr(e.symbol).length===0}function B(e){return e.endLine-e.startLine+1}function Vr(e,t){return B(e)-B(t)||e.relativePath.localeCompare(t.relativePath)}function Ie(e,t){return typeof t!="number"||t<=0||e.length<=t?e:e.slice(0,t)}function dn(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 Zc(){return new Map}function el(e,t,n){let r=new Map;for(let i of uc(e,n))e.isIgnored(i.relative_path)||t.has(i.relative_path)||Wr(r,i.symbol_id,i.relative_path,i.ref_count,"scip-mention");return r}function tl(e,t,n){let r=new Set;for(let i of mc(e,t))e.isIgnored(i.relative_path)||n.has(i.relative_path)||r.add(i.symbol_id);return r}function ho(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 nl(e){return e?.occurrences??0}function Wr(e,t,n,r,i="source-fallback"){if(r<=0)return;let o=il(e,t,n);o.occurrences+=r,o.sources.add(i)}function rl(e,t,n,r,i){if(r<=0)return;let o=il(e,t,n);o.occurrences=Math.max(r,o.occurrences),o.sources.add(i)}function il(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 Je(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=Ie(ly(e,{scope:n,minLoc:r,includeTests:i,includeMembers:s}),c),m=o?new Set(ac(e)):new Set,d=a?Zc():el(e,m,u.map(C=>C.symbolId)),p=a?tl(e,u.map(C=>C.symbolId),m):new Set,h=a?u.filter(C=>!p.has(C.symbolId)):u;a?fy(e,h,d,m):py(e,h,d,m);let f=a?h.filter(C=>!ho(d,C.symbolId)):u;Sy(e,f,d,{includeTests:i,inactiveBarrelPaths:m,includeSemantic:!a&&l});let y=a?h.filter(C=>!ho(d,C.symbolId)):u;return dy(e,uy(y,d))}function ly(e,t){let n=Kc(e),r=[];for(let i of T(e,{scope:t.scope}))try{for(let o of H(e,i))Xc(o,{minLoc:t.minLoc,includeTests:t.includeTests,includeMembers:t.includeMembers,isIgnoredPath:a=>e.isIgnored(a),isExcludedRegion:n}).accepted&&r.push(o)}finally{fo(e,i,{definitions:!0})}return r}function uy(e,t){return e.map(n=>my(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 my(e,t){let n=t.get(e.symbolId)??new Map,r=nl(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 dy(e,t){let n=[],r=0,i=0,o=0;for(let s of t){if(e.isIgnored(s.relative_path)||le(e,s.relative_path)||ne(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 py(e,t,n,r){if(t.length===0)return;let i=new L(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 T(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)&&(yy(e,c)||Wr(n,c.target.symbolId,c.sourceFile,by(c),"source-fallback"))})}function fy(e,t,n,r){if(t.length===0)return;let i=new L(e),o=gy(t),s=new Set(i.sourceFiles());for(let u of T(e))s.add(u);let a=new Set(o.keys()),c=new Map,l=u=>{let m=c.get(u);return m||(m=Hr(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?hy(u,m,p,l(u),{permissive:d!=="cross-language-dispatch"}):[]},afterPath:u=>{c.delete(u),fo(e,u)}},u=>{let m=u.kind==="identifier"&&u.sourceFile===u.target.relativePath?Math.max(0,u.occurrences-1):u.occurrences;u.kind==="identifier"&&ol(e,{sourceFile:u.sourceFile,name:u.name,target:u.target,occurrences:m})||Wr(n,u.target.symbolId,u.sourceFile,m,"source-fallback")})}function gy(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 hy(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=>ut(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=>ut(c,u.relativePath));if(l.length>0&&l.length===n.length)return l}return i.permissive?[...n]:[]}function yy(e,t){return t.kind==="cross-language-dispatch"&&t.target.relativePath===t.sourceFile?!0:t.kind==="identifier"&&ol(e,t)}function by(e){return e.kind==="identifier"&&e.target.relativePath===e.sourceFile?Math.max(0,e.occurrences-1):e.occurrences}function ol(e,t){return t.occurrences>1?!1:te(e,t.sourceFile).some(n=>n.used||n.sourcePath!==t.target.relativePath?!1:n.importedName===t.name||n.localName===t.name)}function Sy(e,t,n,r){for(let i of t){let o=Re(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&&!go(a)||rl(n,i.symbolId,a,1,"caller-map")}}}function yo(e,t={}){let{limit:n=30,scope:r}=t,i=r?`AND def_d.relative_path LIKE '%${r}%'`:"",s=e.all(`SELECT
358
321
  gs.symbol,
359
322
  COUNT(*) AS ref_count,
360
323
  COUNT(DISTINCT ref_d.id) AS file_count,
@@ -377,14 +340,14 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
377
340
  ${i}
378
341
  GROUP BY gs.id
379
342
  ORDER BY ref_count DESC
380
- LIMIT ?`,n).filter(a=>!e.isIgnored(a.defined_in)).map(a=>({symbol:a.symbol,shortName:h(a.symbol),refCount:a.ref_count,fileCount:a.file_count,definedIn:a.defined_in}));return s.length>0?s:yh(e,r,n)}function yh(e,t,n){return Ee(e,{scope:t}).filter(r=>!e.isIgnored(r.relativePath)).map(r=>bh(e,r)).filter(r=>r.refCount>0).sort((r,i)=>i.refCount-r.refCount||i.fileCount-r.fileCount).slice(0,n)}function bh(e,t){let n=ye(e,t,{limit:500});return{symbol:t.symbol,shortName:h(t.symbol),refCount:n.length,fileCount:new Set(n.map(r=>r.file)).size,definedIn:t.relativePath}}function to(e,t,n={}){return qc(e,t,n)?.map(r=>({symbol:r.symbol,shortName:r.shortName,fromFile:r.fromFile}))??[]}function no(e,t){let n=Sh(e,t);return n.length>0?n:xh(e,t)}function ro(e,t,n={}){return qc(e,t,n)?.filter(r=>!r.used).map(r=>({symbol:r.symbol,shortName:r.shortName,importedIn:r.importer}))??[]}function Sh(e,t){return e.all(`SELECT DISTINCT gs.symbol, d.relative_path AS importer
343
+ 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:xy(e,r,n)}function xy(e,t,n){return Me(e,{scope:t}).filter(r=>!e.isIgnored(r.relativePath)).map(r=>Cy(e,r)).filter(r=>r.refCount>0).sort((r,i)=>i.refCount-r.refCount||i.fileCount-r.fileCount).slice(0,n)}function Cy(e,t){let n=Re(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 bo(e,t,n={}){return al(e,t,n)?.map(r=>({symbol:r.symbol,shortName:r.shortName,fromFile:r.fromFile}))??[]}function So(e,t){let n=Ry(e,t);return n.length>0?n:Iy(e,t)}function xo(e,t,n={}){return al(e,t,n)?.filter(r=>!r.used).map(r=>({symbol:r.symbol,shortName:r.shortName,importedIn:r.importer}))??[]}function Ry(e,t){return e.all(`SELECT DISTINCT gs.symbol, d.relative_path AS importer
381
344
  FROM mentions m
382
345
  JOIN chunks c ON m.chunk_id = c.id
383
346
  JOIN documents d ON c.document_id = d.id
384
347
  JOIN global_symbols gs ON m.symbol_id = gs.id
385
348
  WHERE gs.symbol LIKE ?
386
349
  AND m.role = 2
387
- ORDER BY d.relative_path`,`%${t}%`).filter(r=>!e.isIgnored(r.importer)).map(r=>({symbol:r.symbol,shortName:h(r.symbol),fromFile:r.importer}))}function xh(e,t){let n=w(e,t),r=n?.relativePath??null,i=n?L(n.symbol):t.replace(/\(\)$/,""),o=n?We(n.symbol):!1,s=new Set;for(let a of k(e,{includeIgnored:!1}))for(let c of X(e,a))Ch(c,a,{targetFile:r,targetLeaf:i,targetIsModule:o})&&s.add(a);return[...s].sort().map(a=>({symbol:n?.symbol??i,shortName:n?h(n.symbol):i,fromFile:a}))}function Ch(e,t,n){return!e.sourcePath||n.targetFile&&Wc(e.sourcePath)!==Wc(n.targetFile)?!1:e.kind==="side-effect"||n.targetFile&&vh(t)||n.targetIsModule||e.kind==="named"&&e.importedName===n.targetLeaf?!0:e.kind==="namespace"&&e.usedMembers.includes(n.targetLeaf)}function qc(e,t,n={}){let r=re(e,t);return r?Rh(e,r,n)??(n.semantic===!1?null:Ih(e,r))??_h(e,r):null}function Rh(e,t,n){let i=e.all(`SELECT DISTINCT
350
+ 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 Iy(e,t){let n=F(e,t),r=n?.relativePath??null,i=n?P(n.symbol):t.replace(/\(\)$/,""),o=n?it(n.symbol):!1,s=new Set;for(let a of T(e,{includeIgnored:!1}))for(let c of te(e,a))vy(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 vy(e,t,n){return!e.sourcePath||n.targetFile&&sl(e.sourcePath)!==sl(n.targetFile)?!1:e.kind==="side-effect"||n.targetFile&&_y(t)||n.targetIsModule||e.kind==="named"&&e.importedName===n.targetLeaf?!0:e.kind==="namespace"&&e.usedMembers.includes(n.targetLeaf)}function al(e,t,n={}){let r=me(e,t);return r?Dy(e,r,n)??(n.semantic===!1?null:Ny(e,r))??Ly(e,r):null}function Dy(e,t,n){let i=e.all(`SELECT DISTINCT
388
351
  gs.symbol,
389
352
  def_d.relative_path AS from_file,
390
353
  imp_d.relative_path AS importer,
@@ -410,11 +373,11 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
410
373
  LEFT JOIN documents def_d ON sym_def.document_id = def_d.id
411
374
  WHERE imp_d.relative_path = ?
412
375
  AND m.role = 2
413
- ORDER BY def_d.relative_path, gs.symbol`,t).filter(o=>!e.isIgnored(o.importer));if(i.length>0){let o=n.semantic===!1?[]:gn(e,t);return i.map(s=>({symbol:s.symbol,shortName:h(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 Ih(e,t){let n=gn(e,t);return n.length>0?n.map(r=>{let i=Uc(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 _h(e,t){return X(e,t).map(n=>{let r=Uc(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 Uc(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 Wc(e){return e.replace(/\\/g,"/")}function vh(e){return/\.(?:c|h|cc|cpp|cxx|hpp|hh|hxx)$/i.test(e)}function io(e,t){let n=Ue(e,t),r=Pt(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,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&&!Ms(d.symbol,l.symbol))continue;let y=d.endLine-d.startLine;y<m&&(m=y,u=d)}u?u.children.push(l):s.push(l)}return s}function oo(e,t){let n=w(e,t);return n?new v(e).definitionsForFile(n.relativePath).filter(i=>i.symbol!==n.symbol).filter(i=>Ts(n.symbol,i.symbol)).sort((i,o)=>i.startLine-o.startLine||i.endLine-o.endLine).map(i=>({symbol:i.symbol,shortName:h(i.symbol),startLine:i.startLine,endLine:i.endLine,kind:Y(i.symbol)??"unknown"})):[]}function so(e,t){let n=w(e,t);if(!n)return[];let r=e.get(`SELECT COUNT(DISTINCT c.document_id) AS file_count
376
+ ORDER BY def_d.relative_path, gs.symbol`,t).filter(o=>!e.isIgnored(o.importer));if(i.length>0){let o=n.semantic===!1?[]:Tn(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 Ny(e,t){let n=Tn(e,t);return n.length>0?n.map(r=>{let i=cl(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 Ly(e,t){return te(e,t).map(n=>{let r=cl(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 cl(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 sl(e){return e.replace(/\\/g,"/")}function _y(e){return/\.(?:c|h|cc|cpp|cxx|hpp|hh|hxx)$/i.test(e)}function Co(e,t){let n=nn(e,t),r=pr(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&&!Ca(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 Ro(e,t){let n=F(e,t);return n?new L(e).definitionsForFile(n.relativePath).filter(i=>i.symbol!==n.symbol).filter(i=>xa(n.symbol,i.symbol)).sort((i,o)=>i.startLine-o.startLine||i.endLine-o.endLine).map(i=>({symbol:i.symbol,shortName:b(i.symbol),startLine:i.startLine,endLine:i.endLine,kind:ee(i.symbol)??"unknown"})):[]}function Io(e,t){let n=F(e,t);if(!n)return[];let r=e.get(`SELECT COUNT(DISTINCT c.document_id) AS file_count
414
377
  FROM mentions m
415
378
  JOIN chunks c ON m.chunk_id = c.id
416
379
  WHERE m.symbol_id = ?
417
- AND m.role != 1`,n.symbolId);return[{name:h(n.symbol),count:r?.file_count??0}]}function ao(e,t){let n=re(e,t);if(!n)return[];let i=e.all(`SELECT d.relative_path, COUNT(DISTINCT gs.id) AS symbol_count
380
+ AND m.role != 1`,n.symbolId);return[{name:b(n.symbol),count:r?.file_count??0}]}function vo(e,t){let n=me(e,t);if(!n)return[];let i=e.all(`SELECT d.relative_path, COUNT(DISTINCT gs.id) AS symbol_count
418
381
  FROM mentions m
419
382
  JOIN chunks c ON m.chunk_id = c.id
420
383
  JOIN documents d ON c.document_id = d.id
@@ -431,7 +394,7 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
431
394
  AND m.role != 1
432
395
  AND def_d.id != d.id
433
396
  GROUP BY d.id
434
- 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=se(e).get(n);return!s||s.size===0?[]:[{name:n,count:s.size}]}function co(e,t={}){return Dh(e,t).map(n=>({name:h(n.symbol),count:n.file_count}))}function Dh(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
397
+ 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=oe(e).get(n);return!s||s.size===0?[]:[{name:n,count:s.size}]}function Do(e,t={}){return wy(e,t).map(n=>({name:b(n.symbol),count:n.file_count}))}function wy(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
435
398
  FROM mentions m
436
399
  JOIN chunks c ON m.chunk_id = c.id
437
400
  JOIN global_symbols gs ON m.symbol_id = gs.id
@@ -450,7 +413,7 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
450
413
  GROUP BY gs.id
451
414
  HAVING file_count > 1
452
415
  ORDER BY file_count DESC
453
- LIMIT ?`,n)}function lo(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
416
+ LIMIT ?`,n)}function No(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
454
417
  FROM mentions m
455
418
  JOIN chunks c ON m.chunk_id = c.id
456
419
  JOIN documents d ON c.document_id = d.id
@@ -470,7 +433,7 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
470
433
  ${i}
471
434
  GROUP BY d.id
472
435
  ORDER BY symbol_count DESC
473
- LIMIT ?`,n).filter(s=>!e.isIgnored(s.relative_path)).map(s=>({name:s.relative_path,count:s.symbol_count}))}function uo(e,t,n){let r=re(e,t)??t,i=re(e,n)??n,o=e.get(`SELECT COUNT(DISTINCT gs.id) AS shared
436
+ LIMIT ?`,n).filter(s=>!e.isIgnored(s.relative_path)).map(s=>({name:s.relative_path,count:s.symbol_count}))}function Lo(e,t,n){let r=me(e,t)??t,i=me(e,n)??n,o=e.get(`SELECT COUNT(DISTINCT gs.id) AS shared
474
437
  FROM global_symbols gs
475
438
  WHERE (
476
439
  -- Defined in file1, referenced in file2
@@ -502,7 +465,7 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
502
465
  JOIN documents d ON c.document_id = d.id
503
466
  WHERE m.symbol_id = gs.id AND m.role != 1 AND d.relative_path = ?
504
467
  )
505
- )`,r,i,i,r);return{file1:r,file2:i,sharedSymbols:o?.shared??0}}function mo(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
468
+ )`,r,i,i,r);return{file1:r,file2:i,sharedSymbols:o?.shared??0}}function _o(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
506
469
  def_d.relative_path AS file1,
507
470
  ref_d.relative_path AS file2,
508
471
  COUNT(DISTINCT gs.id) AS shared
@@ -524,12 +487,12 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
524
487
  ${i}
525
488
  GROUP BY def_d.id, ref_d.id
526
489
  ORDER BY shared DESC
527
- LIMIT ?`,n).filter(s=>!e.isIgnored(s.file1)&&!e.isIgnored(s.file2)).map(s=>({file1:s.file1,file2:s.file2,sharedSymbols:s.shared}))}function Sn(e,t={}){let{scope:n,maxDepth:r=10}=t,i=se(e,n),o=[],s=new Set,a=new Set,c=[];function l(m,d){if(d>r)return;if(a.has(m)){let y=c.indexOf(m);if(y!==-1){let f=c.slice(y).concat(m),b=f.indexOf(f.reduce(($,O)=>$<O?$:O)),E=[...f.slice(b,-1),...f.slice(0,b),f[b]],x=E.join(" -> ");u.has(x)||(u.add(x),o.push({path:E,kind:Nh(E)}))}return}if(s.has(m))return;s.add(m),a.add(m),c.push(m);let p=i.get(m);if(p)for(let y of p)l(y,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 Nh(e){for(let r of e){let i=ue(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":or(t)||or(n)||Jc(t,n)||Jc(n,t)||zc(t,n)||zc(n,t)||ue(t)==="entry"||ue(n)==="entry"?"module-hierarchy":"real"}function Jc(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 zc(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 po(e,t={}){let{limit:n=20,scope:r,minFanIn:i=2,minFanOut:o=2,scanLimit:s}=t,a=new v(e);return ee(a.productionCallableDefinitions({scope:r,requireCallableSymbol:!0,includeSuppressed:!0,sortByLocDesc:typeof s=="number"&&s>0}),s).map(u=>Lh(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 Lh(e,t,n){let r=new Set(ye(e,t,{limit:500,semantic:n}).map(o=>o.file)).size,i=new Set(me(e,t,{limit:500,semantic:n}).filter(o=>o.file!==t.relativePath).map(o=>`${o.symbol}|${o.file}`)).size;return{symbol:t.symbol,shortName:h(t.symbol),fanIn:r,fanOut:i,score:r*i,definedIn:t.relativePath}}function xn(e,t={}){let{scope:n,minLoc:r=3,scanLimit:i}=t,o=new v(e),s=t.semantic!==!1,a=ee(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)),y=o.symbolsWithNonSelfCallees(p,{additive:!0,semantic:s});for(let f of y)u.add(f);return p.filter(f=>!u.has(f.symbolId)).sort((f,b)=>j(b)-j(f)||f.relativePath.localeCompare(b.relativePath)||f.startLine-b.startLine).map(f=>({symbol:f.symbol,shortName:h(f.symbol),relativePath:f.relativePath,startLine:f.startLine,endLine:f.endLine,loc:j(f)}))}var go={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"},fo=new Map;for(let[e,t]of Object.entries(go))fo.set(t.toLowerCase(),Number(e));function Eh(e){let t=parseInt(e,10);if(!isNaN(t))return t;let n=e.toLowerCase(),r=fo.get(n);if(r!==void 0)return r;for(let[i,o]of fo)if(i.includes(n))return o;return null}function ho(e,t,n={}){let{scope:r,limit:i=100}=n,o=Eh(t);return o===null?[]:Gc(e,r).map(a=>({row:a,resolvedKind:Qc(a)})).filter(a=>a.resolvedKind===o).slice(0,i).map(({row:a,resolvedKind:c})=>({symbol:a.symbol,shortName:h(a.symbol),kind:c,kindName:go[c]??"Unknown",relativePath:a.relative_path,startLine:a.start_line,endLine:a.end_line}))}function yo(e,t={}){let n=new Map;for(let r of Gc(e,t.scope)){let i=Qc(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:go[r]??"Unknown",count:i}))}function Gc(e,t){return Ee(e,{scope:t}).map(wh)}function wh(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 Qc(e){return e.kind!==null&&e.kind!==0?kh(e.kind,e.symbol,e.documentation):Ph(e.symbol,e.documentation,e.enclosing_symbol)}function kh(e,t,n){let r=(n??"").toLowerCase();if(Y(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 Ph(e,t,n){let r=K(e);if("kind"in r)return null;let i=r.descriptors,o=i[i.length-2]??null,s=Y(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?Y(n):o?.suffix??null)==="type"?21:83}function bo(e,t={}){let{limit:n=10,scope:r,minDepth:i=3}=t,o=se(e,r),s=new Map,a=[],c=new Map,l=new Map,u=new Set,m=[],d=0;for(let I of o.keys()){if(c.has(I))continue;let _=[],G=(o.get(I)??new Set).values();for(c.set(I,d),l.set(I,d),d+=1,m.push(I),u.add(I),_.push({node:I,iter:G,pendingChild:null});_.length>0;){let A=_[_.length-1];if(A.pendingChild!==null){let vt=A.pendingChild;A.pendingChild=null,l.set(A.node,Math.min(l.get(A.node),l.get(vt)))}let De=A.iter.next();if(De.done){if(l.get(A.node)===c.get(A.node)){let vt=[];for(;;){let An=m.pop();if(u.delete(An),vt.push(An),s.set(An,a.length),An===A.node)break}a.push(vt)}_.pop();continue}let Ne=De.value;if(c.has(Ne))u.has(Ne)&&l.set(A.node,Math.min(l.get(A.node),c.get(Ne)));else{c.set(Ne,d),l.set(Ne,d),d+=1,m.push(Ne),u.add(Ne);let vt=(o.get(Ne)??new Set).values();A.pendingChild=Ne,_.push({node:Ne,iter:vt,pendingChild:null})}}}let p=new Map,y=new Array(a.length);for(let I=0;I<a.length;I++)y[I]=a[I].length,p.set(I,new Set);for(let[I,_]of o){let G=s.get(I);for(let A of _){let De=s.get(A);De!==G&&p.get(G).add(De)}}let f=new Array(a.length),b=new Array(a.length);for(let I=0;I<a.length;I++){let _=[],G=0;for(let A of p.get(I)){let De=b[A];De>G&&(G=De,_=f[A])}f[I]=[I,..._],b[I]=y[I]+G}function E(I){return f[I]}let x=a.map(I=>[...I].sort()),$=new Set,O=[];for(let I=0;I<a.length;I++){let _=E(I),G=[];for(let De of _)G.push(...x[De]);if(G.length<i)continue;let A=G.join(" ");$.has(A)||($.add(A),O.push({chain:G,depth:G.length}))}return O.sort((I,_)=>_.depth-I.depth),O.slice(0,n)}function So(e,t){let n=w(e,t);if(!n)return[];let r=e.get(`SELECT symbol, enclosing_symbol FROM global_symbols
528
- WHERE id = ? LIMIT 1`,n.symbolId);if(!r)return[];let i=[{symbol:r.symbol,shortName:h(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:h(m.symbol),depth:s}),o=m.enclosing_symbol,s++}if(i.length>1)return i;let c=K(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 y=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:y,shortName:y,depth:d})}return u}function xo(e,t,n={}){let r=w(e,t);if(!r)return null;let i=n.semantic!==!1,o=ye(e,r,{limit:50,semantic:i}),s=qt(me(e,r,{limit:50,additive:!0,callableOnly:!0,semantic:i}));return{symbol:r.symbol,shortName:h(r.symbol),callers:o.map(a=>({symbol:a.symbol,shortName:h(a.symbol),file:a.file})),callees:s.map(a=>({symbol:a.symbol,shortName:h(a.symbol),file:a.file}))}}function Cn(e,t){let n=new Set;for(let r of e)t.has(r)&&n.add(r);return n}function Rn(e,t){let n=new Set;for(let r of e)t.has(r)||n.add(r);return n}function Kc(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 Co(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 Th(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 Yc(e,t,n){let r=Cn(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 y=n.get(p)??0,f=e.has(p)?y:0,b=t.has(p)?y:0;i+=f*b,o+=f*f,s+=b*b}let c=Math.sqrt(o)*Math.sqrt(s),l=c>0?i/c:0,u=Th(n),m=[],d=[];for(let p of r)(n.get(p)??0)>=u?m.push(p):d.push(p);return m.sort((p,y)=>(n.get(y)??0)-(n.get(p)??0)),{similarity:l,significantShared:m,trivialShared:d}}function Ro(e,t,n={}){let{minSimilarity:r=.4,limit:i=20}=n,o=Fh(e,t,{semantic:n.semantic!==!1});if(!o)return[];if(!Q(o.symbol))return[];let s=Mh(e,o,r,{scanLimit:n.scanLimit,semantic:n.semantic!==!1});return s.length>0?s.slice(0,i):$h(e,t,{minSimilarity:r,limit:i})}function Mh(e,t,n,r){let i=Zc(e,{minCallees:3,excludeSymbol:t.symbol,scanLimit:r.scanLimit,semantic:r.semantic}),o=Co([t,...i].map(a=>a.callees)),s=[];for(let a of i){if(a.callees.size<3)continue;let c=Xc(t,a,o,{minSimilarity:n,requireSignificantShared:1,requireSharedCount:0});c&&s.push(c)}return s.sort((a,c)=>c.similarity-a.similarity),s}function Xc(e,t,n,r){let{similarity:i,significantShared:o}=Yc(e.callees,t.callees,n);if(i<r.minSimilarity)return null;let s=Cn(e.callees,t.callees).size;if(o.length<r.requireSignificantShared&&s<r.requireSharedCount)return null;let a=o.length>0?o:[...Cn(e.callees,t.callees)];return{symbolA:e.symbol,shortNameA:h(e.symbol),fileA:e.file,symbolB:t.symbol,shortNameB:h(t.symbol),fileB:t.file,similarity:i,similarityBasis:"callees",sharedCallees:a.map(h),uniqueToA:[...Rn(e.callees,t.callees)].map(h),uniqueToB:[...Rn(t.callees,e.callees)].map(h)}}function _n(e,t={}){let{minSimilarity:n=.5,limit:r=20,scope:i,minCallees:o=4,crossFileOnly:s=!1,scanLimit:a}=t,c=Zc(e,{minCallees:o,scope:i,scanLimit:a,semantic:t.semantic!==!1}),l=Co(c.map(f=>f.callees)),u=new Map;for(let f of c)for(let b of f.callees)u.set(b,(u.get(b)??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 b of c[f].callees){if((u.get(b)??0)>m)continue;let E=d.get(b);E||(E=[],d.set(b,E)),E.push(f)}let p=[],y=new Set;e:for(let f=0;f<c.length;f+=1){let b=c[f],E=new Set;for(let x of b.callees){let $=d.get(x);if($)for(let O of $)O>f&&E.add(O)}for(let x of E){let $=`${f}|${x}`;if(y.has($))continue;y.add($);let O=c[x];if(s&&b.file===O.file)continue;if(b.paramCount>=0&&O.paramCount>=0){let _=Math.abs(b.paramCount-O.paramCount),G=Math.max(2,Math.ceil(Math.max(b.paramCount,O.paramCount)*.5));if(_>G)continue}let I=Xc(b,O,l,{minSimilarity:n,requireSignificantShared:2,requireSharedCount:4});if(I&&(p.push(I),p.length>r*5))break e}}return p.sort((f,b)=>b.similarity-f.similarity),p.slice(0,r)}var Oh=["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 Fh(e,t,n){let r=w(e,t),i=new v(e);if(!r)return null;let o=me(e,r,{semantic:n.semantic});return{symbol:r.symbol,file:r.relativePath,callees:el(o.map(s=>s.symbol)),paramCount:i.callableSignature(r)?.paramCount??-1}}function Zc(e,t){let{minCallees:n,scope:r,excludeSymbol:i,scanLimit:o}=t,s=new v(e),a=ee(s.productionCallableDefinitions({scope:r,minLoc:5,excludeSymbol:i,sortByLocDesc:typeof o=="number"&&o>0}),o),c=s.calleeMap(a,{semantic:t.semantic!==!1});return a.map(l=>({symbol:l.symbol,file:l.relativePath,callees:el((c.get(l.symbolId)??[]).map(u=>u.symbol)),paramCount:s.callableSignature(l)?.paramCount??-1})).filter(l=>l.callees.size>=n)}function el(e){return new Set([...e].filter(t=>!Ah(t)))}function Ah(e){return Oh.some(t=>e.includes(t))}function $h(e,t,n){let r=jh(e,t);if(!r||r.tokens.size<3)return[];let i=n.minSimilarity>=.5?n.minSimilarity:.3,o=[];for(let s of Hh(e)){if(s.symbol===r.symbol||s.tokens.size<3)continue;let a=Cn(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:h(r.symbol),fileA:r.file,symbolB:s.symbol,shortNameB:h(s.symbol),fileB:s.file,similarity:l,similarityBasis:"source-tokens",sharedCallees:[...a].sort(),uniqueToA:[...Rn(r.tokens,s.tokens)].sort(),uniqueToB:[...Rn(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 jh(e,t){let n=w(e,t);if(!n||!Q(n.symbol))return null;let r=Bh(e,n);return r?{symbol:n.symbol,file:n.relativePath,tokens:r}:null}function Bh(e,t){let n=L(t.symbol),r=tl(e,t.relativePath,t.startLine,t.endLine,n),i=nl(r,n);return i.size>0?i:null}function Hh(e){let t=new v(e);return t.scopedDefinitions().filter(n=>n.isFunctionLike).filter(n=>t.fileKind(n.relativePath)!=="test").filter(n=>!qe(n.symbol)).map(n=>({symbol:n.symbol,file:n.relativePath,tokens:nl(tl(e,n.relativePath,n.startLine,n.endLine,n.leaf),n.leaf)})).filter(n=>n.tokens.size>0)}function tl(e,t,n,r,i){let o=T(e,t);if(!o)return"";let s=o.split(`
490
+ LIMIT ?`,n).filter(s=>!e.isIgnored(s.file1)&&!e.isIgnored(s.file2)).map(s=>({file1:s.file1,file2:s.file2,sharedSymbols:s.shared}))}function Et(e,t={}){let{scope:n,maxDepth:r=10}=t,i=oe(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((N,I)=>N<I?N:I)),C=[...f.slice(y,-1),...f.slice(0,y),f[y]],E=C.join(" -> ");u.has(E)||(u.add(E),o.push({path:C,kind:Ey(C)}))}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 Ey(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":Er(t)||Er(n)||ll(t,n)||ll(n,t)||ul(t,n)||ul(n,t)||G(t)==="entry"||G(n)==="entry"?"module-hierarchy":"real"}function ll(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 ul(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 wo(e,t={}){let{limit:n=20,scope:r,minFanIn:i=2,minFanOut:o=2,scanLimit:s}=t,a=new L(e);return Ie(a.productionCallableDefinitions({scope:r,requireCallableSymbol:!0,includeSuppressed:!0,sortByLocDesc:typeof s=="number"&&s>0}),s).map(u=>ky(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 ky(e,t,n){let r=new Set(Re(e,t,{limit:500,semantic:n}).map(o=>o.file)).size,i=new Set(he(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 kt(e,t={}){let{scope:n,minLoc:r=3,scanLimit:i}=t,o=new L(e),s=t.semantic!==!1,a=Ie(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)=>B(y)-B(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:B(f)}))}var ko={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"},Eo=new Map;for(let[e,t]of Object.entries(ko))Eo.set(t.toLowerCase(),Number(e));function Py(e){let t=parseInt(e,10);if(!isNaN(t))return t;let n=e.toLowerCase(),r=Eo.get(n);if(r!==void 0)return r;for(let[i,o]of Eo)if(i.includes(n))return o;return null}function Po(e,t,n={}){let{scope:r,limit:i=100}=n,o=Py(t);return o===null?[]:ml(e,r).map(a=>({row:a,resolvedKind:dl(a)})).filter(a=>a.resolvedKind===o).slice(0,i).map(({row:a,resolvedKind:c})=>({symbol:a.symbol,shortName:b(a.symbol),kind:c,kindName:ko[c]??"Unknown",relativePath:a.relative_path,startLine:a.start_line,endLine:a.end_line}))}function Fo(e,t={}){let n=new Map;for(let r of ml(e,t.scope)){let i=dl(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:ko[r]??"Unknown",count:i}))}function ml(e,t){return Me(e,{scope:t}).map(Fy)}function Fy(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 dl(e){return e.kind!==null&&e.kind!==0?Ty(e.kind,e.symbol,e.documentation):Ay(e.symbol,e.documentation,e.enclosing_symbol)}function Ty(e,t,n){let r=(n??"").toLowerCase();if(ee(t)==="type"){if(r.includes("type "))return 76;if(r.includes("interface "))return 27;if(r.includes("struct "))return 68;if(r.includes("trait "))return 73;if(r.includes("class "))return 9}return e}function Ay(e,t,n){let r=Z(e);if("kind"in r)return null;let i=r.descriptors,o=i[i.length-2]??null,s=ee(e),a=(t??"").toLowerCase();return s==="type"?a.includes("type ")?76:a.includes("interface ")?27:a.includes("struct ")?68:a.includes("trait ")?73:(a.includes("class "),9):s==="method"?o?.suffix==="type"?33:23:s==="namespace"?39:s!=="term"?null:a.includes("async def ")||a.includes("def ")?23:(n?ee(n):o?.suffix??null)==="type"?21:83}function To(e,t={}){let{limit:n=10,scope:r,minDepth:i=3}=t,o=oe(e,r),s=new Map,a=[],c=new Map,l=new Map,u=new Set,m=[],d=0;for(let v of o.keys()){if(c.has(v))continue;let w=[],V=(o.get(v)??new Set).values();for(c.set(v,d),l.set(v,d),d+=1,m.push(v),u.add(v),w.push({node:v,iter:V,pendingChild:null});w.length>0;){let O=w[w.length-1];if(O.pendingChild!==null){let Jt=O.pendingChild;O.pendingChild=null,l.set(O.node,Math.min(l.get(O.node),l.get(Jt)))}let Fe=O.iter.next();if(Fe.done){if(l.get(O.node)===c.get(O.node)){let Jt=[];for(;;){let lr=m.pop();if(u.delete(lr),Jt.push(lr),s.set(lr,a.length),lr===O.node)break}a.push(Jt)}w.pop();continue}let Te=Fe.value;if(c.has(Te))u.has(Te)&&l.set(O.node,Math.min(l.get(O.node),c.get(Te)));else{c.set(Te,d),l.set(Te,d),d+=1,m.push(Te),u.add(Te);let Jt=(o.get(Te)??new Set).values();O.pendingChild=Te,w.push({node:Te,iter:Jt,pendingChild:null})}}}let p=new Map,h=new Array(a.length);for(let v=0;v<a.length;v++)h[v]=a[v].length,p.set(v,new Set);for(let[v,w]of o){let V=s.get(v);for(let O of w){let Fe=s.get(O);Fe!==V&&p.get(V).add(Fe)}}let f=new Array(a.length),y=new Array(a.length);for(let v=0;v<a.length;v++){let w=[],V=0;for(let O of p.get(v)){let Fe=y[O];Fe>V&&(V=Fe,w=f[O])}f[v]=[v,...w],y[v]=h[v]+V}function C(v){return f[v]}let E=a.map(v=>[...v].sort()),N=new Set,I=[];for(let v=0;v<a.length;v++){let w=C(v),V=[];for(let Fe of w)V.push(...E[Fe]);if(V.length<i)continue;let O=V.join(" ");N.has(O)||(N.add(O),I.push({chain:V,depth:V.length}))}return I.sort((v,w)=>w.depth-v.depth),I.slice(0,n)}function Ao(e,t){let n=F(e,t);if(!n)return[];let r=e.get(`SELECT symbol, enclosing_symbol FROM global_symbols
491
+ WHERE id = ? LIMIT 1`,n.symbolId);if(!r)return[];let i=[{symbol:r.symbol,shortName:b(r.symbol),depth:0}],o=r.enclosing_symbol,s=1,a=new Set([r.symbol]);for(;o&&!a.has(o)&&s<20;){a.add(o);let 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=Z(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 qn(e,t,n={}){let r=F(e,t);if(!r)return null;let i=n.semantic!==!1,o=Re(e,r,{limit:50,semantic:i}),s=dn(he(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 Vn(e,t){let n=new Set;for(let r of e)t.has(r)&&n.add(r);return n}function Wn(e,t){let n=new Set;for(let r of e)t.has(r)||n.add(r);return n}function pl(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 Mo(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 My(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 fl(e,t,n){let r=Vn(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=My(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 Gn(e,t,n={}){let{minSimilarity:r=.4,limit:i=20}=n,o=jy(e,t,{semantic:n.semantic!==!1});if(!o)return[];if(!Y(o.symbol))return[];let s=Oy(e,o,r,{scanLimit:n.scanLimit,semantic:n.semantic!==!1});return s.length>0?s.slice(0,i):Hy(e,t,{minSimilarity:r,limit:i})}function Oy(e,t,n,r){let i=hl(e,{minCallees:3,excludeSymbol:t.symbol,scanLimit:r.scanLimit,semantic:r.semantic}),o=Mo([t,...i].map(a=>a.callees)),s=[];for(let a of i){if(a.callees.size<3)continue;let c=gl(t,a,o,{minSimilarity:n,requireSignificantShared:1,requireSharedCount:0});c&&s.push(c)}return s.sort((a,c)=>c.similarity-a.similarity),s}function gl(e,t,n,r){let{similarity:i,significantShared:o}=fl(e.callees,t.callees,n);if(i<r.minSimilarity)return null;let s=Vn(e.callees,t.callees).size;if(o.length<r.requireSignificantShared&&s<r.requireSharedCount)return null;let a=o.length>0?o:[...Vn(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:[...Wn(e.callees,t.callees)].map(b),uniqueToB:[...Wn(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=hl(e,{minCallees:o,scope:i,scanLimit:a,semantic:t.semantic!==!1}),l=Mo(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 C=d.get(y);C||(C=[],d.set(y,C)),C.push(f)}let p=[],h=new Set;e:for(let f=0;f<c.length;f+=1){let y=c[f],C=new Set;for(let E of y.callees){let N=d.get(E);if(N)for(let I of N)I>f&&C.add(I)}for(let E of C){let N=`${f}|${E}`;if(h.has(N))continue;h.add(N);let I=c[E];if(s&&y.file===I.file)continue;if(y.paramCount>=0&&I.paramCount>=0){let w=Math.abs(y.paramCount-I.paramCount),V=Math.max(2,Math.ceil(Math.max(y.paramCount,I.paramCount)*.5));if(w>V)continue}let v=gl(y,I,l,{minSimilarity:n,requireSignificantShared:2,requireSharedCount:4});if(v&&(p.push(v),p.length>r*5))break e}}return p.sort((f,y)=>y.similarity-f.similarity),p.slice(0,r)}var $y=["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 jy(e,t,n){let r=F(e,t),i=new L(e);if(!r)return null;let o=he(e,r,{semantic:n.semantic});return{symbol:r.symbol,file:r.relativePath,callees:yl(o.map(s=>s.symbol)),paramCount:i.callableSignature(r)?.paramCount??-1}}function hl(e,t){let{minCallees:n,scope:r,excludeSymbol:i,scanLimit:o}=t,s=new L(e),a=Ie(s.productionCallableDefinitions({scope:r,minLoc:5,excludeSymbol:i,sortByLocDesc:typeof o=="number"&&o>0}),o),c=s.calleeMap(a,{semantic:t.semantic!==!1});return a.map(l=>({symbol:l.symbol,file:l.relativePath,callees:yl((c.get(l.symbolId)??[]).map(u=>u.symbol)),paramCount:s.callableSignature(l)?.paramCount??-1})).filter(l=>l.callees.size>=n)}function yl(e){return new Set([...e].filter(t=>!By(t)))}function By(e){return $y.some(t=>e.includes(t))}function Hy(e,t,n){let r=qy(e,t);if(!r||r.tokens.size<3)return[];let i=n.minSimilarity>=.5?n.minSimilarity:.3,o=[];for(let s of Wy(e)){if(s.symbol===r.symbol||s.tokens.size<3)continue;let a=Vn(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:[...Wn(r.tokens,s.tokens)].sort(),uniqueToB:[...Wn(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 qy(e,t){let n=F(e,t);if(!n||!Y(n.symbol))return null;let r=Vy(e,n);return r?{symbol:n.symbol,file:n.relativePath,tokens:r}:null}function Vy(e,t){let n=P(t.symbol),r=bl(e,t.relativePath,t.startLine,t.endLine,n),i=Sl(r,n);return i.size>0?i:null}function Wy(e){return new L(e).productionCallableDefinitions().map(n=>({symbol:n.symbol,file:n.relativePath,tokens:Sl(bl(e,n.relativePath,n.startLine,n.endLine,n.leaf),n.leaf)})).filter(n=>n.tokens.size>0)}function bl(e,t,n,r,i){let o=A(e,t);if(!o)return"";let s=o.split(`
529
492
  `);if(r>=n&&r-n<=12)return s.slice(n,r+1).join(`
530
- `);let a=[new RegExp(`\\bdef\\s+${In(i)}\\b`),new RegExp(`\\bfun\\s+${In(i)}\\b`),new RegExp(`\\bfn\\s+${In(i)}\\b`),new RegExp(`\\bfunction\\s+${In(i)}\\b`),new RegExp(`\\b${In(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&&Wh(m)||(l=u,m.trim()===""&&u>c+1))break}return s.slice(c,l+1).join(`
493
+ `);let a=[new RegExp(`\\bdef\\s+${Un(i)}\\b`),new RegExp(`\\bfun\\s+${Un(i)}\\b`),new RegExp(`\\bfn\\s+${Un(i)}\\b`),new RegExp(`\\bfunction\\s+${Un(i)}\\b`),new RegExp(`\\b${Un(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&&Gy(m)||(l=u,m.trim()===""&&u>c+1))break}return s.slice(c,l+1).join(`
531
494
  `)}return s.slice(n,Math.min(s.length,n+8)).join(`
532
- `)}function nl(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=Vh(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 Vh(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 Wh(e){return/^\s*(?:def|fun|fn|function|class|trait|module|object|enum|interface|public|private|protected)\b/.test(e)}function In(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Io(e,t={}){let{minSimilarity:n=.5,limit:r=20,scope:i,filePattern:o}=t,s=t.minDeps??(o?1:3),a=qh(e,{scope:i,minDeps:s}),c=[];if(o){let l=a.find(u=>u.file.includes(o));if(!l)return[];for(let u of a){if(u.file===l.file)continue;let m=rl(l,u,n);m&&c.push(m)}}else for(let l=0;l<a.length;l++){for(let u=l+1;u<a.length;u++){let m=rl(a[l],a[u],n);m&&c.push(m)}if(c.length>r*5)break}return c.sort((l,u)=>u.similarity-l.similarity),c.slice(0,r)}function qh(e,t){let{scope:n,minDeps:r}=t,i=se(e,n),o=Uh(i),s=[];for(let[a,c]of i)c.size>=r&&s.push({file:a,deps:new Set([...c].filter(l=>!o.has(l)))});return s}function Uh(e){let t=new Set,n=e.size;if(n===0)return t;let r=new Map;for(let i of e.values())for(let o of i)r.set(o,(r.get(o)??0)+1);for(let[i,o]of r)o>=5&&o/n>.3&&t.add(i);return t}function rl(e,t,n){let r=new Set;for(let a of e.deps)t.deps.has(a)&&r.add(a);if(r.size<3||e.deps.size<4||t.deps.size<4)return null;let i=Kc(e.deps,t.deps);if(i<n)return null;let o=[];for(let a of e.deps)t.deps.has(a)||o.push(a);let s=[];for(let a of t.deps)e.deps.has(a)||s.push(a);return{fileA:e.file,fileB:t.file,similarity:i,sharedDeps:[...r],uniqueToA:o,uniqueToB:s}}function _o(e,t={}){let{minSimilarity:n=.5,limit:r=15,scope:i,minChainLength:o=3,maxChainLength:s=8}=t,a=se(e,i),c=Zh(a,o,s);if(c.length===0)return[];let l=Jh(c);return l.length<2?[]:Xh(Qh(l,n,r),r)}function Jh(e){let t=zh(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 zh(e){let{nodeFreq:t,tailFreq:n}=Gh(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 Gh(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 Qh(e,t,n){let r=[];for(let i=0;i<e.length;i++){for(let o=i+1;o<e.length;o++){let s=Kh(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 Kh(e,t,n){if(!Yh(e.filtered,t.filtered))return null;let{distance:r,ops:i}=ey(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:ty(e.original,t.original),commonSuffix:ny(e.original,t.original)}}function Yh(e,t){let n=new Set(e);return t.some(r=>n.has(r))}function Xh(e,t){let n=[];for(let r of e)if(n.some(o=>il(r.chainA,o.chainA)&&il(r.chainB,o.chainB))||n.push(r),n.length>=t)break;return n}function Zh(e,t,n){let r=[];for(let o of e.keys()){if(r.length>=500)break;ol(e,o,[o],new Set([o]),t,n,r,500)}return r}function ol(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),ol(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 ey(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 ty(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 ny(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 il(e,t){if(e.length>t.length)return!1;let n=t.join("\u2192"),r=e.join("\u2192");return n.includes(r)}function vn(e,t={}){let{scope:n,minLoc:r=10,minCallees:i=6,limit:o=20,scanLimit:s}=t,a=new v(e),c=a.productionCallableDefinitions({scope:n,minLoc:r,excludeTypesFiles:!0,requireFunctionLikeSymbol:!0,sortByLocDesc:!0}),l=ee(c,s),u=a.calleeMap(l,{semantic:t.semantic!==!1}),m=[];for(let d of l){let p=ry(d,u.get(d.symbolId)??[],i);p&&m.push(p)}return m.sort((d,p)=>p.clusters.length-d.clusters.length||p.loc-d.loc),m.slice(0,o)}function ry(e,t,n){let r=new Set(t.map(a=>a.symbol));if(r.size<n)return null;let i=iy(r,t),o=oy(r,i);if(o.length<2)return null;let s=sy(o,i);return s.length===0?null:{symbol:e.symbol,shortName:h(e.symbol),relativePath:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:j(e),totalCallees:r.size,clusters:s}}function iy(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 oy(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 sy(e,t){return e.filter(n=>n.size>=3).map(n=>ay(n,e,t)).filter(n=>n.isolation>.5).sort((n,r)=>r.isolation-n.isolation)}function ay(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(h),isolation:s}}function vo(e,t,n={}){let{maxDepth:r=5,scope:i}=n,o=w(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 cy(e,d,i)){let y=`${p.file}|${p.shortName}`;if(p.symbolId!==null){if(a.has(p.symbolId))continue;a.add(p.symbolId)}else if(c.has(y))continue;c.add(y),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 cy(e,t,n){let r=ye(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 ly(e,t,n)){if(i.has(l))continue;let u=W(e,l),m=u.length>0?de(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=Mt(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:h(l.symbol),file:l.file,symbolMatch:null});continue}if(u.symbolId===t.symbolId||e.isIgnored(u.relativePath)||!uy(u.symbol))continue;let m=`${u.symbolId}|${u.relativePath}`;c.has(m)||(c.add(m),a.push({symbolId:u.symbolId,symbol:u.symbol,shortName:h(u.symbol),file:u.relativePath,symbolMatch:u}))}return a}function ly(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
495
+ `)}function Sl(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=Uy(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 Uy(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 Gy(e){return/^\s*(?:def|fun|fn|function|class|trait|module|object|enum|interface|public|private|protected)\b/.test(e)}function Un(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Oo(e,t={}){let{minSimilarity:n=.5,limit:r=20,scope:i,filePattern:o}=t,s=t.minDeps??(o?1:3),{profiles:a,distinctiveDeps:c}=Jy(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=xl(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=xl(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 Jy(e,t){let{scope:n,minDeps:r}=t,i=oe(e,n),{universalDeps:o,distinctiveDeps:s}=zy(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 zy(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 xl(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=pl(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 $o(e,t={}){let{minSimilarity:n=.5,limit:r=15,scope:i,minChainLength:o=3,maxChainLength:s=8}=t,a=oe(e,i),c=nb(a,o,s);if(c.length===0)return[];let l=Qy(c);return l.length<2?[]:tb(Xy(l,n,r),r)}function Qy(e){let t=Ky(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 Ky(e){let{nodeFreq:t,tailFreq:n}=Yy(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 Yy(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 Xy(e,t,n){let r=[];for(let i=0;i<e.length;i++){for(let o=i+1;o<e.length;o++){let s=Zy(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 Zy(e,t,n){if(!eb(e.filtered,t.filtered))return null;let{distance:r,ops:i}=rb(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:ib(e.original,t.original),commonSuffix:ob(e.original,t.original)}}function eb(e,t){let n=new Set(e);return t.some(r=>n.has(r))}function tb(e,t){let n=[];for(let r of e)if(n.some(o=>Cl(r.chainA,o.chainA)&&Cl(r.chainB,o.chainB))||n.push(r),n.length>=t)break;return n}function nb(e,t,n){let r=[];for(let o of e.keys()){if(r.length>=500)break;Rl(e,o,[o],new Set([o]),t,n,r,500)}return r}function Rl(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),Rl(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 rb(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 ib(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 ob(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 Cl(e,t){if(e.length>t.length)return!1;let n=t.join("\u2192"),r=e.join("\u2192");return n.includes(r)}function ve(e){let t=e.orderCandidates?[...e.candidates()].sort(e.orderCandidates):e.candidates(),n=Ie(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 Pt(e,t={}){let{scope:n,minLoc:r=10,minCallees:i=6,limit:o=20,scanLimit:s}=t,a=new L(e);return ve({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)=>sb(c,l.get(c.symbolId)??[],i),orderResults:(c,l)=>l.clusters.length-c.clusters.length||l.loc-c.loc,limit:o})}function sb(e,t,n){let r=new Set(t.map(a=>a.symbol));if(r.size<n)return null;let i=ab(r,t),o=cb(r,i);if(o.length<2)return null;let s=lb(o,i);return s.length===0?null:{symbol:e.symbol,shortName:b(e.symbol),relativePath:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:B(e),totalCallees:r.size,clusters:s}}function ab(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 cb(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 lb(e,t){return e.filter(n=>n.size>=3).map(n=>ub(n,e,t)).filter(n=>n.isolation>.5).sort((n,r)=>r.isolation-n.isolation)}function ub(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 Jn(e,t,n={}){let{maxDepth:r=5,scope:i}=n,o=F(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 mb(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 mb(e,t,n){let r=Re(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 db(e,t,n)){if(i.has(l))continue;let u=H(e,l),m=u.length>0?be(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=tn(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)||!pb(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 db(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
533
496
  FROM mentions m
534
497
  JOIN chunks c ON m.chunk_id = c.id
535
498
  JOIN documents consumer_d ON consumer_d.id = c.document_id
@@ -537,30 +500,40 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
537
500
  AND m.role != 1
538
501
  AND c.document_id != ?
539
502
  ${e.pathExclusionsFor("consumer_d")}
540
- ${r}`,...i).map(o=>o.relative_path).filter(o=>!e.isIgnored(o)))}function uy(e){let t=Y(e);return t==="method"||t==="type"||e.endsWith("().")}function Do(e,t,n={}){let r=re(e,t);if(!r)return null;let i=my(e,r);if(!i||e.isIgnored(i.relative_path))return null;let o=[],s=0,a=dy(e,i.relative_path),c=n.semantic===!1?new Map:Vt(e,a);for(let l of a){let u=py(e,i,l,c.get(l.symbolId)??new Set);s+=u,o.push({symbol:l.symbol,shortName:h(l.symbol),startLine:l.startLine,endLine:l.endLine,externalConsumers:u,riskLevel:fy(u)})}return{file:i.relative_path,symbols:o,totalExternalConsumers:s}}function my(e,t){return e.get(`SELECT id, relative_path FROM documents
503
+ ${r}`,...i).map(o=>o.relative_path).filter(o=>!e.isIgnored(o)))}function pb(e){let t=ee(e);return t==="method"||t==="type"||e.endsWith("().")}function zn(e,t,n={}){let r=me(e,t);if(!r)return null;let i=fb(e,r);if(!i||e.isIgnored(i.relative_path))return null;let o=[],s=0,a=gb(e,i.relative_path),c=n.semantic===!1?new Map:un(e,a);for(let l of a){let u=hb(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:yb(u)})}return{file:i.relative_path,symbols:o,totalExternalConsumers:s}}function fb(e,t){return e.get(`SELECT id, relative_path FROM documents
541
504
  WHERE relative_path = ?
542
505
  ${e.pathExclusionsFor("documents")}
543
- LIMIT 1`,t)??null}function dy(e,t){return new v(e).definitionsForFile(t).sort((n,r)=>n.startLine-r.startLine||n.endLine-r.endLine)}function py(e,t,n,r){let i=e.all(`SELECT DISTINCT consumer_d.relative_path
506
+ LIMIT 1`,t)??null}function gb(e,t){return new L(e).definitionsForFile(t).sort((n,r)=>n.startLine-r.startLine||n.endLine-r.endLine)}function hb(e,t,n,r){let i=e.all(`SELECT DISTINCT consumer_d.relative_path
544
507
  FROM mentions m
545
508
  JOIN chunks c ON m.chunk_id = c.id
546
509
  JOIN documents consumer_d ON consumer_d.id = c.document_id
547
510
  WHERE m.symbol_id = ?
548
511
  AND m.role != 1
549
- 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 fy(e){return e>10?"high":e>0?"medium":"low"}import{execFileSync as No}from"child_process";function Sr(e,t={}){let n=Ut(e,t);return n.note?gy(n.note,n.changedFileLines):n.changedFiles.length===0?hy(n.changedFileLines):Cr(n.changedFiles,[xr(e,n.changedFiles,n.changedFiles)])}function Ut(e,t={}){let{base:n="HEAD"}=t;try{let r=yy(e.config.projectRoot,n);return{changedFileLines:r,changedFiles:by(e,r),note:r.length===0?"No changed files found.":void 0}}catch{return{changedFileLines:[],changedFiles:[],note:"Unable to compute git diff."}}}function xr(e,t,n){let r=new v(e),i=new Set(n),o=[],s=new Map,a=t.flatMap(l=>r.definitionsForFile(l)).filter(Iy).sort((l,u)=>l.relativePath.localeCompare(u.relativePath)||l.startLine-u.startLine),c=Vt(e,a);for(let l of a)Sy(e,l,n,i,o,s,c.get(l.symbolId)??new Set);return{changedSymbols:o,consumerEntries:[...s.entries()].map(([l,u])=>({file:l,symbols:[...u].sort()}))}}function Cr(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=Ry(n);return{changedFiles:[...e],changedSymbols:r,affectedConsumers:i,summary:{totalChangedFiles:e.length,totalChangedSymbols:r.length,totalAffectedFiles:i.length}}}function gy(e,t=[]){return{changedFiles:t,changedSymbols:[],affectedConsumers:[],summary:{totalChangedFiles:t.length,totalChangedSymbols:0,totalAffectedFiles:0,note:e}}}function hy(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 yy(e,t){let n=No("git",["diff","--name-only",t],{encoding:"utf-8",cwd:e,timeout:1e4}),r=No("git",["diff","--name-only","--cached",t],{encoding:"utf-8",cwd:e,timeout:1e4}),i=No("git",["ls-files","--others","--exclude-standard"],{encoding:"utf-8",cwd:e,timeout:1e4});return[...new Set([n,r,i].flatMap(o=>o.split(`
550
- `)).map(o=>o.trim()).filter(o=>o.length>0))]}function by(e,t){let n=[];for(let r of t){let i=e.get(`SELECT relative_path FROM documents
512
+ 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 yb(e){return e>10?"high":e>0?"medium":"low"}function Bo(e,t={}){let{scope:n,minLoc:r=1,maxDepth:i=5,scanLimit:o}=t,s=new L(e),a=bb(e,n,r,o),c=new jo;for(let f of a)c.add(f);let l=[],u=[];a.length>0&&l.push(Il(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}),C=new Set;for(let N of m)for(let I of y.get(N.symbolId)??[])d.has(I.symbol)||C.add(I.symbol);let E=[];for(let N of C){d.add(N);let I=vl(e,N);if(!I||e.isIgnored(I.relativePath)||le(e,I.relativePath)||ne(e,I.symbol,I.relativePath)||s.fileKind(I.relativePath)==="test"||s.hasSuppressionComment(I))continue;let v=xb(e,I,c);v.removable?E.push(Sb(I,"cascade")):v.blockingFiles.length>0&&u.push({shortName:b(I.symbol),file:I.relativePath,blockingFiles:v.blockingFiles.slice(0,3)})}if(E.length===0)break;for(let N of E)c.add(N);l.push(Il(e,f,E,c)),m=E.map(N=>N.definition).filter(N=>N!==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 bb(e,t,n,r){let i=Je(e,{scope:t,minLoc:n,skipBarrels:!0,deadCodeOnly:!0,scanLimit:r,semantic:!1}),o=[];for(let s of i.symbols)s.kind==="dead-code"&&(le(e,s.relativePath)||ne(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:vl(e,s.symbol)}));return o}function Sb(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 vl(e,t){let n=e.get(`SELECT d.relative_path
513
+ FROM global_symbols gs
514
+ JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
515
+ JOIN documents d ON d.id = der.document_id
516
+ WHERE gs.symbol = ?
517
+ LIMIT 1`,t);return n?H(e,n.relative_path).find(r=>r.symbol===t)??null:null}function xb(e,t,n){let r=wt(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 Il(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=H(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 jo=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 Hl}from"fs";import{execFileSync as Cb}from"child_process";var Nl=2e3,Rb=50,Ib=/\b(?:fix(?:es|ed)?|bug|regression|hotfix)\b/i,Ur=re("git-commit-history",{clearGroups:["whole-project"]});function Ft(e){let t=Ho(e.config.projectRoot);if(!t)return null;let n=Ur.has(e)?Ur.get(e,()=>({head:"",history:null})):null;return n&&n.head===t?n.history:(Ur.invalidate(e),Ur.get(e,()=>({head:t,history:vb(e.config.projectRoot,t)})).history)}function Ho(e){try{return zr(e,["rev-parse","HEAD"]).trim()||null}catch{return null}}function zr(e,t){return Cb("git",["-C",e,...t],{encoding:"utf-8",maxBuffer:64*1024*1024,stdio:["ignore","pipe","ignore"]})}function vb(e,t){let n;try{n=zr(e,["log","--no-merges","--name-only","-n",String(Nl),"--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(`
518
+ `),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(`
519
+ `).map(d=>d.trim()).filter(d=>d!==""):[];if(m.length>Rb){i+=1;continue}r.push({hash:c,timestamp:Number(l)||0,subject:u??"",files:m})}return{head:t,commits:r,skippedBulkCommits:i}}function Db(e){return Ib.test(e.subject)}function Qr(e){let t=Ft(e);if(!t)return null;let n=new Map;for(let r of t.commits){let i=Db(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 Ll(e){let t=Ft(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:Dl(n,.5),p90FilesPerCommit:Dl(n,.9),commitsAnalyzed:n.length}}function Dl(e,t){let n=Math.min(e.length-1,Math.floor(e.length*t));return e[n]}var Gr=re("git-tracked-files",{clearGroups:["whole-project"]});function qo(e){let t=Ho(e.config.projectRoot);if(!t)return null;let n=Gr.has(e)?Gr.get(e,()=>({head:"",files:null})):null;return n&&n.head===t?n.files:(Gr.invalidate(e),Gr.get(e,()=>{try{let r=zr(e.config.projectRoot,["ls-files"]);return{head:t,files:new Set(r.split(`
520
+ `).map(i=>i.trim()).filter(i=>i!==""))}}catch{return{head:t,files:null}}}).files)}var Jr=re("git-file-adds",{clearGroups:["whole-project"]});function _l(e){let t=Ho(e.config.projectRoot);if(!t)return null;let n=Jr.has(e)?Jr.get(e,()=>({head:"",adds:null})):null;return n&&n.head===t?n.adds:(Jr.invalidate(e),Jr.get(e,()=>({head:t,adds:Nb(e.config.projectRoot)})).adds)}function Nb(e){let t;try{t=zr(e,["log","--no-merges","--diff-filter=A","--name-only","-n",String(Nl),"--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(`
521
+ `),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(`
522
+ `)){let u=l.trim();u!==""&&n.set(u,{commitsAgo:r,addedAt:c})}}return n}function Kr(e,t={}){let{minTogether:n=4,minConfidence:r=.6}=t,i=Ft(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 Lb}from"fs";import{join as _b}from"path";function Wo(e){return Vo.test(e)}var Vo=/(?:^|\/)(?:package-lock\.json|pnpm-lock\.yaml|yarn\.lock|Cargo\.lock|CHANGELOG(?:\.[a-z]+)?|.*\.map)$|(?:^|\/)(?:dist|build|out|node_modules)\//i;function Tt(e,t,n={}){let{minTogether:r=4,minConfidence:i=.6,limit:o=30}=n,s=Ft(e),a=t!==void 0,c=Kr(e,{minTogether:a?Math.min(r,2):r,minConfidence:a?0:i});if(!s||!c)return{available:!1,commitsAnalyzed:0,findings:[]};let l=oe(e),u=n.includeLinked===!0||a,m=[];for(let d of c){if(Vo.test(d.fileA)||Vo.test(d.fileB)||!wl(e,d.fileA)||!wl(e,d.fileB)||a&&!d.fileA.includes(t)&&!d.fileB.includes(t)||!a&&(G(d.fileA)==="test"||G(d.fileB)==="test"||wb(d.fileA,d.fileB)))continue;let p=Eb(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 wl(e,t){return Lb(_b(e.config.projectRoot,t))}function wb(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 Eb(e,t,n){return e.get(t)?.has(n)===!0||e.get(n)?.has(t)===!0}import{execFileSync as Uo}from"child_process";function pn(e,t={}){let n=fn(e,t);return n.note?kb(n.note,n.changedFileLines):n.changedFiles.length===0?Pb(n.changedFileLines):Xr(n.changedFiles,[Yr(e,n.changedFiles,n.changedFiles)])}function fn(e,t={}){let{base:n="HEAD"}=t;try{let r=Fb(e.config.projectRoot,n);return{changedFileLines:r,changedFiles:Tb(e,r),note:r.length===0?"No changed files found.":void 0}}catch{return{changedFileLines:[],changedFiles:[],note:"Unable to compute git diff."}}}function Yr(e,t,n){let r=new L(e),i=new Set(n),o=[],s=new Map,a=t.flatMap(l=>r.definitionsForFile(l)).filter(jb).sort((l,u)=>l.relativePath.localeCompare(u.relativePath)||l.startLine-u.startLine),c=un(e,a);for(let l of a)Ab(e,l,n,i,o,s,c.get(l.symbolId)??new Set);return{changedSymbols:o,consumerEntries:[...s.entries()].map(([l,u])=>({file:l,symbols:[...u].sort()}))}}function Xr(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=$b(n);return{changedFiles:[...e],changedSymbols:r,affectedConsumers:i,summary:{totalChangedFiles:e.length,totalChangedSymbols:r.length,totalAffectedFiles:i.length}}}function kb(e,t=[]){return{changedFiles:t,changedSymbols:[],affectedConsumers:[],summary:{totalChangedFiles:t.length,totalChangedSymbols:0,totalAffectedFiles:0,note:e}}}function Pb(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 Fb(e,t){let n=Uo("git",["diff","--name-only",t],{encoding:"utf-8",cwd:e,timeout:1e4}),r=Uo("git",["diff","--name-only","--cached",t],{encoding:"utf-8",cwd:e,timeout:1e4}),i=Uo("git",["ls-files","--others","--exclude-standard"],{encoding:"utf-8",cwd:e,timeout:1e4});return[...new Set([n,r,i].flatMap(o=>o.split(`
523
+ `)).map(o=>o.trim()).filter(o=>o.length>0))]}function Tb(e,t){let n=[];for(let r of t){let i=e.get(`SELECT relative_path FROM documents
551
524
  WHERE relative_path LIKE ?
552
- LIMIT 1`,`%${r}`);i&&!e.isIgnored(i.relative_path)&&n.push(i.relative_path)}return n}function Sy(e,t,n,r,i,o,s){let a=Math.max(xy(e,t.symbolId),s.size);if(!_y(t,a))return;let c=h(t.symbol);i.push({symbol:t.symbol,shortName:c,file:t.relativePath,fanIn:a});for(let l of Cy(e,t.symbolId,n))sl(e,r,o,l,c);for(let l of s)sl(e,r,o,l,c)}function xy(e,t){return e.get(`SELECT COUNT(DISTINCT c.document_id) AS fan_in
525
+ LIMIT 1`,`%${r}`);i&&!e.isIgnored(i.relative_path)&&n.push(i.relative_path)}return n}function Ab(e,t,n,r,i,o,s){let a=Math.max(Mb(e,t.symbolId),s.size);if(!Bb(t,a))return;let c=b(t.symbol);i.push({symbol:t.symbol,shortName:c,file:t.relativePath,fanIn:a});for(let l of Ob(e,t.symbolId,n))El(e,r,o,l,c);for(let l of s)El(e,r,o,l,c)}function Mb(e,t){return e.get(`SELECT COUNT(DISTINCT c.document_id) AS fan_in
553
526
  FROM mentions m
554
527
  JOIN chunks c ON m.chunk_id = c.id
555
528
  WHERE m.symbol_id = ?
556
- AND m.role != 1`,t)?.fan_in??0}function Cy(e,t,n){return n.length===0?[]:e.all(`SELECT DISTINCT ref_d.relative_path
529
+ AND m.role != 1`,t)?.fan_in??0}function Ob(e,t,n){return n.length===0?[]:e.all(`SELECT DISTINCT ref_d.relative_path
557
530
  FROM mentions m
558
531
  JOIN chunks c ON m.chunk_id = c.id
559
532
  JOIN documents ref_d ON c.document_id = ref_d.id
560
533
  WHERE m.symbol_id = ?
561
534
  AND m.role != 1
562
535
  AND ref_d.relative_path NOT IN (${n.map(()=>"?").join(",")})
563
- ${e.pathExclusionsFor("ref_d")}`,t,...n).map(i=>i.relative_path)}function sl(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 Ry(e){return[...e.entries()].map(([t,n])=>({file:t,consumedSymbols:n.size})).sort((t,n)=>n.consumedSymbols-t.consumedSymbols)}function Iy(e){return!(We(e.symbol)||e.parentTypeName!==null&&!Z(e.symbol))}function _y(e,t){return Z(e.symbol)||e.isTypeLike?!0:e.parentTypeName===null&&t>0}import Dn from"path";function bt(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 Lo(e,t){if(e===t)return"ok";let n=Rr(e),r=Rr(t);return n&&r?vy(n,r)?"ok":"violation":Dy(e,t)}function al(e,t){let n=Rr(bt(e)),r=Rr(bt(t));return!!n&&!!r}function Rr(e){return/^src\/([^/]+)$/.exec(e)?.[1]??null}function vy(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 Dy(e,t){if(t==="shared")return"ok";let n={app:new Set(["core","shared","ui"]),core:new Set(["shared"]),infra:new Set(["core","shared"]),ui:new Set(["core","shared"])};return n[e]?n[e].has(t)?"ok":"violation":null}function Nn(e,t){let{scope:n,minDeviation:r=5}=t??{},i=t?.semantic!==!1,s=new v(e).fileDependencyGraph(n),a=Ty(e,n);return wy([...Ny(e,s,a,{semantic:i}),...Ly(s),...Ey(s,r)])}function Ny(e,t,n,r){let i=[];for(let[o,s]of t){if(Fe(o))continue;let a=n.get(o)??new Set;for(let c of s)if(!Fe(c)&&!a.has(c)){if(r.semantic&&jy(e,o,c)||By(e,o,c)||Hy(e,o,c)||$y(c)||Wy(e,o,c)||Vy(c))continue;i.push({file:o,kind:"unused-import",description:`Depends on ${c} but references none of its symbols`,dep:c})}}return i}function Ly(e){let t=[],n=Ay(e);for(let[r,i]of e){if(Fe(r))continue;let o=bt(r);for(let s of i){if(Fe(s))continue;let a=bt(s);if(o===a)continue;(Lo(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 Ey(e,t){let n=[];for(let[r,i]of ky(e)){let o=i.filter(a=>!Fe(a));if(o.length<t)continue;let s=Py(e,o);for(let a of o)for(let c of e.get(a)??[])Fe(c)||(s.get(c)??0)===1&&Dn.dirname(c)!==r&&Dn.dirname(c)!==Dn.dirname(r)&&(al(a,c)||n.push({file:a,kind:"pattern-deviation",description:`Only file in ${r}/ that depends on ${c}`,dep:c}))}return n}function wy(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 ky(e){let t=new Map;for(let n of e.keys()){let r=Dn.dirname(n),i=t.get(r);i||(i=[],t.set(r,i)),i.push(n)}return t}function Py(e,t){let n=new Map;for(let r of t)for(let i of e.get(r)??[])Fe(i)||n.set(i,(n.get(i)??0)+1);return n}function Ty(e,t){let n=new Map;return My(e,n,t),Fy(e,n),n}function My(e,t,n){for(let r of Oy(e,n))cl(e,t,r.from_file,r.to_file)}function Oy(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
536
+ ${e.pathExclusionsFor("ref_d")}`,t,...n).map(i=>i.relative_path)}function El(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 $b(e){return[...e.entries()].map(([t,n])=>({file:t,consumedSymbols:n.size})).sort((t,n)=>n.consumedSymbols-t.consumedSymbols)}function jb(e){return!(it(e.symbol)||e.parentTypeName!==null&&!ie(e.symbol))}function Bb(e,t){return ie(e.symbol)||e.isTypeLike?!0:e.parentTypeName===null&&t>0}import{existsSync as kl,readFileSync as Hb}from"fs";import{join as Go}from"path";var Qn=/\.(?:md|mdx|rst|txt)$/i;function Pl(e){return/(?:^|\/)(?:docs\/plans|plans|adrs?|rfcs?|decisions|changelogs?|archive|reports?)\//i.test(e)||/(?:^|\/)CHANGELOG\.(?:md|mdx|rst|txt)$/i.test(e)}var qb=3,Vb=/[A-Za-z0-9_@-]+(?:\/[A-Za-z0-9_.@-]+)+\.[A-Za-z0-9]{1,6}\b/g;function Jo(e,t={}){let{doc:n,limit:r=20,minCoupling:i=qb}=t,o=Ft(e);if(!o)return{available:!1,commitsAnalyzed:0,docsScanned:0,findings:[]};let s=qo(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(C=>Qn.test(C)),y=h.filter(C=>!Qn.test(C));for(let C of h){l.add(C);let E=a.get(C)??[];E.push(p.timestamp),a.set(C,E)}for(let C of f){let E=c.get(C);E||(E=new Map,c.set(C,E));for(let N of y)E.set(N,(E.get(N)??0)+1)}}let u=[...s].filter(p=>Qn.test(p)),m=Tl(s),d=[];for(let p of u){if(n!==void 0&&!p.includes(n)||n===void 0&&Pl(p)||!kl(Go(e.config.projectRoot,p)))continue;let h=Math.max(0,...a.get(p)??[]),f=new Map,{resolved:y,broken:C}=Al(e,p,s,m,l);for(let N of y){if(N===p||Qn.test(N))continue;let I=(a.get(N)??[]).filter(v=>v>h).length;I!==0&&f.set(N,{file:N,evidence:"reference",coChanges:0,changesSinceDocUpdate:I})}for(let[N,I]of c.get(p)??[]){if(I<i||!s.has(N))continue;let v=(a.get(N)??[]).filter(V=>V>h).length;if(v===0)continue;let w=f.get(N);w?(w.evidence="both",w.coChanges=I):f.set(N,{file:N,evidence:"co-change",coChanges:I,changesSinceDocUpdate:v})}if(f.size===0&&C.length===0)continue;let E=[...f.values()].sort((N,I)=>I.changesSinceDocUpdate-N.changesSinceDocUpdate);d.push({doc:p,docLastChangedAt:h,staleness:E.reduce((N,I)=>N+I.changesSinceDocUpdate,0)+C.length*10,subjects:E.slice(0,8),brokenReferences:C})}return d.sort((p,h)=>h.staleness-p.staleness),{available:!0,commitsAnalyzed:o.commits.length,docsScanned:u.length,findings:d.slice(0,r)}}function Fl(e,t){let n=qo(e)??new Set,r=Tl(n),i=[];for(let o of n){if(!Qn.test(o)||Pl(o)||!kl(Go(e.config.projectRoot,o)))continue;let{resolved:s}=Al(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 Tl(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 Al(e,t,n,r,i){let o=new Set,s=new Set,a;try{a=Hb(Go(e.config.projectRoot,t),"utf-8")}catch{return{resolved:o,broken:[]}}for(let c of a.matchAll(Vb)){let l=c[0].replace(/^\.?\//,"");if(n.has(l)){o.add(l);continue}let u=r.get(l);if(u&&u.length===1){o.add(u[0]);continue}u&&u.length>1||i.has(l)&&s.add(l)}return{resolved:o,broken:[...s]}}import{existsSync as qS,readFileSync as VS,writeFileSync as WS}from"fs";import{isAbsolute as US,join as GS}from"path";import Kn from"path";function At(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 zo(e,t){if(e===t)return"ok";let n=Zr(e),r=Zr(t);return n&&r?Wb(n,r)?"ok":"violation":Ub(e,t)}function Ml(e,t){let n=Zr(At(e)),r=Zr(At(t));return!!n&&!!r}function Zr(e){return/^src\/([^/]+)$/.exec(e)?.[1]??null}function Wb(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 Ub(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 Mt(e,t){let{scope:n,minDeviation:r=5}=t??{},i=t?.semantic!==!1,s=new L(e).fileDependencyGraph(n),a=Xb(e,n);return Qb([...Gb(e,s,a,{semantic:i}),...Jb(s),...zb(s,r)])}function Gb(e,t,n,r){let i=[];for(let[o,s]of t){if(Qe(o))continue;let a=n.get(o)??new Set;for(let c of s)if(!Qe(c)&&!a.has(c)){if(r.semantic&&iS(e,o,c)||oS(e,o,c)||sS(e,o,c)||rS(c)||cS(e,o,c)||aS(c))continue;i.push({file:o,kind:"unused-import",description:`Depends on ${c} but references none of its symbols`,dep:c})}}return i}function Jb(e){let t=[],n=nS(e);for(let[r,i]of e){if(Qe(r))continue;let o=At(r);for(let s of i){if(Qe(s))continue;let a=At(s);if(o===a)continue;(zo(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 zb(e,t){let n=[];for(let[r,i]of Kb(e)){let o=i.filter(a=>!Qe(a));if(o.length<t)continue;let s=Yb(e,o);for(let a of o)for(let c of e.get(a)??[])Qe(c)||(s.get(c)??0)===1&&Kn.dirname(c)!==r&&Kn.dirname(c)!==Kn.dirname(r)&&(Ml(a,c)||n.push({file:a,kind:"pattern-deviation",description:`Only file in ${r}/ that depends on ${c}`,dep:c}))}return n}function Qb(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 Kb(e){let t=new Map;for(let n of e.keys()){let r=Kn.dirname(n),i=t.get(r);i||(i=[],t.set(r,i)),i.push(n)}return t}function Yb(e,t){let n=new Map;for(let r of t)for(let i of e.get(r)??[])Qe(i)||n.set(i,(n.get(i)??0)+1);return n}function Xb(e,t){let n=new Map;return Zb(e,n,t),tS(e,n),n}function Zb(e,t,n){for(let r of eS(e,n))Ol(e,t,r.from_file,r.to_file)}function eS(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
564
537
  FROM mentions m
565
538
  JOIN chunks c ON m.chunk_id = c.id
566
539
  JOIN documents d1 ON c.document_id = d1.id
@@ -576,24 +549,25 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
576
549
  WHERE d1.id != d2.id
577
550
  AND m.role != 1
578
551
  ${e.pathExclusionsFor("d1","d2")}
579
- ${n}`)}function Fy(e,t){new v(e).scanSourceReferences({paths:k(e,{includeIgnored:!1}),includeRustAttributeNames:!0,identifierResolution:"permissive"},r=>{r.target.relativePath!==r.sourceFile&&(e.isIgnored(r.target.relativePath)||cl(e,t,r.sourceFile,r.target.relativePath))})}function cl(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 Ay(e){let t=new Map;for(let[r,i]of e){if(Fe(r))continue;let o=bt(r);for(let s of i){if(Fe(s))continue;let a=bt(s);if(o===a||Lo(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 $y(e){return e.includes("types")||e.endsWith(".d.ts")}function jy(e,t,n){let r=gn(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.some(i=>i.isUsed)}function By(e,t,n){let r=X(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.some(i=>i.used)}function Hy(e,t,n){let r=X(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.every(i=>i.isTypeOnly===!0)}function Vy(e){return e.endsWith(".vue")}function Wy(e,t,n){let r=X(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 Fe(e){let t=ue(e);return!!(t==="entry"||t==="barrel"||t==="test"||t==="worker"||qy(Dn.basename(e)))}function qy(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 En,extname as _r}from"path";function Jt(e){let t=e.orderCandidates?[...e.candidates()].sort(e.orderCandidates):e.candidates(),n=ee(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}var ll=H("definition-consumer-file-usage");function Ln(e,t,n){return e.callerFileMap(t,{semantic:n.semantic,sourceFallback:n.sourceFallback})}function Ir(e,t,n){let r=[],i=0,o=0,s=L(t.symbol);for(let a of n)Jy(e,a,t.relativePath,s)?i++:Eo(e,a,s)?o++:r.push(a);return{realConsumers:r,barrelConsumers:i,importOnlyConsumers:o}}function Eo(e,t,n){if(!n)return!1;let r=P(t);if(!r)return!1;let i=ll.get(e,t,()=>Uy(e,t,r));return i.importedLeaves.has(n)&&!i.usedLeaves.has(n)}function ul(e){ll.invalidateAll(e)}function Uy(e,t,n){let r=new Set,i=new Set,o=B(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 Jy(e,t,n,r){if(!r)return!1;let i=T(e,t);if(!i)return!1;let o=ga(e,t);if(o.length===0)return!1;let s=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=new RegExp(`\\b${s}\\b`),c=i.split(`
580
- `),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 wn(e,t){let{scope:n,maxLoc:r=15,limit:i=30,scanLimit:o}=t??{},s=new v(e),a=eb(s.fileDependencyGraph(n));return Jt({candidates:()=>Gy(s,n,r),orderCandidates:yr,scanLimit:o,prepare:c=>({callerFileMap:Ln(s,c,{semantic:t?.semantic!==!1}),reverseFanIn:a}),evaluate:(c,l)=>zy(e,s,c,l),orderResults:(c,l)=>l.callerFanIn-c.callerFanIn||l.loc-c.loc,limit:i})}function zy(e,t,n,r){let i=Qy(e,t,n,r.callerFileMap);if(i.length!==1)return null;let o=i[0],s=Ky(e,n.symbolId,o);if(!s)return null;let a=Yy(t,e,o,n.symbol,s);if(a&&qe(a.symbol))return null;let c=Xy(r.callerFileMap,r.reverseFanIn,o,a);return c<=3?null:{symbol:n.symbol,shortName:h(n.symbol),file:n.relativePath,startLine:n.startLine,endLine:n.endLine,loc:j(n),singleCaller:a?.symbol??"",singleCallerShort:a?.isFunctionLike?h(a.symbol):En(o),callerFanIn:c}}function Gy(e,t,n){return e.productionCallableDefinitions({scope:t,minLoc:2,maxLoc:n,requireFunctionLikeSymbol:!0})}function Qy(e,t,n,r){let i=En(n.relativePath,_r(n.relativePath)),o=[...r.get(n.symbolId)??[]].filter(s=>s!==n.relativePath).filter(s=>En(s,_r(s))!==i).filter(s=>{let a=t.fileKind(s);return a!=="barrel"&&a!=="entry"&&a!=="test"});return Ir(e,n,o).realConsumers}function Ky(e,t,n){return e.get(`SELECT c.start_line, c.end_line
552
+ ${n}`)}function tS(e,t){new L(e).scanSourceReferences({paths:T(e,{includeIgnored:!1}),includeRustAttributeNames:!0,identifierResolution:"permissive"},r=>{r.target.relativePath!==r.sourceFile&&(e.isIgnored(r.target.relativePath)||Ol(e,t,r.sourceFile,r.target.relativePath))})}function Ol(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 nS(e){let t=new Map;for(let[r,i]of e){if(Qe(r))continue;let o=At(r);for(let s of i){if(Qe(s))continue;let a=At(s);if(o===a||zo(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 rS(e){return e.includes("types")||e.endsWith(".d.ts")}function iS(e,t,n){let r=Tn(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.some(i=>i.isUsed)}function oS(e,t,n){let r=te(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.some(i=>i.used)}function sS(e,t,n){let r=te(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.every(i=>i.isTypeOnly===!0)}function aS(e){return e.endsWith(".vue")}function cS(e,t,n){let r=te(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 Qe(e){let t=G(e);return!!(t==="entry"||t==="barrel"||t==="test"||t==="worker"||lS(Kn.basename(e)))}function lS(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 Ot(e,t){let{scope:n,maxLoc:r=15,limit:i=30,scanLimit:o}=t??{},s=new L(e);return ve({candidates:()=>dS(s,n,r),orderCandidates:Vr,scanLimit:o,prepare:a=>s.calleeMap(a,{semantic:t?.semantic!==!1}),evaluate:(a,c)=>uS(e,a,c.get(a.symbolId)??[]),orderResults:(a,c)=>a.loc-c.loc||a.file.localeCompare(c.file),limit:i})}function uS(e,t,n){let r=mS(n);if(r.size!==1||!ki(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:B(t),forwardsTo:i.symbol,forwardsToShort:b(i.symbol),forwardsToFile:i.file}}function mS(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 dS(e,t,n){return e.productionCallableDefinitions({scope:t,minLoc:3,maxLoc:n,requireFunctionLikeSymbol:!0,excludeRootedSymbols:!0,excludeRustTraitImplMembers:!0})}var pS=W("definition-consumer-file-usage",{clearGroups:["whole-project","source-file"]});function Yn(e,t,n){return e.callerFileMap(t,{semantic:n.semantic,sourceFallback:n.sourceFallback})}function ei(e,t,n){let r=[],i=0,o=0,s=P(t.symbol);for(let a of n)gS(e,a,t.relativePath,s)?i++:Qo(e,a,s)?o++:r.push(a);return{realConsumers:r,barrelConsumers:i,importOnlyConsumers:o}}function Qo(e,t,n){if(!n)return!1;let r=$(t);if(!r)return!1;let i=pS.get(e,t,()=>fS(e,t,r));return i.importedLeaves.has(n)&&!i.usedLeaves.has(n)}function fS(e,t,n){let r=new Set,i=new Set,o=ce(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 gS(e,t,n,r){if(!r)return!1;let i=A(e,t);if(!i)return!1;let o=Xa(e,t);if(o.length===0)return!1;let s=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=new RegExp(`\\b${s}\\b`),c=i.split(`
553
+ `),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 $t(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 L(e),u=l.scopedDefinitions(n),m=LS(l,n),d={high:0,medium:1,low:2};return ve({candidates:()=>hS(e,l,u,{minLoc:r,maxLoc:i}),orderCandidates:(p,h)=>B(h)-B(p)||p.relativePath.localeCompare(h.relativePath),scanLimit:a,prepare:p=>({consumerFileMap:yS(l,p,{semantic:c}),singletonBackedClassIds:CS(e,l,u,p,{semantic:c}),candidateIndex:bS(p)}),evaluate:(p,h)=>{if(h.singletonBackedClassIds.has(p.symbolId))return null;let f=SS(e,p,h.consumerFileMap,h.candidateIndex);if(f.transitivelyReachable||f.realConsumers.length>1||f.realConsumers.length===0&&f.barrelConsumers>0||!wS(f.definition,f.realConsumers.length,m))return null;let y=xS(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 hS(e,t,n,r){return n.filter(i=>i.isTypeLike&&B(i)>=r.minLoc).filter(i=>B(i)<=r.maxLoc).filter(i=>!e.isIgnored(i.relativePath)).filter(i=>G(i.relativePath)!=="test").filter(i=>!ne(e,i.symbol,i.relativePath)).filter(i=>!_S(i.symbol)).filter(i=>!t.hasSuppressionComment(i))}function yS(e,t,n){return Yn(e,t,{semantic:n.semantic})}function bS(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=P(n.symbol);i&&r.set(i,n)}return t}function SS(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}=ei(e,t,o),l=ES(e,t,n,r);return{definition:t,realConsumers:s,barrelConsumers:a+c,transitivelyReachable:l}}function xS(e,t){let n=Bl(e,t.definition.relativePath,t.definition.startLine),r=jl(t.definition.relativePath)?!0:kS(e,t.definition),{confidence:i,reason:o}=PS(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:B(t.definition),consumers:t.realConsumers.length,barrelConsumers:t.barrelConsumers,kind:n,definerUsesType:r,confidence:i,reason:o}}function CS(e,t,n,r,i){let o=IS(e,RS(n),r),s=o.map(l=>l.singleton);if(o.length===0)return new Set;let a=Yn(t,s,{semantic:i.semantic}),c=new Set;for(let{singleton:l,classId:u}of o)DS(e,l,a)&&c.add(u);return c}function RS(e){let t=new Map;for(let n of e){let r=P(n.symbol);r&&t.set($l(n.relativePath,r),n)}return t}function IS(e,t,n){let r=[];for(let i of n){let o=vS(e,t,i);o&&r.push({singleton:o,classId:i.symbolId})}return r}function vS(e,t,n){if(Bl(e,n.relativePath,n.startLine)!=="class")return null;let r=P(n.symbol);if(!r)return null;let i=NS(e,n.relativePath,r);return i?t.get($l(n.relativePath,i))??null:null}function DS(e,t,n){let r=P(t.symbol),i=n.get(t.symbolId);return!r||!i?!1:[...i].some(o=>o!==t.relativePath&&!e.isIgnored(o)&&!Qo(e,o,r))}function $l(e,t){return`${e}\0${t}`}function NS(e,t,n){let r=A(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 LS(e,t){return new Set(e.scopedDefinitions(t).filter(n=>n.isFunctionLike).map(n=>n.relativePath))}function _S(e){let t=Z(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 jl(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 wS(e,t,n){return!(jl(e.relativePath)&&t>0||t===0&&n.has(e.relativePath))}function ES(e,t,n,r){let i=Fi(e,t.relativePath),o=P(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 Bl(e,t,n){let r=A(e,t);if(!r)return"other";let i=r.split(`
554
+ `),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 kS(e,t){let n=A(e,t.relativePath);if(!n)return!1;let r=P(t.symbol);if(!r)return!1;let i=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o=new RegExp(`\\b${i}\\b`),s=n.split(`
555
+ `);for(let a=0;a<s.length;a++)if(!(a>=t.startLine&&a<=t.endLine)&&o.test(s[a]??""))return!0;return!1}function PS(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 Xn,extname as ti}from"path";function jt(e,t){let{scope:n,maxLoc:r=15,limit:i=30,scanLimit:o}=t??{},s=new L(e),a=BS(s.fileDependencyGraph(n));return ve({candidates:()=>TS(s,n,r),orderCandidates:Vr,scanLimit:o,prepare:c=>({callerFileMap:Yn(s,c,{semantic:t?.semantic!==!1}),reverseFanIn:a}),evaluate:(c,l)=>FS(e,s,c,l),orderResults:(c,l)=>l.callerFanIn-c.callerFanIn||l.loc-c.loc,limit:i})}function FS(e,t,n,r){let i=AS(e,t,n,r.callerFileMap);if(i.length!==1)return null;let o=i[0],s=MS(e,n.symbolId,o);if(!s)return null;let a=OS(t,e,o,n.symbol,s);if(a&&Kt(a.symbol))return null;let{fanIn:c,source:l}=$S(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:B(n),singleCaller:a?.symbol??"",singleCallerShort:a?.isFunctionLike?b(a.symbol):Xn(o),callerFanIn:c}}function TS(e,t,n){return e.productionCallableDefinitions({scope:t,minLoc:2,maxLoc:n,requireFunctionLikeSymbol:!0,excludeRootedSymbols:!0})}function AS(e,t,n,r){let i=Xn(n.relativePath,ti(n.relativePath)),o=[...r.get(n.symbolId)??[]].filter(s=>s!==n.relativePath).filter(s=>Xn(s,ti(s))!==i).filter(s=>{let a=t.fileKind(s);return a!=="barrel"&&a!=="entry"&&a!=="test"});return ei(e,n,o).realConsumers}function MS(e,t,n){return e.get(`SELECT c.start_line, c.end_line
581
556
  FROM mentions m
582
557
  JOIN chunks c ON m.chunk_id = c.id
583
558
  JOIN documents d ON c.document_id = d.id
584
559
  WHERE m.symbol_id = ? AND m.role != 1 AND d.relative_path = ?
585
- LIMIT 1`,t,n)}function Yy(e,t,n,r,i){let o=e.definitionsForFile(n),s=Zy(t,n,r,i.start_line,i.end_line);return de(o,s)}function Xy(e,t,n,r){if(r?.isFunctionLike){let i=[...e.get(r.symbolId)??[]].filter(o=>o!==r.relativePath);if(i.length>0)return i.length}return tb(t,n)}function Zy(e,t,n,r,i){let o=L(n);if(!o)return r;let s=ht(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 eb(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 tb(e,t){let n=e.get(t)??0;if(n>0)return n;let r=En(t,_r(t)),i=0;for(let[o,s]of e)o!==t&&En(o,_r(o))===r&&s>i&&(i=s);return i}function dl(e,t,n,r){let i=P(t);if(!i)return!0;let o=B(e,t);if(!o)return!0;let s=ml.get(o);return s||(s=nb(o,i),ml.set(o,s)),s.get(`${n}:${r}`)??!0}var ml=new WeakMap;function nb(e,t){let n=en(t),r=new Map,i=o=>{n.has(o.type)&&r.set(`${o.startPosition.row}:${o.endPosition.row}`,rb(o,t));for(let s of o.children)i(s)};return i(e.rootNode),r}function rb(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=>m.type!=="comment"&&m.type!=="line_comment"&&m.type!=="block_comment");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=>m.type!=="comment"),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);else{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}function kn(e,t){let{scope:n,maxLoc:r=15,limit:i=30,scanLimit:o}=t??{},s=new v(e);return Jt({candidates:()=>sb(s,n,r),orderCandidates:yr,scanLimit:o,prepare:a=>s.calleeMap(a,{semantic:t?.semantic!==!1}),evaluate:(a,c)=>ib(e,a,c.get(a.symbolId)??[]),orderResults:(a,c)=>a.loc-c.loc||a.file.localeCompare(c.file),limit:i})}function ib(e,t,n){let r=ob(n);if(r.size!==1||!dl(e,t.relativePath,t.startLine,t.endLine))return null;let[,i]=[...r.entries()][0];return{symbol:t.symbol,shortName:h(t.symbol),file:t.relativePath,startLine:t.startLine,endLine:t.endLine,loc:j(t),forwardsTo:i.symbol,forwardsToShort:h(i.symbol),forwardsToFile:i.file}}function ob(e){let t=e.some(r=>Q(r.symbol))?e.filter(r=>Q(r.symbol)):e,n=new Map;for(let r of t)n.has(r.symbol)||n.set(r.symbol,r);return n}function sb(e,t,n){return e.productionCallableDefinitions({scope:t,minLoc:3,maxLoc:n,requireFunctionLikeSymbol:!0,excludeRustTraitImplMembers:!0})}function Pn(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 v(e),u=l.scopedDefinitions(n),m=bb(l,n),d=ee(ab(e,l,u,{minLoc:r,maxLoc:i}).sort((x,$)=>j($)-j(x)||x.relativePath.localeCompare($.relativePath)),a),p=cb(l,d,{semantic:c}),y=db(e,l,u,d,{semantic:c}),f=lb(d);return ub(e,d,p,f).filter(x=>!y.has(x.definition.symbolId)).filter(x=>!x.transitivelyReachable).filter(x=>x.realConsumers.length<=1).filter(x=>!(x.realConsumers.length===0&&x.barrelConsumers>0)).filter(x=>xb(x.definition,x.realConsumers.length,m)).map(x=>mb(e,x)).filter(x=>s||x.confidence!=="low").sort((x,$)=>{let O={high:0,medium:1,low:2};return O[x.confidence]-O[$.confidence]||$.loc-x.loc||x.file.localeCompare($.file)||x.startLine-$.startLine}).slice(0,o)}function ab(e,t,n,r){return n.filter(i=>i.isTypeLike&&j(i)>=r.minLoc).filter(i=>j(i)<=r.maxLoc).filter(i=>!e.isIgnored(i.relativePath)).filter(i=>!Sb(i.symbol)).filter(i=>!t.hasSuppressionComment(i))}function cb(e,t,n){return Ln(e,t,{semantic:n.semantic})}function lb(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=L(n.symbol);i&&r.set(i,n)}return t}function ub(e,t,n,r){return t.map(i=>{let s=[...n.get(i.symbolId)??new Set].filter(m=>m!==i.relativePath&&!e.isIgnored(m)),{realConsumers:a,barrelConsumers:c,importOnlyConsumers:l}=Ir(e,i,s),u=Cb(e,i,n,r);return{definition:i,realConsumers:a,barrelConsumers:c+l,transitivelyReachable:u}})}function mb(e,t){let n=gl(e,t.definition.relativePath,t.definition.startLine),r=fl(t.definition.relativePath)?!0:Rb(e,t.definition),{confidence:i,reason:o}=Ib(t.realConsumers.length,n,r);return{symbol:t.definition.symbol,shortName:h(t.definition.symbol),file:t.definition.relativePath,startLine:t.definition.startLine,endLine:t.definition.endLine,loc:j(t.definition),consumers:t.realConsumers.length,barrelConsumers:t.barrelConsumers,kind:n,definerUsesType:r,confidence:i,reason:o}}function db(e,t,n,r,i){let o=fb(e,pb(n),r),s=o.map(l=>l.singleton);if(o.length===0)return new Set;let a=Ln(t,s,{semantic:i.semantic}),c=new Set;for(let{singleton:l,classId:u}of o)hb(e,l,a)&&c.add(u);return c}function pb(e){let t=new Map;for(let n of e){let r=L(n.symbol);r&&t.set(pl(n.relativePath,r),n)}return t}function fb(e,t,n){let r=[];for(let i of n){let o=gb(e,t,i);o&&r.push({singleton:o,classId:i.symbolId})}return r}function gb(e,t,n){if(gl(e,n.relativePath,n.startLine)!=="class")return null;let r=L(n.symbol);if(!r)return null;let i=yb(e,n.relativePath,r);return i?t.get(pl(n.relativePath,i))??null:null}function hb(e,t,n){let r=L(t.symbol),i=n.get(t.symbolId);return!r||!i?!1:[...i].some(o=>o!==t.relativePath&&!e.isIgnored(o)&&!Eo(e,o,r))}function pl(e,t){return`${e}\0${t}`}function yb(e,t,n){let r=T(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 bb(e,t){return new Set(e.scopedDefinitions(t).filter(n=>n.isFunctionLike).map(n=>n.relativePath))}function Sb(e){let t=K(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 fl(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"||/(^|\/)types(\/|\.)/.test(e)||/(^|\/)models?(\/|\.)/.test(e)||/(^|\/)proto(?:col)?(\/|\.)/.test(e)||/(^|\/)schema(\/|\.)/.test(e))}function xb(e,t,n){return!(fl(e.relativePath)&&t>0||t===0&&n.has(e.relativePath))}function Cb(e,t,n,r){let i=ni(e,t.relativePath),o=L(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 gl(e,t,n){let r=T(e,t);if(!r)return"other";let i=r.split(`
586
- `),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 Rb(e,t){let n=T(e,t.relativePath);if(!n)return!1;let r=L(t.symbol);if(!r)return!1;let i=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o=new RegExp(`\\b${i}\\b`),s=n.split(`
587
- `);for(let a=0;a<s.length;a++)if(!(a>=t.startLine&&a<=t.endLine)&&o.test(s[a]??""))return!0;return!1}function Ib(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"}}function Tn(e,t){let{scope:n,minLoc:r=10,limit:i=30,scanLimit:o}=t??{},s=new v(e);return Jt({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)=>_b(a,c,r),orderResults:(a,c)=>c.score-a.score||c.loc-a.loc,limit:i})}function _b(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:h(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 hl(e){let t=vb(e);return{score:Db(e),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},actions:t,topComplexity:e.complexity.top,warnings:e.warnings.length>0?e.warnings:void 0}}function vb(e){let t=[];if(e.dead.count>0&&t.push({category:"Dead code",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",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",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",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",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",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",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",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",description:i.join(", "),effort:e.drift.layerViolations>0?"medium":"low",impact:e.drift.layerViolations>0?"medium":"low",count:e.drift.count,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}function Db(e){let t=Math.max(e.statsResult.documents,1),n=Math.max(e.statsResult.symbols,1),r=100,i=e.dead.count/n;r-=Math.min(20,Math.round(i*200));let o=e.isolated.count/n;r-=Math.min(10,Math.round(o*200)),r-=Math.min(15,e.realCycleCount*5);let s=e.similarCount/n*1e3;r-=Math.min(10,Math.round(s));let a=e.extractCount/n*1e3;r-=Math.min(5,Math.round(a/2)),r-=Math.min(3,e.wrappers.count),r-=Math.min(3,e.passthroughs.count);let c=e.stale.count/Math.max(n*.1,1);r-=Math.min(8,Math.round(c*10));let l=e.drift.count/t;return r-=Math.min(5,Math.round(l*50)),r-=Math.min(5,e.complexity.extremeCount*2),Math.max(0,Math.min(100,r))}import{getHeapStatistics as Nb}from"v8";var Lb=64*1024*1024;function wo(){let e=globalThis.gc;if(!e)return;let t=Nb();t.heap_size_limit-t.used_heap_size<Lb||e()}var Eb=50,wb=75e3,kb=5e3,yl=2500,Mn=["overview","dead","isolated","cycles","similar","extract-candidates","wrapper-candidates","passthrough-candidates","stale-abstractions","drift","complexity-hotspots"],Pb={overview:(e,t,n,r)=>({phase:"overview",statsResult:r,warnings:n.warnings}),dead:(e,t,n)=>({phase:"dead",dead:Ob(e,t,n)}),isolated:(e,t,n)=>({phase:"isolated",isolated:Fb(e,t,n)}),cycles:(e,t,n)=>({phase:"cycles",realCycleCount:Ab(e,t,n)}),similar:(e,t,n)=>({phase:"similar",similarCount:$b(e,t,n)}),"extract-candidates":(e,t,n)=>({phase:"extract-candidates",extractCount:jb(e,t,n)}),"wrapper-candidates":(e,t,n)=>({phase:"wrapper-candidates",wrappers:Bb(e,t,n)}),"passthrough-candidates":(e,t,n)=>({phase:"passthrough-candidates",passthroughs:Hb(e,t,n)}),"stale-abstractions":(e,t,n)=>({phase:"stale-abstractions",stale:Vb(e,t,n)}),drift:(e,t,n)=>({phase:"drift",drift:Wb(e,t,n)}),"complexity-hotspots":(e,t,n)=>({phase:"complexity-hotspots",complexity:qb(e,t,n)})};function ko(e,t,n={}){return Tb(e,n.full===!0,(r,i)=>Pb[t](e,n.scope,i,r))}function Tb(e,t,n){let r=Te(e),i=Ub(r,t);try{return n(r,i)}finally{Ki(e,{semanticProvider:!0}),wo()}}function Po(e){return hl(Mb(e))}function Mb(e){let t=_e(e,"overview");return{statsResult:t.statsResult,warnings:t.warnings,dead:_e(e,"dead").dead,isolated:_e(e,"isolated").isolated,realCycleCount:_e(e,"cycles").realCycleCount,similarCount:_e(e,"similar").similarCount,extractCount:_e(e,"extract-candidates").extractCount,wrappers:_e(e,"wrapper-candidates").wrappers,passthroughs:_e(e,"passthrough-candidates").passthroughs,stale:_e(e,"stale-abstractions").stale,drift:_e(e,"drift").drift,complexity:_e(e,"complexity-hotspots").complexity}}function _e(e,t){let n=e.find(r=>r.phase===t);if(!n)throw new Error(`Missing health phase result: ${t}`);return n}function Ob(e,t,n){return Ae(e,n,"dead",()=>{let r=bn(e,{scope:t,minLoc:3,skipBarrels:!0,deadCodeOnly:!0,scanLimit:n.candidateScanLimit,semantic:!1});return To(Gb(e,r.symbols))})}function Fb(e,t,n){return Ae(e,n,"isolated",()=>{let r=xn(e,{scope:t,minLoc:3,scanLimit:n.candidateScanLimit,semantic:!1});return To(Qb(e,r))})}function Ab(e,t,n){return Ae(e,n,"cycles",()=>Sn(e,{scope:t}).filter(i=>i.kind==="real").length)}function $b(e,t,n){return Ae(e,n,"similar",()=>_n(e,{scope:t,minSimilarity:.6,limit:50,minCallees:4,scanLimit:n.candidateScanLimit,semantic:!1}).length)}function jb(e,t,n){return Ae(e,n,"extract-candidates",()=>vn(e,{scope:t,minLoc:15,minCallees:5,limit:50,scanLimit:n.candidateScanLimit,semantic:!1}).length)}function Bb(e,t,n){return bl(e,n,"wrapper-candidates",()=>wn(e,{scope:t,maxLoc:15,limit:50,scanLimit:n.candidateScanLimit,semantic:!1}))}function Hb(e,t,n){return bl(e,n,"passthrough-candidates",()=>kn(e,{scope:t,maxLoc:15,limit:50,scanLimit:n.candidateScanLimit,semantic:!1}))}function Vb(e,t,n){return Ae(e,n,"stale-abstractions",()=>{let r=Pn(e,{scope:t,minLoc:3,limit:50,scanLimit:n.candidateScanLimit,semantic:!1}),i=r.filter(o=>o.consumers===0).length;return{count:r.length,loc:r.reduce((o,s)=>o+s.loc,0),unused:i,singleUse:r.length-i}})}function Wb(e,t,n){return Ae(e,n,"drift",()=>{let r=Nn(e,{scope:t,semantic:!1});return{count:r.unusedImports+r.layerViolations,unusedImports:r.unusedImports,layerViolations:r.layerViolations}})}function qb(e,t,n){return Ae(e,n,"complexity-hotspots",()=>{let r=Tn(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})),extremeCount:r.filter(i=>i.score>Eb).length}})}function Ub(e,t){return e.symbols>=wb||e.documents>=kb?t?{candidateScanLimit:void 0,releaseCachesBetweenPhases:!0,warnings:["Large index detected; running unbounded health analyses because --full was supplied."]}:{candidateScanLimit:yl,releaseCachesBetweenPhases:!0,warnings:[`Large index detected; candidate-style health checks scanned their highest-priority ${yl} symbols. Run "scip-query health --full" for unbounded candidate counts.`]}:{candidateScanLimit:void 0,releaseCachesBetweenPhases:!0,warnings:[]}}function Jb(e,t){t.releaseCachesBetweenPhases&&(ul(e),Ki(e),wo())}function Ae(e,t,n,r){zb(n);try{return r()}finally{Jb(e,t)}}function bl(e,t,n,r){return Ae(e,t,n,()=>To(r()))}function zb(e){process.env.SCIP_QUERY_HEALTH_TRACE==="1"&&console.error(`[health] ${e}`)}function Gb(e,t){return t.filter(n=>!gt(e,n.relativePath)&&!ln(e,n.symbol,n.relativePath)&&n.kind==="dead-code")}function Qb(e,t){return t.filter(n=>!gt(e,n.relativePath)&&!ln(e,n.symbol,n.relativePath))}function To(e){return{count:e.length,loc:e.reduce((t,n)=>t+n.loc,0)}}function Mo(e,t,n,r={}){let i=w(e,t),o=w(e,n);if(!i||!o)return null;let s=new Set(me(e,i,{semantic:r.semantic}).map(b=>b.symbol)),a=new Set(me(e,o,{semantic:r.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 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 y=i.endLine-i.startLine+1,f=o.endLine-o.startLine+1;return{symbolA:{symbol:i.symbol,shortName:h(i.symbol),file:i.relativePath,loc:y},symbolB:{symbol:o.symbol,shortName:h(o.symbol),file:o.relativePath,loc:f},similarity:d,sharedCallees:c.map(h),uniqueToA:l.map(h),uniqueToB:u.map(h),consolidationStrategy:p}}import{readFileSync as Sl}from"fs";import{extname as Kb,join as xl}from"path";function Oo(e,t,n={}){let{context:r=0}=n,i=Yb(t);if(i)return Zb(e,i.filePath,i.startLine,i.endLine,r);let o=w(e,t);return o?Xb(e,o,r):null}function Yb(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 Xb(e,t,n){let r=e.get("SELECT language FROM documents WHERE relative_path = ?",t.relativePath),i=xl(e.config.projectRoot,t.relativePath),o;try{o=Sl(i,"utf-8")}catch{return null}let s=o.split(`
588
- `),a=Math.max(0,t.startLine-n),c=Math.min(s.length-1,t.endLine+n),l=s.slice(a,c+1).join(`
589
- `);return{symbol:t.symbol,shortName:h(t.symbol),relativePath:t.relativePath,startLine:a,endLine:c,language:r?.language??Cl(t.relativePath),source:l}}function Zb(e,t,n,r,i){let o=re(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=xl(e.config.projectRoot,s.relative_path),c;try{c=Sl(a,"utf-8")}catch{return null}let l=c.split(`
590
- `),u=Math.max(0,n-1-i),m=Math.min(l.length-1,r-1+i),d=l.slice(u,m+1).join(`
591
- `);return{symbol:`${s.relative_path}:${n}-${r}`,shortName:`${s.relative_path}:${n}-${r}`,relativePath:s.relative_path,startLine:u,endLine:m,language:s.language??Cl(s.relative_path),source:d}}function Cl(e){switch(Kb(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}}import{readFileSync as eS}from"fs";import{join as tS}from"path";function Fo(e,t,n={}){let r=w(e,t);if(!r)return null;let i=new v(e),o=sS(rS(e,r.relativePath,r.startLine,r.endLine),nS(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:h(r.symbol),relativePath:r.relativePath,startLine:r.startLine,endLine:r.endLine,loc:s,branches:o,cyclomaticEstimate:o+1,calleeCount:l.size,fanIn:iS(e,r.symbolId),fanOut:oS(c,r.relativePath)}}function nS(e,t){return e.get("SELECT language FROM documents WHERE relative_path = ?",t)?.language??"unknown"}function rS(e,t,n,r){try{return eS(tS(e.config.projectRoot,t),"utf-8").split(`
560
+ LIMIT 1`,t,n)}function OS(e,t,n,r,i){let o=e.definitionsForFile(n),s=jS(t,n,r,i.start_line,i.end_line);return be(o,s)}function $S(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:HS(t,n),source:"file"}}function jS(e,t,n,r,i){let o=P(n);if(!o)return r;let s=Ge(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 BS(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 HS(e,t){let n=e.get(t)??0;if(n>0)return n;let r=Xn(t,ti(t)),i=0;for(let[o,s]of e)o!==t&&Xn(o,ti(o))===r&&s>i&&(i=s);return i}var JS=75e3,zS=5e3,QS=2500;function KS(e){let t=Ne(e);return t.symbols>=JS||t.documents>=zS?QS:void 0}var YS=".scipquery-baseline.json";function ni(e,t){return t&&US(t)?t:GS(e.config.projectRoot,t??YS)}function Ko(e,t={}){let{scope:n}=t,r=KS(e),i=[],o=Je(e,{scope:n,minLoc:3,skipBarrels:!0,deadCodeOnly:!0,scanLimit:r,semantic:!1});for(let s of o.symbols)le(e,s.relativePath)||ne(e,s.symbol,s.relativePath)||s.kind==="dead-code"&&i.push(`dead:${s.relativePath}:${s.shortName}`);for(let s of kt(e,{scope:n,minLoc:3,scanLimit:r,semantic:!1}))le(e,s.relativePath)||ne(e,s.symbol,s.relativePath)||i.push(`isolated:${s.relativePath}:${s.shortName}`);for(let s of Et(e,{scope:n}))s.kind==="real"&&i.push(`cycle:${XS(s.path)}`);for(let s of ze(e,{scope:n,minSimilarity:.6,limit:50,minCallees:4,scanLimit:r,semantic:!1}))i.push(`similar:${[s.symbolA,s.symbolB].sort().join("|")}`);for(let s of Pt(e,{scope:n,minLoc:15,minCallees:5,limit:50,scanLimit:r,semantic:!1}))i.push(`extract:${s.relativePath}:${s.shortName}`);for(let s of jt(e,{scope:n,maxLoc:15,limit:50,scanLimit:r,semantic:!1}))i.push(`wrapper:${s.file}:${s.shortName}`);for(let s of Ot(e,{scope:n,maxLoc:15,limit:50,scanLimit:r,semantic:!1}))i.push(`passthrough:${s.file}:${s.shortName}`);for(let s of $t(e,{scope:n,minLoc:3,limit:50,scanLimit:r,semantic:!1}))i.push(`stale:${s.file}:${s.shortName}`);for(let s of Mt(e,{scope:n,semantic:!1}).results)s.kind!=="pattern-deviation"&&i.push(`drift:${s.kind}:${s.file}:${s.dep}`);return[...new Set(i)].sort()}function XS(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 Yo(e,t={}){let n=Ko(e,{scope:t.scope}),r=ni(e,t.path);return WS(r,JSON.stringify({version:1,findings:n},null,2)+`
561
+ `),{path:r,findingCount:n.length}}function Zn(e,t={}){let n=ni(e,t.path);if(!qS(n))throw new Error(`No baseline found at ${n}. Create one with: scip-query health --write-baseline`);let r=JSON.parse(VS(n,"utf-8")),i=new Set(r.findings??[]),o=Ko(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))}}function er(e,t={}){let{scope:n,limit:r=30,scanLimit:i}=t,o=t.files===void 0?null:new Set(t.files),s=new L(e);return ve({candidates:()=>s.productionCallableDefinitions({scope:n,minLoc:2,excludeRootedSymbols:!0,requireFunctionLikeSymbol:!0}).filter(a=>ZS(a.relativePath)&&(o===null||o.has(a.relativePath))),scanLimit:i,evaluate:a=>{let c=K(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=Ge(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("_")||ex(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 ZS(e){let t=$(e);return t==="typescript"||t==="tsx"||t==="javascript"}function ex(e,t,n){return e?e.some(r=>r>t&&r<=n):!1}function Xo(e,t={}){let n=t.base??"HEAD",{minTogether:r=6,minConfidence:i=.6,maxEchoChecks:o=10,minSimilarity:s=.8}=t,a=pn(e,{base:n}),c=a.changedFiles,l=new Set(c),u={base:n,changedFiles:c,changedSymbols:a.changedSymbols.length,checksRun:[],skipped:[],findings:[],note:a.summary.note};return c.length===0||(tx(e,a.changedSymbols,l,o,s,u),nx(e,l,r,i,u),rx(e,l,u),ix(e,c,u),ox(e,a.changedSymbols,u),sx(e,u)),u}function tx(e,t,n,r,i,o){o.checksRun.push("echo");for(let s of t.slice(0,r)){let a=Gn(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 nx(e,t,n,r,i){let o=Kr(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||Wo(m)||Wo(u)||!Hl(`${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 rx(e,t,n){n.checksRun.push("doc-reference");for(let r of Fl(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 ix(e,t,n){n.checksRun.push("unused-params");for(let r of er(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 ox(e,t,n){n.checksRun.push("new-dead");let r=new L(e);for(let i of t)i.fanIn>0||r.fileKind(i.file)!=="test"&&(le(e,i.file)||ne(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 sx(e,t){if(!Hl(ni(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=Zn(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 Zo(e,t={}){let{windowCommits:n=100,minSimilarity:r=.7,limit:i=30,scope:o,scanLimit:s}=t,a=_l(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 ax=/scip-query[\s:-]*ignore[\s:-]*(dead(?:-code)?|stale|wrapper|passthrough|drift|extract|similar)?/gi,cx=re("suppression-inventory",{clearGroups:["whole-project"]});function ri(e){return cx.get(e,()=>lx(e))}function lx(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 $e(e)){let o=A(e,i);if(!(!o||!o.includes("scip-query")))for(let s of o.matchAll(ax)){r+=1,n.set(i,(n.get(i)??0)+1);let a=ux(s[1]);t[a]+=1}}return{total:r,byCategory:t,byFile:n}}function ux(e){if(!e)return"uncategorized";let t=e.toLowerCase();return t==="dead-code"?"dead":t}import{readFileSync as mx}from"fs";import{join as dx}from"path";function tr(e,t,n={}){let r=F(e,t);if(!r)return null;let i=new L(e),o=yx(fx(e,r.relativePath,r.startLine,r.endLine),px(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:gx(e,r.symbolId),fanOut:hx(c,r.relativePath)}}function px(e,t){return e.get("SELECT language FROM documents WHERE relative_path = ?",t)?.language??"unknown"}function fx(e,t,n,r){try{return mx(dx(e.config.projectRoot,t),"utf-8").split(`
592
562
  `).slice(n,r+1).join(`
593
- `)}catch{return""}}function iS(e,t){return e.get(`SELECT COUNT(DISTINCT c.document_id) AS c
563
+ `)}catch{return""}}function gx(e,t){return e.get(`SELECT COUNT(DISTINCT c.document_id) AS c
594
564
  FROM mentions m
595
565
  JOIN chunks c ON m.chunk_id = c.id
596
- WHERE m.symbol_id = ? AND m.role != 1`,t)?.c??0}function oS(e,t){return new Set(e.filter(n=>n.file!==t).map(n=>n.symbol)).size}function sS(e,t){let n=Ft(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 Ao(e,t,n={}){let r=w(e,t);if(!r)return null;let i=[{file:r.relativePath,line:r.startLine}],o=et(e,r,{semantic:n.semantic}).map(c=>({file:c.file,line:c.line,enclosingSymbol:c.enclosingSymbol??"(top-level)",enclosingShort:c.enclosingSymbol?h(c.enclosingSymbol):"(top-level)"})),{producers:s,consumers:a}=aS(e,r,o,{semantic:n.semantic!==!1});return{symbol:r.symbol,shortName:h(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:h(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)":h(c.symbol),file:c.file}))}}function aS(e,t,n,r){let i=qt(me(e,t,{limit:30,semantic:r.semantic}).map(a=>({symbol:a.symbol,file:a.file}))),o=qt(ye(e,t,{limit:30,semantic:r.semantic})),s=o.length>0?o:qt(n.map(a=>({symbol:a.enclosingSymbol==="(top-level)"?a.file:a.enclosingSymbol,file:a.file})));return{producers:i,consumers:s}}function $o(e,t,n={}){let{direction:r="backward",maxDepth:i=3}=n,o=w(e,t);return o?r==="backward"?cS(e,o,i,{semantic:n.semantic!==!1}):lS(e,o,{semantic:n.semantic!==!1}):null}function cS(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=me(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:h(m.symbol),file:m.file,relationship:a===1?"referenced within definition (callee)":`depth ${a} callee`});let d=Mt(e,m.symbol);d&&!e.isIgnored(d.relativePath)&&c.push(d)}}s=c}return{symbol:t.symbol,shortName:h(t.symbol),direction:"backward",connectedSymbols:i}}function lS(e,t,n){let r=new Set,i=[],o=new v(e);for(let s of et(e,t,{semantic:n.semantic})){if(i.length>=30)break;let a=s.enclosingSymbol??de(o.definitionsForFile(s.file),s.line)?.symbol??null;if(!a||a===t.symbol)continue;let c=Mt(e,a);!c||e.isIgnored(c.relativePath)||r.has(c.symbol)||(r.add(c.symbol),i.push({symbol:c.symbol,shortName:h(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:h(t.symbol),direction:"forward",connectedSymbols:i}}function jo(e,t={}){let{scope:n,limit:r}=t,i=new v(e),o=bS([...uS(e,n),...pS(e,i,n)]);return SS(o),r?o.slice(0,r):o}function uS(e,t){let n=[];for(let r of mS(e,t)){if(e.isIgnored(r.barrel_path)||e.isIgnored(r.original_path)||Ii(e,r.barrel_path))continue;let i=dS(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:h(r.symbol),originalFile:r.original_path,barrelConsumers:o,directConsumers:s})}return n}function mS(e,t){let n=t?`AND barrel_d.relative_path LIKE '%${t}%'`:"";return e.all(`SELECT DISTINCT
566
+ WHERE m.symbol_id = ? AND m.role != 1`,t)?.c??0}function hx(e,t){return new Set(e.filter(n=>n.file!==t).map(n=>n.symbol)).size}function yx(e,t){let n=It(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 nr(e,t,n={}){let r=F(e,t);if(!r)return null;let i=[{file:r.relativePath,line:r.startLine}],o=dt(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}=bx(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 bx(e,t,n,r){let i=dn(he(e,t,{limit:30,semantic:r.semantic}).map(a=>({symbol:a.symbol,file:a.file}))),o=dn(Re(e,t,{limit:30,semantic:r.semantic})),s=o.length>0?o:dn(n.map(a=>({symbol:a.enclosingSymbol==="(top-level)"?a.file:a.enclosingSymbol,file:a.file})));return{producers:i,consumers:s}}function gn(e,t,n={}){let{direction:r="backward",maxDepth:i=3}=n,o=F(e,t);return o?r==="backward"?Sx(e,o,i,{semantic:n.semantic!==!1}):xx(e,o,{semantic:n.semantic!==!1}):null}function Sx(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=he(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=tn(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 xx(e,t,n){let r=new Set,i=[],o=new L(e);for(let s of dt(e,t,{semantic:n.semantic})){if(i.length>=30)break;let a=s.enclosingSymbol??be(o.definitionsForFile(s.file),s.line)?.symbol??null;if(!a||a===t.symbol)continue;let c=tn(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 es(e,t,n={}){let r=n.impactDepth??3,i=n.sliceDepth??3,o=n.semantic,s=!Rx(t),a=s?Mn(e,t,{semantic:o}):{definitions:[],referencedBy:[]},c=s?qn(e,t,{semantic:o}):null,l=s?tr(e,t,{semantic:o}):null,u=s?nr(e,t,{semantic:o}):null,m=s?gn(e,t,{direction:"backward",maxDepth:i,semantic:o}):null,d=s?gn(e,t,{direction:"forward",maxDepth:i,semantic:o}):null,p=s?Jn(e,t,{maxDepth:r,scope:n.scope}):[],h=zn(e,t,{semantic:o}),f=On(e,t),y=$n(e,t),C=jn(e,t),E=Bn(e,t),N={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:C.files.length>0||C.symbols.length>0||E.length>0},I=[];!N.symbol&&!N.file&&!N.module&&I.push("No symbol, file, or module matched target.");let v=h?.file??a.definitions[0]?.relativePath??null;return{target:t,matched:N,history:Cx(e,v),trace:a,callGraph:c,complexity:l,dataflow:u,backwardSlice:m,forwardSlice:d,affected:p,changeSurface:h,deps:f,rdeps:y,system:C,surface:E,warnings:I}}function Cx(e,t){let n={available:!1,file:t,churn:null,coChangePartners:[],suppressionsInFile:0};if(!t)return n;let r=Qr(e);if(!r)return n;let i=Tt(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:ri(e).byFile.get(t)??0}}function Rx(e){return e.includes("/")||e.includes("\\")||/\.[A-Za-z0-9]+(?::\d+(?:-\d+)?)?$/.test(e)}function rr(e,t){let{scope:n,minLoc:r=10,limit:i=30,scanLimit:o}=t??{},s=new L(e);return ve({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)=>Ix(a,c,r),orderResults:(a,c)=>c.score-a.score||c.loc-a.loc,limit:i})}function Ix(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 Vl(e){let t=Lx(e),{breakdown:n}=wx(e),r=ql(n,"risk"),i=ql(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:vx(e),validation:Nx(e),suppressions:e.suppressions,actions:t,topComplexity:e.complexity.top,warnings:e.warnings.length>0?e.warnings:void 0}}function vx(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:Dx(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 Dx(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:hn(n.score*Math.log2(1+r))}}).sort((n,r)=>r.weighted-n.weighted):null}function Nx(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?hn(i/r.size):0,c=s>0?hn(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=hn(p/d.size);l[u]={flaggedFiles:d.size,fixDensity:h,lift:c>0?hn(h/c):null}}return{flaggedFiles:r.size,flaggedFixDensity:a,baselineFixDensity:c,ratio:r.size>0&&c>0?hn(a/c):null,byCategory:l}}function hn(e){return Math.round(e*100)/100}function Lx(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 _x={"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 ql(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 wx(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:_x[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 Ex}from"v8";var kx=64*1024*1024;function ts(){let e=globalThis.gc;if(!e)return;let t=Ex();t.heap_size_limit-t.used_heap_size<kx||e()}var Px=50,Fx=75e3,Tx=5e3,Wl=2500,ir=["overview","dead","isolated","cycles","similar","extract-candidates","wrapper-candidates","passthrough-candidates","stale-abstractions","drift","complexity-hotspots","git-evidence","suppressions"],Ax={overview:(e,t,n,r)=>({phase:"overview",statsResult:r,warnings:n.warnings}),dead:(e,t,n)=>({phase:"dead",dead:$x(e,t,n)}),isolated:(e,t,n)=>({phase:"isolated",isolated:jx(e,t,n)}),cycles:(e,t,n)=>({phase:"cycles",realCycleCount:Bx(e,t,n)}),similar:(e,t,n)=>({phase:"similar",similarCount:Hx(e,t,n)}),"extract-candidates":(e,t,n)=>({phase:"extract-candidates",extractCount:qx(e,t,n)}),"wrapper-candidates":(e,t,n)=>({phase:"wrapper-candidates",wrappers:Vx(e,t,n)}),"passthrough-candidates":(e,t,n)=>({phase:"passthrough-candidates",passthroughs:Wx(e,t,n)}),"stale-abstractions":(e,t,n)=>({phase:"stale-abstractions",stale:Ux(e,t,n)}),drift:(e,t,n)=>({phase:"drift",drift:zx(e,t,n)}),"complexity-hotspots":(e,t,n)=>({phase:"complexity-hotspots",complexity:Qx(e,t,n)}),"git-evidence":(e,t,n)=>({phase:"git-evidence",gitEvidence:Gx(e,n)}),suppressions:(e,t,n)=>({phase:"suppressions",suppressions:Jx(e,n)})};function ns(e,t,n={}){return Mx(e,n.full===!0,(r,i)=>Ax[t](e,n.scope,i,r))}function Mx(e,t,n){let r=Ne(e),i=Kx(r,t);try{return n(r,i)}finally{po(e,{semanticProvider:!0}),ts()}}function rs(e){return Vl(Ox(e))}function Ox(e){let t=ke(e,"overview");return{statsResult:t.statsResult,warnings:t.warnings,dead:ke(e,"dead").dead,isolated:ke(e,"isolated").isolated,realCycleCount:ke(e,"cycles").realCycleCount,similarCount:ke(e,"similar").similarCount,extractCount:ke(e,"extract-candidates").extractCount,wrappers:ke(e,"wrapper-candidates").wrappers,passthroughs:ke(e,"passthrough-candidates").passthroughs,stale:ke(e,"stale-abstractions").stale,drift:ke(e,"drift").drift,complexity:ke(e,"complexity-hotspots").complexity,gitEvidence:Ul(e,"git-evidence")?.gitEvidence??null,suppressions:Ul(e,"suppressions")?.suppressions??null}}function Ul(e,t){return e.find(n=>n.phase===t)}function ke(e,t){let n=e.find(r=>r.phase===t);if(!n)throw new Error(`Missing health phase result: ${t}`);return n}function $x(e,t,n){return Pe(e,n,"dead",()=>{let r=Je(e,{scope:t,minLoc:3,skipBarrels:!0,deadCodeOnly:!0,scanLimit:n.candidateScanLimit,semantic:!1});return is(Zx(e,r.symbols))})}function jx(e,t,n){return Pe(e,n,"isolated",()=>{let r=kt(e,{scope:t,minLoc:3,scanLimit:n.candidateScanLimit,semantic:!1});return is(eC(e,r))})}function Bx(e,t,n){return Pe(e,n,"cycles",()=>Et(e,{scope:t}).filter(i=>i.kind==="real").length)}function Hx(e,t,n){return Pe(e,n,"similar",()=>ze(e,{scope:t,minSimilarity:.6,limit:50,minCallees:4,scanLimit:n.candidateScanLimit,semantic:!1}).length)}function qx(e,t,n){return Pe(e,n,"extract-candidates",()=>Pt(e,{scope:t,minLoc:15,minCallees:5,limit:50,scanLimit:n.candidateScanLimit,semantic:!1}).length)}function Vx(e,t,n){return Gl(e,n,"wrapper-candidates",()=>jt(e,{scope:t,maxLoc:15,limit:50,scanLimit:n.candidateScanLimit,semantic:!1}))}function Wx(e,t,n){return Gl(e,n,"passthrough-candidates",()=>Ot(e,{scope:t,maxLoc:15,limit:50,scanLimit:n.candidateScanLimit,semantic:!1}))}function Ux(e,t,n){return Pe(e,n,"stale-abstractions",()=>{let r=$t(e,{scope:t,minLoc:3,limit:50,scanLimit:n.candidateScanLimit,semantic:!1}),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 Gx(e,t){return Pe(e,t,"git-evidence",()=>{let n=Qr(e);if(!n)return null;let r=Tt(e,void 0,{limit:50}),i={};for(let[o,s]of n)i[o]={changes:s.changes,fixChanges:s.fixChanges};return{amplification:Ll(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 Jx(e,t){return Pe(e,t,"suppressions",()=>{let n=ri(e);return{total:n.total,byCategory:{...n.byCategory}}})}function zx(e,t,n){return Pe(e,n,"drift",()=>{let r=Mt(e,{scope:t,semantic:!1});return{count:r.unusedImports+r.layerViolations,unusedImports:r.unusedImports,layerViolations:r.layerViolations}})}function Qx(e,t,n){return Pe(e,n,"complexity-hotspots",()=>{let r=rr(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>Px).length}})}function Kx(e,t){return e.symbols>=Fx||e.documents>=Tx?t?{candidateScanLimit:void 0,releaseCachesBetweenPhases:!0,warnings:["Large index detected; running unbounded health analyses because --full was supplied."]}:{candidateScanLimit:Wl,releaseCachesBetweenPhases:!0,warnings:[`Large index detected; candidate-style health checks scanned their highest-priority ${Wl} symbols. Run "scip-query health --full" for unbounded candidate counts.`]}:{candidateScanLimit:void 0,releaseCachesBetweenPhases:!0,warnings:[]}}function Yx(e,t){t.releaseCachesBetweenPhases&&(po(e),ts())}function Pe(e,t,n,r){Xx(n);try{return r()}finally{Yx(e,t)}}function Gl(e,t,n,r){return Pe(e,t,n,()=>is(r()))}function Xx(e){process.env.SCIP_QUERY_HEALTH_TRACE==="1"&&console.error(`[health] ${e}`)}function Zx(e,t){return t.filter(n=>!le(e,n.relativePath)&&!ne(e,n.symbol,n.relativePath)&&n.kind==="dead-code")}function eC(e,t){return t.filter(n=>!le(e,n.relativePath)&&!ne(e,n.symbol,n.relativePath))}function is(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 os(e,t,n,r={}){let i=F(e,t),o=F(e,n);if(!i||!o)return null;let s=new Set(he(e,i,{semantic:r.semantic}).map(y=>y.symbol)),a=new Set(he(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 Jl}from"fs";import{extname as tC,join as zl}from"path";function ss(e,t,n={}){let{context:r=0}=n,i=nC(t);if(i)return iC(e,i.filePath,i.startLine,i.endLine,r);let o=F(e,t);return o?rC(e,o,r):null}function nC(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 rC(e,t,n){let r=e.get("SELECT language FROM documents WHERE relative_path = ?",t.relativePath),i=zl(e.config.projectRoot,t.relativePath),o;try{o=Jl(i,"utf-8")}catch{return null}let s=o.split(`
567
+ `),a=Math.max(0,t.startLine-n),c=Math.min(s.length-1,t.endLine+n),l=s.slice(a,c+1).join(`
568
+ `);return{symbol:t.symbol,shortName:b(t.symbol),relativePath:t.relativePath,startLine:a,endLine:c,language:r?.language??Ql(t.relativePath),source:l}}function iC(e,t,n,r,i){let o=me(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=zl(e.config.projectRoot,s.relative_path),c;try{c=Jl(a,"utf-8")}catch{return null}let l=c.split(`
569
+ `),u=Math.max(0,n-1-i),m=Math.min(l.length-1,r-1+i),d=l.slice(u,m+1).join(`
570
+ `);return{symbol:`${s.relative_path}:${n}-${r}`,shortName:`${s.relative_path}:${n}-${r}`,relativePath:s.relative_path,startLine:u,endLine:m,language:s.language??Ql(s.relative_path),source:d}}function Ql(e){switch(tC(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 as(e,t={}){let{scope:n,limit:r}=t,i=new L(e),o=pC([...oC(e,n),...cC(e,i,n)]);return fC(o),r?o.slice(0,r):o}function oC(e,t){let n=[];for(let r of sC(e,t)){if(e.isIgnored(r.barrel_path)||e.isIgnored(r.original_path)||Ki(e,r.barrel_path))continue;let i=aC(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 sC(e,t){let n=t?`AND barrel_d.relative_path LIKE '%${t}%'`:"";return e.all(`SELECT DISTINCT
597
571
  barrel_d.id AS barrel_doc_id,
598
572
  barrel_d.relative_path AS barrel_path,
599
573
  gs.id AS symbol_id,
@@ -623,7 +597,7 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
623
597
  -- Only function-level symbols (ending with ().), not module-level
624
598
  AND gs.symbol LIKE '%().'
625
599
  ${n}
626
- ORDER BY barrel_d.relative_path, gs.symbol`)}function dS(e,t){return e.get(`SELECT
600
+ ORDER BY barrel_d.relative_path, gs.symbol`)}function aC(e,t){return e.get(`SELECT
627
601
  SUM(CASE WHEN uses_barrel = 1 THEN 1 ELSE 0 END) AS barrel_consumers,
628
602
  SUM(CASE WHEN uses_barrel = 0 THEN 1 ELSE 0 END) AS direct_consumers
629
603
  FROM (
@@ -652,7 +626,7 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
652
626
  AND consumer_d.id != ?
653
627
  ${e.pathExclusionsFor("consumer_d")}
654
628
  GROUP BY consumer_d.id
655
- )`,t.barrel_doc_id,t.symbol_id,t.barrel_doc_id,t.original_doc_id)}function pS(e,t,n){let r=[];for(let i of fS(e,n))Rl(e,i,i)>0||r.push(...gS(e,t,i));return r}function fS(e,t){return k(e,{scope:t,includeIgnored:!1}).filter(n=>Ci(e,n).length>0)}function gS(e,t,n){return Ci(e,n).filter(r=>r.sourcePath&&!e.isIgnored(r.sourcePath)).flatMap(r=>hS(e,t,n,r.sourcePath))}function hS(e,t,n,r){let i=yS(t,r);return i?[{barrelFile:n,symbol:i.symbol,shortName:h(i.symbol),originalFile:r,barrelConsumers:0,directConsumers:Rl(e,r,n)}]:[]}function Rl(e,t,n){let r=new Set;for(let i of k(e,{includeIgnored:!1}))if(i!==n)for(let o of X(e,i))o.sourcePath===t&&r.add(i);return r.size}function yS(e,t){let n=e.definitionsForFile(t);return n.find(r=>Y(r.symbol)==="method")??n[0]??null}function bS(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 SS(e){e.sort((t,n)=>n.directConsumers-t.directConsumers||t.barrelFile.localeCompare(n.barrelFile)||t.shortName.localeCompare(n.shortName))}function Bo(e,t={}){let{scope:n,minLoc:r=1,limit:i,scanLimit:o}=t,s=t.semantic!==!1,a=CS(e,xS(e,{scope:n,minLoc:r,scanLimit:o}),{semantic:s}),c=IS(a);return i?c.slice(0,i):c}function xS(e,t){let n=Ee(e,{scope:t.scope}).filter(r=>r.isFunctionLike&&!e.isIgnored(r.relativePath)).filter(r=>j(r)>=t.minLoc);return typeof t.scanLimit=="number"&&t.scanLimit>0&&n.sort((r,i)=>j(i)-j(r)||r.relativePath.localeCompare(i.relativePath)),ee(n,t.scanLimit)}function CS(e,t,n){let r=new Map;for(let i of t){let o=_S(e,i,n);if(!o)continue;let s=r.get(o)??[];s.push(RS(i)),r.set(o,s)}return r}function RS(e){return{symbol:e.symbol,shortName:h(e.symbol),file:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:j(e)}}function IS(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 _S(e,t,n){if(n.semantic){let o=fc(e,t);if(o)return o}let r=vS(t.documentation),i=r?LS(r):null;return i||ES(DS(e,t.relativePath,t.startLine,t.endLine,t.leaf),t.leaf)}function vS(e){return at(ct(e))}function DS(e,t,n,r,i){let o=T(e,t);if(!o)return null;let s=o.split(/\r?\n/),a=kS(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,NS(u)))return u}if(u&&u.includes("("))return u}return null}function NS(e){let t=e.replace(/\s+/g," ").trim();return!t.includes("(")||sn(t)>0?!1:/[;{]$/.test(t)||/\)\s*(?::\s*[^={]+)?\s*(?:=>|=|throws\b|where\b|$)/i.test(t)||/\)\s*As\s+.+$/i.test(t)}function LS(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 ES(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${Il(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=wS(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 wS(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 kS(e,t,n,r){let i=Il(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 Il(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}import{existsSync as kl}from"fs";import{join as GS}from"path";import PS from"better-sqlite3";var TS=["node_modules",".git","dist","build","out","coverage","target",".next",".nuxt",".cache",".turbo",".scipquery-cache","__pycache__",".venv","venv"],vr=class{db;config;pathFilter;constructor(t,n){this.config=t,this.pathFilter=n??null,this.db=new PS(t.dbPath,{readonly:!0}),this.db.pragma("busy_timeout = 5000")}isIgnored(t){return this.pathFilter?.isIgnored(t)??!1}get localSymbolPredicate(){return`(
629
+ )`,t.barrel_doc_id,t.symbol_id,t.barrel_doc_id,t.original_doc_id)}function cC(e,t,n){let r=[];for(let i of lC(e,n))Kl(e,i,i)>0||r.push(...uC(e,t,i));return r}function lC(e,t){return T(e,{scope:t,includeIgnored:!1}).filter(n=>Ji(e,n).length>0)}function uC(e,t,n){return Ji(e,n).filter(r=>r.sourcePath&&!e.isIgnored(r.sourcePath)).flatMap(r=>mC(e,t,n,r.sourcePath))}function mC(e,t,n,r){let i=dC(t,r);return i?[{barrelFile:n,symbol:i.symbol,shortName:b(i.symbol),originalFile:r,barrelConsumers:0,directConsumers:Kl(e,r,n)}]:[]}function Kl(e,t,n){let r=new Set;for(let i of T(e,{includeIgnored:!1}))if(i!==n)for(let o of te(e,i))o.sourcePath===t&&r.add(i);return r.size}function dC(e,t){let n=e.definitionsForFile(t);return n.find(r=>ee(r.symbol)==="method")??n[0]??null}function pC(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 fC(e){e.sort((t,n)=>n.directConsumers-t.directConsumers||t.barrelFile.localeCompare(n.barrelFile)||t.shortName.localeCompare(n.shortName))}function ls(e,t={}){let{samples:n=50,scope:r,maxDisagreements:i=5}=t,o=new L(e),s=gC(o.productionCallableDefinitions({scope:r,minLoc:2,requireFunctionLikeSymbol:!0}),n);if(s.length===0||!hC(e,s))return{available:!1,sampleSize:s.length,oracleCoverage:0,scores:[],topDisagreements:[]};let a={references:Yl(),callees:Yl()},c=[],l=0,u=jr(e,s);for(let m of s){let d=ii(m,_t(e,m).map(y=>y.file)),p=ii(m,(u.get(m.symbolId)??[]).map(y=>y.file));if(d.size===0&&p.size===0)continue;l+=1;let h=ii(m,wt(e,m).map(y=>y.file)),f=ii(m,(o.calleeMap([m],{semantic:!1}).get(m.symbolId)??[]).map(y=>y.file));Xl(a.references,m,"references",h,d,c),Xl(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?cs(l/s.length):0,scores:["references","callees"].map(m=>bC(m,a[m])),topDisagreements:c.slice(0,i)}}function Yl(){return{comparedSymbols:0,agreed:0,cheapTotal:0,oracleTotal:0}}function gC(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 hC(e,t){let n=t[0];if(!n)return!1;try{return Fn(e,n.relativePath).availability().available}catch{return!1}}function ii(e,t){let n=new Set;for(let r of t)r!==e.relativePath&&n.add(r);return n}function Xl(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 yC={references:!0,callees:!1};function bC(e,t){let n=t.oracleTotal>0?t.agreed/t.oracleTotal:1,r=t.cheapTotal-t.agreed;return{question:e,comparedSymbols:t.comparedSymbols,precision:yC[e]&&t.cheapTotal>0?cs(t.agreed/t.cheapTotal):null,recall:cs(n),unverified:r}}function cs(e){return Math.round(e*1e3)/1e3}function us(e,t={}){let{scope:n,minLoc:r=1,limit:i,scanLimit:o}=t,s=t.semantic!==!1,a=xC(e,SC(e,{scope:n,minLoc:r,scanLimit:o}),{semantic:s}),c=RC(a);return i?c.slice(0,i):c}function SC(e,t){let n=Me(e,{scope:t.scope}).filter(r=>r.isFunctionLike&&!e.isIgnored(r.relativePath)).filter(r=>B(r)>=t.minLoc);return typeof t.scanLimit=="number"&&t.scanLimit>0&&n.sort((r,i)=>B(i)-B(r)||r.relativePath.localeCompare(i.relativePath)),Ie(n,t.scanLimit)}function xC(e,t,n){let r=new Map;for(let i of t){let o=IC(e,i,n);if(!o)continue;let s=r.get(o)??[];s.push(CC(i)),r.set(o,s)}return r}function CC(e){return{symbol:e.symbol,shortName:b(e.symbol),file:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:B(e)}}function RC(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 IC(e,t,n){if(n.semantic){let o=Tc(e,t);if(o)return o}let r=vC(t.documentation),i=r?LC(r):null;return i||_C(DC(e,t.relativePath,t.startLine,t.endLine,t.leaf),t.leaf)}function vC(e){return bt(St(e))}function DC(e,t,n,r,i){let o=A(e,t);if(!o)return null;let s=o.split(/\r?\n/),a=EC(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,NC(u)))return u}if(u&&u.includes("("))return u}return null}function NC(e){let t=e.replace(/\s+/g," ").trim();return!t.includes("(")||Ln(t)>0?!1:/[;{]$/.test(t)||/\)\s*(?::\s*[^={]+)?\s*(?:=>|=|throws\b|where\b|$)/i.test(t)||/\)\s*As\s+.+$/i.test(t)}function LC(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 _C(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${Zl(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=wC(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 wC(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 EC(e,t,n,r){let i=Zl(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 Zl(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}import{existsSync as au}from"fs";import{join as JC}from"path";import kC from"better-sqlite3";var PC=["node_modules",".git","dist","build","out","coverage","target",".next",".nuxt",".cache",".turbo",".scipquery-cache","__pycache__",".venv","venv"],oi=class{db;config;pathFilter;constructor(t,n){this.config=t,this.pathFilter=n??null,this.db=new kC(t.dbPath,{readonly:!0}),this.db.pragma("busy_timeout = 5000")}isIgnored(t){return this.pathFilter?.isIgnored(t)??!1}get localSymbolPredicate(){return`(
656
630
  EXISTS (
657
631
  SELECT 1
658
632
  FROM defn_enclosing_ranges local_der
@@ -669,8 +643,8 @@ ${d}`,l+=1+d.length,u+=sn(d),r+=d.length+1}let m=jp(c);m&&n.push({...m,start:a,e
669
643
  AND local_m.role = 1
670
644
  ${this.pathExclusionsFor("local_d").trimStart()}
671
645
  )
672
- )`}get pathExclusions(){return this.pathExclusionsFor("d")}get symbolNoise(){return this.symbolNoiseFor("gs")}pathExclusionsFor(...t){return t.flatMap(n=>TS.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 MS from"ignore";import{readFileSync as OS,existsSync as Ho}from"fs";import{dirname as Vo,isAbsolute as _l,join as Wo,relative as FS,resolve as AS}from"path";function zt(e){let t=MS(),n=!1,r=$S(e);for(let i of r)try{let o=OS(i,"utf-8");t.add(o),n=!0}catch{}return n||t.add(jS),{isIgnored:i=>vl(t,e,i),filter:i=>i.filter(o=>!vl(t,e,o))}}function $S(e){let t=[],n=Wo(e,".gitignore");Ho(n)&&t.push(n);let r=Vo(e),i=0;for(;r!==Vo(r)&&i<5;){let o=Wo(r,".gitignore");if(Ho(o)&&t.push(o),Ho(Wo(r,".git")))break;r=Vo(r),i++}return t}var jS=`
646
+ )`}get pathExclusions(){return this.pathExclusionsFor("d")}get symbolNoise(){return this.symbolNoiseFor("gs")}pathExclusionsFor(...t){return t.flatMap(n=>PC.flatMap(r=>[`AND ${n}.relative_path NOT LIKE '${r}/%'`,`AND ${n}.relative_path NOT LIKE '%/${r}/%'`])).join(`
647
+ `)}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 FC from"ignore";import{readFileSync as TC,existsSync as ms}from"fs";import{dirname as ds,isAbsolute as eu,join as ps,relative as AC,resolve as MC}from"path";function yn(e){let t=FC(),n=!1,r=OC(e);for(let i of r)try{let o=TC(i,"utf-8");t.add(o),n=!0}catch{}return n||t.add($C),{isIgnored:i=>tu(t,e,i),filter:i=>i.filter(o=>!tu(t,e,o))}}function OC(e){let t=[],n=ps(e,".gitignore");ms(n)&&t.push(n);let r=ds(e),i=0;for(;r!==ds(r)&&i<5;){let o=ps(r,".gitignore");if(ms(o)&&t.push(o),ms(ps(r,".git")))break;r=ds(r),i++}return t}var $C=`
674
648
  # Dependencies
675
649
  node_modules/
676
650
  vendor/
@@ -727,25 +701,27 @@ Thumbs.db
727
701
 
728
702
  # Type definitions (often noise in queries)
729
703
  *.d.ts
730
- `;function vl(e,t,n){let r=BS(t,n);if(!r)return!1;try{return e.ignores(r)}catch{return!1}}function BS(e,t){if(!t||t===".")return null;if(!_l(t)&&!t.startsWith(".."))return t.replaceAll("\\","/");let n=_l(t)?t:AS(e,t),r=FS(e,n).replaceAll("\\","/");return!r||r==="."||r.startsWith("..")?null:r}import{readFileSync as HS,writeFileSync as VS,existsSync as Nl,mkdirSync as WS}from"fs";import{join as St,resolve as Dl}from"path";import{createHash as qS}from"crypto";import{homedir as US}from"os";var Ll=".scipquery.json",JS={enabled:!1,debounceMs:3e4,cooldownMs:6e4,ignore:[]};function Gt(e){let t=St(e,Ll);if(!Nl(t))return{};try{let n=HS(t,"utf-8");return JSON.parse(n)}catch{return{}}}function El(e){return{...JS,...e.watch}}function zS(e,t){let n=process.env.SCIP_QUERY_CACHE_DIR;if(n)return qo(n);if(t?.dbPath)return qo(Dl(e,t.dbPath));let i=process.env.XDG_CACHE_HOME||St(US(),".cache"),o=qS("sha256").update(Dl(e)).digest("hex").slice(0,12),s=St(i,"scip-query","projects",o);return qo(s)}function Qt(e,t){let n=zS(e,t);return{cacheDir:n,dbPath:St(n,"index.db"),indexPath:St(n,"index.scip"),metaPath:St(n,"meta.json")}}function wl(e,t){let n=St(e,Ll);return Nl(n)||VS(n,JSON.stringify({languages:t,watch:{enabled:!1,debounceMs:3e4,cooldownMs:6e4}},null,2)+`
731
- `),n}function qo(e){return WS(e,{recursive:!0}),e}function nt(){return process.env.SCIP_QUERY_PROJECT_ROOT??process.cwd()}function Dr(e=nt()){let t=Gt(e),n=Qt(e,t),r=process.env.SCIP_QUERY_INDEX_DB??(kl(n.dbPath)?n.dbPath:GS(e,"index.db"));return{projectRoot:e,config:t,paths:n,dbPath:r}}function Uo(e){return Dr(e).dbPath}function QS(){let{projectRoot:e,config:t,paths:n,dbPath:r}=Dr();kl(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=zt(e);return new vr(i,o)}function rt(e){let t=QS();try{return e(t)}finally{t.close()}}function Jo(e,t){return t.concat([e])}function Kt(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 Pl(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 KS(e)}}function KS(e){throw new Error(`Unhandled watcher status: ${JSON.stringify(e)}`)}import{spawnSync as YS}from"child_process";function zo(e){let t=YS(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 Tl(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function $e(e){return e+1}function be(e,t){return`${$e(e)}-${$e(t)}`}function Se(e,t,n){return`${e}:${be(t,n)}`}var N={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 ZS=XS(import.meta.url),{version:Nr}=rx(),Lr="__health-phase",Er="__diff-impact-batch",ex=10,tx=75e3,nx=5e3,Ml=2500;function rx(){for(let e of["../package.json","../../package.json"])try{return ZS(e)}catch{}return{version:"0.0.0"}}function On(e){console.log(`Heuristic ${e}: review before acting; these are candidates, not exact compiler facts.
733
- `)}function Fl(e,t,n){let r=Te(e);return r.symbols>=tx||r.documents>=nx?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 ${Ml} candidates with semantic enrichment disabled. Run "scip-query ${t} --full" for the unbounded semantic pass.`),{scanLimit:Ml,semantic:!1}):{semantic:!0}}function Al(e){let t=Mn.map(n=>ix(n,e));return Po(t)}function ix(e,t){let n=process.argv[1]??Ol(import.meta.url),r=[e];return t.scope&&r.push("--scope",t.scope),t.full&&r.push("--full"),zo({cliPath:n,command:Lr,args:r,label:`Health phase "${e}"`})}function $l(e,t){if(t){console.log(JSON.stringify(e,null,2));return}if(console.log(`
734
- Codebase Health Score: ${e.score}/100
735
- `),console.log(` ${e.overview.documents} files | ${e.overview.symbols} symbols | ${Kt(e.overview.indexSizeBytes)}
704
+ `;function tu(e,t,n){let r=jC(t,n);if(!r)return!1;try{return e.ignores(r)}catch{return!1}}function jC(e,t){if(!t||t===".")return null;if(!eu(t)&&!t.startsWith(".."))return t.replaceAll("\\","/");let n=eu(t)?t:MC(e,t),r=AC(e,n).replaceAll("\\","/");return!r||r==="."||r.startsWith("..")?null:r}import{readFileSync as BC,writeFileSync as HC,existsSync as ru,mkdirSync as qC}from"fs";import{join as Bt,resolve as nu}from"path";import{createHash as VC}from"crypto";import{homedir as WC}from"os";var iu=".scipquery.json",UC={enabled:!1,debounceMs:3e4,cooldownMs:6e4,ignore:[]};function bn(e){let t=Bt(e,iu);if(!ru(t))return{};try{let n=BC(t,"utf-8");return JSON.parse(n)}catch{return{}}}function ou(e){return{...UC,...e.watch}}function GC(e,t){let n=process.env.SCIP_QUERY_CACHE_DIR;if(n)return fs(n);if(t?.dbPath)return fs(nu(e,t.dbPath));let i=process.env.XDG_CACHE_HOME||Bt(WC(),".cache"),o=VC("sha256").update(nu(e)).digest("hex").slice(0,12),s=Bt(i,"scip-query","projects",o);return fs(s)}function Sn(e,t){let n=GC(e,t);return{cacheDir:n,dbPath:Bt(n,"index.db"),indexPath:Bt(n,"index.scip"),metaPath:Bt(n,"meta.json")}}function su(e,t){let n=Bt(e,iu);return ru(n)||HC(n,JSON.stringify({languages:t,watch:{enabled:!1,debounceMs:3e4,cooldownMs:6e4}},null,2)+`
705
+ `),n}function fs(e){return qC(e,{recursive:!0}),e}function Be(){return process.env.SCIP_QUERY_PROJECT_ROOT??process.cwd()}function si(e=Be()){let t=bn(e),n=Sn(e,t),r=process.env.SCIP_QUERY_INDEX_DB??(au(n.dbPath)?n.dbPath:JC(e,"index.db"));return{projectRoot:e,config:t,paths:n,dbPath:r}}function gs(e){return si(e).dbPath}function zC(){let{projectRoot:e,config:t,paths:n,dbPath:r}=si();au(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=yn(e);return new oi(i,o)}function Ye(e){let t=zC();try{return e(t)}finally{t.close()}}function hs(e,t){return t.concat([e])}function xn(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 cu(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 QC(e)}}function QC(e){throw new Error(`Unhandled watcher status: ${JSON.stringify(e)}`)}import{spawnSync as KC}from"child_process";function ys(e){let t=KC(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?`:
706
+ ${n}`:""}`)}return JSON.parse(t.stdout)}function lu(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function ye(e){return e+1}function ue(e,t){return`${ye(e)}-${ye(t)}`}function se(e,t,n){return`${e}:${ue(t,n)}`}var _={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 XC=YC(import.meta.url),{version:ai}=nR(),ci="__health-phase",li="__diff-impact-batch",ZC=10,eR=75e3,tR=5e3,uu=2500;function nR(){for(let e of["../package.json","../../package.json"])try{return XC(e)}catch{}return{version:"0.0.0"}}function or(e){console.log(`Heuristic ${e}: review before acting; these are candidates, not exact compiler facts.
707
+ `)}function du(e,t,n){let r=Ne(e);return r.symbols>=eR||r.documents>=tR?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 ${uu} candidates with semantic enrichment disabled. Run "scip-query ${t} --full" for the unbounded semantic pass.`),{scanLimit:uu,semantic:!1}):{semantic:!0}}function pu(e){let t=ir.map(n=>rR(n,e));return rs(t)}function rR(e,t){let n=process.argv[1]??mu(import.meta.url),r=[e];return t.scope&&r.push("--scope",t.scope),t.full&&r.push("--full"),ys({cliPath:n,command:ci,args:r,label:`Health phase "${e}"`})}function fu(e,t){if(t){console.log(JSON.stringify(e,null,2));return}if(console.log(`
708
+ 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)
709
+ `),console.log(` ${e.overview.documents} files | ${e.overview.symbols} symbols | ${xn(e.overview.indexSizeBytes)}
736
710
  `),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
711
  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}`)}e.actions.length===0&&console.log(`
739
- No issues found. Codebase is clean.`)}function jl(e){return rt(t=>{let n=Ut(t,{base:e.base});if(n.note)return Sr(t,{base:e.base});if(n.changedFiles.length===0)return Sr(t,{base:e.base});let r=[];for(let i of Tl(n.changedFiles,ex))r.push(ox(i,e));return Cr(n.changedFiles,r)})}function ox(e,t){let n=process.argv[1]??Ol(import.meta.url),r=[];return t.base&&r.push("--base",t.base),zo({cliPath:n,command:Er,args:r,env:{...process.env,SCIP_QUERY_DIFF_IMPACT_FILES:JSON.stringify(e)},label:"Diff-impact batch"})}function Bl(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:"),N.list(e.changedSymbols,t=>` ${t.file} ${t.shortName} (fan-in: ${t.fanIn})`)),e.affectedConsumers.length>0&&(console.log(`
740
- Affected consumer files:`),N.list(e.affectedConsumers,t=>` ${t.file} (${t.consumedSymbols} symbol(s))`))}var Hl=Jo,D=(e=>parseInt(e,10)),wr=(e=>{let t=parseInt(e,10);if(!Number.isFinite(t)||t<1)throw new Error(`Expected a positive integer, got ${e}`);return t}),kr=parseFloat,Go=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 S(e,t=[]){return{category:e,examples:t}}import{existsSync as Xo,mkdirSync as mx,symlinkSync as dx,readlinkSync as px,unlinkSync as fx}from"fs";import{join as Pr,dirname as Ul,resolve as Zo}from"path";import{homedir as Jl,platform as gx}from"os";import{fileURLToPath as hx}from"url";import{execFileSync as Vl}from"child_process";import{platform as Qo,arch as lx}from"os";import{execFileSync as sx}from"child_process";import{platform as ax}from"os";var cx=ax()==="win32";function xe(e){let t=cx?"where":"which";try{return sx(t,[e],{stdio:"pipe"}),!0}catch{return!1}}var Wl="v0.7.0";function Ko(){return xe("scip")}function ux(){let e=Qo(),t=lx(),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/${Wl}/${o}`,filename:o}}function Yo(){let e=ux();console.log("\nThe `scip` CLI is required but not found on PATH.\n"),Qo()==="darwin"?(console.log("Install via Homebrew:"),console.log(` brew install sourcegraph/scip/scip
712
+ Top Complexity Hotspots:`);for(let r of e.topComplexity)console.log(` ${r.score.toFixed(1).padStart(6)} ${r.symbol}`)}if(iR(e),e.scoreBreakdown.length>0){console.log(`
713
+ 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(`
714
+ No issues found. Codebase is clean.`)}function iR(e){let t=e.axes;if(console.log(`
715
+ 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 gu(e){return Ye(t=>{let n=fn(t,{base:e.base});if(n.note)return pn(t,{base:e.base});if(n.changedFiles.length===0)return pn(t,{base:e.base});let r=[];for(let i of lu(n.changedFiles,ZC))r.push(oR(i,e));return Xr(n.changedFiles,r)})}function oR(e,t){let n=process.argv[1]??mu(import.meta.url),r=[];return t.base&&r.push("--base",t.base),ys({cliPath:n,command:li,args:r,env:{...process.env,SCIP_QUERY_DIFF_IMPACT_FILES:JSON.stringify(e)},label:"Diff-impact batch"})}function hu(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:"),_.list(e.changedSymbols,t=>` ${t.file} ${t.shortName} (fan-in: ${t.fanIn})`)),e.affectedConsumers.length>0&&(console.log(`
716
+ Affected consumer files:`),_.list(e.affectedConsumers,t=>` ${t.file} (${t.consumedSymbols} symbol(s))`))}var yu=hs,R=(e=>parseInt(e,10)),ui=(e=>{let t=parseInt(e,10);if(!Number.isFinite(t)||t<1)throw new Error(`Expected a positive integer, got ${e}`);return t}),sr=parseFloat,bs=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 x(e,t=[]){return{category:e,examples:t}}import{existsSync as Rs,mkdirSync as mR,symlinkSync as dR,readlinkSync as pR,unlinkSync as fR}from"fs";import{join as ar,dirname as Cu,resolve as Is}from"path";import{homedir as vs,platform as gR}from"os";import{fileURLToPath as hR}from"url";import{execFileSync as bu}from"child_process";import{platform as Ss,arch as lR}from"os";import{execFileSync as sR}from"child_process";import{platform as aR}from"os";var cR=aR()==="win32";function De(e){let t=cR?"where":"which";try{return sR(t,[e],{stdio:"pipe"}),!0}catch{return!1}}var Su="v0.7.0";function xs(){return De("scip")}function uR(){let e=Ss(),t=lR(),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/${Su}/${o}`,filename:o}}function Cs(){let e=uR();console.log("\nThe `scip` CLI is required but not found on PATH.\n"),Ss()==="darwin"?(console.log("Install via Homebrew:"),console.log(` brew install sourcegraph/scip/scip
741
717
  `),console.log("Or download manually:")):console.log("Download from:"),console.log(e?` ${e.url}
742
- `:` https://github.com/sourcegraph/scip/releases/tag/${Wl}
743
- `),console.log("After installing, ensure `scip` is on your PATH and run `scip-query reindex`.")}function ql(e){if(Qo()==="darwin"&&xe("brew")){e("Installing scip CLI via Homebrew...");try{if(Vl("brew",["install","sourcegraph/scip/scip"],{stdio:"inherit",timeout:3e5,env:process.env}),xe("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(xe("go")){e("Installing scip CLI via go install...");try{if(Vl("go",["install","github.com/sourcegraph/scip/cmd/scip@latest"],{stdio:"inherit",timeout:3e5,env:process.env}),xe("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 yx=gx()==="win32",es=["concrete-plan","scip-explore","scip-debloat","scip-verify","scip-language-playbook"];function zl(e={}){let t=e.quiet?()=>{}:console.log,n=hx(import.meta.url),r=Zo(Ul(n),"..","skills"),i=[Pr(Jl(),".claude","skills"),Pr(Jl(),".codex","skills")],o={installed:[],skipped:[],alreadyLinked:[]};for(let s of i){let a=Ul(s);if(!Xo(a))continue;mx(s,{recursive:!0});let c=s.includes(".codex")?"Codex":"Claude";for(let l of es){let u=Pr(r,l),m=Pr(s,l);if(!Xo(u)){o.skipped.push(`${c}/${l}`);continue}if(Xo(m)){try{let d=px(m);if(Zo(d)===Zo(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}fx(m)}dx(u,m,yx?"junction":"dir"),o.installed.push(`${c}/${l}`),t(` done: ${l} \u2192 ${c}`)}}return o}import{existsSync as Ku}from"fs";import{execFileSync as wR}from"child_process";import{closeSync as kR,existsSync as ys,mkdirSync as $u,mkdtempSync as PR,openSync as TR,readFileSync as MR,renameSync as bs,rmSync as Ss,writeFileSync as ju}from"fs";import{basename as Br,dirname as Rt,extname as OR,join as je}from"path";import bx from"better-sqlite3";import{execFileSync as Sx}from"child_process";import{existsSync as xx,readdirSync as Cx,readFileSync as Rx}from"fs";import{extname as Tr,join as Gl}from"path";function it(e){let t=new Set((e.extensions??Ca).map(o=>o.toLowerCase()));if(t.size===0)return{scanned:0,inserted:0,existing:0};if(!xx(e.dbPath))throw new Error(`SCIP SQLite database not found at ${e.dbPath}`);let n=zt(e.projectRoot),r=Ix(e.projectRoot,t).filter(o=>!n.isIgnored(o)),i=new bx(e.dbPath);try{let o=vx(i,r),s=i.prepare(`INSERT OR IGNORE INTO documents (language, relative_path, position_encoding, text)
744
- VALUES (?, ?, NULL, ?)`),c=i.transaction(u=>{let m=0;for(let d of u){if(o.has(d))continue;let p=Rx(Gl(e.projectRoot,d),"utf-8"),y=s.run(Dx(d),d,p);m+=Number(y.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 Ix(e,t){let n=_x(e,t);if(n)return n;let r=[],i=o=>{let s=o?Gl(e,o):e,a;try{a=Cx(s,{withFileTypes:!0})}catch{return}for(let c of a){if(Ri.has(c.name))continue;let l=o?`${o}/${c.name}`:c.name;if(c.isDirectory()){i(l);continue}t.has(Tr(c.name).toLowerCase())&&r.push(l)}};return i(""),r.sort()}function _x(e,t){try{return Sx("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}).split(`
745
- `).filter(r=>r&&t.has(Tr(r).toLowerCase())).sort()}catch{return null}}function vx(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 Dx(e){return Tr(e).toLowerCase()===".vue"?"vue":Tr(e).replace(/^\./,"").toLowerCase()||"source"}import{execFileSync as Nx}from"child_process";import{existsSync as Lx,readdirSync as Kl}from"fs";import{extname as Yl,join as Xl}from"path";var Ex=new Set([".git",".hg",".svn",".idea",".vscode","node_modules","vendor","dist","build","target","bin","obj",".dart_tool",".gradle",".next",".venv","venv","__pycache__"]),wx=[{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 xt(e){let t=[],n=kx(e),r=Ox(e);for(let i of wx){if(Px(e,i.files)){t.push(i.language);continue}if(Tx(n,i.globs)){t.push(i.language);continue}Ax(r,i.extensions)&&t.push(i.language)}return t.includes("typescript")&&Ql(t,"javascript"),t.includes("cpp")&&!r.has(".c")&&Ql(t,"c"),t}function kx(e){try{return Kl(e)}catch{return[]}}function Px(e,t){return t?.length?t.some(n=>Lx(Xl(e,n))):!1}function Tx(e,t){return t?.length?e.some(n=>t.some(r=>Mx(n,r))):!1}function Mx(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 Ox(e){let t=Fx(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=Kl(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=Xl(i,s.name);if(s.isDirectory()){Ex.has(s.name)||r.push(a);continue}let c=Yl(s.name).toLowerCase();c&&n.add(c)}}return n}function Fx(e){try{let t=Nx("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(`
746
- `)){if(!r)continue;let i=Yl(r).toLowerCase();i&&n.add(i)}return n}catch{return null}}function Ax(e,t){return t?.length?t.some(n=>e.has(n)):!1}function Ql(e,t){let n=e.indexOf(t);n!==-1&&e.splice(n,1)}import{existsSync as Zl,readdirSync as $x}from"fs";import{join as ts}from"path";var jx={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",eu(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",eu(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=ts(e,"vendor","bin","scip-php"),r=ts(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",Zl(r)?r:Zl(n)?n:t]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function Mr(e){return jx[e]}function eu(e,t){let n;try{n=$x(e)}catch{return null}for(let r of n)if(t.some(i=>r.endsWith(i)))return ts(e,r);return null}import{readFileSync as Bx,writeFileSync as Hx}from"fs";import{create as ns}from"@bufbuild/protobuf";import{deserializeSCIP as Vx,serializeSCIP as Wx,DocumentSchema as qx,IndexSchema as Ux,SymbolInformationSchema as Jx}from"@c4312/scip";function zx(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let t=Gx(e),n=Qx(e.flatMap(i=>i.documents??[])),r=nu(e.flatMap(i=>i.externalSymbols??[]));return ns(Ux,{metadata:t,documents:n,externalSymbols:r})}function tu(e,t){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let n=e.map(i=>Vx(Bx(i))),r=zx(n);return Hx(t,Buffer.from(Wx(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function Gx(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 Qx(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,ns(qx,{language:r.language||n.language,relativePath:r.relativePath||n.relativePath,occurrences:[...r.occurrences,...n.occurrences],symbols:nu([...r.symbols,...n.symbols]),text:Yx(r.text,n.text),positionEncoding:r.positionEncoding||n.positionEncoding}))}return[...t.values()]}function nu(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,ns(Jx,{symbol:r.symbol,documentation:Xx([...r.documentation,...n.documentation]),relationships:Kx([...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 Kx(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 Yx(e,t){return e?t?e.length>=t.length?e:t:e:t}function Xx(e){return[...new Set(e)]}import{execFileSync as Zx}from"child_process";import{createHash as eC}from"crypto";import{readdirSync as tC,readFileSync as nC}from"fs";import{join as ru}from"path";function rC(e){return(iC(e)??oC(e)).filter(t=>t&&!iu(t)).sort()}function Or(e){return rC(e).map(t=>{let n=ru(e,t);try{let r=nC(n);return{path:t,size:r.byteLength,hash:eC("sha256").update(r).digest("hex")}}catch{return{path:t,size:-1,hash:"unreadable"}}})}function iC(e){try{return Zx("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:50*1024*1024,stdio:["ignore","pipe","ignore"]}).split(`
747
- `).filter(Boolean)}catch{return null}}function oC(e){let t=[],n=[""];for(;n.length>0;){let r=n.pop(),i=r?ru(e,r):e,o;try{o=tC(i,{withFileTypes:!0})}catch{continue}for(let s of o){let a=r?`${r}/${s.name}`:s.name;if(s.isDirectory()){iu(a)||n.push(a);continue}t.push(a)}}return t}function iu(e){return e.split("/").some(n=>sC.has(n))||e.endsWith(".db")||e.endsWith(".db-wal")||e.endsWith(".db-shm")||e.endsWith(".scip")}var sC=new Set([".git","node_modules",".scipquery-cache",".stryker-tmp","dist","build","coverage",".next",".nuxt","target"]);import{readFileSync as aC,writeFileSync as cC}from"fs";import{create as ou}from"@bufbuild/protobuf";import{deserializeSCIP as lC,DocumentSchema as uC,IndexSchema as mC,serializeSCIP as dC,SymbolRole as pC}from"@c4312/scip";function su(e){let t;try{t=lC(aC(e))}catch{return{removedDefinitionOccurrences:0,touchedDocuments:0}}let n=fC(t);return n.removedDefinitionOccurrences>0&&cC(e,Buffer.from(dC(n.index))),{removedDefinitionOccurrences:n.removedDefinitionOccurrences,touchedDocuments:n.touchedDocuments}}function fC(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&pC.Definition)===0||t.has(a.symbol)?!0:(n+=1,!1));if(s.length===o.occurrences.length){i.push(o);continue}r+=1,i.push(ou(uC,{language:o.language,relativePath:o.relativePath,occurrences:s,symbols:o.symbols,text:o.text,positionEncoding:o.positionEncoding}))}return{index:n===0?e:ou(mC,{metadata:e.metadata,documents:i,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:n,touchedDocuments:r}}import{execFile as gC}from"child_process";import{existsSync as Fr,renameSync as is,rmSync as os}from"fs";import{cpus as hC}from"os";import{join as au}from"path";function yC(e,t,n){if(!e.defaultOutputPath)return;let r=au(t,e.defaultOutputPath);n!==r&&Fr(r)&&is(r,n)}function bC(e,t,n){if(!e.defaultOutputPath)return null;let r=au(t,e.defaultOutputPath);if(r===n)return null;let i=`${n}.default-output-backup`;return os(i,{force:!0}),Fr(r)?(is(r,i),{defaultOutputPath:r,backupPath:i}):{defaultOutputPath:r,backupPath:null}}function SC(e){e&&(os(e.defaultOutputPath,{force:!0}),e.backupPath&&Fr(e.backupPath)&&is(e.backupPath,e.defaultOutputPath))}function xC(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,hC().length-1));return Math.max(1,Math.min(e,Math.floor(r)))}async function cu(e,t,n,r){let i=e.filter(l=>l.config.defaultOutputPath),o=e.filter(l=>!l.config.defaultOutputPath),s=[],a=xC(o.length,r),c=await RC(o,a,l=>rs(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 rs(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 rs(l,t,n));return s.sort((l,u)=>e.findIndex(m=>m.language===l.language)-e.findIndex(m=>m.language===u.language))}async function rs(e,t,n){n(`Indexing ${e.language} with ${e.resolvedBinary}...`),os(e.scipPath,{force:!0});let r=bC(e.config,t,e.scipPath);try{await CC(e.binary,e.args,{cwd:t,env:e.env,maxBuffer:50*1024*1024}),yC(e.config,t,e.scipPath)}catch(i){let o=i instanceof Error?i.message:String(i),s=`${e.resolvedBinary} indexer failed: ${o.split(`
748
- `)[0]}`;return n(`Skipping ${e.language}: ${s}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:s}}}finally{SC(r)}if(!Fr(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 CC(e,t,n){return new Promise((r,i)=>{gC(e,[...t],n,o=>{o?i(o):r()})})}async function RC(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 as}from"child_process";import{existsSync as ss,readFileSync as IC}from"fs";import{createRequire as _C}from"module";import{platform as vC}from"os";import{dirname as lu,join as Ar}from"path";var DC=_C(import.meta.url);function cs(e){return[e.indexerBinary,...e.binaryAliases??[]]}function $r(e){let t=cs(e);return t.length===1?t[0]:t.join(" or ")}function Yt(e){for(let t of cs(e))if(xe(t))return t;return LC(e)}function uu(e){return Yt(e)!==null||NC(e)}function NC(e){return mu(e)!==null}function LC(e){let t=mu(e);if(!t)return null;let r=JSON.parse(IC(t,"utf8")).bin;if(!r)return null;if(typeof r=="string")return Ar(lu(t),r);for(let i of cs(e)){let o=r[i];if(o)return Ar(lu(t),o)}return null}function mu(e){if(!e.bundledNpmPackage)return null;try{return DC.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function ls(e,t){for(let n of e.projectLocalBinaries??[]){let r=Ar(t,n);if(ss(r))return r}return null}function EC(e,t){return ls(e,t)??Yt(e)}function du(e,t=process.env,n=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||us(n,t))return t;let r=gu(n,t);return r?{...t,DOTNET_ROOT:r}:t}function pu(e,t){let n=$r(e),r=t?EC(e,t):Yt(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=wC(r);return{language:e.language,binaryLabel:n,installed:!0,runnable:i.runnable,resolvedBinary:r,installUrl:e.installUrl,note:i.note}}function fu(e,t){let n=e.installMethods,r=$r(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(xe(i.prerequisite)){t(`Installing ${r} via ${i.label}...`);try{as(i.binary,i.args,{stdio:"inherit",timeout:3e5,env:process.env});let o=Yt(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 wC(e){if(us(e,process.env))return{runnable:!0};let t=gu(e,process.env);if(t)return{runnable:!0,note:`using .NET 9 runtime from ${t}`};let n=hu(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 gu(e,t){for(let n of hu(t))if(us(e,{...t,DOTNET_ROOT:n}))return n;return null}function hu(e){let t=[],n=e.DOTNET_ROOT;if(n&&ss(n)&&t.push(n),vC()==="darwin"&&xe("brew"))try{let r=as("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),i=Ar(r,"libexec");ss(i)&&!t.includes(i)&&t.push(i)}catch{}return t}function us(e,t){try{return as(e,["--version"],{stdio:"pipe",env:t}),!0}catch{return!1}}import uR from"better-sqlite3";import{existsSync as mR,readFileSync as dR,writeFileSync as pR}from"fs";import{dirname as fR,join as gR,resolve as hR}from"path";import{readFileSync as kC,rmSync as PC,statSync as TC,mkdtempSync as MC}from"fs";import{cpus as OC,tmpdir as FC}from"os";import{join as ms}from"path";import{Worker as AC}from"worker_threads";function yu(e){return e.length>=8&&Su(e.length)>1}function bu(e){let t=Su(e.vueFiles.length),n=jC(e.vueFiles),r=HC(n,t),i=new URL("./augment-vue-worker.js",import.meta.url),o=MC(ms(FC(),"scip-query-vue-workers-")),s=new SharedArrayBuffer(4),a=new Int32Array(s),c=$C(),l=Date.now();try{for(let m=0;m<r.length;m++)new AC(i,{workerData:{projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,tasks:r[m],resultPath:ms(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(kC(ms(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{PC(o,{recursive:!0,force:!0})}}function Su(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,OC().length-1));return Math.max(1,Math.min(e,n))}function $C(){let e=Number(process.env.SCIP_QUERY_AUGMENT_VUE_WORKER_TIMEOUT_MS??0);return Number.isFinite(e)&&e>0?e:3e5}function jC(e){let t=BC(),n=[];for(let r of e){let i=xu(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 BC(){return Number.POSITIVE_INFINITY}function HC(e,t){let n=Array.from({length:t},()=>({tasks:[],weight:0})),r=e.map(i=>({task:i,weight:VC(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 VC(e){return Number.isFinite(e.endOffset)?Math.max(1,e.endOffset-e.startOffset):Math.max(1,xu(e.fileName)-e.startOffset)}function xu(e){try{return TC(e).size}catch{return 1}}import{createRequire as WC}from"module";import{existsSync as qC,readFileSync as ps}from"fs";import{dirname as Cu,extname as UC,join as Ru,relative as JC,resolve as zC}from"path";import{pathToFileURL as GC}from"url";function QC(e){e.transaction(()=>{e.prepare(`
718
+ `:` https://github.com/sourcegraph/scip/releases/tag/${Su}
719
+ `),console.log("After installing, ensure `scip` is on your PATH and run `scip-query reindex`.")}function xu(e){if(Ss()==="darwin"&&De("brew")){e("Installing scip CLI via Homebrew...");try{if(bu("brew",["install","sourcegraph/scip/scip"],{stdio:"inherit",timeout:3e5,env:process.env}),De("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(De("go")){e("Installing scip CLI via go install...");try{if(bu("go",["install","github.com/sourcegraph/scip/cmd/scip@latest"],{stdio:"inherit",timeout:3e5,env:process.env}),De("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 yR=gR()==="win32",Ds=["concrete-plan","scip-ai-cleanup","scip-explore","scip-debloat","scip-doc-reconcile","scip-maintainability","scip-verify","scip-language-playbook"];function Ru(e={}){let t=e.quiet?()=>{}:console.log,n=hR(import.meta.url),r=Is(Cu(n),"..","skills"),i=[ar(vs(),".claude","skills"),ar(vs(),".codex","skills"),ar(vs(),".agents","skills")],o={installed:[],skipped:[],alreadyLinked:[]};for(let s of i){let a=Cu(s);if(!Rs(a))continue;mR(s,{recursive:!0});let c=bR(s);for(let l of Ds){let u=ar(r,l),m=ar(s,l);if(!Rs(u)){o.skipped.push(`${c}/${l}`);continue}if(Rs(m)){try{let d=pR(m);if(Is(d)===Is(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}fR(m)}dR(u,m,yR?"junction":"dir"),o.installed.push(`${c}/${l}`),t(` done: ${l} \u2192 ${c}`)}}return o}function bR(e){return e.includes(".codex")?"Codex":e.includes(".agents")?"Agents":"Claude"}import{existsSync as Dm}from"fs";import{execFileSync as kv}from"child_process";import{closeSync as Pv,existsSync as qs,mkdirSync as pm,mkdtempSync as Fv,openSync as Tv,readFileSync as Av,renameSync as Vs,rmSync as Ws,writeFileSync as fm}from"fs";import{basename as bi,dirname as Vt,extname as Mv,join as Xe}from"path";import SR from"better-sqlite3";import{execFileSync as xR}from"child_process";import{existsSync as CR,readdirSync as RR,readFileSync as IR}from"fs";import{extname as mi,join as Iu}from"path";function pt(e){let t=new Set((e.extensions??ec).map(o=>o.toLowerCase()));if(t.size===0)return{scanned:0,inserted:0,existing:0};if(!CR(e.dbPath))throw new Error(`SCIP SQLite database not found at ${e.dbPath}`);let n=yn(e.projectRoot),r=vR(e.projectRoot,t).filter(o=>!n.isIgnored(o)),i=new SR(e.dbPath);try{let o=NR(i,r),s=i.prepare(`INSERT OR IGNORE INTO documents (language, relative_path, position_encoding, text)
720
+ VALUES (?, ?, NULL, ?)`),c=i.transaction(u=>{let m=0;for(let d of u){if(o.has(d))continue;let p=IR(Iu(e.projectRoot,d),"utf-8"),h=s.run(LR(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 vR(e,t){let n=DR(e,t);if(n)return n;let r=[],i=o=>{let s=o?Iu(e,o):e,a;try{a=RR(s,{withFileTypes:!0})}catch{return}for(let c of a){if(zi.has(c.name))continue;let l=o?`${o}/${c.name}`:c.name;if(c.isDirectory()){i(l);continue}t.has(mi(c.name).toLowerCase())&&r.push(l)}};return i(""),r.sort()}function DR(e,t){try{return xR("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}).split(`
721
+ `).filter(r=>r&&t.has(mi(r).toLowerCase())).sort()}catch{return null}}function NR(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 LR(e){return mi(e).toLowerCase()===".vue"?"vue":mi(e).replace(/^\./,"").toLowerCase()||"source"}import{execFileSync as _R}from"child_process";import{existsSync as wR,readdirSync as Du}from"fs";import{extname as Nu,join as Lu}from"path";var ER=new Set([".git",".hg",".svn",".idea",".vscode","node_modules","vendor","dist","build","target","bin","obj",".dart_tool",".gradle",".next",".venv","venv","__pycache__"]),kR=[{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 Ht(e){let t=[],n=PR(e),r=MR(e);for(let i of kR){if(FR(e,i.files)){t.push(i.language);continue}if(TR(n,i.globs)){t.push(i.language);continue}$R(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 PR(e){try{return Du(e)}catch{return[]}}function FR(e,t){return t?.length?t.some(n=>wR(Lu(e,n))):!1}function TR(e,t){return t?.length?e.some(n=>t.some(r=>AR(n,r))):!1}function AR(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 MR(e){let t=OR(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=Du(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=Lu(i,s.name);if(s.isDirectory()){ER.has(s.name)||r.push(a);continue}let c=Nu(s.name).toLowerCase();c&&n.add(c)}}return n}function OR(e){try{let t=_R("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(`
722
+ `)){if(!r)continue;let i=Nu(r).toLowerCase();i&&n.add(i)}return n}catch{return null}}function $R(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 _u,readdirSync as jR}from"fs";import{join as Ns}from"path";var BR={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",wu(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",wu(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=Ns(e,"vendor","bin","scip-php"),r=Ns(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",_u(r)?r:_u(n)?n:t]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function di(e){return BR[e]}function wu(e,t){let n;try{n=jR(e)}catch{return null}for(let r of n)if(t.some(i=>r.endsWith(i)))return Ns(e,r);return null}import{readFileSync as HR,writeFileSync as qR}from"fs";import{create as Ls}from"@bufbuild/protobuf";import{deserializeSCIP as VR,serializeSCIP as WR,DocumentSchema as UR,IndexSchema as GR,SymbolInformationSchema as JR}from"@c4312/scip";function zR(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let t=QR(e),n=KR(e.flatMap(i=>i.documents??[])),r=ku(e.flatMap(i=>i.externalSymbols??[]));return Ls(GR,{metadata:t,documents:n,externalSymbols:r})}function Eu(e,t){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let n=e.map(i=>VR(HR(i))),r=zR(n);return qR(t,Buffer.from(WR(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function QR(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 KR(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,Ls(UR,{language:r.language||n.language,relativePath:r.relativePath||n.relativePath,occurrences:[...r.occurrences,...n.occurrences],symbols:ku([...r.symbols,...n.symbols]),text:XR(r.text,n.text),positionEncoding:r.positionEncoding||n.positionEncoding}))}return[...t.values()]}function ku(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,Ls(JR,{symbol:r.symbol,documentation:ZR([...r.documentation,...n.documentation]),relationships:YR([...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 YR(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 XR(e,t){return e?t?e.length>=t.length?e:t:e:t}function ZR(e){return[...new Set(e)]}import{execFileSync as eI}from"child_process";import{createHash as tI}from"crypto";import{readdirSync as nI,readFileSync as rI}from"fs";import{join as Pu}from"path";function iI(e){return(oI(e)??sI(e)).filter(t=>t&&!Fu(t)).sort()}function pi(e){return iI(e).map(t=>{let n=Pu(e,t);try{let r=rI(n);return{path:t,size:r.byteLength,hash:tI("sha256").update(r).digest("hex")}}catch{return{path:t,size:-1,hash:"unreadable"}}})}function oI(e){try{return eI("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:50*1024*1024,stdio:["ignore","pipe","ignore"]}).split(`
723
+ `).filter(Boolean)}catch{return null}}function sI(e){let t=[],n=[""];for(;n.length>0;){let r=n.pop(),i=r?Pu(e,r):e,o;try{o=nI(i,{withFileTypes:!0})}catch{continue}for(let s of o){let a=r?`${r}/${s.name}`:s.name;if(s.isDirectory()){Fu(a)||n.push(a);continue}t.push(a)}}return t}function Fu(e){return e.split("/").some(n=>aI.has(n))||e.endsWith(".db")||e.endsWith(".db-wal")||e.endsWith(".db-shm")||e.endsWith(".scip")}var aI=new Set([".git","node_modules",".scipquery-cache",".stryker-tmp","dist","build","coverage",".next",".nuxt","target"]);import{readFileSync as cI,writeFileSync as lI}from"fs";import{create as Tu}from"@bufbuild/protobuf";import{deserializeSCIP as uI,DocumentSchema as mI,IndexSchema as dI,serializeSCIP as pI,SymbolRole as fI}from"@c4312/scip";function Au(e){let t;try{t=uI(cI(e))}catch{return{removedDefinitionOccurrences:0,touchedDocuments:0}}let n=gI(t);return n.removedDefinitionOccurrences>0&&lI(e,Buffer.from(pI(n.index))),{removedDefinitionOccurrences:n.removedDefinitionOccurrences,touchedDocuments:n.touchedDocuments}}function gI(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&fI.Definition)===0||t.has(a.symbol)?!0:(n+=1,!1));if(s.length===o.occurrences.length){i.push(o);continue}r+=1,i.push(Tu(mI,{language:o.language,relativePath:o.relativePath,occurrences:s,symbols:o.symbols,text:o.text,positionEncoding:o.positionEncoding}))}return{index:n===0?e:Tu(dI,{metadata:e.metadata,documents:i,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:n,touchedDocuments:r}}import{execFile as hI}from"child_process";import{existsSync as fi,renameSync as ws,rmSync as Es}from"fs";import{cpus as yI}from"os";import{join as Mu}from"path";function bI(e,t,n){if(!e.defaultOutputPath)return;let r=Mu(t,e.defaultOutputPath);n!==r&&fi(r)&&ws(r,n)}function SI(e,t,n){if(!e.defaultOutputPath)return null;let r=Mu(t,e.defaultOutputPath);if(r===n)return null;let i=`${n}.default-output-backup`;return Es(i,{force:!0}),fi(r)?(ws(r,i),{defaultOutputPath:r,backupPath:i}):{defaultOutputPath:r,backupPath:null}}function xI(e){e&&(Es(e.defaultOutputPath,{force:!0}),e.backupPath&&fi(e.backupPath)&&ws(e.backupPath,e.defaultOutputPath))}function CI(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,yI().length-1));return Math.max(1,Math.min(e,Math.floor(r)))}async function Ou(e,t,n,r){let i=e.filter(l=>l.config.defaultOutputPath),o=e.filter(l=>!l.config.defaultOutputPath),s=[],a=CI(o.length,r),c=await II(o,a,l=>_s(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 _s(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 _s(l,t,n));return s.sort((l,u)=>e.findIndex(m=>m.language===l.language)-e.findIndex(m=>m.language===u.language))}async function _s(e,t,n){n(`Indexing ${e.language} with ${e.resolvedBinary}...`),Es(e.scipPath,{force:!0});let r=SI(e.config,t,e.scipPath);try{await RI(e.binary,e.args,{cwd:t,env:e.env,maxBuffer:50*1024*1024}),bI(e.config,t,e.scipPath)}catch(i){let o=i instanceof Error?i.message:String(i),s=`${e.resolvedBinary} indexer failed: ${o.split(`
724
+ `)[0]}`;return n(`Skipping ${e.language}: ${s}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:s}}}finally{xI(r)}if(!fi(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 RI(e,t,n){return new Promise((r,i)=>{hI(e,[...t],n,o=>{o?i(o):r()})})}async function II(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 Ps}from"child_process";import{existsSync as ks,readFileSync as vI}from"fs";import{createRequire as DI}from"module";import{platform as NI}from"os";import{dirname as $u,join as gi}from"path";var LI=DI(import.meta.url);function Fs(e){return[e.indexerBinary,...e.binaryAliases??[]]}function hi(e){let t=Fs(e);return t.length===1?t[0]:t.join(" or ")}function Cn(e){for(let t of Fs(e))if(De(t))return t;return wI(e)}function ju(e){return Cn(e)!==null||_I(e)}function _I(e){return Bu(e)!==null}function wI(e){let t=Bu(e);if(!t)return null;let r=JSON.parse(vI(t,"utf8")).bin;if(!r)return null;if(typeof r=="string")return gi($u(t),r);for(let i of Fs(e)){let o=r[i];if(o)return gi($u(t),o)}return null}function Bu(e){if(!e.bundledNpmPackage)return null;try{return LI.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function Ts(e,t){for(let n of e.projectLocalBinaries??[]){let r=gi(t,n);if(ks(r))return r}return null}function EI(e,t){return Ts(e,t)??Cn(e)}function Hu(e,t=process.env,n=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||As(n,t))return t;let r=Wu(n,t);return r?{...t,DOTNET_ROOT:r}:t}function qu(e,t){let n=hi(e),r=t?EI(e,t):Cn(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=kI(r);return{language:e.language,binaryLabel:n,installed:!0,runnable:i.runnable,resolvedBinary:r,installUrl:e.installUrl,note:i.note}}function Vu(e,t){let n=e.installMethods,r=hi(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(De(i.prerequisite)){t(`Installing ${r} via ${i.label}...`);try{Ps(i.binary,i.args,{stdio:"inherit",timeout:3e5,env:process.env});let o=Cn(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 kI(e){if(As(e,process.env))return{runnable:!0};let t=Wu(e,process.env);if(t)return{runnable:!0,note:`using .NET 9 runtime from ${t}`};let n=Uu(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 Wu(e,t){for(let n of Uu(t))if(As(e,{...t,DOTNET_ROOT:n}))return n;return null}function Uu(e){let t=[],n=e.DOTNET_ROOT;if(n&&ks(n)&&t.push(n),NI()==="darwin"&&De("brew"))try{let r=Ps("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),i=gi(r,"libexec");ks(i)&&!t.includes(i)&&t.push(i)}catch{}return t}function As(e,t){try{return Ps(e,["--version"],{stdio:"pipe",env:t}),!0}catch{return!1}}import mv from"better-sqlite3";import{existsSync as dv,readFileSync as pv,writeFileSync as fv}from"fs";import{dirname as gv,join as hv,resolve as yv}from"path";import{readFileSync as PI,rmSync as FI,statSync as TI,mkdtempSync as AI}from"fs";import{cpus as MI,tmpdir as OI}from"os";import{join as Ms}from"path";import{Worker as $I}from"worker_threads";function Gu(e){return e.length>=8&&zu(e.length)>1}function Ju(e){let t=zu(e.vueFiles.length),n=BI(e.vueFiles),r=qI(n,t),i=new URL("./augment-vue-worker.js",import.meta.url),o=AI(Ms(OI(),"scip-query-vue-workers-")),s=new SharedArrayBuffer(4),a=new Int32Array(s),c=jI(),l=Date.now();try{for(let m=0;m<r.length;m++)new $I(i,{workerData:{projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,tasks:r[m],resultPath:Ms(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(PI(Ms(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{FI(o,{recursive:!0,force:!0})}}function zu(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,MI().length-1));return Math.max(1,Math.min(e,n))}function jI(){let e=Number(process.env.SCIP_QUERY_AUGMENT_VUE_WORKER_TIMEOUT_MS??0);return Number.isFinite(e)&&e>0?e:3e5}function BI(e){let t=HI(),n=[];for(let r of e){let i=Qu(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 HI(){return Number.POSITIVE_INFINITY}function qI(e,t){let n=Array.from({length:t},()=>({tasks:[],weight:0})),r=e.map(i=>({task:i,weight:VI(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 VI(e){return Number.isFinite(e.endOffset)?Math.max(1,e.endOffset-e.startOffset):Math.max(1,Qu(e.fileName)-e.startOffset)}function Qu(e){try{return TI(e).size}catch{return 1}}import{createRequire as WI}from"module";import{existsSync as UI,readFileSync as $s}from"fs";import{dirname as Ku,extname as GI,join as Yu,relative as JI,resolve as zI}from"path";import{pathToFileURL as QI}from"url";function KI(e){e.transaction(()=>{e.prepare(`
749
725
  DELETE FROM mentions
750
726
  WHERE chunk_id IN (
751
727
  SELECT c.id
@@ -760,12 +736,12 @@ Affected consumer files:`),N.list(e.affectedConsumers,t=>` ${t.file} (${t.cons
760
736
  FROM documents
761
737
  WHERE language = 'vue' OR relative_path LIKE '%.vue'
762
738
  )
763
- `).run()})()}function Iu(e,t){return e.prepare(`
739
+ `).run()})()}function Xu(e,t){return e.prepare(`
764
740
  SELECT relative_path AS relativePath
765
741
  FROM documents
766
742
  WHERE language = 'vue' OR relative_path LIKE '%.vue'
767
743
  ORDER BY relative_path
768
- `).all().map(r=>zC(t,r.relativePath))}function _u(e,t){let{vueCore:n,ts:r,volarTs:i}=KC(e),{parsed:o,vueOptions:s}=YC(n,r,t),a=Cu(t),c=n.createVueLanguagePlugin(r,o.options,s,p=>p),l=XC(n,r,c),u=ZC(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 KC(e){let t=WC(GC(Ru(e,"package.json")).href);return{vueCore:ds(t,"@vue/language-core",e),ts:ds(t,"typescript",e),volarTs:ds(t,"@volar/typescript",e)}}function YC(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,Cu(n),void 0,n,void 0,e.getAllExtensions(o).map(s=>({extension:s.slice(1),isMixedContent:!0,scriptKind:t.ScriptKind.Deferred}))),vueOptions:o}}function XC(e,t,n){let r={},i=e.createLanguage([n],new Map,o=>{if(!qC(o))return;let s=ps(o,"utf-8");r.current?.scripts.set(o,t.ScriptSnapshot.fromString(s),n.getLanguageId(o)??oR(o))});return r.current=i,i}function ZC(e,t){return{getCurrentDirectory:()=>e,getCompilationSettings:()=>t.options,getScriptFileNames:()=>t.fileNames,getProjectReferences:()=>t.projectReferences,getProjectVersion:()=>"0"}}function ds(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 vu(e,t,n){let r=eR(e);return i=>{let o=Ct(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:tR(c.starts,a.line,2)}}function eR(e){let t=e.prepare(`
744
+ `).all().map(r=>zI(t,r.relativePath))}function Zu(e,t){let{vueCore:n,ts:r,volarTs:i}=YI(e),{parsed:o,vueOptions:s}=XI(n,r,t),a=Ku(t),c=n.createVueLanguagePlugin(r,o.options,s,p=>p),l=ZI(n,r,c),u=ev(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 YI(e){let t=WI(QI(Yu(e,"package.json")).href);return{vueCore:Os(t,"@vue/language-core",e),ts:Os(t,"typescript",e),volarTs:Os(t,"@volar/typescript",e)}}function XI(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,Ku(n),void 0,n,void 0,e.getAllExtensions(o).map(s=>({extension:s.slice(1),isMixedContent:!0,scriptKind:t.ScriptKind.Deferred}))),vueOptions:o}}function ZI(e,t,n){let r={},i=e.createLanguage([n],new Map,o=>{if(!UI(o))return;let s=$s(o,"utf-8");r.current?.scripts.set(o,t.ScriptSnapshot.fromString(s),n.getLanguageId(o)??sv(o))});return r.current=i,i}function ev(e,t){return{getCurrentDirectory:()=>e,getCompilationSettings:()=>t.options,getScriptFileNames:()=>t.fileNames,getProjectReferences:()=>t.projectReferences,getProjectVersion:()=>"0"}}function Os(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 em(e,t,n){let r=tv(e);return i=>{let o=qt(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:nv(c.starts,a.line,2)}}function tv(e){let t=e.prepare(`
769
745
  SELECT
770
746
  d.relative_path AS relativePath,
771
747
  der.start_line AS startLine,
@@ -774,23 +750,23 @@ Affected consumer files:`),N.list(e.affectedConsumers,t=>` ${t.file} (${t.cons
774
750
  FROM defn_enclosing_ranges der
775
751
  JOIN documents d ON d.id = der.document_id
776
752
  ORDER BY d.relative_path, (der.end_line - der.start_line) DESC
777
- `).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 tR(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 Du(e,t,n){let r=cR(t),i=e.prepare("SELECT id FROM global_symbols WHERE symbol = ?"),o=e.prepare(`
753
+ `).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 nv(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 tm(e,t,n){let r=lv(t),i=e.prepare("SELECT id FROM global_symbols WHERE symbol = ?"),o=e.prepare(`
778
754
  INSERT OR IGNORE INTO global_symbols (symbol, display_name, kind, documentation)
779
755
  VALUES (?, ?, ?, ?)
780
- `),s=0,a=new Map;return e.transaction(()=>{for(let l of n){let u=Ct(t,l),m=Ou(r.name,r.version,u);o.run(m,"default",7,`Vue component|${u}`);let d=lR(i,r,t,l);d&&(s++,a.set(l,d))}})(),{get(l){return a.get(l)??null},syntheticSymbols:s}}function Nu(e,t,n,r,i){return e.transaction(()=>(QC(e),nR(e,t,n,r),rR(e,i)))()}function nR(e,t,n,r){let i=e.prepare("SELECT id FROM documents WHERE relative_path = ?"),o=e.prepare(`
756
+ `),s=0,a=new Map;return e.transaction(()=>{for(let l of n){let u=qt(t,l),m=um(r.name,r.version,u);o.run(m,"default",7,`Vue component|${u}`);let d=uv(i,r,t,l);d&&(s++,a.set(l,d))}})(),{get(l){return a.get(l)??null},syntheticSymbols:s}}function nm(e,t,n,r,i){return e.transaction(()=>(KI(e),rv(e,t,n,r),iv(e,i)))()}function rv(e,t,n,r){let i=e.prepare("SELECT id FROM documents WHERE relative_path = ?"),o=e.prepare(`
781
757
  INSERT INTO chunks (document_id, chunk_index, start_line, end_line, occurrences)
782
758
  VALUES (?, ?, ?, ?, X'00')
783
759
  `),s=e.prepare(`
784
760
  INSERT OR IGNORE INTO mentions (chunk_id, symbol_id, role)
785
761
  VALUES (?, ?, 1)
786
- `);for(let a of n){let c=r.get(a);if(!c)continue;let l=Ct(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 Lu(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(fs(a,e.textSpan.start)!==null)return n.get(e.fileName)}return e.fileName.startsWith(i)?n.get(e.fileName):null}return t(e)}function Eu(e){let t=new Set,n=[];for(let r of e){let i=wu(r);t.has(i)||(t.add(i),n.push(r))}return n}function wu(e){return[e.sourceFile,e.sourceLine,e.sourceStartChar,e.sourceEndChar,e.symbolId].join(":")}function rR(e,t){let n=aR(e,[...new Set(t.map(c=>c.sourceFile))]),r=e.prepare(`
762
+ `);for(let a of n){let c=r.get(a);if(!c)continue;let l=qt(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(js(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=om(r);t.has(i)||(t.add(i),n.push(r))}return n}function om(e){return[e.sourceFile,e.sourceLine,e.sourceStartChar,e.sourceEndChar,e.symbolId].join(":")}function iv(e,t){let n=cv(e,[...new Set(t.map(c=>c.sourceFile))]),r=e.prepare(`
787
763
  INSERT INTO chunks (document_id, chunk_index, start_line, end_line, occurrences)
788
764
  VALUES (?, ?, ?, ?, X'00')
789
765
  `),i=e.prepare(`
790
766
  INSERT OR IGNORE INTO mentions (chunk_id, symbol_id, role)
791
767
  VALUES (?, ?, 0)
792
- `),o=new Set,s=0,a=0;for(let c of t){let l=wu(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*ku(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 Pu(e,t){for(let[n]of e.toGeneratedLocation(t,r=>!!r.navigation))return n;return null}function fs(e,t){let n=e;for(let[r]of n.toSourceLocation(t,i=>!!i.navigation))return r;return null}function iR(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 Tu(e,t){return Ct(e,t).startsWith("node_modules/")}function Ct(e,t){return JC(e,t).replaceAll("\\","/")}function oR(e){switch(UC(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 Mu(){let e=new Map;return{get(t){if(e.has(t))return e.get(t)??null;try{let n=ps(t,"utf-8"),r={text:n,lineStarts:sR(n)};return e.set(t,r),r}catch{return e.set(t,null),null}},positionAt:iR}}function sR(e){let t=[0];for(let n=0;n<e.length;n++)e.charCodeAt(n)===10&&t.push(n+1);return t}function aR(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 cR(e){try{let t=JSON.parse(ps(Ru(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 lR(e,t,n,r){let i=Ct(n,r),o=Ou(t.name,t.version,i);return e.get(o)?.id??null}function Ou(e,t,n){let r=n.split("/").map(i=>`\`${i.replaceAll("`","")}\``).join("/");return`scip-vue npm ${e} ${t} ${r}/default.`}function gs(e){it({projectRoot:e.projectRoot,dbPath:e.dbPath});let t=hR(e.projectRoot,e.tsconfig);if(!mR(t))throw new Error(`Vue tsconfig not found at ${t}`);let n=new uR(e.dbPath);try{let r=Iu(n,e.projectRoot),i=gR(fR(e.dbPath),"augment-vue-meta.json"),o=Fu(n,e.projectRoot,e.tsconfig),s=yR(i,o,e.onStatus);if(s)return s;let a=bR({db:n,projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,configPath:t,vueFiles:r,onStatus:e.onStatus});return CR(i,Fu(n,e.projectRoot,e.tsconfig),a),a}finally{n.close()}}function yR(e,t,n){let r=xR(e,t);return r&&n?.(`Vue references unchanged; reused ${r.resolvedReferences} cached resolved references.`),r}function bR(e){let t=Du(e.db,e.projectRoot,e.vueFiles),n=SR(e,t),r=Eu(n.occurrences),i=Nu(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 SR(e,t){if(yu(e.vueFiles))return bu({projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,vueFiles:e.vueFiles});let n=RR({db:e.db,projectRoot:e.projectRoot,configPath:e.configPath,vueSymbolLookup:t});return IR({...n,vueFiles:n.context.fileNames.filter(r=>r.endsWith(".vue"))})}function xR(e,t){try{let n=JSON.parse(dR(e,"utf-8"));return JSON.stringify(n.fingerprint)===JSON.stringify(t)?n.result:null}catch{return null}}function CR(e,t,n){pR(e,JSON.stringify({updatedAt:new Date().toISOString(),fingerprint:t,result:n},null,2)+`
793
- `)}function Fu(e,t,n){let r=e.prepare(`
768
+ `),o=new Set,s=0,a=0;for(let c of t){let l=om(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*sm(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 am(e,t){for(let[n]of e.toGeneratedLocation(t,r=>!!r.navigation))return n;return null}function js(e,t){let n=e;for(let[r]of n.toSourceLocation(t,i=>!!i.navigation))return r;return null}function ov(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 cm(e,t){return qt(e,t).startsWith("node_modules/")}function qt(e,t){return JI(e,t).replaceAll("\\","/")}function sv(e){switch(GI(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=$s(t,"utf-8"),r={text:n,lineStarts:av(n)};return e.set(t,r),r}catch{return e.set(t,null),null}},positionAt:ov}}function av(e){let t=[0];for(let n=0;n<e.length;n++)e.charCodeAt(n)===10&&t.push(n+1);return t}function cv(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 lv(e){try{let t=JSON.parse($s(Yu(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 uv(e,t,n,r){let i=qt(n,r),o=um(t.name,t.version,i);return e.get(o)?.id??null}function um(e,t,n){let r=n.split("/").map(i=>`\`${i.replaceAll("`","")}\``).join("/");return`scip-vue npm ${e} ${t} ${r}/default.`}function Bs(e){pt({projectRoot:e.projectRoot,dbPath:e.dbPath});let t=yv(e.projectRoot,e.tsconfig);if(!dv(t))throw new Error(`Vue tsconfig not found at ${t}`);let n=new mv(e.dbPath);try{let r=Xu(n,e.projectRoot),i=hv(gv(e.dbPath),"augment-vue-meta.json"),o=mm(n,e.projectRoot,e.tsconfig),s=bv(i,o,e.onStatus);if(s)return s;let a=Sv({db:n,projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,configPath:t,vueFiles:r,onStatus:e.onStatus});return Rv(i,mm(n,e.projectRoot,e.tsconfig),a),a}finally{n.close()}}function bv(e,t,n){let r=Cv(e,t);return r&&n?.(`Vue references unchanged; reused ${r.resolvedReferences} cached resolved references.`),r}function Sv(e){let t=tm(e.db,e.projectRoot,e.vueFiles),n=xv(e,t),r=im(n.occurrences),i=nm(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 xv(e,t){if(Gu(e.vueFiles))return Ju({projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,vueFiles:e.vueFiles});let n=Iv({db:e.db,projectRoot:e.projectRoot,configPath:e.configPath,vueSymbolLookup:t});return vv({...n,vueFiles:n.context.fileNames.filter(r=>r.endsWith(".vue"))})}function Cv(e,t){try{let n=JSON.parse(pv(e,"utf-8"));return JSON.stringify(n.fingerprint)===JSON.stringify(t)?n.result:null}catch{return null}}function Rv(e,t,n){fv(e,JSON.stringify({updatedAt:new Date().toISOString(),fingerprint:t,result:n},null,2)+`
769
+ `)}function mm(e,t,n){let r=e.prepare(`
794
770
  SELECT
795
771
  (SELECT COUNT(*) FROM documents) AS documents,
796
772
  (SELECT COUNT(*) FROM global_symbols) AS symbols,
@@ -799,86 +775,108 @@ Affected consumer files:`),N.list(e.affectedConsumers,t=>` ${t.file} (${t.cons
799
775
  (SELECT COUNT(*) FROM defn_enclosing_ranges) AS ranges,
800
776
  (SELECT MAX(id) FROM chunks) AS maxChunkId,
801
777
  (SELECT MAX(id) FROM global_symbols) AS maxSymbolId
802
- `).get();return{version:2,tsconfig:n,files:Or(t),db:r}}function RR(e){let t=Mu();return{projectRoot:e.projectRoot,context:_u(e.projectRoot,e.configPath),symbolLookup:vu(e.db,e.projectRoot,t),vueSymbolLookup:e.vueSymbolLookup,sourceReader:t}}function IR(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=_R(e,i);t.push(...o.occurrences),n+=o.skippedReferences}return{occurrences:t,skippedReferences:n}}function _R(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=Ct(e.projectRoot,t.fileName),a=[...ku(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:NR(a),processedStarts:new Set};return vR({...e,fileName:t.fileName,sourceInfo:i,sourceFile:s,map:o,tokenContext:c})}function vR(e){let t=[],n=0;for(let r of e.tokenContext.tokens){if(e.tokenContext.processedStarts.has(r.start))continue;let i=Pu(e.map,r.start);if(i===null)continue;let s=(e.context.languageService.getDefinitionAtPosition(e.fileName,i+1)??[]).find(c=>!Tu(e.projectRoot,c.fileName));if(!s){n++;continue}let a=Lu(s,e.symbolLookup,e.vueSymbolLookup,e.context,e.projectRoot);if(a===null){n++;continue}Au(t,e.sourceReader,e.sourceInfo,e.sourceFile,r,a),e.tokenContext.processedStarts.add(r.start),DR(t,e,r,i,a)}return{occurrences:t,skippedReferences:n}}function DR(e,t,n,r,i){if(!((t.tokenContext.tokenTextCounts.get(n.text)??0)<=1))for(let o of LR(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&&(Au(e,t.sourceReader,t.sourceInfo,t.sourceFile,s,i),t.tokenContext.processedStarts.add(o))}}function Au(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 NR(e){let t=new Map;for(let n of e)t.set(n.text,(t.get(n.text)??0)+1);return t}function LR(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=ER(r,l.textSpan.start,o,i.text);u!==null&&a.push(u)}return a}function ER(e,t,n,r){let i=n.get(t);if(i?.text===r)return i.start;let o=fs(e,t);if(o===null)return null;let s=n.get(o);return s?.text===r?s.start:null}async function Bu(e){let{projectRoot:t,maxHeapMb:n=8192,onStatus:r=console.log,skipAutoInstall:i=!1}=e,o=FR(e),s=Date.now();$u(Rt(o.outputScip),{recursive:!0}),$u(Rt(o.outputDb),{recursive:!0});let a=e.languages??xt(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=XR(t,a,{pnpmWorkspaces:e.pnpmWorkspaces}),l=KR(je(Rt(o.outputDb),"index.lock")),u=null;try{let m=AR({opts:e,paths:o,languages:a,fingerprint:c,start:s,onStatus:r});if(m)return m;VR(i,r);let d=$R(o);return u=d.runDir,await jR({opts:e,languages:a,projectRoot:t,paths:o,tempPaths:d,fingerprint:c,start:s,maxHeapMb:n,skipAutoInstall:i,onStatus:r})}finally{u&&Ss(u,{recursive:!0,force:!0}),l()}}function FR(e){let t=e.outputScip??je(e.projectRoot,"index.scip"),n=e.outputDb??je(e.projectRoot,"index.db");return{outputScip:t,outputDb:n,metaPath:je(Rt(n),"meta.json")}}function AR(e){if(e.opts.skipIfUnchanged===!1||!ys(e.paths.outputScip)||!ys(e.paths.outputDb)||!ZR(e.paths.metaPath,e.fingerprint))return null;it({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 $R(e){let t=PR(je(Rt(e.outputDb),"reindex-"));return{runDir:t,tempOutputScip:je(t,Br(e.outputScip)),tempOutputDb:je(t,Br(e.outputDb)),tempMetaPath:je(t,Br(e.metaPath))}}async function jR(e){let t={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},{indexedOutputs:n,skippedLanguages:r}=await BR(e,t);HR(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 BR(e,t){let{preparedRuns:n,skippedLanguages:r}=WR({languages:e.languages,tempOutputScip:e.tempPaths.tempOutputScip,projectRoot:e.projectRoot,env:t,skipAutoInstall:e.skipAutoInstall,pnpmWorkspaces:e.opts.pnpmWorkspaces,onStatus:e.onStatus}),i=await cu(n,e.projectRoot,e.onStatus,e.opts.indexerConcurrency),{indexedOutputs:o}=UR(i,r);return JR(o,r,e.languages,e.opts.allowPartial,e.onStatus),{indexedOutputs:o,skippedLanguages:r}}function HR(e,t,n,r){zR(n,e.tempPaths.tempOutputScip,e.onStatus),GR(e.tempPaths.tempOutputScip,e.tempPaths.tempOutputDb,t,e.onStatus),it({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),eI(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]}),YR({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 VR(e,t){if(!xe("scip")){if(e)throw new Error(`The scip CLI is required but not found on PATH.
803
- Install from: https://github.com/sourcegraph/scip/releases`);if(t("scip CLI not found on PATH. Attempting auto-install..."),!ql(t))throw new Error(`The scip CLI is required but could not be installed.
804
- Install manually from: https://github.com/sourcegraph/scip/releases`)}}function WR(e){let t=[],n=[],r=e.languages.map((i,o)=>({language:i,scipPath:e.languages.length>1?QR(e.tempOutputScip,i,o):e.tempOutputScip}));for(let{language:i,scipPath:o}of r){let s=qR({...e,language:i,scipPath:o});"skipped"in s?n.push(s.skipped):t.push(s.prepared)}return{preparedRuns:t,skippedLanguages:n}}function qR(e){let t=Mr(e.language),n=$r(t),r=ls(t,e.projectRoot);if(!r&&!uu(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...`),!fu(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??Yt(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:du(t,e.env,i)}}}function UR(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 JR(e,t,n,r,i){if(e.length===0){let o=t.map(s=>` - ${s.language}: ${s.reason}`).join(`
778
+ `).get();return{version:2,tsconfig:n,files:pi(t),db:r}}function Iv(e){let t=lm();return{projectRoot:e.projectRoot,context:Zu(e.projectRoot,e.configPath),symbolLookup:em(e.db,e.projectRoot,t),vueSymbolLookup:e.vueSymbolLookup,sourceReader:t}}function vv(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=Dv(e,i);t.push(...o.occurrences),n+=o.skippedReferences}return{occurrences:t,skippedReferences:n}}function Dv(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=qt(e.projectRoot,t.fileName),a=[...sm(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:_v(a),processedStarts:new Set};return Nv({...e,fileName:t.fileName,sourceInfo:i,sourceFile:s,map:o,tokenContext:c})}function Nv(e){let t=[],n=0;for(let r of e.tokenContext.tokens){if(e.tokenContext.processedStarts.has(r.start))continue;let i=am(e.map,r.start);if(i===null)continue;let s=(e.context.languageService.getDefinitionAtPosition(e.fileName,i+1)??[]).find(c=>!cm(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}dm(t,e.sourceReader,e.sourceInfo,e.sourceFile,r,a),e.tokenContext.processedStarts.add(r.start),Lv(t,e,r,i,a)}return{occurrences:t,skippedReferences:n}}function Lv(e,t,n,r,i){if(!((t.tokenContext.tokenTextCounts.get(n.text)??0)<=1))for(let o of wv(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&&(dm(e,t.sourceReader,t.sourceInfo,t.sourceFile,s,i),t.tokenContext.processedStarts.add(o))}}function dm(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 _v(e){let t=new Map;for(let n of e)t.set(n.text,(t.get(n.text)??0)+1);return t}function wv(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=Ev(r,l.textSpan.start,o,i.text);u!==null&&a.push(u)}return a}function Ev(e,t,n,r){let i=n.get(t);if(i?.text===r)return i.start;let o=js(e,t);if(o===null)return null;let s=n.get(o);return s?.text===r?s.start:null}async function gm(e){let{projectRoot:t,maxHeapMb:n=8192,onStatus:r=console.log,skipAutoInstall:i=!1}=e,o=Ov(e),s=Date.now();pm(Vt(o.outputScip),{recursive:!0}),pm(Vt(o.outputDb),{recursive:!0});let a=e.languages??Ht(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=Zv(t,a,{pnpmWorkspaces:e.pnpmWorkspaces}),l=Yv(Xe(Vt(o.outputDb),"index.lock")),u=null;try{let m=$v({opts:e,paths:o,languages:a,fingerprint:c,start:s,onStatus:r});if(m)return m;Vv(i,r);let d=jv(o);return u=d.runDir,await Bv({opts:e,languages:a,projectRoot:t,paths:o,tempPaths:d,fingerprint:c,start:s,maxHeapMb:n,skipAutoInstall:i,onStatus:r})}finally{u&&Ws(u,{recursive:!0,force:!0}),l()}}function Ov(e){let t=e.outputScip??Xe(e.projectRoot,"index.scip"),n=e.outputDb??Xe(e.projectRoot,"index.db");return{outputScip:t,outputDb:n,metaPath:Xe(Vt(n),"meta.json")}}function $v(e){if(e.opts.skipIfUnchanged===!1||!qs(e.paths.outputScip)||!qs(e.paths.outputDb)||!eD(e.paths.metaPath,e.fingerprint))return null;pt({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 jv(e){let t=Fv(Xe(Vt(e.outputDb),"reindex-"));return{runDir:t,tempOutputScip:Xe(t,bi(e.outputScip)),tempOutputDb:Xe(t,bi(e.outputDb)),tempMetaPath:Xe(t,bi(e.metaPath))}}async function Bv(e){let t={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},{indexedOutputs:n,skippedLanguages:r}=await Hv(e,t);qv(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 Hv(e,t){let{preparedRuns:n,skippedLanguages:r}=Wv({languages:e.languages,tempOutputScip:e.tempPaths.tempOutputScip,projectRoot:e.projectRoot,env:t,skipAutoInstall:e.skipAutoInstall,pnpmWorkspaces:e.opts.pnpmWorkspaces,onStatus:e.onStatus}),i=await Ou(n,e.projectRoot,e.onStatus,e.opts.indexerConcurrency),{indexedOutputs:o}=Gv(i,r);return Jv(o,r,e.languages,e.opts.allowPartial,e.onStatus),{indexedOutputs:o,skippedLanguages:r}}function qv(e,t,n,r){zv(n,e.tempPaths.tempOutputScip,e.onStatus),Qv(e.tempPaths.tempOutputScip,e.tempPaths.tempOutputDb,t,e.onStatus),pt({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),tD(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]}),Xv({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 Vv(e,t){if(!De("scip")){if(e)throw new Error(`The scip CLI is required but not found on PATH.
779
+ Install from: https://github.com/sourcegraph/scip/releases`);if(t("scip CLI not found on PATH. Attempting auto-install..."),!xu(t))throw new Error(`The scip CLI is required but could not be installed.
780
+ Install manually from: https://github.com/sourcegraph/scip/releases`)}}function Wv(e){let t=[],n=[],r=e.languages.map((i,o)=>({language:i,scipPath:e.languages.length>1?Kv(e.tempOutputScip,i,o):e.tempOutputScip}));for(let{language:i,scipPath:o}of r){let s=Uv({...e,language:i,scipPath:o});"skipped"in s?n.push(s.skipped):t.push(s.prepared)}return{preparedRuns:t,skippedLanguages:n}}function Uv(e){let t=di(e.language),n=hi(t),r=Ts(t,e.projectRoot);if(!r&&!ju(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...`),!Vu(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??Cn(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:Hu(t,e.env,i)}}}function Gv(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 Jv(e,t,n,r,i){if(e.length===0){let o=t.map(s=>` - ${s.language}: ${s.reason}`).join(`
805
781
  `);throw new Error(`No language indexers ran successfully. Install at least one indexer for the languages in this project.
806
782
  `+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.
807
783
  `+t.map(o=>` - ${o.language}: ${o.reason}`).join(`
808
- `))}function zR(e,t,n){e.length>1?(n(`Merging ${e.length} language indexes...`),tu(e.map(r=>r.scipPath),t)):e[0].scipPath!==t&&bs(e[0].scipPath,t)}function GR(e,t,n,r){if(r("Converting to SQLite..."),!ys(e))throw new Error(`SCIP index not found at ${e} after indexing`);try{let i=su(e);i.removedDefinitionOccurrences>0&&r(`Sanitized ${i.removedDefinitionOccurrences} invalid definition occurrences across ${i.touchedDocuments} documents before SQLite conversion.`),wR("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 QR(e,t,n){let r=OR(e)||".scip",i=Br(e,r);return je(Rt(e),`${i}.${n+1}.${t}${r}`)}function KR(e){let t;try{t=TR(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 ${Rt(e)}.`,{cause:n}):n}return ju(t,JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()})+`
809
- `),()=>{try{kR(t)}finally{Ss(e,{force:!0})}}}function YR(e){hs(e.tempOutputScip,e.outputScip),hs(e.tempOutputDb,e.outputDb),hs(e.tempMetaPath,e.metaPath)}function hs(e,t){Ss(`${t}.tmp-replace`,{force:!0}),bs(e,`${t}.tmp-replace`),bs(`${t}.tmp-replace`,t)}function XR(e,t,n){return{version:1,languages:[...t].sort(),pnpmWorkspaces:n.pnpmWorkspaces===!0,files:Or(e)}}function ZR(e,t){try{let n=JSON.parse(MR(e,"utf-8"));return n.version===2&&n.status==="complete"&&jr(n.fingerprint)===jr(t)&&jr([...n.indexedLanguages??[]].sort())===jr(t.languages)}catch{return!1}}function eI(e,t){ju(e,`${JSON.stringify(t,null,2)}
810
- `)}function jr(e){return JSON.stringify(e)}import{createRequire as tI}from"module";var nI=tI(import.meta.url);function Hu(e,t=[]){let n=rI(),r=Ti(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 rI(){try{return nI.resolve("ts-morph"),!0}catch{return!1}}function xs(e,t){let n=t.languages??xt(e),r=n.map(o=>{let s=pu(Mr(o),e);return{...s,language:o,resolvedBinary:s.resolvedBinary??void 0}}),i=n.includes("typescript")?{language:"typescript",...Hu(e,t.semantic?.typescript?.tsconfigs)}:void 0;return{languages:n,indexers:r,semantic:i}}import{watch as iI}from"fs";import{existsSync as Vu,renameSync as Wu}from"fs";import{join as oI,relative as sI}from"path";import{fork as aI}from"child_process";import cI from"ignore";var Hr=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=El(t.config),this.indexPaths=Qt(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=zt(t.projectRoot),this.extraIgnore=cI(),this.watchConfig.ignore.length>0&&this.extraIgnore.add(this.watchConfig.ignore)}start(){this.stopped=!1,this.setStatus({state:"idle"});try{let t=iI(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=sI(this.projectRoot,oI(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=lI(this.indexPaths.indexPath),s=aI(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{Vu(i)&&Wu(i,this.indexPaths.dbPath),Vu(o)&&Wu(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 lI(e){return e.endsWith(".scip")?e.slice(0,-5)+".tmp.scip":e+".tmp.scip"}function te(e){return(...t)=>{let{args:n,opts:r}=uI(t);rt(i=>e({db:i,args:n,opts:r}))}}function ae(e,t){return te(n=>{let r=Fl(n.db,e,z(n.opts,"full"));t({...n,budget:r})})}function qu(e){return te(t=>Xt(t,e,{kind:"list"}))}function Uu(e){return te(t=>Xt(t,e,{kind:"table",headers:e.headers,dashWidths:e.dashWidths}))}function Ju(e){return te(t=>Xt(t,e,{kind:"grouped",key:e.key}))}function It(e){return te(t=>Cs(t,e))}function zu(e){return It({query:e.query,emptyMessage:e.emptyMessage,heuristicLabel:e.heuristicLabel,before:e.before,render:(t,n)=>N.sectionedReport(e.sections(t,n)),after:e.after})}function Fn(e,t){return ae(e,n=>Cs(n,t))}function Gu(e,t){return Fn(e,{query:t.query,emptyMessage:t.emptyMessage,heuristicLabel:t.heuristicLabel,before:t.before,render:(n,r)=>N.sectionedReport(t.sections(n,r)),after:t.after})}function ot(e,t){return ae(e,n=>Xt(n,t,{kind:"list"}))}function Vr(e,t){return ae(e,n=>Xt(n,t,{kind:"table",headers:t.headers,dashWidths:t.dashWidths}))}function Wr(e,t){return ae(e,n=>Xt(n,t,{kind:"grouped",key:t.key}))}function F(e,t){return String(e[t])}function Pe(e,t){let n=e[t];return typeof n=="string"?n:void 0}function M(e,t){let n=e[t];return typeof n=="string"?n:void 0}function _t(e,t){let n=e[t];return typeof n=="number"?n:void 0}function z(e,t){return!!e[t]}function Qu(e,t){let n=e[t];return Array.isArray(n)&&n.every(r=>typeof r=="string")?n:[]}function R(e,t,n){return _t(e,t)??n}function Xt(e,t,n){Cs(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"?N.list(r,o=>t.format(o,i)):n.kind==="table"?N.table(n.headers,r.map(o=>t.format(o,i)),n.dashWidths):N.groupedByFile(r,o=>t.format(o,i),n.key?o=>n.key(o,i):void 0)},after:t.after})}function Cs(e,t){let n=t.query(e),r=t.emptyMessage?.(n,e);if(r){N.empty(r);return}t.heuristicLabel&&On(t.heuristicLabel),t.before?.(n,e),t.render(n,e),t.after?.(n,e)}function uI(e){if(e.length===0)return{args:[],opts:{}};let t=e[e.length-1];return{args:e.slice(0,-1),opts:Be(t)}}function Be(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 mI=new Set(["typescript","javascript","java","scala","kotlin","rust","python","ruby","go","cpp","c","csharp","vb","dart","php"]);function dI(e){return e.filter(t=>mI.has(t))}async function Yu(e){let t=Be(e),n=nt(),r=Gt(n),i=Qt(n,r);try{let o=dI(Qu(t,"language")),s=await Bu({projectRoot:n,languages:o.length>0?o:r.languages,outputScip:i.indexPath,outputDb:i.dbPath,pnpmWorkspaces:z(t,"pnpmWorkspaces")||r.indexer?.typescript?.pnpmWorkspaces,skipIfUnchanged:!z(t,"force"),allowPartial:z(t,"allowPartial"),indexerConcurrency:_t(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 Xu(){let e=nt(),t=Uo(e);try{let n=it({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 Zu(e){let t=Be(e),n=nt(),r=Uo(n);try{let i=gs({projectRoot:n,dbPath:r,tsconfig:M(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 em(e){let t=Be(e);rt(n=>{let r=JSON.parse(process.env.SCIP_QUERY_DIFF_IMPACT_FILES??"[]"),i=Ut(n,{base:M(t,"base")}),o=xr(n,r,i.changedFiles);console.log(JSON.stringify(o))})}function tm(e){let t=Be(e);try{Bl(jl({base:M(t,"base")}))}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}function nm(e,t){let n=Be(t);rt(r=>{Mn.includes(e)||(console.error(`error: Unknown health phase: ${e}`),process.exit(1));let i=ko(r,e,{scope:M(n,"scope"),full:z(n,"full")});console.log(JSON.stringify(i))})}function rm(e){let t=Be(e);try{let n=Al({scope:M(t,"scope"),full:z(t,"full"),json:z(t,"json")});$l(n,z(t,"json"))}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}function im(){let e=zl(),t=e.installed.length+e.alreadyLinked.length;console.log(`
811
- ${e.installed.length} installed, ${e.alreadyLinked.length} already linked, ${e.skipped.length} skipped.`),t>0&&console.log("Skills will be available in your next Claude Code / Codex session.")}function om(){let e=!1;Ko()?console.log("scip CLI: installed"):(Yo(),e=!0);let t=nt(),n=Gt(t),r=xs(t,n);if(r.languages.length===0){console.log(`
784
+ `))}function zv(e,t,n){e.length>1?(n(`Merging ${e.length} language indexes...`),Eu(e.map(r=>r.scipPath),t)):e[0].scipPath!==t&&Vs(e[0].scipPath,t)}function Qv(e,t,n,r){if(r("Converting to SQLite..."),!qs(e))throw new Error(`SCIP index not found at ${e} after indexing`);try{let i=Au(e);i.removedDefinitionOccurrences>0&&r(`Sanitized ${i.removedDefinitionOccurrences} invalid definition occurrences across ${i.touchedDocuments} documents before SQLite conversion.`),kv("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 Kv(e,t,n){let r=Mv(e)||".scip",i=bi(e,r);return Xe(Vt(e),`${i}.${n+1}.${t}${r}`)}function Yv(e){let t;try{t=Tv(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 ${Vt(e)}.`,{cause:n}):n}return fm(t,JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()})+`
785
+ `),()=>{try{Pv(t)}finally{Ws(e,{force:!0})}}}function Xv(e){Hs(e.tempOutputScip,e.outputScip),Hs(e.tempOutputDb,e.outputDb),Hs(e.tempMetaPath,e.metaPath)}function Hs(e,t){Ws(`${t}.tmp-replace`,{force:!0}),Vs(e,`${t}.tmp-replace`),Vs(`${t}.tmp-replace`,t)}function Zv(e,t,n){return{version:1,languages:[...t].sort(),pnpmWorkspaces:n.pnpmWorkspaces===!0,files:pi(e)}}function eD(e,t){try{let n=JSON.parse(Av(e,"utf-8"));return n.version===2&&n.status==="complete"&&yi(n.fingerprint)===yi(t)&&yi([...n.indexedLanguages??[]].sort())===yi(t.languages)}catch{return!1}}function tD(e,t){fm(e,`${JSON.stringify(t,null,2)}
786
+ `)}function yi(e){return JSON.stringify(e)}import{createRequire as nD}from"module";var rD=nD(import.meta.url);function hm(e,t=[]){let n=iD(),r=no(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 iD(){try{return rD.resolve("ts-morph"),!0}catch{return!1}}function Us(e,t){let n=t.languages??Ht(e),r=n.map(o=>{let s=qu(di(o),e);return{...s,language:o,resolvedBinary:s.resolvedBinary??void 0}}),i=n.includes("typescript")?{language:"typescript",...hm(e,t.semantic?.typescript?.tsconfigs)}:void 0;return{languages:n,indexers:r,semantic:i}}import{watch as oD}from"fs";import{existsSync as ym,renameSync as bm}from"fs";import{join as sD,relative as aD}from"path";import{fork as cD}from"child_process";import lD from"ignore";var Si=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=ou(t.config),this.indexPaths=Sn(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=yn(t.projectRoot),this.extraIgnore=lD(),this.watchConfig.ignore.length>0&&this.extraIgnore.add(this.watchConfig.ignore)}start(){this.stopped=!1,this.setStatus({state:"idle"});try{let t=oD(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=aD(this.projectRoot,sD(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=uD(this.indexPaths.indexPath),s=cD(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{ym(i)&&bm(i,this.indexPaths.dbPath),ym(o)&&bm(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 uD(e){return e.endsWith(".scip")?e.slice(0,-5)+".tmp.scip":e+".tmp.scip"}function q(e){return(...t)=>{let{args:n,opts:r}=mD(t);Ye(i=>e({db:i,args:n,opts:r}))}}function X(e,t){return q(n=>{let r=du(n.db,e,j(n.opts,"full"));t({...n,budget:r})})}function Sm(e){return q(t=>Rn(t,e,{kind:"list"}))}function xm(e){return q(t=>Rn(t,e,{kind:"table",headers:e.headers,dashWidths:e.dashWidths}))}function Cm(e){return q(t=>Rn(t,e,{kind:"grouped",key:e.key}))}function Wt(e){return q(t=>Gs(t,e))}function Rm(e){return Wt({query:e.query,emptyMessage:e.emptyMessage,heuristicLabel:e.heuristicLabel,before:e.before,render:(t,n)=>_.sectionedReport(e.sections(t,n)),after:e.after})}function cr(e,t){return X(e,n=>Gs(n,t))}function Im(e,t){return cr(e,{query:t.query,emptyMessage:t.emptyMessage,heuristicLabel:t.heuristicLabel,before:t.before,render:(n,r)=>_.sectionedReport(t.sections(n,r)),after:t.after})}function Ze(e,t){return X(e,n=>Rn(n,t,{kind:"list"}))}function xi(e,t){return X(e,n=>Rn(n,t,{kind:"table",headers:t.headers,dashWidths:t.dashWidths}))}function Ci(e,t){return X(e,n=>Rn(n,t,{kind:"grouped",key:t.key}))}function M(e,t){return String(e[t])}function He(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 ft(e,t){let n=e[t];return typeof n=="number"?n:void 0}function j(e,t){return!!e[t]}function vm(e,t){let n=e[t];return Array.isArray(n)&&n.every(r=>typeof r=="string")?n:[]}function S(e,t,n){return ft(e,t)??n}function Rn(e,t,n){Gs(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"?_.list(r,o=>t.format(o,i)):n.kind==="table"?_.table(n.headers,r.map(o=>t.format(o,i)),n.dashWidths):_.groupedByFile(r,o=>t.format(o,i),n.key?o=>n.key(o,i):void 0)},after:t.after})}function Gs(e,t){let n=t.query(e),r=t.emptyMessage?.(n,e);if(r){_.empty(r);return}t.heuristicLabel&&or(t.heuristicLabel),t.before?.(n,e),t.render(n,e),t.after?.(n,e)}function mD(e){if(e.length===0)return{args:[],opts:{}};let t=e[e.length-1];return{args:e.slice(0,-1),opts:et(t)}}function et(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 dD=new Set(["typescript","javascript","java","scala","kotlin","rust","python","ruby","go","cpp","c","csharp","vb","dart","php"]);function pD(e){return e.filter(t=>dD.has(t))}async function Nm(e){let t=et(e),n=Be(),r=bn(n),i=Sn(n,r);try{let o=pD(vm(t,"language")),s=await gm({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:ft(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 Lm(){let e=Be(),t=gs(e);try{let n=pt({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 _m(e){let t=et(e),n=Be(),r=gs(n);try{let i=Bs({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 wm(e){let t=et(e);Ye(n=>{let r=JSON.parse(process.env.SCIP_QUERY_DIFF_IMPACT_FILES??"[]"),i=fn(n,{base:k(t,"base")}),o=Yr(n,r,i.changedFiles);console.log(JSON.stringify(o))})}function Em(e){let t=et(e);try{hu(gu({base:k(t,"base")}))}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}function km(e,t){let n=et(t);Ye(r=>{ir.includes(e)||(console.error(`error: Unknown health phase: ${e}`),process.exit(1));let i=ns(r,e,{scope:k(n,"scope"),full:j(n,"full")});console.log(JSON.stringify(i))})}function Pm(e){let t=et(e);if(j(t,"writeBaseline")||j(t,"baseline")){fD(t);return}try{let n=pu({scope:k(t,"scope"),full:j(t,"full"),json:j(t,"json")});fu(n,j(t,"json"))}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}function fD(e){let t=k(e,"scope");Ye(n=>{if(j(e,"writeBaseline")){let i=Yo(n,{scope:t});console.log(`Baseline written to ${i.path} (${i.findingCount} finding(s)).`);return}let r=Zn(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 Fm(){let e=Ru(),t=e.installed.length+e.alreadyLinked.length;console.log(`
787
+ ${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 Tm(){let e=!1;xs()?console.log("scip CLI: installed"):(Cs(),e=!0);let t=Be(),n=bn(t),r=Us(t,n);if(r.languages.length===0){console.log(`
812
788
  No supported project languages detected in the current directory.`),process.exitCode=e?1:0;return}console.log(`
813
789
  Detected languages: ${r.languages.join(", ")}`),console.log(`
814
790
  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(`
815
- 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 sm(){let e=nt(),t=xt(e),n=wl(e,t);console.log(`Config written to ${n}`),console.log(`Detected languages: ${t.join(", ")||"(none)"}`)}function am(e){let t=Be(e),n=nt(),r=Gt(n),i=_t(t,"debounce"),o=_t(t,"cooldown");i&&((r.watch??={}).debounceMs=i),o&&((r.watch??={}).cooldownMs=o);let s=new Hr({projectRoot:n,config:r,languages:r.languages,onStatus:a=>{process.stdout.write(`\r\x1B[K${Pl(a)}`)},onReindexComplete:a=>{console.log(`
791
+ 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 Am(){let e=Be(),t=Ht(e),n=su(e,t);console.log(`Config written to ${n}`),console.log(`Detected languages: ${t.join(", ")||"(none)"}`)}function Mm(e){let t=et(e),n=Be(),r=bn(n),i=ft(t,"debounce"),o=ft(t,"cooldown");i&&((r.watch??={}).debounceMs=i),o&&((r.watch??={}).cooldownMs=o);let s=new Si({projectRoot:n,config:r,languages:r.languages,onStatus:a=>{process.stdout.write(`\r\x1B[K${cu(a)}`)},onReindexComplete:a=>{console.log(`
816
792
  Reindex complete in ${(a/1e3).toFixed(1)}s`)},onError:a=>{console.error(`
817
793
  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.
818
794
  `),s.start(),process.on("SIGINT",()=>{s.stop(),console.log(`
819
- Stopped.`),process.exit(0)})}function cm(){let{projectRoot:e,config:t,paths:n,dbPath:r}=Dr(),i=xs(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: ${Ku(r)?"yes":"no"}`),Ku(r)&&rt(o=>{let s=Te(o);if(console.log(`Symbols: ${s.symbols}`),console.log(`Files: ${s.documents}`),console.log(`Size: ${Kt(s.indexSizeBytes)}`),s.lastBuilt){let a=Math.round((Date.now()-s.lastBuilt.getTime())/1e3);console.log(`Built: ${a}s ago`)}})}function ve({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,...o}){return{...o,renderShape:"list",handler:qu({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i})}}function qr({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,headers:o,dashWidths:s,...a}){return{...a,renderShape:"table",handler:Uu({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,headers:o,dashWidths:s})}}function lm({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,key:o,...s}){return{...s,renderShape:"grouped-by-file",handler:Ju({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,key:o})}}function um({query:e,emptyMessage:t,heuristicLabel:n,sections:r,before:i,after:o,...s}){return{...s,renderShape:"sectioned-report",handler:zu({query:e,emptyMessage:t,heuristicLabel:n,before:i,sections:r,after:o})}}function Ur({query:e,emptyMessage:t,heuristicLabel:n,sections:r,before:i,after:o,...s}){return{...s,budget:s.budget??"semantic",renderShape:"sectioned-report",handler:Gu(s.id,{query:e,emptyMessage:t,heuristicLabel:n,before:i,sections:r,after:o})}}var fI=ae("dead",({db:e,args:t,opts:n,budget:r})=>{let i={scope:Pe(t,0)||void 0,minLoc:R(n,"minLoc",1),includeTests:z(n,"includeTests"),skipBarrels:z(n,"skipBarrels"),includeMembers:z(n,"includeMembers"),scanLimit:r.scanLimit,semantic:r.semantic},o=bn(e,i),s=o.symbols.filter(f=>f.kind==="dead-code"),a=o.symbols.filter(f=>f.kind!=="dead-code"),c=!z(n,"onlyInternal"),l=!z(n,"onlyDead"),u=c?s:[],m=l?a:[];if(u.length===0&&m.length===0){N.empty("No matching dead-code symbols found.");return}let d=u.reduce((f,b)=>f+b.loc,0),p=m.reduce((f,b)=>f+b.loc,0);u.length>0&&mm(u,"DEAD CODE",` Zero references anywhere \u2014 no cross-file callers AND no same-file uses.
820
- Safe to delete.`,d),m.length>0&&(u.length>0&&console.log(""),mm(m,"FILE-INTERNAL ONLY",` Used only within the same file (no cross-file callers). Could be a
795
+ Stopped.`),process.exit(0)})}function Om(){let{projectRoot:e,config:t,paths:n,dbPath:r}=si(),i=Us(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: ${Dm(r)?"yes":"no"}`),Dm(r)&&Ye(o=>{let s=Ne(o);if(console.log(`Symbols: ${s.symbols}`),console.log(`Files: ${s.documents}`),console.log(`Size: ${xn(s.indexSizeBytes)}`),s.lastBuilt){let a=Math.round((Date.now()-s.lastBuilt.getTime())/1e3);console.log(`Built: ${a}s ago`)}})}import{execFileSync as Js,spawnSync as hD}from"child_process";import{existsSync as Ut,mkdtempSync as yD,readFileSync as bD,readdirSync as SD,rmSync as xD,symlinkSync as CD,writeFileSync as RD}from"fs";import{tmpdir as ID}from"os";import{join as tt}from"path";var vD=3e5,DD=12;function Bm(e,t,n={}){let r=LD(e);if(r.length===0)return{checkers:[],uncoveredFiles:[],baselineErrors:0,dirtyOverlap:[],batches:[]};let i=ND(t,r),o=n.timeoutMs??vD,s=wD(e,t),a=yD(tt(ID(),"scip-cleanup-verify-")),c=[],l=0;try{Js("git",["-C",e,"worktree","add","--detach","--force",a,"HEAD"],{stdio:"ignore"}),ED(e,a);let u=new Set;for(let m of r)for(let d of jm(m,a,o).errorKeys)u.add(d);l=u.size;for(let m of t.batches){kD(a,m);let d=[];for(let p of r){let h=jm(p,a,o);d.push(...h.rawErrors.filter(f=>!u.has(Hm(f))))}if(d.length===0)c.push({depth:m.depth,status:"verified"});else{c.push({depth:m.depth,status:"failed",errors:d.slice(0,DD)});break}}}finally{try{Js("git",["-C",e,"worktree","remove","--force",a],{stdio:"ignore"})}catch{xD(a,{recursive:!0,force:!0})}}return{checkers:r.map(u=>u.label),uncoveredFiles:i,baselineErrors:l,dirtyOverlap:s,batches:c}}function ND(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 Hm(e){return e.replace(/\(\d+,\d+\)|:\d+(?::\d+)?/g,"").trim()}var $m=[".ts",".tsx",".mts",".cts",".js",".jsx",".vue"];function LD(e){let t=[];if(Ut(tt(e,"tsconfig.json"))){let n=tt(e,"node_modules",".bin","tsc");t.push(Ut(n)?{label:"tsc --noEmit",binary:n,args:["--noEmit"],coversExtensions:$m}:{label:"npx tsc --noEmit",binary:"npx",args:["tsc","--noEmit"],coversExtensions:$m})}for(let n of _D(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:tt(e,n,"..","target")}});return t}function _D(e){let t=[];if(Ut(tt(e,"Cargo.toml")))return t.push("Cargo.toml"),t;let n=[];try{n=SD(e)}catch{return t}for(let r of n)r==="node_modules"||r.startsWith(".")||Ut(tt(e,r,"Cargo.toml"))&&t.push(`${r}/Cargo.toml`);return t}function wD(e,t){let n;try{n=Js("git",["-C",e,"status","--porcelain"],{encoding:"utf-8"})}catch{return[]}let r=new Set(n.split(`
796
+ `).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 ED(e,t){for(let n of["node_modules"]){let r=tt(e,n),i=tt(t,n);if(Ut(r)&&!Ut(i))try{CD(r,i,"junction")}catch{}}}function kD(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=tt(e,r);Ut(o)&&RD(o,PD(bD(o,"utf-8"),i,{rust:r.endsWith(".rs")}))}}function PD(e,t,n={}){let r=e.split(`
797
+ `),i=(n.rust===!0?FD(e):It(e)).split(`
798
+ `),o=new Set;for(let s of t){let a=TD(r,s.start),c=MD(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(`
799
+ `)}function FD(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 TD(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 AD=200;function MD(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>AD)break}return n}function jm(e,t,n){let r=hD(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??""}
800
+ ${r.stderr??""}`.split(`
801
+ `).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(Hm))}}function qe({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,...o}){return{...o,renderShape:"list",handler:Sm({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i})}}function Ri({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,headers:o,dashWidths:s,...a}){return{...a,renderShape:"table",handler:xm({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,headers:o,dashWidths:s})}}function qm({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,key:o,...s}){return{...s,renderShape:"grouped-by-file",handler:Cm({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,key:o})}}function Vm({query:e,emptyMessage:t,heuristicLabel:n,sections:r,before:i,after:o,...s}){return{...s,renderShape:"sectioned-report",handler:Rm({query:e,emptyMessage:t,heuristicLabel:n,before:i,sections:r,after:o})}}function Ii({query:e,emptyMessage:t,heuristicLabel:n,sections:r,before:i,after:o,...s}){return{...s,budget:s.budget??"semantic",renderShape:"sectioned-report",handler:Im(s.id,{query:e,emptyMessage:t,heuristicLabel:n,before:i,sections:r,after:o})}}var OD=X("dead",({db:e,args:t,opts:n,budget:r})=>{let i={scope:He(t,0)||void 0,minLoc:S(n,"minLoc",1),includeTests:j(n,"includeTests"),skipBarrels:j(n,"skipBarrels"),includeMembers:j(n,"includeMembers"),scanLimit:r.scanLimit,semantic:r.semantic},o=Je(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){_.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&&Wm(u,"DEAD CODE",` Zero references anywhere \u2014 no cross-file callers AND no same-file uses.
802
+ Safe to delete.`,d),m.length>0&&(u.length>0&&console.log(""),Wm(m,"FILE-INTERNAL ONLY",` Used only within the same file (no cross-file callers). Could be a
821
803
  single-use helper, an abstraction-in-progress, or a callback registered
822
804
  through a framework path that static analysis cannot trace (signal
823
805
  handlers, event listeners, dependency injection). NOT necessarily dead \u2014
824
- review case by case.`,p));let y=[];c&&y.push(`${u.length} dead code (${d} LOC)`),l&&y.push(`${m.length} file-internal (${p} LOC)`),console.log(`
825
- \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 ${y.join(" + ")}`)});function mm(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(` ${be(l.startLine,l.endLine)} (${l.loc} LOC) ${l.shortName}`)}}var gI=ot("unused-imports",{query:({db:e,args:t,budget:n})=>ro(e,F(t,0),{semantic:n.semantic}),format:e=>` ${e.shortName} in ${e.importedIn}`,emptyMessage:()=>"No unused imports found.",after:e=>console.log(`
826
- ${e.length} unused import(s)`)}),hI=Wr("isolated",{query:({db:e,opts:t,budget:n})=>xn(e,{scope:M(t,"scope"),minLoc:R(t,"minLoc",3),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${be(e.startLine,e.endLine)} (${e.loc} LOC) ${e.shortName}`,emptyMessage:()=>"No isolated symbols found.",after:e=>console.log(`
827
- ${e.length} isolated symbol(s)`)}),yI=ae("extract-candidates",({db:e,opts:t,budget:n})=>{let r=vn(e,{scope:M(t,"scope"),minLoc:R(t,"minLoc",10),minCallees:R(t,"minCallees",6),limit:R(t,"limit",20),scanLimit:n.scanLimit,semantic:n.semantic});if(r.length===0)return N.empty("No extraction candidates found.");On("extraction candidates");for(let i of r){console.log(`
828
- ${Se(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(`
829
- ${r.length} extraction candidate(s) found.`)}),bI=ot("wrapper-candidates",{query:({db:e,opts:t,budget:n})=>wn(e,{scope:M(t,"scope"),maxLoc:R(t,"maxLoc",15),limit:R(t,"limit",30),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${Se(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.loc} LOC)
806
+ 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(`
807
+ \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 Wm(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(` ${ue(l.startLine,l.endLine)} (${l.loc} LOC) ${l.shortName}`)}}var $D=Ze("unused-imports",{query:({db:e,args:t,budget:n})=>xo(e,M(t,0),{semantic:n.semantic}),format:e=>` ${e.shortName} in ${e.importedIn}`,emptyMessage:()=>"No unused imports found.",after:e=>console.log(`
808
+ ${e.length} unused import(s)`)}),jD=Ci("isolated",{query:({db:e,opts:t,budget:n})=>kt(e,{scope:k(t,"scope"),minLoc:S(t,"minLoc",3),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${ue(e.startLine,e.endLine)} (${e.loc} LOC) ${e.shortName}`,emptyMessage:()=>"No isolated symbols found.",after:e=>console.log(`
809
+ ${e.length} isolated symbol(s)`)}),BD=X("extract-candidates",({db:e,opts:t,budget:n})=>{let r=Pt(e,{scope:k(t,"scope"),minLoc:S(t,"minLoc",10),minCallees:S(t,"minCallees",6),limit:S(t,"limit",20),scanLimit:n.scanLimit,semantic:n.semantic});if(r.length===0)return _.empty("No extraction candidates found.");or("extraction candidates");for(let i of r){console.log(`
810
+ ${se(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(`
811
+ ${r.length} extraction candidate(s) found.`)}),HD=Ze("wrapper-candidates",{query:({db:e,opts:t,budget:n})=>jt(e,{scope:k(t,"scope"),maxLoc:S(t,"maxLoc",15),limit:S(t,"limit",30),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${se(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.loc} LOC)
830
812
  Only called by: ${e.singleCallerShort} (fan-in: ${e.callerFanIn})`,emptyMessage:()=>"No wrapper candidates found.",heuristicLabel:"wrapper candidates",after:e=>console.log(`
831
- ${e.length} wrapper candidate(s).`)}),SI=ot("passthrough-candidates",{query:({db:e,opts:t,budget:n})=>kn(e,{scope:M(t,"scope"),maxLoc:R(t,"maxLoc",15),limit:R(t,"limit",30),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${Se(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.loc} LOC)
813
+ ${e.length} wrapper candidate(s).`)}),qD=Ze("passthrough-candidates",{query:({db:e,opts:t,budget:n})=>Ot(e,{scope:k(t,"scope"),maxLoc:S(t,"maxLoc",15),limit:S(t,"limit",30),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${se(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.loc} LOC)
832
814
  Forwards to: ${e.forwardsToShort} (${e.forwardsToFile})`,emptyMessage:()=>"No passthrough candidates found.",heuristicLabel:"passthrough candidates",after:e=>console.log(`
833
- ${e.length} passthrough candidate(s).`)}),xI=ot("stale-abstractions",{query:({db:e,opts:t,budget:n})=>Pn(e,{scope:M(t,"scope"),minLoc:R(t,"minLoc",3),limit:R(t,"limit",30),includeLowConfidence:z(t,"includeLowConfidence"),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>{let t=e.consumers===0?"unused":`${e.consumers} consumer`,n=e.barrelConsumers>0?`, +${e.barrelConsumers} barrel`:"";return` [${e.confidence}] ${Se(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.kind}, ${e.loc} LOC, ${t}${n})
815
+ ${e.length} passthrough candidate(s).`)}),VD=Ze("stale-abstractions",{query:({db:e,opts:t,budget:n})=>$t(e,{scope:k(t,"scope"),minLoc:S(t,"minLoc",3),limit:S(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}] ${se(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.kind}, ${e.loc} LOC, ${t}${n})
834
816
  ${e.reason}`},emptyMessage:()=>"No stale abstractions found.",heuristicLabel:"stale abstraction candidates",after:e=>console.log(`
835
- ${e.length} stale abstraction(s).`)}),CI=Vr("complexity-hotspots",{headers:["score"," LOC","fan-in","fan-out","callees","symbol"],query:({db:e,opts:t,budget:n})=>Tn(e,{scope:M(t,"scope"),minLoc:R(t,"minLoc",10),limit:R(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]}),RI=Fn("similar",{query:({db:e,args:t,opts:n,budget:r})=>{let i=Pe(t,0);return i?{mode:"target",rows:Ro(e,i,{minSimilarity:R(n,"minSimilarity",.4),limit:R(n,"limit",20),scanLimit:r.scanLimit,semantic:r.semantic})}:{mode:"all",rows:_n(e,{minSimilarity:R(n,"minSimilarity",.4),limit:R(n,"limit",20),scope:M(n,"scope"),minCallees:R(n,"minCallees",4),crossFileOnly:z(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"){N.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=[`
817
+ ${e.length} stale abstraction(s).`)}),WD=xi("complexity-hotspots",{headers:["score"," LOC","fan-in","fan-out","callees","symbol"],query:({db:e,opts:t,budget:n})=>rr(e,{scope:k(t,"scope"),minLoc:S(t,"minLoc",10),limit:S(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]}),UD=cr("similar",{query:({db:e,args:t,opts:n,budget:r})=>{let i=He(t,0);return i?{mode:"target",rows:Gn(e,i,{minSimilarity:S(n,"minSimilarity",.4),limit:S(n,"limit",20),scanLimit:r.scanLimit,semantic:r.semantic})}:{mode:"all",rows:ze(e,{minSimilarity:S(n,"minSimilarity",.4),limit:S(n,"limit",20),scope:k(n,"scope"),minCallees:S(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"){_.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=[`
836
818
  ${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(`
837
- `)});return}N.list(e.rows,t=>`
819
+ `)});return}_.list(e.rows,t=>`
838
820
  ${Math.round(t.similarity*100)}% similar:
839
821
  A: ${t.shortNameA} (${t.fileA})
840
822
  B: ${t.shortNameB} (${t.fileB})
841
823
  Shared ${t.similarityBasis==="source-tokens"?"source tokens":"callees"}: ${t.sharedCallees.join(", ")}`),console.log(`
842
- ${e.rows.length} similar pair(s) found.`)}}),II=It({query:({db:e,args:t,opts:n})=>Io(e,{minSimilarity:R(n,"minSimilarity",.5),limit:R(n,"limit",20),scope:M(n,"scope"),minDeps:_t(n,"minDeps"),filePattern:Pe(t,0)}),emptyMessage:e=>e.length===0?"No similar file pairs found.":void 0,heuristicLabel:"similar file candidates",render:e=>{N.list(e,t=>{let n=[`
824
+ ${e.rows.length} similar pair(s) found.`)}}),GD=Wt({query:({db:e,args:t,opts:n})=>Oo(e,{minSimilarity:S(n,"minSimilarity",.5),limit:S(n,"limit",20),scope:k(n,"scope"),minDeps:ft(n,"minDeps"),filePattern:He(t,0)}),emptyMessage:e=>e.length===0?"No similar file pairs found.":void 0,heuristicLabel:"similar file candidates",render:e=>{_.list(e,t=>{let n=[`
843
825
  ${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(`
844
826
  `)}),console.log(`
845
- ${e.length} similar pair(s) found.`)}}),_I=It({query:({db:e,opts:t})=>_o(e,{minSimilarity:R(t,"minSimilarity",.5),limit:R(t,"limit",15),scope:M(t,"scope"),minChainLength:R(t,"minLength",3),maxChainLength:R(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(`
827
+ ${e.length} similar pair(s) found.`)}}),JD=Wt({query:({db:e,opts:t})=>$o(e,{minSimilarity:S(t,"minSimilarity",.5),limit:S(t,"limit",15),scope:k(t,"scope"),minChainLength:S(t,"minLength",3),maxChainLength:S(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(`
846
828
  \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(`
847
- ${e.length} similar chain pair(s) found.`)}}),vI=Fn("drift",{query:({db:e,args:t,opts:n,budget:r})=>Nn(e,{scope:Pe(t,0),minDeviation:R(n,"minDeviation",5),semantic:r.semantic}),emptyMessage:e=>e.results.length===0?"No drift detected.":void 0,heuristicLabel:"drift candidates",render:e=>{console.log(""),N.groupedByFile(e.results,t=>{let r=` [${t.kind==="unused-import"?"UNUSED":t.kind==="layer-violation"?"LAYER":"UNIQUE"}] ${t.description}`;return t.detail?`${r}
829
+ ${e.length} similar chain pair(s) found.`)}}),zD=cr("drift",{query:({db:e,args:t,opts:n,budget:r})=>Mt(e,{scope:He(t,0),minDeviation:S(n,"minDeviation",5),semantic:r.semantic}),emptyMessage:e=>e.results.length===0?"No drift detected.":void 0,heuristicLabel:"drift candidates",render:e=>{console.log(""),_.groupedByFile(e.results,t=>{let r=` [${t.kind==="unused-import"?"UNUSED":t.kind==="layer-violation"?"LAYER":"UNIQUE"}] ${t.description}`;return t.detail?`${r}
848
830
  ${t.detail}`:r},t=>t.file),console.log(`
849
- ${e.unusedImports} unused import(s), ${e.layerViolations} layer violation(s), ${e.patternDeviations} pattern deviation(s)`)}}),DI=Fn("convergence",{query:({db:e,args:t,budget:n})=>Mo(e,F(t,0),F(t,1),{semantic:n.semantic}),emptyMessage:e=>e?void 0:"One or both symbols not found.",render:e=>{if(e){console.log(`
831
+ ${e.unusedImports} unused import(s), ${e.layerViolations} layer violation(s), ${e.patternDeviations} pattern deviation(s)`)}}),QD=cr("convergence",{query:({db:e,args:t,budget:n})=>os(e,M(t,0),M(t,1),{semantic:n.semantic}),emptyMessage:e=>e?void 0:"One or both symbols not found.",render:e=>{if(e){console.log(`
850
832
  ${Math.round(e.similarity*100)}% callee overlap
851
833
  `),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)
852
834
  `),console.log(` Shared callees (${e.sharedCallees.length}):`);for(let t of e.sharedCallees)console.log(` ${t}`);if(e.uniqueToA.length>0){console.log(`
853
835
  Unique to A (${e.uniqueToA.length}):`);for(let t of e.uniqueToA)console.log(` ${t}`)}if(e.uniqueToB.length>0){console.log(`
854
836
  Unique to B (${e.uniqueToB.length}):`);for(let t of e.uniqueToB)console.log(` ${t}`)}console.log(`
855
- Strategy: ${e.consolidationStrategy}`)}}}),NI=ot("similar-signatures",{query:({db:e,opts:t,budget:n})=>Bo(e,{scope:M(t,"scope"),minLoc:R(t,"minLoc",3),limit:R(t,"limit",20),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>{let t=`
856
- Signature: ${e.signature} (${e.functions.length} functions)`,n=e.functions.map(r=>` ${Se(r.file,r.startLine,r.endLine)} ${r.shortName} (${r.loc} LOC)`).join(`
837
+ Strategy: ${e.consolidationStrategy}`)}}}),KD=Ze("similar-signatures",{query:({db:e,opts:t,budget:n})=>us(e,{scope:k(t,"scope"),minLoc:S(t,"minLoc",3),limit:S(t,"limit",20),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>{let t=`
838
+ Signature: ${e.signature} (${e.functions.length} functions)`,n=e.functions.map(r=>` ${se(r.file,r.startLine,r.endLine)} ${r.shortName} (${r.loc} LOC)`).join(`
857
839
  `);return`${t}
858
840
  ${n}`},emptyMessage:()=>"No same-shape function groups found.",after:e=>console.log(`
859
- ${e.length} group(s) found.`)});function Zt(e){return{docs:S("Cleanup"),...e}}function He({heuristicLabel:e,...t}){return Zt({...t,heuristic:{label:e}})}var dm=[Zt({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",D,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:S("Cleanup",["scip-query dead --min-loc 10"]),handler:fI}),Zt({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:gI}),Zt({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",D,3),g("--full","Run unbounded semantic analysis on large indexes")],budget:"candidate-scan",renderShape:"grouped-by-file",handler:hI}),He({id:"similar",command:"similar [symbol]",description:"Find heuristic function similarity candidates from callee fingerprints",options:[g("--min-similarity <n>","Minimum Jaccard similarity (0-1)",kr,.4),g("-n, --limit <n>","Number of results",D,20),g("-s, --scope <path>","Limit to files matching path"),g("--min-callees <n>","Minimum callees to consider",D,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:RI}),He({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)",kr,.5),g("-n, --limit <n>","Number of results",D,20),g("-s, --scope <path>","Limit to files matching path"),g("--min-deps <n>","Minimum dependencies to consider",D)],heuristicLabel:"similar file candidates",renderShape:"custom",handler:II}),He({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)",kr,.5),g("-n, --limit <n>","Number of results",D,15),g("-s, --scope <path>","Limit to files matching path"),g("--min-length <n>","Minimum chain length",D,3),g("--max-length <n>","Maximum chain length",D,8)],heuristicLabel:"similar chain candidates",renderShape:"custom",handler:_I}),He({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",D,10),g("--min-callees <n>","Minimum callees to analyze",D,6),g("-n, --limit <n>","Number of results",D,20),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"extraction candidates",budget:"candidate-scan",renderShape:"custom",handler:yI}),He({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",wr,5),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"drift candidates",budget:"semantic",renderShape:"grouped-by-file",handler:vI}),He({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",D,15),g("-n, --limit <n>","Number of results",D,30),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"wrapper candidates",budget:"candidate-scan",renderShape:"list",handler:bI}),He({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",D,15),g("-n, --limit <n>","Number of results",D,30),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"passthrough candidates",budget:"candidate-scan",renderShape:"list",handler:SI}),He({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",D,3),g("-n, --limit <n>","Number of results",D,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:xI}),He({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",D,10),g("-n, --limit <n>","Number of results",D,20),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"complexity hotspot candidates",budget:"candidate-scan",renderShape:"table",handler:CI}),Zt({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:DI}),lm({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",D,30)],docs:S("Cleanup"),query:({db:e,opts:t})=>jo(e,{scope:M(t,"scope"),limit:R(t,"limit",30)}),format:e=>` ${e.shortName} (from ${e.originalFile})
841
+ ${e.length} group(s) found.`)});function Ve(e){return{docs:x("Cleanup"),...e}}function nt({heuristicLabel:e,...t}){return Ve({...t,heuristic:{label:e}})}var YD=X("cleanup-plan",({db:e,opts:t,budget:n})=>{let r=Bo(e,{scope:k(t,"scope"),minLoc:S(t,"minLoc",1),maxDepth:S(t,"maxDepth",5),scanLimit:n.scanLimit});if(r.batches.length===0)return _.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.
842
+ `);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(`
843
+ Verifying batches against the project checker (throwaway worktree at HEAD)...`);let i=Bm(Be(),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}`)}}}),XD=X("recent-duplicates",({db:e,opts:t,budget:n})=>{let r=Zo(e,{windowCommits:S(t,"window",100),minSimilarity:ft(t,"minSimilarity")??.7,limit:S(t,"limit",30),scope:k(t,"scope"),scanLimit:n.scanLimit,semantic:n.semantic});if(!r.available)return _.empty("No git history available (not a repository, or git missing).");if(r.findings.length===0)return _.empty(`No recent re-implementations found (window: last ${r.windowCommits} commits).`);console.log(`Recent re-implementations (window: last ${r.windowCommits} commits):
844
+ `);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(`
845
+ ${r.findings.length} finding(s). ECHO: prefer extending the established side and deleting the echo.`)}),ZD=q(({db:e,args:t,opts:n})=>{let r=Jo(e,{doc:t[0]===void 0?void 0:M(t,0),limit:S(n,"limit",20),minCoupling:S(n,"minCoupling",3)});if(!r.available)return _.empty("No git history available (not a repository, or git missing).");if(r.findings.length===0)return _.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):
846
+ `);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(`
847
+ Stale standards docs are worse than none \u2014 agents implement to a dead spec.`)}),eN=Ze("unused-params",{query:({db:e,opts:t,budget:n})=>er(e,{scope:k(t,"scope"),limit:S(t,"limit",30),scanLimit:n.scanLimit}),format:e=>` ${se(e.file,e.startLine,e.endLine)} ${e.shortName}
848
+ 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(`
849
+ ${e.length} function(s) with trailing unused parameters.`)}),Um=[Ve({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",R,30),g("--full","Run unbounded analysis on large indexes")],budget:"candidate-scan",heuristic:{label:"unused trailing parameter candidates"},renderShape:"list",docs:x("Cleanup",["scip-query unused-params -s src/services"]),handler:eN}),Ve({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",R,1),g("--max-depth <n>","Maximum cascade depth",R,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:x("Cleanup",["scip-query cleanup-plan --min-loc 3","scip-query cleanup-plan --verify"]),handler:YD}),Ve({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"',R,100),g("--min-similarity <n>","Minimum similarity (0-1)",sr,.7),g("-n, --limit <n>","Maximum findings",R,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:x("Cleanup",["scip-query recent-duplicates --window 50"]),handler:XD}),Ve({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",R,20),g("--min-coupling <n>","Minimum historical co-changes to track a subject",R,3)],heuristic:{label:"doc drift candidates"},renderShape:"custom",docs:x("Cleanup",["scip-query doc-drift","scip-query doc-drift AGENTS.md"]),handler:ZD}),Ve({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",R,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:x("Cleanup",["scip-query dead --min-loc 10"]),handler:OD}),Ve({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:$D}),Ve({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",R,3),g("--full","Run unbounded semantic analysis on large indexes")],budget:"candidate-scan",renderShape:"grouped-by-file",handler:jD}),nt({id:"similar",command:"similar [symbol]",description:"Find heuristic function similarity candidates from callee fingerprints",options:[g("--min-similarity <n>","Minimum Jaccard similarity (0-1)",sr,.4),g("-n, --limit <n>","Number of results",R,20),g("-s, --scope <path>","Limit to files matching path"),g("--min-callees <n>","Minimum callees to consider",R,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:UD}),nt({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)",sr,.5),g("-n, --limit <n>","Number of results",R,20),g("-s, --scope <path>","Limit to files matching path"),g("--min-deps <n>","Minimum dependencies to consider",R)],heuristicLabel:"similar file candidates",renderShape:"custom",handler:GD}),nt({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)",sr,.5),g("-n, --limit <n>","Number of results",R,15),g("-s, --scope <path>","Limit to files matching path"),g("--min-length <n>","Minimum chain length",R,3),g("--max-length <n>","Maximum chain length",R,8)],heuristicLabel:"similar chain candidates",renderShape:"custom",handler:JD}),nt({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",R,10),g("--min-callees <n>","Minimum callees to analyze",R,6),g("-n, --limit <n>","Number of results",R,20),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"extraction candidates",budget:"candidate-scan",renderShape:"custom",handler:BD}),nt({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",ui,5),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"drift candidates",budget:"semantic",renderShape:"grouped-by-file",handler:zD}),nt({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",R,15),g("-n, --limit <n>","Number of results",R,30),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"wrapper candidates",budget:"candidate-scan",renderShape:"list",handler:HD}),nt({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",R,15),g("-n, --limit <n>","Number of results",R,30),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"passthrough candidates",budget:"candidate-scan",renderShape:"list",handler:qD}),nt({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",R,3),g("-n, --limit <n>","Number of results",R,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:VD}),nt({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",R,10),g("-n, --limit <n>","Number of results",R,20),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"complexity hotspot candidates",budget:"candidate-scan",renderShape:"table",handler:WD}),Ve({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:QD}),qm({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",R,30)],docs:x("Cleanup"),query:({db:e,opts:t})=>as(e,{scope:k(t,"scope"),limit:S(t,"limit",30)}),format:e=>` ${e.shortName} (from ${e.originalFile})
860
850
  barrel: ${e.barrelConsumers} consumer(s) | direct: ${e.directConsumers} consumer(s)`,key:e=>e.barrelFile,emptyMessage:()=>"No redundant re-exports found.",after:e=>console.log(`
861
- ${e.length} redundant re-export(s).`)}),Zt({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",D,3),g("-n, --limit <n>","Number of groups",D,20),g("--full","Run unbounded semantic analysis on large indexes")],budget:"candidate-scan",renderShape:"list",handler:NI})];var LI=te(({db:e})=>{let t=Te(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: ${Kt(t.indexSizeBytes)}`),t.lastBuilt&&console.log(`Last built: ${t.lastBuilt.toISOString().replace("T"," ").slice(0,19)}`)}),pm=[{id:"stats",command:"stats",description:"Show index statistics",renderShape:"custom",docs:S("Core"),handler:LI}];var EI=Vr("bottlenecks",{headers:["score","fan-in","fan-out","symbol"],query:({db:e,opts:t,budget:n})=>po(e,{limit:R(t,"limit",20),scope:M(t,"scope"),minFanIn:R(t,"minFanIn",2),minFanOut:R(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."}),wI=te(({db:e,args:t,opts:n})=>{let r=Pe(t,0);if(r){let i=so(e,r);if(i.length===0)return N.empty(`No fan-in for ${r}.`);N.list(i,o=>` ${String(o.count).padStart(4)} files ${o.name}`);return}N.table(["files","symbol"],co(e,{limit:R(n,"limit",30),scope:M(n,"scope")}).map(i=>` ${String(i.count).padStart(5)} ${i.name}`))}),kI=te(({db:e,args:t,opts:n})=>{let r=Pe(t,0);if(r){let i=ao(e,r);if(i.length===0)return N.empty(`No fan-out for ${r}.`);N.list(i,o=>` ${String(o.count).padStart(4)} symbols ${o.name}`);return}N.table(["symbols","file"],lo(e,{limit:R(n,"limit",30),scope:M(n,"scope")}).map(i=>` ${String(i.count).padStart(7)} ${i.name}`))}),PI=te(({db:e,args:t,opts:n})=>{let r=Pe(t,0),i=Pe(t,1);if(r&&i){let o=uo(e,r,i);console.log(`${o.file1} \u2194 ${o.file2}: ${o.sharedSymbols} shared symbols`);return}N.table(["shared","file1 \u2192 file2"],mo(e,{limit:R(n,"limit",20),scope:M(n,"scope")}).map(o=>` ${String(o.sharedSymbols).padStart(6)} ${o.file1} \u2192 ${o.file2}`))}),TI=It({query:({db:e,opts:t})=>Sn(e,{scope:M(t,"scope"),maxDepth:R(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(`
851
+ ${e.length} redundant re-export(s).`)}),Ve({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",R,3),g("-n, --limit <n>","Number of groups",R,20),g("--full","Run unbounded semantic analysis on large indexes")],budget:"candidate-scan",renderShape:"list",handler:KD})];var tN=q(({db:e})=>{let t=Ne(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: ${xn(t.indexSizeBytes)}`),t.lastBuilt&&console.log(`Last built: ${t.lastBuilt.toISOString().replace("T"," ").slice(0,19)}`)}),Gm=[{id:"stats",command:"stats",description:"Show index statistics",renderShape:"custom",docs:x("Core"),handler:tN}];var nN=xi("bottlenecks",{headers:["score","fan-in","fan-out","symbol"],query:({db:e,opts:t,budget:n})=>wo(e,{limit:S(t,"limit",20),scope:k(t,"scope"),minFanIn:S(t,"minFanIn",2),minFanOut:S(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."}),rN=q(({db:e,args:t,opts:n})=>{let r=He(t,0);if(r){let i=Io(e,r);if(i.length===0)return _.empty(`No fan-in for ${r}.`);_.list(i,o=>` ${String(o.count).padStart(4)} files ${o.name}`);return}_.table(["files","symbol"],Do(e,{limit:S(n,"limit",30),scope:k(n,"scope")}).map(i=>` ${String(i.count).padStart(5)} ${i.name}`))}),iN=q(({db:e,args:t,opts:n})=>{let r=He(t,0);if(r){let i=vo(e,r);if(i.length===0)return _.empty(`No fan-out for ${r}.`);_.list(i,o=>` ${String(o.count).padStart(4)} symbols ${o.name}`);return}_.table(["symbols","file"],No(e,{limit:S(n,"limit",30),scope:k(n,"scope")}).map(i=>` ${String(i.count).padStart(7)} ${i.name}`))}),oN=q(({db:e,args:t,opts:n})=>{let r=He(t,0),i=He(t,1);if(r&&i){let o=Lo(e,r,i);console.log(`${o.file1} \u2194 ${o.file2}: ${o.sharedSymbols} shared symbols`);return}_.table(["shared","file1 \u2192 file2"],_o(e,{limit:S(n,"limit",20),scope:k(n,"scope")}).map(o=>` ${String(o.sharedSymbols).padStart(6)} ${o.file1} \u2192 ${o.file2}`))}),sN=Wt({query:({db:e,opts:t})=>Et(e,{scope:k(t,"scope"),maxDepth:S(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(`
862
852
  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(`
863
- ${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.)`)}}),MI=It({query:({db:e,opts:t})=>bo(e,{limit:R(t,"limit",10),scope:M(t,"scope"),minDepth:R(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(`
864
- Chain ${t+1} (depth ${e[t].depth}):`);for(let n of e[t].chain)console.log(` \u2192 ${n}`)}}}),fm=[qr({id:"hotspots",command:"hotspots",description:"Most-referenced symbols in the codebase (choke points)",options:[g("-n, --limit <n>","Number of results",D,30),g("-s, --scope <path>","Limit to files matching path")],docs:S("Graph"),headers:["refs","files","symbol"],query:({db:e,opts:t})=>eo(e,{limit:R(t,"limit",30),scope:M(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",D,30),g("-s, --scope <path>","Limit to files matching path")],renderShape:"custom",docs:S("Graph"),handler:wI},{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",D,30),g("-s, --scope <path>","Limit to files matching path")],renderShape:"custom",docs:S("Graph"),handler:kI},{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",D,20),g("-s, --scope <path>","Limit to files matching path")],renderShape:"custom",docs:S("Graph"),handler:PI},{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",D,10)],renderShape:"custom",docs:S("Graph"),handler:TI},{id:"bottlenecks",command:"bottlenecks",description:"Find coupling hubs: high fan-in AND high fan-out",options:[g("-n, --limit <n>","Number of results",D,20),g("-s, --scope <path>","Limit to files matching path"),g("--min-fan-in <n>","Minimum fan-in",D,2),g("--min-fan-out <n>","Minimum fan-out",D,2),g("--full","Run unbounded semantic analysis on large indexes")],budget:"candidate-scan",renderShape:"table",docs:S("Graph"),handler:EI},{id:"deep-chains",command:"deep-chains",description:"Find the longest transitive dependency chains",options:[g("-n, --limit <n>","Number of chains to show",D,10),g("-s, --scope <path>","Limit to files matching path"),g("--min-depth <n>","Minimum chain depth",D,3)],renderShape:"custom",docs:S("Graph"),handler:MI},Ur({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:S("Graph"),query:({db:e,args:t,budget:n})=>xo(e,String(t[0]),{semantic:n.semantic}),emptyMessage:e=>e?void 0:"Symbol not found.",before:e=>{e&&console.log(`Symbol: ${e.shortName}
865
- `)},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 OI=ae("complexity",({db:e,args:t,budget:n})=>{let r=Fo(e,F(t,0),{semantic:n.semantic});if(!r)return N.empty("Symbol not found.");console.log(`${Se(r.relativePath,r.startLine,r.endLine)} ${r.shortName}
866
- `),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}`)}),gm=[{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:S("Health"),handler:OI}];var FI=te(({db:e,args:t,opts:n})=>{let r=vo(e,F(t,0),{maxDepth:R(n,"maxDepth",5),scope:M(n,"scope")});if(r.length===0)return N.empty("No affected symbols found.");let i=-1;for(let o of r)o.depth!==i&&(console.log(`
853
+ ${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.)`)}}),aN=Wt({query:({db:e,opts:t})=>To(e,{limit:S(t,"limit",10),scope:k(t,"scope"),minDepth:S(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(`
854
+ Chain ${t+1} (depth ${e[t].depth}):`);for(let n of e[t].chain)console.log(` \u2192 ${n}`)}}}),Jm=[Ri({id:"hotspots",command:"hotspots",description:"Most-referenced symbols in the codebase (choke points)",options:[g("-n, --limit <n>","Number of results",R,30),g("-s, --scope <path>","Limit to files matching path")],docs:x("Graph"),headers:["refs","files","symbol"],query:({db:e,opts:t})=>yo(e,{limit:S(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",R,30),g("-s, --scope <path>","Limit to files matching path")],renderShape:"custom",docs:x("Graph"),handler:rN},{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",R,30),g("-s, --scope <path>","Limit to files matching path")],renderShape:"custom",docs:x("Graph"),handler:iN},{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",R,20),g("-s, --scope <path>","Limit to files matching path")],renderShape:"custom",docs:x("Graph"),handler:oN},{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",R,10)],renderShape:"custom",docs:x("Graph"),handler:sN},{id:"bottlenecks",command:"bottlenecks",description:"Find coupling hubs: high fan-in AND high fan-out",options:[g("-n, --limit <n>","Number of results",R,20),g("-s, --scope <path>","Limit to files matching path"),g("--min-fan-in <n>","Minimum fan-in",R,2),g("--min-fan-out <n>","Minimum fan-out",R,2),g("--full","Run unbounded semantic analysis on large indexes")],budget:"candidate-scan",renderShape:"table",docs:x("Graph"),handler:nN},{id:"deep-chains",command:"deep-chains",description:"Find the longest transitive dependency chains",options:[g("-n, --limit <n>","Number of chains to show",R,10),g("-s, --scope <path>","Limit to files matching path"),g("--min-depth <n>","Minimum chain depth",R,3)],renderShape:"custom",docs:x("Graph"),handler:aN},Ii({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:x("Graph"),query:({db:e,args:t,budget:n})=>qn(e,String(t[0]),{semantic:n.semantic}),emptyMessage:e=>e?void 0:"Symbol not found.",before:e=>{e&&console.log(`Symbol: ${e.shortName}
855
+ `)},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 cN=X("complexity",({db:e,args:t,budget:n})=>{let r=tr(e,M(t,0),{semantic:n.semantic});if(!r)return _.empty("Symbol not found.");console.log(`${se(r.relativePath,r.startLine,r.endLine)} ${r.shortName}
856
+ `),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}`)}),lN=q(({db:e,opts:t})=>{let n=ls(e,{samples:S(t,"samples",50),scope:k(t,"scope")});if(!n.available)return _.empty("No semantic provider available to audit against (TypeScript projects only).");console.log(`Sampled ${n.sampleSize} symbols; oracle answered ${Math.round(n.oracleCoverage*100)}%.
857
+ `),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(`
858
+ 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(", ")}`)}}),zm=[{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",R,50),g("-s, --scope <path>","Limit sampling to files matching path")],renderShape:"custom",docs:x("Health",["scip-query self-audit --samples 100"]),handler:lN},{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:x("Health"),handler:cN}];var uN=q(({db:e,args:t,opts:n})=>{let r=Jn(e,M(t,0),{maxDepth:S(n,"maxDepth",5),scope:k(n,"scope")});if(r.length===0)return _.empty("No affected symbols found.");let i=-1;for(let o of r)o.depth!==i&&(console.log(`
867
859
  \u2500\u2500 Depth ${o.depth} \u2500\u2500`),i=o.depth),console.log(` ${o.file} ${o.shortName}`);console.log(`
868
- ${r.length} affected symbol(s) across ${new Set(r.map(o=>o.file)).size} files.`)}),AI=ae("change-surface",({db:e,args:t,budget:n})=>{let r=Do(e,F(t,0),{semantic:n.semantic});if(!r)return N.empty("File not found in index.");console.log(`File: ${r.file}`),console.log(`External consumers: ${r.totalExternalConsumers}
869
- `),N.list(r.symbols,i=>{let o=i.riskLevel==="high"?" *** HIGH RISK ***":i.riskLevel==="medium"?" * medium risk *":"";return` ${be(i.startLine,i.endLine)} ${i.shortName} [${i.externalConsumers} consumers]${o}`})}),hm=[{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",D,5),g("-s, --scope <path>","Limit to files matching path")],renderShape:"custom",docs:S("Impact"),handler:FI},{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:S("Impact"),handler:AI}];function $I(e){let t=[];for(let i of e.definitions){let o=i.signature?` \u2014 ${i.signature}`:"";t.push(` ${Se(i.relativePath,i.startLine,i.endLine)}${o}`),i.source&&t.push(i.source.split(`
870
- `).map((s,a)=>` ${$e(i.startLine+a)} ${s}`).join(`
871
- `))}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 ${$e(i.line)} in ${i.enclosingShort}`);return[{title:"DEFINITION",rows:t},{title:"REFERENCED BY",rows:n}]}var jI=te(({db:e,args:t})=>{let n=io(e,F(t,0));function r(i,o){for(let s of i){let a=" ".repeat(o);console.log(`${a}${be(s.startLine,s.endLine)} ${s.shortName}`),r(s.children,o+1)}}r(n,0)}),BI=ot("imports",{query:({db:e,args:t,budget:n})=>to(e,F(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)."}),HI=Wr("refs",{query:({db:e,args:t,budget:n})=>qi(e,F(t,0),{semantic:n.semantic}),format:e=>` line ${$e(e.line)}`}),VI=te(({db:e,args:t,opts:n})=>{let r=Oo(e,F(t,0),{context:R(n,"context",0)});if(!r)return N.empty("Symbol not found or file unreadable.");console.log(`${Se(r.relativePath,r.startLine,r.endLine)} ${r.shortName} [${r.language??"unknown"}]
860
+ ${r.length} affected symbol(s) across ${new Set(r.map(o=>o.file)).size} files.`)}),mN=q(({db:e,args:t,opts:n})=>{let r=t[0]===void 0?void 0:M(t,0),i=Tt(e,r,{minTogether:S(n,"minTogether",4),limit:S(n,"limit",30),includeLinked:n.all===!0});if(!i.available)return _.empty("No git history available (not a repository, or git missing).");if(i.findings.length===0)return _.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):
861
+ `:`Hidden coupling \u2014 pairs that co-change with no dependency edge (${i.commitsAnalyzed} commits analyzed):
862
+ `);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(`
863
+ ${i.findings.length} pair(s). Co-editing one side without the other is how drift starts.`)}),dN=X("change-surface",({db:e,args:t,budget:n})=>{let r=zn(e,M(t,0),{semantic:n.semantic});if(!r)return _.empty("File not found in index.");console.log(`File: ${r.file}`),console.log(`External consumers: ${r.totalExternalConsumers}
864
+ `),_.list(r.symbols,i=>{let o=i.riskLevel==="high"?" *** HIGH RISK ***":i.riskLevel==="medium"?" * medium risk *":"";return` ${ue(i.startLine,i.endLine)} ${i.shortName} [${i.externalConsumers} consumers]${o}`})}),pN=q(({db:e,opts:t})=>{let n=Xo(e,{base:k(t,"base"),minTogether:S(t,"minTogether",6),maxEchoChecks:S(t,"maxEchoChecks",10)});if(n.changedFiles.length===0)return _.empty(n.note??`No changes vs ${n.base}.`);console.log(`Diff gate vs ${n.base}: ${n.changedFiles.length} file(s), ${n.changedSymbols} symbol(s) changed.`),console.log(`Checks: ${n.checksRun.join(", ")}
865
+ `);for(let r of n.skipped)console.log(` skipped ${r.check}: ${r.reason}`);if(n.findings.length===0){console.log("PASS: this change introduces no gate findings.");return}for(let r of n.findings)console.log(` [${r.check}] ${r.message}`),console.log(` -> ${r.remediation}`);console.log(`
866
+ FAIL: ${n.findings.length} finding(s). Fix or knowingly accept before merging.`),process.exitCode=1}),Qm=[{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",R,5),g("-s, --scope <path>","Limit to files matching path")],renderShape:"custom",docs:x("Impact"),handler:uN},{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:x("Impact"),handler:dN},{id:"diff-gate",command:"diff-gate",description:"Gate the current diff: echo candidates, 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",R,6),g("--max-echo-checks <n>","Maximum changed symbols to test for echoes",R,10)],heuristic:{label:"diff gate candidates"},renderShape:"custom",docs:x("Impact",["scip-query diff-gate","scip-query diff-gate --base origin/main"]),handler:pN},{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",R,4),g("-n, --limit <n>","Maximum pairs to report",R,30),g("--all","Include pairs that already have a dependency edge")],heuristic:{label:"co-change candidates"},renderShape:"custom",docs:x("Impact",["scip-query co-change","scip-query co-change src/runtime/config.ts"]),handler:mN}];function fN(e){let t=[];for(let i of e.definitions){let o=i.signature?` \u2014 ${i.signature}`:"";t.push(` ${se(i.relativePath,i.startLine,i.endLine)}${o}`),i.source&&t.push(i.source.split(`
867
+ `).map((s,a)=>` ${ye(i.startLine+a)} ${s}`).join(`
868
+ `))}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 ${ye(i.line)} in ${i.enclosingShort}`);return[{title:"DEFINITION",rows:t},{title:"REFERENCED BY",rows:n}]}var gN=q(({db:e,args:t,opts:n})=>{let r=M(t,0),i=j(n,"signatures"),o=Co(e,r);if(o.length===0)return _.empty(`No symbols found for "${r}".`);function s(a,c){for(let l of a){let u=" ".repeat(c),m=i&&l.signature?` - ${hN(l.signature)}`:"";console.log(`${u}${ue(l.startLine,l.endLine)} ${l.shortName}${m}`),s(l.children,c+1)}}s(o,0)});function hN(e){return e.length>120?`${e.slice(0,117)}...`:e}var yN=Ze("imports",{query:({db:e,args:t,budget:n})=>bo(e,M(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)."}),bN=Ci("refs",{query:({db:e,args:t,budget:n})=>uo(e,M(t,0),{semantic:n.semantic}),format:e=>` line ${ye(e.line)}`}),SN=q(({db:e,args:t,opts:n})=>{let r=ss(e,M(t,0),{context:S(n,"context",0)});if(!r)return _.empty("Symbol not found or file unreadable.");console.log(`${se(r.relativePath,r.startLine,r.endLine)} ${r.shortName} [${r.language??"unknown"}]
872
869
  `);let i=r.source.split(`
873
- `);for(let o=0;o<i.length;o++)console.log(` ${String($e(r.startLine+o)).padStart(4)} ${i[o]}`)}),WI=ae("dataflow",({db:e,args:t,budget:n})=>{let r=Ao(e,F(t,0),{semantic:n.semantic});if(!r)return N.empty("Symbol not found.");if(console.log(`${r.shortName} (${r.relativePath})
874
- `),r.definitionSites.length>0){console.log(" \u2550\u2550\u2550 DEFINED AT \u2550\u2550\u2550");for(let i of r.definitionSites)console.log(` ${i.file}:${$e(i.line)}`)}if(r.usageSites.length>0){console.log(`
875
- \u2550\u2550\u2550 USED AT \u2550\u2550\u2550`);for(let i of r.usageSites)console.log(` ${i.file}:${$e(i.line)} in ${i.enclosingShort}`)}if(r.producers.length>0){console.log(`
870
+ `);for(let o=0;o<i.length;o++)console.log(` ${String(ye(r.startLine+o)).padStart(4)} ${i[o]}`)}),xN=X("dataflow",({db:e,args:t,budget:n})=>{let r=nr(e,M(t,0),{semantic:n.semantic});if(!r)return _.empty("Symbol not found.");if(console.log(`${r.shortName} (${r.relativePath})
871
+ `),r.definitionSites.length>0){console.log(" \u2550\u2550\u2550 DEFINED AT \u2550\u2550\u2550");for(let i of r.definitionSites)console.log(` ${i.file}:${ye(i.line)}`)}if(r.usageSites.length>0){console.log(`
872
+ \u2550\u2550\u2550 USED AT \u2550\u2550\u2550`);for(let i of r.usageSites)console.log(` ${i.file}:${ye(i.line)} in ${i.enclosingShort}`)}if(r.producers.length>0){console.log(`
876
873
  \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(`
877
- \u2550\u2550\u2550 CONSUMERS (this feeds into) \u2550\u2550\u2550`);for(let i of r.consumers)console.log(` ${i.file} ${i.shortName}`)}}),qI=ae("slice",({db:e,args:t,opts:n,budget:r})=>{let i=z(n,"forward")?"forward":"backward",o=$o(e,F(t,0),{direction:i,maxDepth:R(n,"depth",3),semantic:r.semantic});if(!o)return N.empty("Symbol not found.");if(console.log(`${o.direction} slice of ${o.shortName}
878
- `),o.connectedSymbols.length===0){console.log(" No connected symbols found.");return}N.list(o.connectedSymbols,s=>` ${s.file} ${s.shortName}
874
+ \u2550\u2550\u2550 CONSUMERS (this feeds into) \u2550\u2550\u2550`);for(let i of r.consumers)console.log(` ${i.file} ${i.shortName}`)}}),CN=X("slice",({db:e,args:t,opts:n,budget:r})=>{let i=j(n,"forward")?"forward":"backward",o=gn(e,M(t,0),{direction:i,maxDepth:S(n,"depth",3),semantic:r.semantic});if(!o)return _.empty("Symbol not found.");if(console.log(`${o.direction} slice of ${o.shortName}
875
+ `),o.connectedSymbols.length===0){console.log(" No connected symbols found.");return}_.list(o.connectedSymbols,s=>` ${s.file} ${s.shortName}
879
876
  ${s.relationship}`),console.log(`
880
- ${o.connectedSymbols.length} connected symbol(s).`)}),ym=[ve({id:"files",command:"files <pattern>",description:"Find files matching a pattern",docs:S("Navigation",["scip-query files auth"]),query:({db:e,args:t})=>Gr(e,F(t,0)),format:e=>e.relativePath}),ve({id:"symbols",command:"symbols <file>",description:"List symbols defined in a file (with line ranges + signatures)",docs:S("Navigation",["scip-query symbols src/runtime/cli.ts"]),query:({db:e,args:t})=>ai(e,F(t,0)),format:e=>{let t=e.signature?` \u2014 ${e.signature}`:"";return` ${be(e.startLine,e.endLine)} ${e.shortName}${t}`}}),ve({id:"methods",command:"methods <className>",description:"List methods of a class (with line ranges)",docs:S("Navigation"),query:({db:e,args:t})=>Wi(e,F(t,0)),format:e=>` ${be(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:S("Navigation",["scip-query refs login"]),handler:HI},Ur({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:S("Navigation",["scip-query trace parseSymbol"]),query:({db:e,args:t,budget:n})=>Ui(e,F(t,0),{semantic:n.semantic}),sections:$I}),ve({id:"deps",command:"deps <file>",description:"Files this file depends on (internal)",docs:S("Navigation"),query:({db:e,args:t})=>Ji(e,F(t,0)),format:e=>e.relativePath}),ve({id:"rdeps",command:"rdeps <file>",description:"Files that depend on this file/module",docs:S("Navigation"),query:({db:e,args:t})=>zi(e,F(t,0)),format:e=>e.relativePath}),um({id:"system",command:"system <module>",description:"Full module map: files, symbols, deps in/out",docs:S("Navigation",["scip-query system queries"]),query:({db:e,args:t})=>Gi(e,F(t,0)),sections:e=>[{title:"FILES",rows:e.files},{title:"EXPORTED SYMBOLS",rows:e.symbols.map(t=>` ${be(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}`)}]}),ve({id:"surface",command:"surface <module>",description:"What symbols consumers actually use from this module",docs:S("Navigation"),query:({db:e,args:t})=>Qi(e,F(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:S("Navigation"),handler:BI},ve({id:"imported-by",command:"imported-by <symbol>",description:"Which files import this symbol?",docs:S("Navigation"),query:({db:e,args:t})=>no(e,F(t,0)),format:e=>` ${e.fromFile}`}),{id:"outline",command:"outline <file>",description:"Tree view of symbols in a file (using nesting hierarchy)",renderShape:"custom",docs:S("Navigation"),handler:jI},ve({id:"members",command:"members <symbol>",description:"All children of a symbol (methods, fields, nested types)",docs:S("Navigation"),query:({db:e,args:t})=>oo(e,F(t,0)),format:e=>` ${be(e.startLine,e.endLine)} [${e.kind}] ${e.shortName}`}),ve({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",D,100)],docs:S("Navigation"),query:({db:e,args:t,opts:n})=>ho(e,F(t,0),{scope:M(n,"scope"),limit:R(n,"limit",100)}),format:e=>` ${Se(e.relativePath,e.startLine,e.endLine)} [${e.kindName}] ${e.shortName}`,emptyMessage:({args:e})=>`No symbols found for kind "${F(e,0)}". Use "kind-counts" to see available kinds.`,after:e=>console.log(`
881
- ${e.length} symbol(s)`)}),qr({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:S("Navigation"),headers:["count","kind"],query:({db:e,opts:t})=>yo(e,{scope:M(t,"scope")}),format:e=>` ${String(e.count).padStart(5)} ${e.kindName} (${e.kind})`}),ve({id:"hierarchy",command:"hierarchy <symbol>",description:"Show a symbol's ancestry chain (method \u2192 class \u2192 module)",docs:S("Navigation"),query:({db:e,args:t})=>So(e,F(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",D,0)],renderShape:"custom",docs:S("Navigation"),handler:VI},{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:S("Navigation"),handler:WI},{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",D,3),g("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",renderShape:"custom",docs:S("Navigation"),handler:qI}];var bm=["stats","files","symbols","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","drift","wrapper-candidates","passthrough-candidates","stale-abstractions","complexity-hotspots","convergence","code","complexity","dataflow","slice","redundant-reexports","similar-signatures"],UI=[pm,ym,fm,dm,hm,gm],Sm=UI.flat(),xm=new Map(Sm.map(e=>[e.id,e])),iA=bm.map(e=>{let t=xm.get(e);if(!t)throw new Error(`Missing query command descriptor: ${e}`);return t});for(let e of Sm)if(!bm.includes(e.id))throw new Error(`Query command descriptor is not ordered: ${e.id}`);function C(e){let t=xm.get(e);if(!t)throw new Error(`Unknown query command descriptor: ${e}`);return t}var Cm=[{id:"reindex",command:"reindex",description:"Index the codebase and convert to SQLite",options:[g("-l, --language <lang>","Index only this language (can be repeated)",Hl,[]),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",wr)],renderShape:"custom",docs:S("Indexing",["scip-query reindex"]),handler:Yu},{id:"augment-sources",command:"augment-sources",description:"Add source files skipped by upstream SCIP indexers to the SQLite documents table",renderShape:"custom",docs:S("Indexing"),handler:Xu},{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:S("Indexing"),handler:Zu},C("stats"),C("files"),C("symbols"),C("methods"),C("refs"),C("trace"),C("deps"),C("rdeps"),C("system"),C("surface"),C("dead"),C("hotspots"),C("imports"),C("imported-by"),C("unused-imports"),C("outline"),C("members"),C("fan-in"),C("fan-out"),C("coupling"),C("cycles"),C("bottlenecks"),C("isolated"),C("by-kind"),C("kind-counts"),C("deep-chains"),C("hierarchy"),C("call-graph"),C("similar"),C("similar-files"),C("similar-chains"),C("extract-candidates"),C("affected"),C("change-surface"),{id:Er,command:Er,description:"Internal diff-impact batch worker",hidden:!0,options:[g("--base <ref>","Git ref to diff against (default: HEAD)")],renderShape:"custom",handler:em},{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:S("Impact"),handler:tm},C("drift"),C("wrapper-candidates"),C("passthrough-candidates"),C("stale-abstractions"),C("complexity-hotspots"),{id:Lr,command:Lr,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:nm},{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")],renderShape:"custom",docs:S("Health",["scip-query health --json"]),handler:rm},C("convergence"),C("code"),C("complexity"),C("dataflow"),C("slice"),{id:"install-skills",command:"install-skills",description:`Install skills (${es.join(", ")}) into Claude Code and Codex`,renderShape:"custom",docs:S("Maintenance"),handler:im},{id:"check-deps",command:"check-deps",description:"Check whether scip-query and the detected language indexers are actually runnable",renderShape:"custom",docs:S("Maintenance"),handler:om},C("redundant-reexports"),C("similar-signatures"),{id:"init",command:"init",description:"Create a .scipquery.json config file for this project",renderShape:"custom",docs:S("Maintenance"),handler:sm},{id:"watch",command:"watch",description:"Watch for file changes and reindex automatically",options:[g("--debounce <ms>","Ms to wait after last change (default: 30000)",Go),g("--cooldown <ms>","Min ms between reindexes (default: 60000)",Go)],renderShape:"custom",docs:S("Maintenance"),handler:am},{id:"status",command:"status",description:"Show index status for this project",renderShape:"custom",docs:S("Maintenance"),handler:cm}];function Rm(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 JI,mkdirSync as zI,readFileSync as GI,writeFileSync as QI}from"fs";import{homedir as KI}from"os";import{join as Jr}from"path";var YI=1440*60*1e3,_m="update-check.json",XI="https://registry.npmjs.org/scip-query/latest";async function vm(e={}){let t=e.env??process.env;if(t.SCIP_QUERY_UPDATE_CHECK==="0"||t.NO_UPDATE_NOTIFIER)return;let n=e.cacheDir??t_(t),r=e.now??Date.now(),i=e.currentVersion??Nr,o=n_(n),s=o&&r-o.checkedAt<YI?o.latestVersion:await r_(n,e.fetchLatestVersion??o_,r);if(!s||!e_(s,i))return;(e.writeNotice??(c=>console.error(c)))(ZI(i,s))}function ZI(e,t){return[`scip-query update available: ${e} -> ${t}.`,"Agent: tell your human to update with: npm install -g scip-query@latest",""].join(`
882
- `)}function e_(e,t){let n=Im(e),r=Im(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 t_(e){let t=e.XDG_CACHE_HOME||Jr(KI(),".cache");return Jr(t,"scip-query")}function n_(e){let t=Jr(e,_m);if(!JI(t))return null;try{let n=JSON.parse(GI(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 r_(e,t,n){let r;try{r=await t()}catch{r=null}return i_(e,{checkedAt:n,latestVersion:r}),r}function i_(e,t){try{zI(e,{recursive:!0}),QI(Jr(e,_m),`${JSON.stringify(t,null,2)}
883
- `)}catch{}}async function o_(){let e=await fetch(XI,{signal:AbortSignal.timeout(1e3)});if(!e.ok)return null;let t=await e.json();return typeof t.version=="string"?t.version:null}function Im(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(e);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}zr.name("scip-query").description("Language-agnostic code intelligence CLI powered by SCIP indexes").version(Nr);Rm(zr,Cm);zr.hook("preAction",async()=>{await vm()});a_()&&await zr.parseAsync();function a_(){if(!process.argv[1])return!1;let e=s_(import.meta.url);try{return Dm(e)===Dm(process.argv[1])}catch{return e===process.argv[1]}}export{zr as program,On as renderHeuristicNotice};
877
+ ${o.connectedSymbols.length} connected symbol(s).`)}),Km=[qe({id:"files",command:"files <pattern>",description:"Find files matching a pattern",docs:x("Navigation",["scip-query files auth"]),query:({db:e,args:t})=>Ni(e,M(t,0)),format:e=>e.relativePath}),qe({id:"methods",command:"methods <className>",description:"List methods of a class (with line ranges)",docs:x("Navigation"),query:({db:e,args:t})=>lo(e,M(t,0)),format:e=>` ${ue(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:x("Navigation",["scip-query refs login"]),handler:bN},Ii({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:x("Navigation",["scip-query trace parseSymbol"]),query:({db:e,args:t,budget:n})=>Mn(e,M(t,0),{semantic:n.semantic}),sections:fN}),qe({id:"deps",command:"deps <file>",description:"Files this file depends on (internal)",docs:x("Navigation"),query:({db:e,args:t})=>On(e,M(t,0)),format:e=>e.relativePath}),qe({id:"rdeps",command:"rdeps <file>",description:"Files that depend on this file/module",docs:x("Navigation"),query:({db:e,args:t})=>$n(e,M(t,0)),format:e=>e.relativePath}),Vm({id:"system",command:"system <module>",description:"Full module map: files, symbols, deps in/out",docs:x("Navigation",["scip-query system queries"]),query:({db:e,args:t})=>jn(e,M(t,0)),sections:e=>[{title:"FILES",rows:e.files},{title:"EXPORTED SYMBOLS",rows:e.symbols.map(t=>` ${ue(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}`)}]}),qe({id:"surface",command:"surface <module>",description:"What symbols consumers actually use from this module",docs:x("Navigation"),query:({db:e,args:t})=>Bn(e,M(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:x("Navigation"),handler:yN},qe({id:"imported-by",command:"imported-by <symbol>",description:"Which files import this symbol?",docs:x("Navigation"),query:({db:e,args:t})=>So(e,M(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:x("Navigation"),handler:gN},qe({id:"members",command:"members <symbol>",description:"All children of a symbol (methods, fields, nested types)",docs:x("Navigation"),query:({db:e,args:t})=>Ro(e,M(t,0)),format:e=>` ${ue(e.startLine,e.endLine)} [${e.kind}] ${e.shortName}`}),qe({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",R,100)],docs:x("Navigation"),query:({db:e,args:t,opts:n})=>Po(e,M(t,0),{scope:k(n,"scope"),limit:S(n,"limit",100)}),format:e=>` ${se(e.relativePath,e.startLine,e.endLine)} [${e.kindName}] ${e.shortName}`,emptyMessage:({args:e})=>`No symbols found for kind "${M(e,0)}". Use "kind-counts" to see available kinds.`,after:e=>console.log(`
878
+ ${e.length} symbol(s)`)}),Ri({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:x("Navigation"),headers:["count","kind"],query:({db:e,opts:t})=>Fo(e,{scope:k(t,"scope")}),format:e=>` ${String(e.count).padStart(5)} ${e.kindName} (${e.kind})`}),qe({id:"hierarchy",command:"hierarchy <symbol>",description:"Show a symbol's ancestry chain (method \u2192 class \u2192 module)",docs:x("Navigation"),query:({db:e,args:t})=>Ao(e,M(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",R,0)],renderShape:"custom",docs:x("Navigation"),handler:SN},{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:x("Navigation"),handler:xN},{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",R,3),g("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",renderShape:"custom",docs:x("Navigation"),handler:CN}];var RN=X("plan-context",({db:e,args:t,opts:n,budget:r})=>{let i=S(n,"limit",20),o=es(e,M(t,0),{semantic:r.semantic,impactDepth:S(n,"impactDepth",3),sliceDepth:S(n,"sliceDepth",3),scope:k(n,"scope")});if(o.warnings.length===1&&o.warnings[0]==="No symbol, file, or module matched target.")return _.empty(o.warnings[0]);let s=[{title:"TARGET",rows:IN(o)},{title:"DEFINITIONS",rows:vN(o,i),skipIfEmpty:!0},{title:"REFERENCES",rows:DN(o,i),skipIfEmpty:!0},{title:"CALL GRAPH",rows:NN(o,i),skipIfEmpty:!0},{title:"DATAFLOW",rows:LN(o,i),skipIfEmpty:!0},{title:"DEPENDENCIES",rows:_N(o,i),skipIfEmpty:!0},{title:"SURFACE",rows:wN(o,i),skipIfEmpty:!0},{title:"DOWNSTREAM IMPACT",rows:EN(o,i),skipIfEmpty:!0},{title:"CHANGE RISK",rows:kN(o,i),skipIfEmpty:!0},{title:"HISTORY",rows:PN(o),skipIfEmpty:!0},{title:"PLANNING NOTES",rows:FN(o),skipIfEmpty:!0}];_.sectionedReport(s)}),Ym=[{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",R,3),g("--slice-depth <n>","Maximum backward slice depth",R,3),g("-s, --scope <path>","Limit downstream impact to files matching path"),g("-n, --limit <n>","Rows per section",R,20),g("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",renderShape:"custom",docs:x("Planning",["scip-query plan-context parseSymbol"]),handler:RN}];function IN(e){return[`Target: ${e.target}`,`Matched: symbol=${zs(e.matched.symbol)} file=${zs(e.matched.file)} module=${zs(e.matched.module)}`]}function vN(e,t){let n=[];for(let r of e.trace.definitions){let i=r.signature?` -- ${r.signature}`:"";n.push(` ${se(r.relativePath,r.startLine,r.endLine)}${i}`),r.source&&n.push(...r.source.split(`
879
+ `).map((o,s)=>` ${String(ye(r.startLine+s)).padStart(4)} ${o}`))}return n.length===0&&n.push(...e.system.symbols.map(r=>` ${ue(r.startLine,r.endLine)} ${r.shortName}`)),gt(n,t).rows}function DN(e,t){let n=e.trace.referencedBy.map(r=>` ${r.relativePath}:${ye(r.line)} in ${r.enclosingShort}`);return Gt(gt(n,t))}function NN(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 Gt(gt([...n,...r],t))}function LN(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}:${ye(o.line)} in ${o.enclosingShort}`);return Gt(gt([...n,...r,...i],t))}function _N(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 Gt(gt(n,t))}function wN(e,t){let n=[...e.system.files.map(r=>` file ${r}`),...e.system.symbols.map(r=>` export ${ue(r.startLine,r.endLine)} ${r.shortName}`),...e.surface.map(r=>` use ${r.consumer} -> ${r.shortName}`)];return Gt(gt(n,t))}function EN(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 Gt(gt(n,t))}function kN(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` ${ue(r.startLine,r.endLine)} ${r.shortName} [${r.externalConsumers} consumers]${i}`}))),e.complexity&&(n.push(` Complexity: ${se(e.complexity.relativePath,e.complexity.startLine,e.complexity.endLine)} ${e.complexity.shortName}`),n.push(` LOC: ${e.complexity.loc}`),n.push(` Branches: ${e.complexity.branches}`),n.push(` Cyclomatic estimate: ${e.complexity.cyclomaticEstimate}`),n.push(` Callees: ${e.complexity.calleeCount}`),n.push(` Fan-in: ${e.complexity.fanIn}`),n.push(` Fan-out: ${e.complexity.fanOut}`)),Gt(gt(n,t))}function PN(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 FN(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 gt(e,t){let n=Math.max(1,t);return{rows:e.slice(0,n),omitted:Math.max(0,e.length-n)}}function Gt(e){return e.omitted>0?[...e.rows,` ... ${e.omitted} more`]:e.rows}function zs(e){return e?"yes":"no"}var Xm=["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","plan-context","drift","wrapper-candidates","passthrough-candidates","stale-abstractions","complexity-hotspots","self-audit","convergence","code","complexity","dataflow","slice","redundant-reexports","similar-signatures"],TN=[Gm,Km,Jm,Um,Qm,Ym,zm],Zm=TN.flat(),ed=new Map(Zm.map(e=>[e.id,e])),KB=Xm.map(e=>{let t=ed.get(e);if(!t)throw new Error(`Missing query command descriptor: ${e}`);return t});for(let e of Zm)if(!Xm.includes(e.id))throw new Error(`Query command descriptor is not ordered: ${e.id}`);function D(e){let t=ed.get(e);if(!t)throw new Error(`Unknown query command descriptor: ${e}`);return t}var td=[{id:"reindex",command:"reindex",description:"Index the codebase and convert to SQLite",options:[g("-l, --language <lang>","Index only this language (can be repeated)",yu,[]),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",ui)],renderShape:"custom",docs:x("Indexing",["scip-query reindex"]),handler:Nm},{id:"augment-sources",command:"augment-sources",description:"Add source files skipped by upstream SCIP indexers to the SQLite documents table",renderShape:"custom",docs:x("Indexing"),handler:Lm},{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:x("Indexing"),handler:_m},D("stats"),D("files"),D("methods"),D("refs"),D("trace"),D("deps"),D("rdeps"),D("system"),D("surface"),D("dead"),D("hotspots"),D("imports"),D("imported-by"),D("unused-imports"),D("outline"),D("members"),D("fan-in"),D("fan-out"),D("coupling"),D("cycles"),D("bottlenecks"),D("isolated"),D("by-kind"),D("kind-counts"),D("deep-chains"),D("hierarchy"),D("call-graph"),D("similar"),D("similar-files"),D("similar-chains"),D("extract-candidates"),D("affected"),D("change-surface"),D("cleanup-plan"),D("co-change"),D("recent-duplicates"),D("doc-drift"),D("unused-params"),D("diff-gate"),D("plan-context"),{id:li,command:li,description:"Internal diff-impact batch worker",hidden:!0,options:[g("--base <ref>","Git ref to diff against (default: HEAD)")],renderShape:"custom",handler:wm},{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:x("Impact"),handler:Em},D("drift"),D("wrapper-candidates"),D("passthrough-candidates"),D("stale-abstractions"),D("complexity-hotspots"),D("self-audit"),{id:ci,command:ci,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:km},{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:x("Health",["scip-query health --json","scip-query health --baseline"]),handler:Pm},D("convergence"),D("code"),D("complexity"),D("dataflow"),D("slice"),{id:"install-skills",command:"install-skills",description:`Install skills (${Ds.join(", ")}) into Claude Code, Codex, and shared agent roots`,renderShape:"custom",docs:x("Maintenance"),handler:Fm},{id:"check-deps",command:"check-deps",description:"Check whether scip-query and the detected language indexers are actually runnable",renderShape:"custom",docs:x("Maintenance"),handler:Tm},D("redundant-reexports"),D("similar-signatures"),{id:"init",command:"init",description:"Create a .scipquery.json config file for this project",renderShape:"custom",docs:x("Maintenance"),handler:Am},{id:"watch",command:"watch",description:"Watch for file changes and reindex automatically",options:[g("--debounce <ms>","Ms to wait after last change (default: 30000)",bs),g("--cooldown <ms>","Min ms between reindexes (default: 60000)",bs)],renderShape:"custom",docs:x("Maintenance"),handler:Mm},{id:"status",command:"status",description:"Show index status for this project",renderShape:"custom",docs:x("Maintenance"),handler:Om}];function nd(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 AN,mkdirSync as MN,readFileSync as ON,writeFileSync as $N}from"fs";import{homedir as jN}from"os";import{join as vi}from"path";var BN=1440*60*1e3,id="update-check.json",HN="https://registry.npmjs.org/scip-query/latest";async function od(e={}){let t=e.env??process.env;if(t.SCIP_QUERY_UPDATE_CHECK==="0"||t.NO_UPDATE_NOTIFIER)return;let n=e.cacheDir??WN(t),r=e.now??Date.now(),i=e.currentVersion??ai,o=UN(n),s=o&&r-o.checkedAt<BN?o.latestVersion:await GN(n,e.fetchLatestVersion??zN,r);if(!s||!VN(s,i))return;(e.writeNotice??(c=>console.error(c)))(qN(i,s))}function qN(e,t){return[`scip-query update available: ${e} -> ${t}.`,"Agent: tell your human to update with: npm install -g scip-query@latest",""].join(`
880
+ `)}function VN(e,t){let n=rd(e),r=rd(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 WN(e){let t=e.XDG_CACHE_HOME||vi(jN(),".cache");return vi(t,"scip-query")}function UN(e){let t=vi(e,id);if(!AN(t))return null;try{let n=JSON.parse(ON(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 GN(e,t,n){let r;try{r=await t()}catch{r=null}return JN(e,{checkedAt:n,latestVersion:r}),r}function JN(e,t){try{MN(e,{recursive:!0}),$N(vi(e,id),`${JSON.stringify(t,null,2)}
881
+ `)}catch{}}async function zN(){let e=await fetch(HN,{signal:AbortSignal.timeout(1e3)});if(!e.ok)return null;let t=await e.json();return typeof t.version=="string"?t.version:null}function rd(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(e);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}Di.name("scip-query").description("Language-agnostic code intelligence CLI powered by SCIP indexes").version(ai);nd(Di,td);Di.hook("preAction",async()=>{await od()});KN()&&await Di.parseAsync();function KN(){if(!process.argv[1])return!1;let e=QN(import.meta.url);try{return sd(e)===sd(process.argv[1])}catch{return e===process.argv[1]}}export{Di as program,or as renderHeuristicNotice};
884
882
  //# sourceMappingURL=cli.js.map