scip-query 0.7.0 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/README.md +88 -1007
  2. package/dist/augment-vue-worker.js +1 -1
  3. package/dist/chunk-2QNKEJ7R.js +2 -0
  4. package/dist/{chunk-JTXKS5GK.js → chunk-3X43EYFU.js} +2 -2
  5. package/dist/{chunk-JB4PUN5S.js → chunk-4GPWGSOE.js} +2 -2
  6. package/dist/{chunk-WODJHE6Z.js → chunk-4LKJMRT5.js} +2 -2
  7. package/dist/{chunk-2IYEIFPP.js → chunk-4T35WUCX.js} +2 -2
  8. package/dist/chunk-4VYIZV3S.js +62 -0
  9. package/dist/{chunk-7O4MJYIW.js → chunk-5RGK4YA5.js} +2 -2
  10. package/dist/{chunk-KJ3ZJIE5.js → chunk-5TB4N27G.js} +2 -2
  11. package/dist/{chunk-ROOHENEP.js → chunk-6QC7SCKV.js} +2 -2
  12. package/dist/{chunk-6H2XIIPY.js → chunk-6QH2L26C.js} +6 -6
  13. package/dist/{chunk-MDAYGS6T.js → chunk-6SR4UNWI.js} +2 -2
  14. package/dist/chunk-6XEWA6FX.js +2 -0
  15. package/dist/{chunk-3GNFUVFA.js → chunk-7WHNTKSD.js} +2 -2
  16. package/dist/{chunk-XO6R3X5J.js → chunk-D62LLANH.js} +2 -2
  17. package/dist/{chunk-OHEIZWIA.js → chunk-EDXML2HI.js} +2 -2
  18. package/dist/{chunk-23YIGCYF.js → chunk-EIGCLVKK.js} +5 -5
  19. package/dist/{chunk-ZNUPGRPR.js → chunk-EVXQF7DM.js} +2 -2
  20. package/dist/chunk-EZQOVY3C.js +2 -0
  21. package/dist/{chunk-563HLCDW.js → chunk-FU5WRWAN.js} +2 -2
  22. package/dist/{chunk-4STLJYHI.js → chunk-GIRI7FHW.js} +2 -2
  23. package/dist/{chunk-A2AVLALL.js → chunk-HTVLH3NL.js} +2 -2
  24. package/dist/{chunk-J6Z5YKGQ.js → chunk-IFGEPTH5.js} +2 -2
  25. package/dist/chunk-JDFWJ7VK.js +2 -0
  26. package/dist/{chunk-33SSUPCB.js → chunk-LLL7THVV.js} +2 -2
  27. package/dist/{chunk-72JOIFXL.js → chunk-LXJTDFOV.js} +2 -2
  28. package/dist/chunk-NBUINPSH.js +2 -0
  29. package/dist/{chunk-NSTZMBAB.js → chunk-OPWOX7NT.js} +2 -2
  30. package/dist/{chunk-TRNAQABL.js → chunk-OPZQIJZU.js} +2 -2
  31. package/dist/chunk-P3PVY6TX.js +2 -0
  32. package/dist/{chunk-3OUC276S.js → chunk-P7UMQ7R7.js} +2 -2
  33. package/dist/{chunk-VUBQBW7H.js → chunk-PEU24CSY.js} +2 -2
  34. package/dist/{chunk-GAQGJ52J.js → chunk-QBXTQODK.js} +2 -2
  35. package/dist/{chunk-LDV2B7ET.js → chunk-QP6FLI6D.js} +2 -2
  36. package/dist/{chunk-NYEMZHUC.js → chunk-QVPYMZUJ.js} +2 -2
  37. package/dist/{chunk-2JEFS2YJ.js → chunk-RFCR2BRD.js} +2 -2
  38. package/dist/chunk-S5VMVNFM.js +2 -0
  39. package/dist/{chunk-DFK54IRN.js → chunk-SDPP5KVQ.js} +2 -2
  40. package/dist/{chunk-ZXFTC5ET.js → chunk-SVSLAUSJ.js} +2 -2
  41. package/dist/{chunk-WPLKHAH7.js → chunk-TB2OYNRS.js} +2 -2
  42. package/dist/chunk-TGNL3ZKZ.js +2 -0
  43. package/dist/{chunk-7H4RJ4MC.js → chunk-UHMJYNTK.js} +2 -2
  44. package/dist/{chunk-QPRIYXH4.js → chunk-VMS5YTBS.js} +2 -2
  45. package/dist/{chunk-FD37DBTD.js → chunk-WJQFABZN.js} +2 -2
  46. package/dist/{chunk-KNA6Z7JB.js → chunk-X2JB54QF.js} +2 -2
  47. package/dist/{chunk-QWJBIBE6.js → chunk-XANDY7N5.js} +2 -2
  48. package/dist/{chunk-WJQY2LGT.js → chunk-XDXZP3BE.js} +2 -2
  49. package/dist/{chunk-ARBZM2NF.js → chunk-YH6TTQEI.js} +2 -2
  50. package/dist/cli.js +127 -126
  51. package/dist/index.d.ts +21 -28
  52. package/dist/index.js +1 -1
  53. package/dist/queries/affected.js +1 -1
  54. package/dist/queries/bottlenecks.js +1 -1
  55. package/dist/queries/by-kind.js +1 -1
  56. package/dist/queries/call-graph.js +1 -1
  57. package/dist/queries/change-surface.js +1 -1
  58. package/dist/queries/code.js +1 -1
  59. package/dist/queries/complexity-hotspots.d.ts +1 -1
  60. package/dist/queries/complexity-hotspots.js +1 -1
  61. package/dist/queries/complexity.js +1 -1
  62. package/dist/queries/convergence.js +1 -1
  63. package/dist/queries/coupling.js +1 -1
  64. package/dist/queries/dataflow.js +1 -1
  65. package/dist/queries/dead.js +1 -1
  66. package/dist/queries/deps.js +1 -1
  67. package/dist/queries/diff-impact.js +1 -1
  68. package/dist/queries/drift.js +1 -1
  69. package/dist/queries/extract-candidates.js +1 -1
  70. package/dist/queries/fan.js +1 -1
  71. package/dist/queries/health.js +1 -1
  72. package/dist/queries/hierarchy.js +1 -1
  73. package/dist/queries/hotspots.js +1 -1
  74. package/dist/queries/imports.js +1 -1
  75. package/dist/queries/index.js +1 -1
  76. package/dist/queries/isolated.js +1 -1
  77. package/dist/queries/members.js +1 -1
  78. package/dist/queries/methods.js +1 -1
  79. package/dist/queries/outline.js +1 -1
  80. package/dist/queries/passthrough-candidates.js +1 -1
  81. package/dist/queries/redundant-reexports.js +1 -1
  82. package/dist/queries/refs.js +1 -1
  83. package/dist/queries/similar-signatures.js +1 -1
  84. package/dist/queries/similar.js +1 -1
  85. package/dist/queries/slice.js +1 -1
  86. package/dist/queries/stale-abstractions.js +1 -1
  87. package/dist/queries/surface.js +1 -1
  88. package/dist/queries/symbols.js +1 -1
  89. package/dist/queries/system.js +1 -1
  90. package/dist/queries/trace.js +1 -1
  91. package/dist/queries/wrapper-candidates.js +1 -1
  92. package/dist/reindex-worker.js +1 -1
  93. package/dist/reindex.js +16 -16
  94. package/package.json +2 -1
  95. package/dist/chunk-7OX2O53H.js +0 -62
  96. package/dist/chunk-CKIO6SVS.js +0 -2
  97. package/dist/chunk-D6Z67MZL.js +0 -2
  98. package/dist/chunk-FOQQDXE7.js +0 -2
  99. package/dist/chunk-QAEDNTY7.js +0 -2
  100. package/dist/chunk-TGK5DFBJ.js +0 -2
  101. package/dist/chunk-V53J46BX.js +0 -2
  102. package/dist/chunk-YSZNAG4G.js +0 -2
package/dist/cli.js CHANGED
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
- import{program as gs}from"commander";import{realpathSync as pm}from"fs";import{fileURLToPath as TR}from"url";import{spawnSync as Dc}from"child_process";import{createRequire as AS}from"module";import{fileURLToPath as Nc}from"url";import{statSync as fm}from"fs";function Pe(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,...gm(e.config.dbPath)}}function gm(e){try{let t=fm(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 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
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(l=>a.toLowerCase().endsWith(l.toLowerCase()))):o;return t.includeIgnored===!1?s.filter(a=>!e.isIgnored(a)):s}function hm(e){return/[*?]/.test(e)?e.replace(/\*\*/g,"%").replace(/\*/g,"%").replace(/\?/g,"_"):`%${e}%`}function Vr(e,t){let n=hm(t);return k(e,{like:n,includeIgnored:!1}).map(r=>({relativePath:r}))}import{extname as hs}from"path";var ym={".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 ym[hs(e).toLowerCase()]??null}function st(e){return hs(e).toLowerCase()===".vue"}var bm=new Set(["function_item","function_signature_item"]),Sm=new Set(["function_definition"]),xm=new Set(["function_declaration","method_definition","arrow_function","function_expression"]);function en(e){switch(e){case"rust":return bm;case"python":return Sm;default:return xm}}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 We(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 An(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),l=a.get(i);if(l&&l.source===o)return l.value;let c=s();return a.set(i,{source:o,value:c}),c},invalidate(r,i){t.get(r)?.delete(i)},invalidateAll(r){t.delete(r)}}}import{createRequire as Cm}from"module";var re=Cm(import.meta.url),$n=null,ys=!1;function xs(){if(ys)return null;if($n)return $n;try{return $n=re("tree-sitter"),$n}catch{return ys=!0,null}}var bs=new Map,Ur=new Set;function Cs(e){if(Ur.has(e))return null;let t=bs.get(e);if(t)return t;let n;try{switch(e){case"rust":n=re("tree-sitter-rust");break;case"typescript":n=re("tree-sitter-typescript").typescript;break;case"tsx":n=re("tree-sitter-typescript").tsx;break;case"javascript":n=re("tree-sitter-javascript");break;case"python":n=re("tree-sitter-python");break;case"java":n=re("tree-sitter-java");break;case"kotlin":n=re("tree-sitter-kotlin");break;case"scala":n=re("tree-sitter-scala");break;case"ruby":n=re("tree-sitter-ruby");break;case"c":n=re("tree-sitter-c");break;case"cpp":n=re("tree-sitter-cpp");break;case"csharp":n=re("tree-sitter-c-sharp");break;case"php":n=re("tree-sitter-php").php;break;case"vb":{let r=re("tree-sitter-vb-dotnet");n=r.language??r;break}}}catch{return Ur.add(e),null}return bs.set(e,n),n}var Ss=new Map;function Im(e){let t=Ss.get(e);if(t)return t;let n=Cs(e);if(!n)return null;let r=xs();if(!r)return null;let i=new r;try{i.setLanguage(n)}catch{return Ur.add(e),null}return Ss.set(e,i),i}function Rm(e,t){return e.parse(r=>r>=t.length?null:t.slice(r,Math.min(t.length,r+16384)))}function Jr(e,t){let n=Im(e);if(!n)return null;try{return Rm(n,t)}catch{return null}}var vt=new Map;function Is(e,t){let n=`${e}::${t}`;if(vt.has(n))return vt.get(n)??null;let r=Cs(e);if(!r)return vt.set(n,null),null;let i=xs();if(!i)return vt.set(n,null),null;try{let o=new i.Query(r,t);return vt.set(n,o),o}catch{return vt.set(n,null),null}}import{existsSync as _m,readFileSync as vm}from"fs";import{join as Dm}from"path";var zr=H("source-text");function T(e,t){let n=t.replace(/\\/g,"/");return zr.get(e,n,()=>{let r=Dm(e.config.projectRoot,n);return _m(r)?vm(r,"utf-8"):""})}function Rs(e){zr.invalidateAll(e)}function _s(e,t){zr.invalidate(e,t.replace(/\\/g,"/"))}var Nm=/scip-query[\s:-]*ignore[\s:-]*(?:dead(?:-code)?|stale|wrapper|passthrough|drift|extract)?/i;function Gr(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(Nm.test(s))return!0;if(!s.startsWith("//")&&!s.startsWith("*")&&!s.startsWith("/*")&&!s.startsWith("@")&&!s.startsWith("#"))return!1}}return!1}function vs(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:Lm(e,r.openIdx),language:s}}function Lm(e,t){let n=0;for(let r=0;r<t&&r<e.length;r++)e.charCodeAt(r)===10&&n++;return n}var jn=An("ast-trees");function Kr(e){jn.invalidateAll(e)}function Qr(e,t){jn.invalidate(e,t)}function B(e,t){if(st(t))return Em(e,t);let n=P(t);if(!n)return null;let r=T(e,t);return r?jn.get(e,t,r,()=>Jr(n,r)):null}function Em(e,t){let n=T(e,t);return n?jn.get(e,t,n,()=>{let r=vs(n);if(!r)return null;let i=`
10
- `.repeat(r.startLine)+r.body;return Jr(r.language,i)}):null}var wm={rust:`
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
11
  (function_item name: (identifier) @name) @def
12
12
  (function_signature_item name: (identifier) @name) @def
13
13
  `,typescript:`
@@ -33,7 +33,7 @@ import{program as gs}from"commander";import{realpathSync as pm}from"fs";import{f
33
33
  (variable_declarator name: (identifier) @name value: (function_expression)) @def
34
34
  `,python:`
35
35
  (function_definition name: (identifier) @name) @def
36
- `},km=new WeakMap;function Yr(e,t){return Zr(e,t,km,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 Pm={rust:`
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
37
  (call_expression function: (_) @target) @call
38
38
  (macro_invocation macro: (_) @target) @call
39
39
  `,typescript:`
@@ -47,14 +47,14 @@ import{program as gs}from"commander";import{realpathSync as pm}from"fs";import{f
47
47
  (new_expression constructor: (_) @target) @call
48
48
  `,python:`
49
49
  (call function: (_) @target) @call
50
- `},Tm=new WeakMap;function Nt(e,t){return Zr(e,t,Tm,Pm,n=>{let r=[];for(let i of n){let o=null,s=null;for(let l of i.captures)l.name==="target"?o=l.node:l.name==="call"&&(s=l.node);if(!o||!s)continue;let a=Dt(o);a&&r.push({calleeLeaf:a,memberAccess:Mm(o),line:s.startPosition.row})}return r})}function Mm(e){switch(e.type){case"field_expression":case"member_expression":case"attribute":return!0;default:return!1}}var Om=new WeakMap;function Xr(e,t){return tn(e,t,Om,()=>new Map,(n,r,i)=>{let o=(l,c)=>{if(l===c)return;let u=i.get(l);u||(u=new Set,i.set(l,u)),u.add(c)},s=r==="python"?new Set(["identifier"]):new Set(["type_identifier"]),a=(l,c)=>{let u=m=>{s.has(m.type)&&m.text!==c&&o(m.text,c);for(let d of m.children)u(d)};for(let m of l.children)u(m)};if(r==="rust")for(let l of n.rootNode.descendantsOfType(["struct_item","enum_item","union_item","type_item"])){let c=l.namedChildren.find(m=>m.type==="type_identifier")?.text;if(!c)continue;let u=l.namedChildren.find(m=>m.type==="field_declaration_list"||m.type==="enum_variant_list"||m.type==="ordered_field_declaration_list");u&&a(u,c),l.type==="type_item"&&a(l,c)}else if(r==="python")for(let l of n.rootNode.descendantsOfType("class_definition")){let c=l.namedChildren.find(m=>m.type==="identifier")?.text;if(!c)continue;let u=l.namedChildren.find(m=>m.type==="block");if(u)for(let m of u.descendantsOfType("type"))for(let d of m.descendantsOfType("identifier"))d.text!==c&&o(d.text,c)}else for(let l of n.rootNode.descendantsOfType(["interface_declaration","type_alias_declaration","class_declaration"])){let c=l.namedChildren.find(u=>u.type==="type_identifier")?.text;c&&a(l,c)}})??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 l=r();return i(s,o,l),n.set(s,l),l}function Zr(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 l=n.get(a);if(l)return l;let c=Is(o,s);if(!c)return null;let u=i(c.matches(a.rootNode));return n.set(a,u),u}function Dt(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?Dt(t):null}case"scoped_identifier":{let t=e.childForFieldName("name")??e.namedChild(e.namedChildCount-1);return t?Dt(t):null}case"super":case"self":case"this":return null;default:return null}}var Fm={"/":"namespace","#":"type",".":"term","[":"type-param",":":"meta","!":"macro"};function Q(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 c=i.indexOf("`",1);c===-1?(o=i.slice(1),i=""):(o=i.slice(1,c),i=i.slice(c+2))}else{let c=i.indexOf(" ");c===-1?(o=i,i=""):(o=i.slice(0,c),i=i.slice(c+1))}let s,a=i.indexOf(" ");a===-1?(s=i,i=""):(s=i.slice(0,a),i=i.slice(a+1));let l=Am(i);return{scheme:n,manager:r,packageName:o,version:s,descriptors:l,raw:e}}function Te(e){let t=Q(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 Am(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||Ds(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&&!Ds(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=Fm[i];o&&t.push({name:r,suffix:o}),n+=1}}return t}function Ds(e){return e==="/"||e==="#"||e==="."||e==="("||e==="["||e===":"||e==="!"}function h(e){let t=Q(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=$m(i);o&&r.push(o)}return r.join(":")}function $m(e){let t=e.suffix==="namespace"?jm(e.name):e.name;return t?e.suffix==="method"?`${t}()`:t:""}function jm(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=Q(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=Q(e);if("kind"in t&&t.kind==="local")return null;let n=t;return n.descriptors[n.descriptors.length-1]?.suffix??null}function te(e){return e.endsWith("().")||ee(e)==="method"}function K(e){let t=ee(e);return t==="method"||t==="term"}function qe(e){return ee(e)==="namespace"}var Bm=/^rust-analyzer\b.*[\s/]impl#\[[^\]]+\]\[[^\]]+\]/;function Bn(e){return Bm.test(e)}var Hm=new Set(["test","tests","_tests"]);function Ve(e){let t=Q(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&&Hm.has(r.name))return!0}return!1}function Ns(e,t){let n=Q(e),r=Q(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],l=o[s];if(a.name!==l.name||a.suffix!==l.suffix)return!1}return!0}function Ls(e,t){let n=Q(e),r=Q(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],l=o[s];if(a.name!==l.name||a.suffix!==l.suffix)return!1}return!0}function Lt(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
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
51
51
  FROM global_symbols gs
52
52
  JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
53
53
  JOIN documents d ON der.document_id = d.id
54
54
  WHERE ${t.where}
55
55
  ${e.pathExclusionsFor("d")}
56
- ${ws(t.orderBy)}
57
- ${ks(t.limit)}`,...t.params??[])}function Et(e,t){return e.all(`SELECT
56
+ ${Fs(t.orderBy)}
57
+ ${As(t.limit)}`,...t.params??[])}function wt(e,t){return e.all(`SELECT
58
58
  gs.id,
59
59
  gs.symbol,
60
60
  c.document_id,
@@ -71,8 +71,8 @@ import{program as gs}from"commander";import{realpathSync as pm}from"fs";import{f
71
71
  AND ${t.where}
72
72
  ${e.pathExclusionsFor("d")}
73
73
  GROUP BY gs.id, gs.symbol, c.document_id, d.relative_path, gs.display_name, gs.documentation
74
- ${ws(t.orderBy)}
75
- ${ks(t.limit)}`,...t.params??[])}function ws(e){return e?`ORDER BY ${e}`:""}function ks(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 lt(e){if(!e)return null;let t=Es(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(Es(r)??r).replace(/\n/g," ")}function Es(e){return/^```(?:\w+)?\s*\n?([\s\S]*?)\n?```/.exec(e.trimStart())?.[1]?.trim()||null}function Wm(e){if(Te(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 wt(e,t,n={}){let r=new Map;for(let o of t)e.length>0&&!Wm(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 Ts=H("file-definitions");function Ms(e,t){Ts.invalidate(e,t)}function q(e,t){return Ts.get(e,t,()=>{let n=wt(qm(e,t),Vm(e,t),{sort:!0});return Jm(e,t,n.map(Um))})}function qm(e,t){return e.all(`SELECT
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
76
76
  gs.id,
77
77
  gs.symbol,
78
78
  der.document_id,
@@ -88,7 +88,7 @@ import{program as gs}from"commander";import{realpathSync as pm}from"fs";import{f
88
88
  JOIN documents d ON der.document_id = d.id
89
89
  WHERE d.relative_path = ?
90
90
  ${e.symbolNoiseFor("gs")}
91
- ORDER BY der.start_line, der.end_line`,t)}function Vm(e,t){return e.all(`SELECT
91
+ ORDER BY der.start_line, der.end_line`,t)}function rd(e,t){return e.all(`SELECT
92
92
  gs.id,
93
93
  gs.symbol,
94
94
  c.document_id,
@@ -107,11 +107,11 @@ import{program as gs}from"commander";import{realpathSync as pm}from"fs";import{f
107
107
  AND m.role = 1
108
108
  ${e.symbolNoiseFor("gs")}
109
109
  GROUP BY gs.id, gs.symbol, c.document_id, d.relative_path
110
- ORDER BY start_line, end_line`,t)}function Um(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:Te(e.symbol),isFunctionLike:K(e.symbol),isTypeLike:ee(e.symbol)==="type",kind:e.kind??null,documentation:e.documentation??null,enclosingSymbol:e.enclosing_symbol??null}}function Le(e,t={}){return ei(e,t.scope)}function ei(e,t){return k(e,{scope:t,includeIgnored:!1}).flatMap(n=>q(e,n)).filter(n=>!e.isIgnored(n.relativePath))}function kt(e,t,n={}){if(t.length===0)return[];let r=t.flatMap(i=>q(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(lt(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 ct(e,t){let n=q(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 Jm(e,t,n){let r=T(e,t),i=Yr(e,t);return i?Xm(n,i,r):r?zm(n,r):n}function zm(e,t){let n=t.split(/\r?\n/),r=Gm(e,n),i=Km(e,r),o=Qm(i,n);return Ym(e,o)}function Gm(e,t){let n=e.some(i=>Hn(i.symbol))?ed(t):null,r=new Map;for(let i of e)r.set(i.symbolId,Zm(t,n,i));return r}function Km(e,t){return e.filter(n=>Hn(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 Qm(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:td(t,i.definition,i.startLine,s)})}return n}function Ym(e,t){return e.map(n=>{let r=t.get(n.symbolId);return r?{...n,startLine:r.startLine,endLine:r.endLine}:n})}function Xm(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(!Hn(i.symbol)||!i.leaf)return Ps(i,n);let o=r.get(i.leaf);if(!o||o.length===0)return Ps(i,n);let s=o[0],a=Math.abs(s.startLine-i.startLine);for(let l=1;l<o.length;l+=1){let c=o[l],u=Math.abs(c.startLine-i.startLine);u<a&&(s=c,a=u)}return{...i,startLine:s.startLine,endLine:s.endLine}})}function Ps(e,t){if(!t||!e.leaf||ee(e.symbol)!=="term"||Te(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 Zm(e,t,n){if(!Hn(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 ed(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,l)=>{let c=o.get(a);if(!c){o.set(a,[l]);return}c[c.length-1]!==l&&c.push(l)};for(let a=0;a<e.length;a+=1){let l=e[a]??"";for(let u of l.matchAll(t))u[1]&&s(u[1],a);for(let u of l.matchAll(n))u[1]&&s(u[1],a);let c=l.match(r);c?.[1]&&s(c[1],a);for(let u of l.matchAll(i))u[1]&&s(u[1],a)}return o}function td(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,l=!1;for(let c=n;c<=i;c+=1){let u=nd(e[c]??"");for(let m of u)m==="{"?(s+=1,l=!0):m==="}"?s=Math.max(0,s-1):m==="("?a+=1:m===")"&&(a=Math.max(0,a-1));if(l&&s===0||!l&&a===0&&c>=o)return c}return o}function nd(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 Hn(e){return e.includes("().")}function Wn(e){let t=Q(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 hd}from"fs";import{basename as Os,isAbsolute as yd,join as bd}from"path";function w(e,t){let n=Tt(e,t.trim());if(n)return n;let r=ld(e,t);if(r)return r;let i=rd(e,t);return i||ad(e,t)}function rd(e,t){let n=ni(t),r=ti(n);if(!r)return null;let i=`%${r.path}%`,o=r.leaf,a=id(e,i,o,n)[0];return a?ct(e,a):null}function id(e,t,n,r){let i=wt([],[...od(e,t,n),...sd(e,t,n)]).filter(o=>!e.isIgnored(o.relative_path)).filter(o=>Pt(o,r)>1);return i.sort((o,s)=>Pt(s,r)-Pt(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 od(e,t,n){return Lt(e,{where:"d.relative_path LIKE ? AND (gs.display_name = ? OR gs.symbol LIKE ?)",params:[t,n,`%/${n}.%`]})}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 ad(e,t){let n=ni(t),r=fd(t),i=dd(e,r),o=gd(i,t,n);if(o&&!e.isIgnored(o.relative_path))return ct(e,o);let s=null;for(let a of i){if(e.isIgnored(a.relative_path))continue;let l=pd(a,t,n,r);l<=0||(!s||l>s.score)&&(s={row:a,score:l})}return s?ct(e,s.row):null}function ld(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),l=cd(e,r,s,a)??ud(e,r,s,a);return l&&!e.isIgnored(l.relative_path)?ct(e,l):null}function cd(e,t,n,r){return Lt(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 ud(e,t,n,r){return Et(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 Tt(e,t){let r=Lt(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, der.start_line",limit:1})[0]??Et(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, start_line",limit:1})[0];return!r||e.isIgnored(r.relative_path)?null:ct(e,r)}function qn(e,t){if("symbol"in t&&"relativePath"in t)return t;let n=md(e,t.symbolId)[0];return n?ct(e,n):null}function md(e,t){let n=Lt(e,{where:"gs.id = ?",params:[t],orderBy:"der.start_line, der.end_line"}),r=Et(e,{where:"gs.id = ?",params:[t],orderBy:"start_line, end_line"});return wt(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 l=`%${a}%`;return[l,l,l]}),i=n.join(`
111
- AND `),o=Lt(e,{where:i,params:r,limit:200}),s=Et(e,{where:i,params:r,limit:200});return wt(o,s)}function pd(e,t,n,r){let i=t.trim(),o=n,s=o.replace(/\(\)$/,""),a=t.toLowerCase(),l=n.toLowerCase(),c=l.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),F=ti(n),R=F?.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===l)&&(_+=1e3),(f===a||f===l)&&(_+=950),(x===a||x===l)&&(_+=925),(x.endsWith(`/${l}`)||x.endsWith(`/${a}`))&&(_+=875),E===c&&(_+=850),b===c&&(_+=825),(`${b}()`===a||`${b}()`===l)&&(_+=820),(f.endsWith(`:${l}`)||f.endsWith(`:${c}`)||f.endsWith(`:${c}()`))&&(_+=800),y.includes(l)&&(_+=120),f.includes(l)&&(_+=140),x.includes(l)&&(_+=140),E.includes(l)&&(_+=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),F&&x.includes(F.path.toLowerCase())&&(_+=360,R&&(b===R||`${b}()`===R||`${b}()`==`${R}()`)&&(_+=700),te(e.symbol)&&(_+=180)),K(e.symbol)&&b===c&&(_+=60),!$&&qe(e.symbol)&&(_-=160),_-=Math.min(50,Math.max(0,e.end_line-e.start_line)),_}function ti(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 ni(e){return e.trim().replace(/\(\)$/,"").replace(/\(.*$/,"")}function fd(e){let t=ni(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 gd(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||Pt(o,n)>1||o.relative_path===r});return i.length===0?null:(i.sort((o,s)=>Pt(s,n)-Pt(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 Pt(e,t){let n=ti(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:te(e.symbol)?Te(e.symbol)===null?5:4:Te(e.symbol)===null?3:2:0}function ie(e,t){let n=Fs(e,t,{allowMultiple:!1})[0]?.relativePath;return n||Sd(e,t)}function Ue(e,t){return Fs(e,t,{allowMultiple:!0}).map(n=>n.relativePath)}function Sd(e,t){if(!t)return null;let n=t.replace(/\\/g,"/").replace(/^\.\//,""),r=yd(n)&&n.startsWith(e.config.projectRoot)?n.slice(e.config.projectRoot.length).replace(/^\/+/,""):n,i=bd(e.config.projectRoot,r);return hd(i)?r:null}function Fs(e,t,n){let r=As(t);if(!r)return[];let i=k(e,{includeIgnored:!1}).map(a=>({relativePath:a,score:xd(a,r)})).filter(a=>a.score>0).sort((a,l)=>l.score-a.score||a.relativePath.localeCompare(l.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 xd(e,t){let n=As(e),r=Os(n),i=Os(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 As(e){return e.trim().replace(/\\/g,"/").replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"")}function ri(e,t){let n=Ue(e,t);return kt(e,n).map(({relativePath:r,...i})=>i)}import{basename as kg}from"path";import{existsSync as Vn}from"fs";import{basename as Cd,dirname as Je,extname as Me,join as Ce,relative as nn,resolve as pe}from"path";var Id=We("indexed-paths"),ut=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs",".vue"],Un=[".py",".pyi"],le=[".java",".scala",".kt",".kts"],Jn=[".rs"],zn=[".rb"],Gn=[".c",".h",".cc",".cpp",".cxx",".hpp",".hh",".hxx"],ze=[".cs",".vb"],Kn=[".dart"],mt=[".php"],Rd=new Set(ut),ii=new Set(Un),$s=new Set(le),oi=new Set(Jn),si=new Set(zn),js=new Set(Gn),Bs=new Set(ze),ai=new Set(Kn),Hs=new Set(mt),_d=[{extensions:ut,lookup:Rd},{extensions:Un,lookup:ii},{extensions:le,lookup:$s},{extensions:Jn,lookup:oi},{extensions:zn,lookup:si},{extensions:Gn,lookup:js},{extensions:ze,lookup:Bs},{extensions:Kn,lookup:ai},{extensions:mt,lookup:Hs}];function Ge(e,t){return t.has(Me(e).toLowerCase())}function vd(e){return Ge(e,ii)}function Dd(e){return Ge(e,$s)}function Nd(e){return Ge(e,oi)}function Ld(e){return Ge(e,si)}function Ed(e){return Ge(e,js)}function wd(e){return Ge(e,Bs)}function Ws(e){return Me(e).toLowerCase()===".vb"}function kd(e){return Ge(e,ai)}function Pd(e){return Ge(e,Hs)}function li(e){let t=Me(e).toLowerCase();for(let n of _d)if(n.lookup.has(t))return n.extensions;return ut}function Td(e){return Dd(e)||wd(e)||Pd(e)}function Ie(e,t,n){return vd(t)?Mt(e,t,n):Nd(t)?Oe(e,t,n):Ld(t)?Qn(e,t,n):Ed(t)?Yn(e,t,n):Td(t)?V(e,n.replace(/\\/g,"."),li(t)):kd(t)?Xn(e,t,n):Md(e,t,n)}function Md(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 jd(i)){let a=fe(nn(e.config.projectRoot,s));if(o.has(a)||Vn(s))return a}return fe(nn(e.config.projectRoot,i))}function Mt(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(/^\./,""),l=Je(Ce(e.config.projectRoot,t));for(let c=1;c<s;c++)l=Je(l);i=a?pe(l,a.replace(/\./g,"/")):l}else i=pe(e.config.projectRoot,n.replace(/\./g,"/"));for(let o of Od(i)){let s=fe(nn(e.config.projectRoot,o));if(r.has(s)||Vn(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,"/")),ci(e,Fd(o))}function Qn(e,t,n){let r=Je(Ce(e.config.projectRoot,t)),i=pe(r,n);return ci(e,Ad(i))}function Yn(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 ci(e,i)}function V(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 l of n){let c=`${o}${l}`,u=[...r].find(m=>m.endsWith(c));if(u)return u}for(let l of n){let c=[...r].find(u=>Cd(u)===`${s}${l}`);if(c)return c}let a=[...r].filter(l=>n.includes(Me(l).toLowerCase())).filter(l=>l.includes(`/${o}/`)||l.includes(`/${s}/`)).sort((l,c)=>l.localeCompare(c));return a.length===1?a[0]:null}function Xn(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 l=s.slice(a+1),c=fe(l.startsWith("lib/")?l:`lib/${l}`);return r.has(c)?c:null}let i=Je(Ce(e.config.projectRoot,t)),o=pe(i,n);for(let s of $d(o)){let a=fe(nn(e.config.projectRoot,s));if(r.has(a)||Vn(s))return a}return null}function Od(e){let t=Me(e);return ii.has(t)?[e]:[`${e}.py`,`${e}.pyi`,Ce(e,"__init__.py"),Ce(e,"__init__.pyi")]}function ci(e,t){let n=rn(e);for(let r of t){let i=fe(nn(e.config.projectRoot,r));if(n.has(i)||Vn(r))return i}return null}function Fd(e){let t=Me(e);return oi.has(t)?[e]:[`${e}.rs`,Ce(e,"mod.rs")]}function Ad(e){let t=Me(e);return si.has(t)?[e]:[`${e}.rb`,Ce(e,"index.rb")]}function $d(e){let t=Me(e);return ai.has(t)?[e]:[`${e}.dart`,e]}function jd(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 Id.get(e,()=>new Set(k(e,{includeIgnored:!1}).map(fe)))}function fe(e){return e.replace(/\\/g,"/")}import{basename as Js}from"path";function Ot(e){return e.replace(/'''[\s\S]*?'''/g,Ke).replace(/"""[\s\S]*?"""/g,Ke).replace(/#.*$/gm,Ke).replace(/\/\/.*$/gm,Ke).replace(/\/\*[\s\S]*?\*\//g,Ke).replace(/`(?:\\[\s\S]|[^`])*`/g,Ke).replace(/'(?:\\.|[^'\\\r\n])*'/g,Ke).replace(/"(?:\\.|[^"\\\r\n])*"/g,Ke)}function Ke(e){return e.replace(/[^\r\n]/g," ")}var ui=An("stripped-lines");function qs(e,t,n){return ui.get(e,t,n,()=>Ot(n).split(`
112
- `))}function Vs(e){ui.invalidateAll(e),Zn=null,on=""}function Us(e,t){ui.invalidate(e,t),Zn=null,on=""}var Zn=null,on="";function Bd(e){return Zn===e||(Zn=e,on=Ot(e)),on}function Qe(e,t,n){let r=Bd(e);return`${r.slice(0,t)}${" ".repeat(n-t)}${r.slice(n)}`}function oe(e,t){return new RegExp(`\\b${er(t)}\\b`,"m").test(e)}function Ft(e,t){let n=new Set,r=new RegExp(`\\b${er(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 er(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 Hd=new Set(["identifier","type_identifier","property_identifier","shorthand_property_identifier","field_identifier"]);function se(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 ce(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&&Hd.has(i.type)&&n.add(i.text);for(let a of i.children)r(a,s)};return r(e.rootNode,!1),n}function Ee(e,t,n,r,i,o,s){return{importedName:i,localName:o,sourcePath:s??V(e,r,li(t)),kind:"named",used:oe(n,o),usedMembers:[]}}function W(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 At(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=Qe(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 tr(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=>qd(e,t,r),()=>Wd(e,t,n))}function Wd(e,t,n){return ge(n,/^[ \t]*#include\s+[<"]([^">]+)[">]\s*$/gm,(r,i)=>{let o=r[1]?.trim();if(!o)return[];let s=Js(o).replace(/\.[^.]+$/,"");return[At(o,s,Yn(e,t,o),oe(i,s))]})}function qd(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 l of o.namedChildren){if(l.type==="system_lib_string"){s=l.text.replace(/^<|>$/g,"");break}if(l.type==="string_literal"){s=l.namedChildren.find(u=>u.type==="string_content")?.text??l.text.replace(/^"|"$/g,"");break}}if(!s)continue;let a=Js(s).replace(/\.[^.]+$/,"");i.push(W(s,a,Yn(e,t,s),r))}return i}function Gs(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 l=Qe(n,i.index,i.index+a.length);r.push({importedName:o,localName:s,sourcePath:Xn(e,t,o),kind:s?"namespace":"side-effect",used:s?oe(l,s):!0,usedMembers:s?Ft(l,s):[]})}return r}function Ks(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:Xn(e,t,o)})}return r}function Qs(e,t,n){return tr(e,t,{csharp:r=>Ud(e,t,r),vb:r=>Vd(e,t,r)},()=>{let r=Ws(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,l]=s.split(/\s*=\s*/),c=!!l,u=(c?l:a)?.trim()??s,m=u.split(".").pop()??u,d=c?a?.trim()??m:m;return[Ee(e,t,o,u,m,d,V(e,u,ze))]})})}function Vd(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],l=s.length>1?s[0]:null,c=a.text,u=c.split(".").pop()??c,m=l?.text??u;i.push(W(u,m,V(e,c,ze),r,l?"namespace":"named"))}return i}function Ud(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,l;s.length>=2&&s[0].type==="identifier"&&(s[1].type==="qualified_name"||s[1].type==="identifier")?(a=s[0],l=s[1]):l=s[s.length-1];let c=l.text,u=c.split(".").pop()??c,m=a?.text??u;i.push(W(u,m,V(e,c,ze),r,a?"namespace":"named"))}return i}var Jd=H("vue-non-script-identifiers");function Ys(e,t){return Jd.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 mi(e,t,n){return he(e,t,r=>Gd(e,t,r),()=>zd(e,t,n))}function zd(e,t,n){return op(n).flatMap(r=>sp(e,t,r.clause,r.specifier,r.start,r.end,n))}function Gd(e,t,n){let r=Kd(e,t,n),i=[];for(let o of n.rootNode.descendantsOfType("import_statement"))i.push(...Qd(e,t,n,o,r));return i}function Kd(e,t,n){let r=U(n,new Set(["import_statement"]));if(st(t))for(let i of Ys(e,t))r.add(i);return r}function Qd(e,t,n,r,i){let o=tp(r);if(!o)return[];let s=Ie(e,t,o),a=ce(r,"import_clause");return a?Yd(n,a,s,i,np(r.text)):[dt("*",s)]}function Yd(e,t,n,r,i){let o=[];for(let s of t.namedChildren)if(s.type==="identifier")o.push(Xd(s.text,n,r,i));else if(s.type==="namespace_import"){let a=Zd(e,s,n,r,i);a&&o.push(a)}else s.type==="named_imports"&&o.push(...ep(s,n,r,i));return o}function Xd(e,t,n,r){return W("default",e,t,n,"default",{isTypeOnly:r})}function Zd(e,t,n,r,i){let s=ce(t,"identifier")?.text??"";if(!s)return null;let a=ip(e,s);return pt("*",n,{localName:s,usedMembers:a,isTypeOnly:i,used:a.length>0||r.has(s)})}function ep(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 l=s.text,c=a?.text??l;i.push(W(l,c,t,n,"named",{isTypeOnly:r||rp(o.text)}))}return i}function tp(e){let t=ce(e,"string");if(!t)return null;let n=ce(t,"string_fragment");return n?n.text:null}function np(e){return/^\s*import\s+type\b/.test(e)}function rp(e){return/^\s*type\b/.test(e.trim())}function ip(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 op(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 sp(e,t,n,r,i,o,s){let a=Ie(e,t,r),l=Qe(s,i,o);return n?ap(n).map(u=>({...u,sourcePath:a})).map(u=>{if(u.kind==="namespace"){let m=Ft(l,u.localName);return pt(u.importedName,u.sourcePath,{localName:u.localName,usedMembers:m,used:m.length>0||oe(l,u.localName),isTypeOnly:u.isTypeOnly})}return u.kind==="side-effect"?dt(u.importedName,u.sourcePath):At(u.importedName,u.localName??"",u.sourcePath,u.localName?oe(l,u.localName):!1,u.kind,[],{isTypeOnly:u.isTypeOnly})}):[dt("*",a)]}function ap(e){let t=e.trim(),n=/^type\b/.test(t),r=t.replace(/^type\s+/,""),[i,o]=lp(r),s=[];return i&&s.push(...Xs(i,n)),o&&s.push(...Xs(o,n)),s}function Xs(e,t){let n=e.trim();if(!n)return[];if(n.startsWith("{")){let r=n.slice(1,-1).trim();return r?se(r).map(i=>{let o=i.trim(),s=t||/^type\b/.test(o),a=o.replace(/^type\s+/,""),[l,c]=a.split(/\s+as\s+/);return{importedName:l.trim(),localName:(c??l).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 lp(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 di(e,t,n){let r=B(e,t);return r?fp(e,t,r):cp(e,t,n)}function cp(e,t,n){return[...up(e,t,n),...mp(e,t,n),...dp(e,t,n)]}function up(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]??"",l=se(s).map(m=>pp(m.trim())).filter(m=>!!m),c=$t(n,o.index),u=$t(n,o.index+o[0].length-1);r.push({kind:"named",sourcePath:Ie(e,t,a),names:l,startLine:c,endLine:u})}return r}function mp(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=$t(n,o.index),l=$t(n,o.index+o[0].length-1);r.push({kind:"star-as",sourcePath:Ie(e,t,s),names:[],startLine:a,endLine:l})}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=$t(n,o.index),l=$t(n,o.index+o[0].length-1);r.push({kind:"star",sourcePath:Ie(e,t,s),names:[],startLine:a,endLine:l})}return r}function pp(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 $t(e,t){let n=0;for(let r=0;r<t&&r<e.length;r++)e.charCodeAt(r)===10&&n++;return n}function fp(e,t,n){let r=[];for(let i of n.rootNode.descendantsOfType("export_statement")){let o=gp(e,t,i);if(o===void 0)continue;let s=i.startPosition.row,a=i.endPosition.row,l=hp(i,o,s,a);r.push(l)}return r}function gp(e,t,n){let r=ce(n,"string");if(!r)return;let i=ce(r,"string_fragment");if(i)return Ie(e,t,i.text)}function hp(e,t,n,r){let i=ce(e,"export_clause");if(i){let s=[];for(let a of i.namedChildren){if(a.type!=="export_specifier")continue;let l=a.namedChild(0),c=a.namedChild(1);l&&s.push((c??l).text)}return{kind:"named",sourcePath:t,names:s,startLine:n,endLine:r}}return ce(e,"namespace_export")?{kind:"star-as",sourcePath:t,names:[],startLine:n,endLine:r}:{kind:"star",sourcePath:t,names:[],startLine:n,endLine:r}}function Zs(e,t,n){return tr(e,t,{java:r=>yp(e,t,r),kotlin:r=>bp(e,t,r),scala:r=>Sp(e,t,r)},()=>ge(n,/^[ \t]*import\s+(?:static\s+)?(.+?)\s*;?$/gm,(r,i)=>{let o=r[1]?.trim();return o?xp(e,t,o,i):[]}))}function yp(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"),l=o.namedChildren.find(m=>m.type==="scoped_identifier")??o.namedChildren.find(m=>m.type==="identifier");if(!l)continue;let c=l.text;if(s){i.push(pt("*",V(e,c,le)));continue}let u=c.split(".").pop()??c;i.push(W(u,u,V(e,c,le),r))}return i}function bp(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"),l=o.namedChildren.find(p=>p.type==="import_alias");if(a){i.push(pt("*",V(e,s.text,le)));continue}let c=s.text,u=c.split(".").pop()??c,d=l?.namedChild(0)?.text??u;i.push(W(u,d,V(e,c,le),r))}return i}function Sp(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")),l=a.map(m=>m.text).join(".");if(!l)continue;if(s?.type==="namespace_wildcard"){i.push(pt("*",V(e,l,le)));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(W(y,f,V(e,`${l}.${y}`,le),r))}else if(m.type==="identifier"){let d=m.text;i.push(W(d,d,V(e,`${l}.${d}`,le),r))}continue}let c=a[a.length-1]?.text??l,u=a.slice(0,-1).map(m=>m.text).join(".")||l;i.push(W(c,c,V(e,u&&a.length>1?`${u}.${c}`:l,le),r))}return i}function xp(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 se(o).flatMap(s=>{let a=s.trim();if(!a)return[];let[l,c]=a.includes("=>")?a.split(/\s*=>\s*/):a.split(/\s+as\s+/),u=l?.trim();if(!u||u==="_")return[];let m=(c??u.split(".").pop()??u).trim(),d=u==="_"?i:`${i}.${u}`.replace(/\.\./g,".");return[Ee(e,t,r,d,u,m)]})}return[Ee(e,t,r,n,n.split(".").pop()??n,n.split(".").pop()??n)]}function ta(e,t,n){return he(e,t,r=>Cp(e,t,r),()=>ge(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(r,i)=>{let o=r[1]?.trim();return o?se(o).flatMap(s=>{let a=s.trim();if(!a)return[];let[l,c]=a.split(/\s+as\s+/i),u=l?.trim()??a,m=u.split("\\").pop()??u,d=(c??m).trim();return[Ee(e,t,i,u,m,d,V(e,u.replace(/\\/g,"."),mt))]}):[]}))}function Cp(e,t,n){let r=U(n,new Set(["namespace_use_declaration"])),i=[],o=(s,a,l)=>{i.push(W(a,l,V(e,s.replace(/\\/g,"."),mt),r))};for(let s of n.rootNode.descendantsOfType("namespace_use_declaration")){let a=s.namedChildren.find(l=>l.type==="namespace_use_group");if(a){let l=s.namedChildren.find(c=>c.type==="namespace_name")?.text??"";for(let c of a.namedChildren){if(c.type!=="namespace_use_clause")continue;let{importedName:u,localName:m,qualified:d}=ea(c,l);u&&o(d,u,m)}continue}for(let l of s.namedChildren){if(l.type!=="namespace_use_clause")continue;let{importedName:c,localName:u,qualified:m}=ea(l,"");c&&o(m,c,u)}}return i}function ea(e,t){let n=e.namedChildren.find(c=>c.type==="qualified_name"),r=e.namedChildren.filter(c=>c.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,l=t?`${t}\\${i}`:i;return{importedName:s,localName:a,qualified:l}}function ra(e,t,n){return he(e,t,r=>Ip(e,t,r),()=>_p(n).flatMap(r=>Dp(e,t,r,n)))}function Ip(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=na(s);if(!a)continue;let l=Mt(e,t,a.qualifiedName);i.push({importedName:a.qualifiedName,localName:a.localName,sourcePath:l,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=Rp(s);if(a===null)continue;let l=Mt(e,t,a);for(let c=1;c<o.namedChildCount;c+=1){let u=o.namedChild(c);if(u.type==="wildcard_import"){i.push({importedName:"*",localName:null,sourcePath:l,kind:"side-effect",used:!0,usedMembers:[]});continue}let m=na(u);m&&i.push({importedName:m.qualifiedName,localName:m.localName,sourcePath:l,kind:"named",used:r.has(m.localName),usedMembers:[]})}}return i}function na(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 Rp(e){if(e.type==="dotted_name")return e.text;if(e.type==="relative_import"){let t=ce(e,"import_prefix")?.text??"",n=ce(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 l=o,c=a+o.length,u=sn(o);for(;i+1<t.length&&(u>0||l.trimEnd().endsWith("\\"));){i++;let d=t[i];l+=`
114
- ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,end:c})}return n}function vp(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 Dp(e,t,n,r){let i=Qe(r,n.start,n.end),o=n.clause.replace(/\n/g," ").trim();if(n.kind==="import")return se(o).flatMap(l=>{let c=l.trim().replace(/,$/,"");if(!c)return[];let[u,m]=c.split(/\s+as\s+/),d=u.trim(),p=(m??d.split(".")[0]??d).trim(),y=Mt(e,t,d),f=Ft(i,p);return[{importedName:d,localName:p,sourcePath:y,kind:"namespace",used:oe(i,p)||f.length>0,usedMembers:f}]});let s=n.module?Mt(e,t,n.module):null,a=[];for(let l of se(o)){let c=l.trim().replace(/,$/,"");if(!c)continue;if(c==="*"){a.push({importedName:"*",localName:null,sourcePath:s,kind:"side-effect",used:!0,usedMembers:[]});continue}let[u,m]=c.split(/\s+as\s+/),d=(m??u).trim();a.push({importedName:u.trim(),localName:d,sourcePath:s,kind:"named",used:oe(i,d),usedMembers:[]})}return a}import{basename as Np}from"path";function ia(e,t,n){return he(e,t,r=>Ep(e,t,r),()=>Lp(e,t,n))}function Lp(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"?Qn(e,t,s):null;if(a){let l=oa(s);return[At(l,l,a,oe(i,l))]}return[dt(s,a)]})}function Ep(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 c=s.namedChildren.find(p=>p.type==="argument_list")?.namedChild(0);if(!c||c.type!=="string")continue;let m=c.namedChildren.find(p=>p.type==="string_content")?.text;if(!m)continue;let d=a.text==="require_relative"?Qn(e,t,m):null;if(d){let p=oa(m);i.push(W(p,p,d,r))}else i.push(dt(m,d))}return i}function oa(e){return Np(e).replace(/\.[^.]+$/,"").split("_").filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}function sa(e,t,n){return he(e,t,r=>wp(e,t,r),()=>ge(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(r,i)=>{let o=r[1]?.trim();return o?kp(e,t,o,i):[]}))}function wp(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 l=Oe(e,t,a.qualifiedName)??Oe(e,t,a.qualifiedName.split("::").slice(0,-1).join("::"));i.push(W(a.importedName,a.localName,l,r))}}return i}function an(e,t){switch(e.type){case"identifier":case"super":case"self":case"crate":{let n=e.text;return[{qualifiedName:nr(t,n),importedName:n,localName:n}]}case"scoped_identifier":{let n=e.text,r=n.split("::").pop()??n;return[{qualifiedName:nr(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=nr(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:nr(t,`${r}::*`),importedName:"*",localName:"*"}]}default:return[]}}function nr(e,t){return e?t?`${e}::${t}`:e:t}function kp(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 se(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[Ee(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,l=(s??a.split("::").pop()??a).trim(),c=Oe(e,t,a)??Oe(e,t,a.split("::").slice(0,-1).join("::"));return[Ee(e,t,r,a,a.split("::").pop()??a,l,c)]}function aa(e,t,n){let r=B(e,t);if(r)return Pp(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(...Mp(e,t,s))}return i}function Pp(e,t,n){let r=[];for(let i of n.rootNode.descendantsOfType("use_declaration")){if(!Tp(i))continue;let o=i.namedChildren.find(s=>s.type!=="visibility_modifier");if(o)for(let s of an(o,""))s.importedName&&r.push(pi(e,t,s.qualifiedName))}return r}function Tp(e){for(let t of e.children)if(t.type==="visibility_modifier"&&t.text.startsWith("pub"))return!0;return!1}function Mp(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 se(o).flatMap(s=>{let a=s.trim();if(!a||a==="self")return[];let[l]=a.split(/\s+as\s+/),c=`${i}::${l?.trim()??a}`.replace(/::::/g,"::");return[pi(e,t,c)]})}return[pi(e,t,r)]}function pi(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 la(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 Op={language:"javascript",extensions:ut,capabilities:{imports:"ast-with-regex-fallback",reExports:"ast-with-regex-fallback"},parseImports:mi,parseReExports:di},Fp=ft({language:"python",extensions:Un,imports:"ast-with-regex-fallback",parseImports:ra}),Ap=ft({language:"jvm",extensions:le,imports:"ast-dispatch-with-regex-fallback",parseImports:Zs}),$p={language:"rust",extensions:Jn,capabilities:{imports:"ast-with-regex-fallback",exports:"ast-with-regex-fallback"},parseImports:sa,parseExports:aa},jp=ft({language:"ruby",extensions:zn,imports:"ast-with-regex-fallback",parseImports:ia}),Bp=ft({language:"c/cpp",extensions:Gn,imports:"ast-with-regex-fallback",parseImports:zs}),Hp=ft({language:"dotnet",extensions:ze,imports:"ast-dispatch-with-regex-fallback",parseImports:Qs}),Wp={language:"dart",extensions:Kn,capabilities:{imports:"regex-only",exports:"regex-only"},parseImports:Gs,parseExports:Ks},qp=ft({language:"php",extensions:mt,imports:"ast-with-regex-fallback",parseImports:ta}),Vp=[Op,Fp,Ap,$p,jp,Bp,Hp,Wp,qp];function rr(e){return la(Vp,e)}var fi=H("source-imports"),gi=H("source-exports"),hi=H("source-reexports");function ca(e,t){let n=fe(t);return hi.get(e,n,()=>{let r=rr(n);if(!r?.parseReExports)return[];let i=T(e,n);return i?r.parseReExports(e,n,i):[]})}function Y(e,t){let n=fe(t);return fi.get(e,n,()=>{let r=rr(n);if(!r)return[];let i=T(e,n);return i?r.parseImports(e,n,i):[]})}function yi(e,t){let n=fe(t);return gi.get(e,n,()=>{let r=rr(n);if(!r?.parseExports)return[];let i=T(e,n);return i?r.parseExports(e,n,i):[]})}function ua(e){fi.invalidateAll(e),gi.invalidateAll(e),hi.invalidateAll(e)}function ma(e,t){let n=fe(t);fi.invalidate(e,n),gi.invalidate(e,n),hi.invalidate(e,n)}var da=H("file-dep-graph");function ae(e,t){return da.get(e,t??"",()=>{let n=new Map,r=new Set(k(e,{includeIgnored:!1})),i=(o,s)=>Jp(e,n,r,o,s);for(let o of Up(e,t))i(o.from_file,o.to_file);for(let o of r)if(!(t&&!o.includes(t)))for(let s of Y(e,o))s.sourcePath&&i(o,s.sourcePath);return n})}function Up(e,t){let n=t?`AND d1.relative_path LIKE '%${t}%'`:"";return e.all(`SELECT DISTINCT
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
115
115
  d1.relative_path AS from_file,
116
116
  d2.relative_path AS to_file
117
117
  FROM mentions m
@@ -129,7 +129,7 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
129
129
  WHERE d1.id != d2.id
130
130
  AND m.role != 1
131
131
  ${e.pathExclusionsFor("d1","d2")}
132
- ${n}`)}function Jp(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 pa(e){da.invalidateAll(e)}import{readdirSync as zp}from"fs";import{extname as fa,join as Gp}from"path";var Kp=[".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"],ga=[".vue"],ha=new Set(Kp.map(e=>e.toLowerCase())),Qp=[...ha].sort().join(","),bi=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(l=>l.toLowerCase()),o=i?new Set(i):ha,s=i?[...o].sort().join(","):Qp,a=`${n?"1":"0"}|${r?"1":"0"}|${s}`;return Yp.get(e,a,()=>{let l=new Set;if(n)for(let c of k(e,{includeIgnored:!1}))o.has(fa(c).toLowerCase())&&l.add(c);if(r)for(let c of Xp(e.config.projectRoot,o))e.isIgnored(c)||l.add(c);return[...l].sort()})}var Yp=H("source-files");function Xp(e,t){let n=new Set,r=i=>{let o=i?Gp(e,i):e,s;try{s=zp(o,{withFileTypes:!0})}catch{return}for(let a of s)if(!bi.has(a.name)){if(a.isDirectory()){r(i?`${i}/${a.name}`:a.name);continue}t.has(fa(a.name).toLowerCase())&&n.add(i?`${i}/${a.name}`:a.name)}};return r(""),n}function ue(e){let t=ln(e);return ef(t)?"test":tf(t)?"worker":nf(t)?"entry":rf(t)?"barrel":"source"}function ir(e){return ue(e)==="barrel"}function ba(e){return Zp.get(e,()=>{let t=ae(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 Zp=We("live-barrels");function Si(e,t){return ba(e).has(ln(t))}function Sa(e){let t=ba(e);return Ye(e).filter(n=>ir(n)&&!t.has(n))}function gt(e,t){let n=ue(t);return n==="entry"||n==="worker"||Si(e,t)}function cn(e,t,n){let r=e.config.entryRoots;if(!r)return!1;let i=ln(n);return!!(r.files?.some(o=>ln(o)===i)||r.pathPrefixes?.some(o=>i.startsWith(ln(o)))||r.qualifiedVars?.some(o=>of(t,o))||r.symbolPatterns?.some(o=>{try{return new RegExp(o).test(t)}catch{return!1}}))}var xa=["%/__tests__/%","%.test.%","%.spec.%","%/test/%","%/tests/%","%_test.%","%_spec.%","%/test_%.%","%/spec_%.%"],Ca=["%/test-utils/%"];function ef(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 tf(e){return/(?:^|\/)[^/]*worker\.(?:ts|tsx|js|mjs|cjs|rs|py|go)$/.test(e)}function nf(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 rf(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 ln(e){return e.replace(/\\/g,"/")}function of(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(ya(r)+"/")&&e.includes(ya(i)+".")}function ya(e){return/^[A-Za-z0-9_$+-]+$/.test(e)?e:"`"+e.replace(/`/g,"``")+"`"}var un=new WeakMap;function _a(e,t){let n=P(t);return n==="rust"?uf(e,t):n==="typescript"||n==="tsx"||n==="javascript"?af(e,t):[]}var sf=new Set(["describe","it","test","fdescribe","fit","xdescribe","xit","beforeEach","afterEach","beforeAll","afterAll","before","after","suite","bench","benchmark"]);function af(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 c of a.namedChildren){if(c.type!=="expression_statement")continue;let u=c.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&&sf.has(d)){s=!0;break}}let l=[];s&&l.push({startLine:0,endLine:a.endPosition.row,reason:"TS/JS test file (describe/it/test at top level)"}),(i||o)&&l.push({startLine:0,endLine:a.endPosition.row,reason:i?"Next.js / Remix route file":"Vite/Vue route component"});for(let c of a.namedChildren){let u=null,m=null;if(c.type==="function_declaration")u=c.namedChild(0)?.text??null,m=c;else if(c.type==="export_statement"){let d=c.namedChild(0);d?.type==="function_declaration"&&(u=d.namedChild(0)?.text??null,m=d)}else if(c.type==="lexical_declaration"){let d=c.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&&l.push({startLine:m.startPosition.row,endLine:m.endPosition.row,reason:"React custom hook (use*)"})}return l.push(...va(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,l),l}var lf=/scip-query[\s:-]*ignore[\s:-]*(?:dead(?:-code)?|stale)?/i;function cf(e){return lf.test(e)}function va(e,t,n){let r=[],i=o=>{if(t.has(o.type)&&o.parent){let a=o.parent.children,l=-1;for(let c=0;c<a.length;c+=1)if(a[c].startIndex===o.startIndex&&a[c].type===o.type){l=c;break}if(l>0)for(let c=l-1;c>=0;c-=1){let u=a[c];if(n.has(u.type)){if(cf(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 uf(e,t){let n=B(e,t);if(!n)return[];let r=un.get(n);if(r)return r;let i=[],o=mf(n);return o?(un.set(n,o),o):(Da(n.rootNode,i,!1,!1),i.push(...va(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(...yf(n.rootNode)),un.set(n,i),i)}function mf(e){return bf(e.rootNode)?[{startLine:0,endLine:e.rootNode.endPosition.row,reason:"generated file (@generated header)"}]:null}function Da(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&&hf(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"?pf(e,t,n):e.type==="mod_item"&&xi(e).some(s=>/#\[\s*cfg\s*\(\s*test\s*\)/.test(s))&&(i=!0);for(let s of e.namedChildren)Da(s,t,i,o)}function df(e,t,n,r){let i=xi(e),o=null;r?o="trait impl method (dynamic dispatch)":n&&(o="inside #[cfg(test)] mod");for(let s of i){let a=ff(s);if(a){o=a;break}if(Na(s)){o="#[allow(dead_code)]";break}}o&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:o})}function pf(e,t,n){let r=xi(e),i=e.namedChildren.find(o=>o.type==="type_identifier")?.text;r.some(gf)&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"#[derive(<reflective>)] \u2014 fields accessed via macro/reflection",containerName:i}),r.some(Na)&&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 xi(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 ff(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 gf(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 Na(e){return/#\[\s*allow\s*\(\s*dead_code\s*\)/.test(e)}function hf(e){return e.type==="const_item"||e.type==="type_item"||e.type==="static_item"||e.type==="associated_type"}function yf(e){let t=Rf(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 bf(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 Sf=[{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}],La=/^#!?\[\s*serde\s*\(/,xf=/^#!?\[\s*schemars\s*\(/,Cf=/^#!?\[\s*validate\s*\(/,Ia=/\bwith\s*=\s*"([^"]+)"/g;function jt(e,t){return tn(e,t,If,()=>new Set,(n,r,i)=>{if(r==="rust"){for(let o of n.rootNode.descendantsOfType("attribute_item"))Ra(o.text,i);for(let o of n.rootNode.descendantsOfType("inner_attribute_item"))Ra(o.text,i)}})??new Set}var If=new WeakMap;function Ra(e,t){let n=La.test(e),r=xf.test(e),i=Cf.test(e);if(!(!n&&!r&&!i))for(let{re:o}of Sf){o.lastIndex=0;let s;for(;(s=o.exec(e))!==null;){let a=s[1],l=a.split("::").pop()??a;l==="is_none"&&/\bOption\b/.test(a)||l==="is_empty"&&/\b(String|Vec|HashMap|BTreeMap|HashSet|BTreeSet)\b/.test(a)||l&&t.add(l)}}}function Rf(e){let t=new Set;for(let n of e.descendantsOfType("attribute_item")){if(!La.test(n.text))continue;Ia.lastIndex=0;let r;for(;(r=Ia.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 Ea(e,t){return tn(e,t,vf,()=>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=Dt(s);if(!a||!_f.has(a))continue;let l=o.namedChildren.find(m=>m.type==="arguments");if(!l)continue;let c=l.namedChild(0);if(!c||c.type!=="string")continue;let u=c.namedChildren.find(m=>m.type==="string_fragment");u&&i.add(u.text)}})??new Set}var vf=new WeakMap;var Df=new Set(["identifier","type_identifier","field_identifier"]),Nf=new Set(["identifier"]),Lf=new Set(["identifier","property_identifier","type_identifier"]),Ef=new Set(["rust","python"]),wf=/\{([^{}]*)\}/g,kf=/\b([A-Za-z_][\w]*)\b/g;function or(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=>!wa(u,r));let o=qs(e,t,i),s=new RegExp(`\\b${er(n)}\\b`),a=[];for(let l=0;l<o.length;l++)wa(l,r)||s.test(o[l]??"")&&a.push(l);return a}function wa(e,t){return typeof t.excludeStartLine=="number"&&typeof t.excludeEndLine=="number"&&e>=t.excludeStartLine&&e<=t.excludeEndLine}var Ci=H("file-identifiers");function ka(e,t){return Ci.get(e,t,()=>new Set(ht(e,t).keys()))}var Ii=H("file-ident-lines");function ht(e,t){return Ii.get(e,t,()=>Pf(e,t))}var Ri=H("file-idents-by-line");function Pa(e,t){return Ri.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 Ta(e){Ci.invalidateAll(e),Ii.invalidateAll(e),Ri.invalidateAll(e)}function Ma(e,t){Ci.invalidate(e,t),Ii.invalidate(e,t),Ri.invalidate(e,t)}function Pf(e,t){let n=new Map,r=(a,l)=>{let c=n.get(a);if(!c){n.set(a,[l]);return}c[c.length-1]!==l&&c.push(l)};if(P(t)){let a=B(e,t);if(a){let l=P(t),c=l==="rust"?Df:l==="python"?Nf:Lf,u=m=>{if(c.has(m.type)&&r(m.text,m.startPosition.row),l&&Ef.has(l)&&m.type==="string_content"){let d=m.startPosition.row;for(let p of m.text.matchAll(wf)){let y=p[1]??"";for(let f of y.matchAll(kf))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=Ot(i).split(/\r?\n/),s=/\b([A-Za-z_$][\w$]*)\b/g;for(let a=0;a<o.length;a+=1){let l=o[a]??"";for(let c of l.matchAll(s))c[1]&&r(c[1],a)}return n}function Oa(e,t){return _i(e,t,n=>{let r=n?`AND m.symbol_id IN (${n.map(()=>"?").join(",")})`:"";return e.all(`SELECT
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
133
133
  m.symbol_id,
134
134
  d.relative_path,
135
135
  COUNT(*) AS ref_count
@@ -139,13 +139,13 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
139
139
  WHERE m.role != 1
140
140
  ${r}
141
141
  ${e.pathExclusionsFor("d")}
142
- GROUP BY m.symbol_id, d.relative_path`,...n??[])})}function Fa(e,t){return _i(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
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
143
143
  FROM mentions m
144
144
  JOIN chunks c ON m.chunk_id = c.id
145
145
  JOIN documents d ON c.document_id = d.id
146
146
  WHERE m.role != 1
147
147
  ${r}
148
- ${e.pathExclusionsFor("d")}`,...n??[])}).filter(n=>n.symbol_id!==null)}function sr(e,t){return _i(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,
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,
149
149
  c.start_line AS chunk_start, c.end_line AS chunk_end
150
150
  FROM mentions m
151
151
  JOIN chunks c ON m.chunk_id = c.id
@@ -153,7 +153,7 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
153
153
  WHERE m.role != 1
154
154
  ${r}
155
155
  ${e.pathExclusionsFor("d")}
156
- ORDER BY d.relative_path, c.start_line`,...n??[])})}function _i(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 Aa(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function Xe(e,t){return Aa(e)===Aa(t)}function ar(e,t){let n=$a(e);return n?t.filter(r=>$a(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(Y(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 $a(e){let t=P(e);return t?t==="typescript"||t==="tsx"||t==="javascript"?"javascript-family":t:null}var ja=We("global-leaf-index");function yt(e){return ja.get(e,()=>{let t=e.all(`SELECT gs.id, gs.symbol,
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,
157
157
  COALESCE(der_doc.relative_path, mention_doc.relative_path) AS relative_path
158
158
  FROM global_symbols gs
159
159
  LEFT JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
@@ -167,8 +167,8 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
167
167
  GROUP BY m.symbol_id
168
168
  ) mention_doc ON mention_doc.symbol_id = gs.id
169
169
  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 Ba(e){ja.invalidate(e)}function Re(e,t,n){if(e.has(t))return e.get(t);let r=n();return e.set(t,r),r}import Ha from"path";function Tf(e,t){return e.getReferences().map(n=>{let r=n.getNode();return Va(r,t)})}function Mf(e){let t=e;return typeof t.findReferences=="function"?t.findReferences():[]}function Wa(e,t,n,r){let i=[];for(let o of Mf(e))for(let s of Tf(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 cr(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:Va(a,r),node:a}))}return i}function Va(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 Ua(e,t,n){let r=e.getSourceFile(),i=Bt(r,e),o=e.getText(),s=new RegExp(`\\b${Of(o)}\\b`,"g"),a=r.getFullText().split(`
171
- `),l=[];for(let c=0;c<a.length;c++){if(c===i)continue;let u=a[c]??"";s.lastIndex=0;let m;for(;(m=s.exec(u))!==null;)l.push({file:t,line:c,column:m.index})}return cr(l.filter(c=>mn(n,Ha.join(n,c.file))===t))}function vi(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 Bt(e,t){return e.getLineAndColumnAtPos(t.getStart()).line-1}function cr(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=Ha.relative(e||process.cwd(),t).replace(/\\/g,"/");return!n||n.startsWith("..")?null:n}function Of(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ja(e,t,n,r){let i=Ff(t,r);return i.size===0?new Map:Af(e,n,i)}function Ff(e,t){let n=new Map;for(let r of q(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 Af(e,t,n){let r=new Map,i=new Map;return t.forEachDescendant(o=>{for(let s of $f(e,o)){let a=n.get(s);if(!a)continue;let l=Bt(t,o);for(let c of a){if(l<c.startLine-1||l>c.endLine+1)continue;let u=Math.abs(l-c.startLine),m=i.get(c.symbolId);m!==void 0&&m<=u||(i.set(c.symbolId,u),r.set(c.symbolId,o))}}}),r}function $f(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
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
172
172
  gs.id AS symbolId,
173
173
  gs.symbol,
174
174
  d.relative_path AS relativePath,
@@ -188,7 +188,7 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
188
188
  WHERE d.relative_path = ?
189
189
  AND COALESCE(gs.display_name, gs.symbol) LIKE ?
190
190
  ORDER BY ABS(COALESCE(der.start_line, c.start_line) - ?)
191
- LIMIT 5`,t,`%${r}%`,n)[0]??null}function Ga(e,t){let n=e.all(`SELECT
191
+ LIMIT 5`,t,`%${r}%`,n)[0]??null}function ec(e,t){let n=e.all(`SELECT
192
192
  d.id AS documentId,
193
193
  gs.id AS symbolId,
194
194
  gs.symbol,
@@ -228,7 +228,7 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
228
228
  WHERE d.relative_path = ?
229
229
  AND m.role = 1
230
230
  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 jf from"path";var dn=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"];function ur(e){let t=e.toLowerCase();return dn.some(n=>t.endsWith(n))}function Ka(e,t){let n=new Map,r=i=>ur(i)?Re(n,i,()=>{let o=jf.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 mr,readdirSync as Bf,readFileSync as Qa}from"fs";function Ya(e){let t=Ze.join(e,"package.json");if(!mr(t))return[];let n;try{n=JSON.parse(Qa(t,"utf8"))}catch{return[]}return(Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages??[]).flatMap(i=>Hf(e,i)).flatMap(i=>Wf(e,i))}function Hf(e,t){if(!t||t.startsWith("!")||t.includes("node_modules"))return[];if(!t.includes("*")){let s=Ze.join(e,t);return mr(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(!mr(o))return[];try{return Bf(o).map(s=>Ze.join(o,s,i)).filter(s=>mr(Ze.join(s,"package.json")))}catch{return[]}}function Wf(e,t){try{let n=JSON.parse(Qa(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 Xa(e,t){for(let n of e)if(t===n.name||t.startsWith(`${n.name}/`))return n.name;return null}function Za(e){return[`${e.sourceRootRelative}/index.ts`,`${e.sourceRootRelative}/index.tsx`,`${e.sourceRootRelative}/index.mts`,`${e.sourceRootRelative}/index.cts`]}import{existsSync as pn,readFileSync as qf,readdirSync as Vf,statSync as Uf}from"fs";import J from"path";var Ni=["tsconfig.json","tsconfig.app.json","tsconfig.node.json","tsconfig.base.json"];function Li(e,t){let r=t?J.dirname(J.join(e,t)):e,i=J.resolve(e);for(;r.startsWith(i);){for(let s of Ni){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 Ni){let s=J.join(e,o);if(pn(s))return s}return null}function el(e){let t=e.config.projectRoot,n=new Set(Ei(t,e.config.semantic?.typescript?.tsconfigs)),r=k(e,{includeIgnored:!1,extensions:dn});for(let i of r){let o=Li(t,i);o&&n.add(J.resolve(o))}if(n.size===0){let i=Li(t);i&&n.add(J.resolve(i))}return[...n].filter(i=>!tl(t,i)).sort((i,o)=>i.localeCompare(o))}function Ei(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 Jf(e))for(let i of Ni){let o=J.join(r,i);pn(o)&&n.add(J.resolve(o))}if(n.size===0){let r=Li(e);r&&n.add(J.resolve(r))}return[...n].filter(r=>!tl(e,r)).sort((r,i)=>r.localeCompare(i))}function Jf(e){let t=J.join(e,"package.json");if(!pn(t))return[];let n;try{n=JSON.parse(qf(t,"utf8"))}catch{return[]}return(Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages??[]).flatMap(i=>zf(e,i))}function zf(e,t){if(!t||t.startsWith("!")||t.includes("node_modules"))return[];if(!t.includes("*")){let s=J.join(e,t);return Di(s)?[s]:[]}let n=t.indexOf("*"),r=t.slice(0,n).replace(/\/$/,""),i=t.slice(n+1).replace(/^\//,""),o=J.join(e,r||".");return Di(o)?Vf(o).map(s=>J.join(o,s,i)).filter(Di):[]}function Di(e){try{return Uf(e).isDirectory()}catch{return!1}}function tl(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 Gf}from"module";var Kf=Gf(import.meta.url),fn;function nl(){if(fn!==void 0)return fn;try{fn=Kf("ts-morph")}catch{fn=null}return fn}function rl(e,t){return t.map(n=>({tsconfigPath:n,project:new e.Project({tsConfigFilePath:n,skipFileDependencyResolution:!1})}))}function dr(e,t,n){return{language:"typescript",availability:()=>({available:!1,reason:e,tsconfigPath:t,tsconfigPaths:n}),importUsage:()=>[],referencesFor:()=>[],calleesFor:()=>[],signatureFor:()=>null}}function sl(e,t){let n=nl();if(!n)return dr("ts-morph is not installed");let r=el(e);if(r.length===0)return dr("no tsconfig found");try{let i=rl(n,r);return new wi(e,n,i)}catch(i){return dr(i instanceof Error?i.message:String(i),r[0],r)}}var wi=class{constructor(t,n,r){this.db=t;this.tsMorph=n;this.projects=r;this.workspacePackages=Ya(t.config.projectRoot),this.sourceFiles=Ka(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 Re(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 Re(this.referencesCache,t.symbolId,()=>{let n=this.nodeForDefinition(t),r=this.packageImportReferencesForDefinition(t);return n?Wa(n,t,r,this.db.config.projectRoot):r})}calleesFor(t){return Re(this.calleesCache,t.symbolId,()=>Re(this.fileCalleesCache,t.relativePath,()=>this.calleeMapForFile(t.relativePath)).get(t.symbolId)??[])}signatureFor(t){return Re(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],l=a?s.getTypeAtLocation(a).getText(a):s.getValueDeclaration()?.getType().getText()??"unknown";return ol(l)}),o=r.getReturnType().getText(n);return`(${i.join(",")})=>${ol(o)}`})}importUsageForDeclaration(t,n){let r=Ie(this.db,t,n.getModuleSpecifierValue()),i=il(n);return n.getImportClause()?.isTypeOnly()?i.map(o=>Qf(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 c of i)for(let u of qa(c,t,r.identifier,this.db.config.projectRoot))o.push(u);let s=o.some(c=>!vi(c.node)),a=o.some(c=>vi(c.node)),l=r.isTypeOnly;return{importer:t,sourcePath:n,importedName:r.importedName,localName:r.localName,kind:r.kind,isTypeOnly:l,isUsed:l||o.length>0,isTypeUsed:l||a,isValueUsed:s,references:o.map(c=>c.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,cr(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=Xa(this.workspacePackages,i.getModuleSpecifierValue());if(!o)return;let s=n.get(o);if(s)for(let a of il(i)){if(a.kind!=="named"||!a.identifier)continue;let l=s.get(a.importedName);if(!l||l.size===0)continue;let c=Ua(a.identifier,r,this.db.config.projectRoot);c.length>0&&Zf(t,l,c)}}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 Za(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(),l=a?Ie(this.db,n,a):n;if(!l||!l.startsWith(`${t.sourceRootRelative}/`))continue;let c=s.getNamedExports();if(c.length===0){if(s.isNamespaceExport())continue;this.collectPackageExports(t,l,r,i);continue}for(let u of c){let m=u.getNameNode().getText(),d=u.getAliasNode()?.getText()??m,p=this.indexedDefinitionByLeaf(l,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 Re(this.indexedDefinitionLeafCache,t,()=>Ga(this.db,t)).get(n)??null}nodeForDefinition(t){return Re(this.definitionNodeCache,t.symbolId,()=>this.definitionNodesForFile(t.relativePath).get(t.symbolId)??null)}definitionNodesForFile(t){return Re(this.fileDefinitionNodeCache,t,()=>{let n=this.sourceFiles.sourceFile(t);return n?Ja(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=Bt(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=q(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&&Yf(i,s.callerId,s.target)});for(let[o,s]of i)i.set(o,eg(s));return i}semanticCalleeForCallNode(t,n,r){let i=Xf(n,Bt(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 il(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 Qf(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 Yf(e,t,n){let r=e.get(t);r||(r=[],e.set(t,r)),r.push(n)}function Xf(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 Zf(e,t,n){for(let r of t){let i=e.get(r)??[];i.push(...n),e.set(r,i)}}function eg(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 ol(e){return e.replace(/\s+/g," ").replace(/\bimport\("[^"]+"\)\./g,"").trim()}var ki=new WeakMap;function Pi(e,t){let n=`${e.config.projectRoot}:typescript-workspace`,r=ki.get(e);r||(r=new Map,ki.set(e,r));let i=r.get(n);if(i)return i;let o=sl(e,t);return r.set(n,o),o}function Ti(e){ki.delete(e)}function gn(e,t){let n=pr(e,t);return n?n.importUsage(t):[]}function hn(e,t){let n=pr(e,t.relativePath);return n?n.referencesFor(t):[]}function Ht(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 al(e,t){let n=new Map;for(let r of t){let i=pr(e,r.relativePath);if(!i)continue;let o=i.calleesFor(r);o.length>0&&n.set(r.symbolId,o)}return n}function ll(e,t){let n=pr(e,t.relativePath);return n?n.signatureFor(t):null}function pr(e,t){if(!ur(t))return null;let n=Pi(e,t);return n.availability().available?n:null}function fr(e,t){let n=new Map;for(let r of Y(e,t)){if(!r.sourcePath)continue;let i=r.localName??r.importedName;if(i&&cl(n,i,r.sourcePath),r.kind==="namespace")for(let o of r.usedMembers)cl(n,o,r.sourcePath)}return n}function cl(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(l=>l.file===t);if(i.length>0)return i.map(yn);let o=fr(e,t),s=o.get(n);if(s)for(let l of s){let c=r.filter(u=>Xe(l,u.file));if(c.length>0)return c.map(yn)}let a=new Set;for(let l of o.values())for(let c of l)a.add(c);for(let l of a){let c=r.filter(u=>Xe(l,u.file));if(c.length>0&&c.length===r.length)return c.map(yn)}return[]}function ml(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 dl(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 l of s){let c=a.get(l.file)??[];c.push(l.line),a.set(l.file,c)}return ul(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 l=or(e,s,i,s===r.relativePath?{excludeStartLine:r.startLine,excludeEndLine:r.endLine}:{});l.length>0&&o.set(s,l)}return ul(e,o)}function pl(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=ka(e,o);if(s.size!==0){for(let a of s)if(n.has(a))for(let l of Wt(e,o,a)){if(!r.has(l.symbolId)||o===l.relativePath)continue;let c=i.get(l.symbolId);c||(c=new Set,i.set(l.symbolId,c)),c.add(o)}}}return i}function yn(e){return{symbolId:e.symbolId,symbol:e.symbol,relativePath:e.file}}function ul(e,t){let n=[],r=new Set;for(let[i,o]of t){let s=q(e,i);for(let a of o){let l=de(s,a),c=`${i}|${a}|${l?.symbol??""}`;r.has(c)||(r.add(c),n.push({file:i,line:a,enclosingSymbol:l?.symbol??null}))}}return n}function Mi(e,t){let n=sg(e,t);return n?ag(e,ng(e,n.match,n.identifier)):[]}function et(e,t,n={}){return tg(e,t,n).map(r=>({file:r.file,line:r.line,enclosingSymbol:r.enclosingSymbol}))}function tg(e,t,n={}){let r=dl(e,t,{semantic:n.semantic}),i=r.length>0?fl(r,"source-attribution"):fl(Mi(e,t),"scip-reference-chunk");return n.includeIgnored===!0?i:i.filter(o=>!e.isIgnored(o.file))}function fl(e,t){return e.map(n=>({...n,provenance:t}))}function ng(e,t,n){let r=new Map;for(let[i,o]of rg(e,t.symbolId))r.set(i,ig(e,i,o,t,n));return r}function rg(e,t){let n=new Map;for(let r of sr(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 ig(e,t,n,r,i){let o=t===r.relativePath?{excludeStartLine:r.startLine,excludeEndLine:r.endLine}:{},s=i?or(e,t,i,o):[];return n.flatMap(a=>og(s,a))}function og(e,t){let n=e.filter(r=>r>=t.start_line&&r<=t.end_line);return n.length>0?n:[t.start_line]}function sg(e,t){let n=qn(e,t);return n?{match:n,identifier:L(n.symbol)||null}:null}function ag(e,t){let n=[],r=new Set;for(let[i,o]of t){let s=q(e,i);for(let a of o){let l=de(s,a),c=`${i}|${a}|${l?.symbol??""}`;r.has(c)||(r.add(c),n.push({file:i,line:a,enclosingSymbol:l?.symbol??null}))}}return n}function me(e,t,n={}){let r=gr(e,[t],{additive:n.additive,semantic:n.semantic}),i=n.callableOnly?(r.get(t.symbolId)??[]).filter(o=>te(o.symbol)):r.get(t.symbolId)??[];return typeof n.limit=="number"?i.slice(0,n.limit):i}function ye(e,t,n={}){let r=cg(e)?mg(e,t,{semantic:n.semantic!==!1}):ug(e).get(t.symbolId)??[];return typeof n.limit=="number"?r.slice(0,n.limit):r}var gl=We("caller-rows"),lg=2e4;function cg(e){return(e.get("SELECT COUNT(*) AS count FROM global_symbols")?.count??0)>lg}function ug(e){return gl.get(e,()=>{let t=Le(e),n=gr(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 l of a){let c=r.get(l.symbol);if(c===void 0||c===s.symbolId)continue;let u=i.get(c);u||(u=[],i.set(c,u),o.set(c,new Set));let m=`${s.symbol}|${s.relativePath}`;o.get(c).has(m)||(o.get(c).add(m),u.push({symbol:s.symbol,file:s.relativePath,source:"caller-map-inversion"}))}}return i})}function mg(e,t,n){let r=[],i=new Set,o=a=>{if(a.symbol===t.symbol)return;let l=`${a.symbol}|${a.file}`;i.has(l)||(i.add(l),r.push(a))};for(let a of Mi(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 l=de(q(e,a.file),a.line);o({symbol:l?.symbol??a.file,file:a.file,source:"semantic-reference"})}return r}function dg(e,t){return e.get(`SELECT
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
232
232
  d.id AS documentId,
233
233
  gs.id AS symbolId,
234
234
  gs.symbol,
@@ -247,10 +247,10 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
247
247
  LEFT JOIN chunks c ON c.document_id = der.document_id
248
248
  JOIN documents d ON d.id = COALESCE(der.document_id, c.document_id)
249
249
  WHERE gs.id = ?
250
- LIMIT 1`,t.symbolId)??null}function gr(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)&&Nt(e,u.relativePath)!==null?i.push(u):o.push(u);let s=new Map,a=new Map,l=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&&l(pg(e,i)),n.semantic!==!1&&l(bg(al(e,t)));let c=r?t:o;return c.length>0&&l(yg(e,c)),s}function pg(e,t){let n=new Map,r=fg(t,n),i=yt(e);for(let[o,s]of r){let a=Nt(e,o);if(a)for(let l of a){let c=gg(s,l.line);if(!c)continue;let u=hg(e,o,i,l.calleeLeaf,l.memberAccess);u&&u.symbol!==c.symbol&&n.get(c.symbolId).push({symbol:u.symbol,file:u.file,chunkId:l.line,source:"ast-callsite"})}}return n}function fg(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 gg(e,t){return e.find(n=>t>=n.startLine&&t<=n.endLine)??null}function hg(e,t,n,r,i){let o=ar(t,n.get(r)??[]);return o.length===0?null:lr(e,t,o,i)}function yg(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
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
251
251
  FROM mentions m
252
252
  JOIN chunks c ON m.chunk_id = c.id
253
- WHERE m.role != 1`),r=new Map;for(let c of n)r.has(c.document_id)||r.set(c.document_id,[]),r.get(c.document_id).push(c);let i=new Map(e.all("SELECT id, relative_path FROM documents").map(c=>[c.id,c.relative_path])),o=new Map,s=e.all(`SELECT gs.id AS symbol_id, gs.symbol,
253
+ 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,
254
254
  COALESCE(der.document_id, def_chunk.document_id) AS document_id
255
255
  FROM global_symbols gs
256
256
  LEFT JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
@@ -260,10 +260,10 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
260
260
  JOIN chunks c ON m.chunk_id = c.id
261
261
  WHERE m.role = 1
262
262
  GROUP BY m.symbol_id
263
- ) def_chunk ON def_chunk.symbol_id = gs.id`);for(let c of s)o.has(c.symbol_id)||o.set(c.symbol_id,{symbol:c.symbol,file:c.document_id!==null?i.get(c.document_id)??"":""});let a=new Map,l=i;for(let c of t){let u=r.get(c.documentId)??[],m=new Set,d=[],p=null,y=()=>{if(p)return p;let f=l.get(c.documentId)??"",b=new Set;if(f){let E=Pa(e,f),x=Math.max(0,c.startLine),$=Math.min(E.length-1,c.endLine);for(let F=x;F<=$;F+=1)for(let R of E[F])b.add(R)}return p=b,b};for(let f of u){if(f.symbol_id===c.symbolId)continue;let b=o.get(f.symbol_id);if(!b)continue;if(!(f.start_line>=c.startLine&&f.end_line<=c.endLine)){if(!(f.start_line<=c.endLine&&f.end_line>=c.startLine))continue;let F=L(b.symbol);if(!F||!y().has(F))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(c.symbolId,d)}return a}function bg(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 hl(e){gl.invalidate(e)}function yl(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??Le(e),a=new Set(s.map(l=>l.symbolId));return Sg(e,r,i,o,a),xg(e,r,s,a),_g(e,r,i,o,a),n.semantic!==!1&&Dg(r,Ht(e,vg(s))),r}function Sg(e,t,n,r,i){for(let o of n){if(!P(o))continue;let s=Nt(e,o);if(s)for(let a of s){let l=ar(o,r.get(a.calleeLeaf)??[]);if(!l||l.length===0)continue;let c=lr(e,o,l,a.memberAccess);c&&i.has(c.symbolId)&&c.file!==o&&Oi(t,c.symbolId,o)}}}function xg(e,t,n,r){let i=Ig(n);for(let o of Cg(e,r))e.isIgnored(o.relative_path)||Rg(o,i.get(o.symbol_id))||Oi(t,o.symbol_id,o.relative_path)}function Cg(e,t){return sr(e,t?[...t]:void 0)}function Ig(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 Rg(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=jt(e,o);if(s.size!==0)for(let a of s){let l=r.get(a);if(l)for(let c of l)i.has(c.symbolId)&&c.file!==o&&Oi(t,c.symbolId,o)}}}function Oi(e,t,n){let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)}function vg(e){return e.filter(t=>"relativePath"in t&&"symbol"in t&&"leaf"in t)}function Dg(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)}}var bl=new WeakMap;function Sl(e,t,n,r){let i=P(t);if(!i)return null;let o=B(e,t);if(!o)return null;let s=bl.get(o);return s||(s=Ng(o,i),bl.set(o,s)),s.get(`${n}:${r}`)??null}function Ng(e,t){let n=en(t),r=new Map,i=o=>{if(n.has(o.type)){let s=o.namedChildren.find(l=>l.type==="parameters"||l.type==="formal_parameters"),a=0;if(s)for(let l of s.namedChildren)l.type==="comment"||l.type==="line_comment"||l.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 xl(e,t,n){let r=t.identifierResolution==="strict"?Wt:ml;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=(l,c,u,m)=>{if(t.candidateNames&&!t.candidateNames.has(l))return;let d=t.resolveTargets?t.resolveTargets({sourceFile:i,name:l,kind:c,defaultTargets:m}):m();for(let p of d)n({sourceFile:i,name:l,target:p,occurrences:u,kind:c})},a=ht(e,i);for(let[l,c]of a)s(l,"identifier",c.length,()=>r(e,i,l));if(t.includeCrossLanguageDispatchNames)for(let l of Ea(e,i))s(l,"cross-language-dispatch",1,()=>Wt(e,i,l));if(t.includeRustAttributeNames&&o==="rust")for(let l of jt(e,i))s(l,"rust-attribute",1,()=>r(e,i,l))}finally{t.afterPath?.(i)}}}var v=class{constructor(t){this.db=t}db;scopedDefinitions(t){return ei(this.db,t)}definitionsForFile(t){return q(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:l=!1,requireCallableSymbol:c=!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)||!Lg(y,{requireFunctionLikeSymbol:l,requireCallableSymbol:c})||o!==void 0&&y.symbol===o)continue;let b=Fi(y);b<r||b>i||a&&Eg(f)||u&&Bn(y.symbol)||ue(f)!=="test"&&(Ve(y.symbol)||!m&&Gr(this.db,f,y.startLine)||p.push(y))}return d?p.sort((y,f)=>Fi(f)-Fi(y)):p}calleeMap(t,n={}){return gr(this.db,t,n)}crossFileCallerMap(t,n={}){return yl(this.db,t,n)}sourceFallbackCallerFiles(t){return pl(this.db,t)}callerFileMap(t,n={}){let r=this.crossFileCallerMap(t,{semantic:n.semantic});return n.sourceFallback===!1?r:wg(r,this.sourceFallbackCallerFiles(t))}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 jt(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(l=>l.symbol!==a)}).map(([o])=>o))}fileDependencyGraph(t){return ae(this.db,t)}fileKind(t){return ue(t)}hasSuppressionComment(t){return Gr(this.db,t.relativePath,t.startLine)}sourceFiles(){return Ye(this.db)}scanSourceReferences(t,n){xl(this.db,t,n)}callableSignature(t){return Sl(this.db,t.relativePath,t.startLine,t.endLine)}};function Lg(e,t){return t.requireCallableSymbol?te(e.symbol):t.requireFunctionLikeSymbol?K(e.symbol):e.isFunctionLike}function Fi(e){return e.endLine-e.startLine+1}function Eg(e){return(e.split("/").pop()??"").includes("types")}function wg(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 Ai(e,t){let n=w(e,t);if(!n)return[];let r=L(n.symbol),o=new v(e).definitionsForFile(n.relativePath).filter(l=>te(l.symbol)),s=o.filter(l=>l.parentTypeName===r||l.symbol.includes(r));return(s.length>0?s:Pg(kg(n.relativePath))===r?o.filter(l=>l.symbol.includes("<invalid-global-code>")):[]).map(l=>({startLine:l.startLine,endLine:l.endLine,name:L(l.symbol)}))}function Pg(e){return e.replace(/\.[^.]+$/,"")}function $i(e,t,n={}){let r=w(e,t);if(!r)return[];let o=!K(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=Tg(e,r),l=new Set,c=[];for(let u of[...o,...s,...a]){let m=`${u.relativePath}:${u.line}`;l.has(m)||(l.add(m),c.push(u))}return c}function Tg(e,t){if(!t.relativePath.endsWith(".rb"))return[];let n=Mg(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 l=s[a]??"";n.some(c=>new RegExp(`@${c}\\b|\\b${c}:`).test(l))&&r.push({relativePath:i,line:a})}}return r}function Mg(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 ji(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=lt(i?.documentation??null),s=e.isIgnored(r.relativePath)?[]:[{relativePath:r.relativePath,startLine:r.startLine,endLine:r.endLine,signature:Fg(o,i?.display_name??null,r.symbol),source:Og(e,r.relativePath,r.startLine,r.endLine)}],a=et(e,r,{semantic:n.semantic}).map(l=>({relativePath:l.file,line:l.line,enclosingSymbol:l.enclosingSymbol,enclosingShort:l.enclosingSymbol?h(l.enclosingSymbol):"(top-level)"}));return{definitions:s,referencedBy:a}}function Og(e,t,n,r){let i=T(e,t);if(!i)return null;let s=i.split(`
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(`
265
265
  `).slice(n,r+1).join(`
266
- `).trimEnd();return s.length>0?s:null}function Fg(e,t,n){let r=at(e);if(r&&!Ag(r))return r;let i=(t??"").trim();return i?K(n)&&!i.endsWith("()")?`${i}()`:i:h(n)}function Ag(e){return e.startsWith("undefined")||e.includes("|")||e.includes("```")}function Bi(e,t){let n=ie(e,t);return n?e.all(`SELECT DISTINCT d2.relative_path
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
267
267
  FROM mentions m
268
268
  JOIN chunks c ON m.chunk_id = c.id
269
269
  JOIN documents d1 ON c.document_id = d1.id
@@ -279,7 +279,7 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
279
279
  WHERE d1.relative_path = ?
280
280
  AND d2.relative_path <> d1.relative_path
281
281
  AND ${e.localSymbolPredicate}
282
- ORDER BY d2.relative_path`,n).filter(i=>!e.isIgnored(i.relative_path)).map(i=>({relativePath:i.relative_path})):[]}function Hi(e,t){let n=ie(e,t);return n?e.all(`SELECT DISTINCT d1.relative_path
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
283
283
  FROM mentions m
284
284
  JOIN chunks c ON m.chunk_id = c.id
285
285
  JOIN documents d1 ON c.document_id = d1.id
@@ -294,9 +294,9 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
294
294
  JOIN documents d2 ON sym_def.document_id = d2.id
295
295
  WHERE d2.relative_path = ?
296
296
  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 Wi(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
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
298
298
  WHERE relative_path IN (${r})
299
- ORDER BY relative_path`,...n).map(m=>m.relative_path).filter(m=>!e.isIgnored(m)),s=kt(e,o,{onlyDocumented:!0,sort:!0}).map(({relativePath:m,...d})=>d),l=e.all(`SELECT DISTINCT d2.relative_path
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
300
300
  FROM mentions m
301
301
  JOIN chunks c ON m.chunk_id = c.id
302
302
  JOIN documents d1 ON c.document_id = d1.id
@@ -327,7 +327,7 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
327
327
  JOIN documents d2 ON sym_def.document_id = d2.id
328
328
  WHERE d2.relative_path IN (${r})
329
329
  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:l,dependedOnBy:u}}function qi(e,t){let n=Ue(e,t);return n.length===0?[]:Bg([...$g(e,n),...jg(e,n)]).filter(r=>!e.isIgnored(r.relative_path)).map(Hg)}function $g(e,t){let n=t.map(()=>"?").join(", ");return e.all(`SELECT DISTINCT d1.relative_path, gs.symbol
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
331
331
  FROM mentions m
332
332
  JOIN chunks c ON m.chunk_id = c.id
333
333
  JOIN documents d1 ON c.document_id = d1.id
@@ -354,7 +354,7 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
354
354
  AND m.role != 1
355
355
  AND ${e.localSymbolPredicate}
356
356
  ${e.pathExclusionsFor("d1")}
357
- ORDER BY d1.relative_path`,...t,...t,...t)}function jg(e,t){let n=new v(e);return t.flatMap(r=>n.definitionsForFile(r).filter(i=>te(i.symbol)).map(i=>({relative_path:r,symbol:i.symbol})))}function Bg(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 Hg(e){return{consumer:e.relative_path,symbol:e.symbol,shortName:h(e.symbol)}}function Cl(e){let t=new Map,n=r=>{let i=t.get(r);if(i)return i;let o=_a(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 l of a.ranges)if(i>=l.startLine&&i<=l.endLine)return!0;if(s&&a.containers.has(s))return!0;for(let l of Wn(o))if(a.containers.has(l))return!0;return!1}}function Il(e){pa(e),hl(e),Ba(e)}var Wg=[{kind:"symbol-evidence",clearDatabase:Il},{kind:"semantic-provider",clearDatabase:Ti},{kind:"identifier-index",clearDatabase:Ta,clearFile:Ma},{kind:"language-parser",clearDatabase:ua,clearFile:ma},{kind:"source-stripper",clearDatabase:Vs,clearFile:Us},{kind:"ast-tree",clearDatabase:Kr,clearFile:Qr},{kind:"source-text",clearDatabase:Rs,clearFile:_s},{kind:"definition-catalog",clearFile:Ms}],Rl=["symbol-evidence","identifier-index","language-parser","source-stripper","ast-tree","source-text"],_l=["identifier-index","language-parser","source-stripper","ast-tree","source-text"];function vl(e,t){let n=new Set(t.kinds);for(let r of Wg)n.has(r.kind)&&(t.scope.kind==="database"?r.clearDatabase?.(e):r.clearFile?.(e,qg(t.scope.relativePath)))}function Vi(e,t={}){vl(e,{scope:{kind:"database"},kinds:t.semanticProvider===!0?[...Rl,"semantic-provider"]:Rl})}function Ui(e,t,n={}){vl(e,{scope:{kind:"file",relativePath:t},kinds:n.definitions===!0?[..._l,"definition-catalog"]:_l})}function qg(e){return e.replace(/\\/g,"/")}function Nl(e,t){return t.isIgnoredPath(e.relativePath)?we("ignored-file"):qe(e.symbol)?we("module-like-symbol"):Dl(e.symbol)?!e.isFunctionLike&&e.enclosingSymbol&&Dl(e.enclosingSymbol)?we("nested-non-callable-value"):!t.includeTests&&!Ji(e.relativePath)?we("test-file"):!t.includeTests&&t.isExcludedRegion(e.relativePath,e.startLine,e.symbol,e.parentTypeName)?we("excluded-file-region"):Bn(e.symbol)?we("rust-trait-impl-member"):Ve(e.symbol)?we("rust-test-module"):!t.includeMembers&&!Ug(e)?we("member"):e.endLine-e.startLine+1<t.minLoc?we("below-min-loc"):{accepted:!0}:we("non-value-symbol")}function Ji(e){return[...new Set([...xa,...Ca])].every(n=>!Vg(e,n))}function we(e){return{accepted:!1,rejectionReason:e}}function Vg(e,t){return new RegExp(`^${t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/%/g,".*").replace(/_/g,".")}$`).test(e)}function Dl(e){return K(e)||e.endsWith("().")||e.endsWith(".")}function Ug(e){return te(e.symbol)||Wn(e.symbol).length===0}function j(e){return e.endLine-e.startLine+1}function hr(e,t){return j(e)-j(t)||e.relativePath.localeCompare(t.relativePath)}function ne(e,t){return typeof t!="number"||t<=0||e.length<=t?e:e.slice(0,t)}function 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 Ll(){return new Map}function El(e,t,n){let r=new Map;for(let i of Oa(e,n))e.isIgnored(i.relative_path)||t.has(i.relative_path)||yr(r,i.symbol_id,i.relative_path,i.ref_count,"scip-mention");return r}function wl(e,t,n){let r=new Set;for(let i of Fa(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 kl(e){return e?.occurrences??0}function yr(e,t,n,r,i="source-fallback"){if(r<=0)return;let o=Tl(e,t,n);o.occurrences+=r,o.sources.add(i)}function Pl(e,t,n,r,i){if(r<=0)return;let o=Tl(e,t,n);o.occurrences=Math.max(r,o.occurrences),o.sources.add(i)}function Tl(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:l,semantic:c=!0}=t,u=ne(Jg(e,{scope:n,minLoc:r,includeTests:i,includeMembers:s}),l),m=o?new Set(Sa(e)):new Set,d=a?Ll():El(e,m,u.map(E=>E.symbolId)),p=a?wl(e,u.map(E=>E.symbolId),m):new Set,y=a?u.filter(E=>!p.has(E.symbolId)):u;a?Yg(e,y,d,m):Qg(e,y,d,m);let f=a?y.filter(E=>!zi(d,E.symbolId)):u;nh(e,f,d,{includeTests:i,inactiveBarrelPaths:m,includeSemantic:!a&&c});let b=a?y.filter(E=>!zi(d,E.symbolId)):u;return Kg(e,zg(b,d))}function Jg(e,t){let n=Cl(e),r=[];for(let i of k(e,{scope:t.scope}))try{for(let o of q(e,i))Nl(o,{minLoc:t.minLoc,includeTests:t.includeTests,includeMembers:t.includeMembers,isIgnoredPath:a=>e.isIgnored(a),isExcludedRegion:n}).accepted&&r.push(o)}finally{Ui(e,i,{definitions:!0})}return r}function zg(e,t){return e.map(n=>Gg(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 Gg(e,t){let n=t.get(e.symbolId)??new Map,r=kl(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 Kg(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)||cn(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 Qg(e,t,n,r){if(t.length===0)return;let i=new v(e),o=new Set(t.map(l=>l.symbolId)),s=new Set(t.map(l=>l.leaf).filter(Boolean)),a=new Set(i.sourceFiles());for(let l of k(e))a.add(l);i.scanSourceReferences({paths:a,includeVueSfc:!0,includeCrossLanguageDispatchNames:!0,includeRustAttributeNames:!0,identifierResolution:"permissive",candidateNames:s,skipPath:l=>r.has(l)},l=>{o.has(l.target.symbolId)&&(eh(e,l)||yr(n,l.target.symbolId,l.sourceFile,th(l),"source-fallback"))})}function Yg(e,t,n,r){if(t.length===0)return;let i=new v(e),o=Xg(t),s=new Set(i.sourceFiles());for(let u of k(e))s.add(u);let a=new Set(o.keys()),l=new Map,c=u=>{let m=l.get(u);return m||(m=fr(e,u),l.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?Zg(u,m,p,c(u),{permissive:d!=="cross-language-dispatch"}):[]},afterPath:u=>{l.delete(u),Ui(e,u)}},u=>{let m=u.kind==="identifier"&&u.sourceFile===u.target.relativePath?Math.max(0,u.occurrences-1):u.occurrences;u.kind==="identifier"&&Ml(e,{sourceFile:u.sourceFile,name:u.name,target:u.target,occurrences:m})||yr(n,u.target.symbolId,u.sourceFile,m,"source-fallback")})}function Xg(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 Zg(e,t,n,r,i){let o=n.filter(l=>l.relativePath===e);if(o.length>0)return o;let s=r.get(t);if(s)for(let l of s){let c=n.filter(u=>Xe(l,u.relativePath));if(c.length>0)return c}let a=new Set;for(let l of r.values())for(let c of l)a.add(c);for(let l of a){let c=n.filter(u=>Xe(l,u.relativePath));if(c.length>0&&c.length===n.length)return c}return i.permissive?[...n]:[]}function eh(e,t){return t.kind==="cross-language-dispatch"&&t.target.relativePath===t.sourceFile?!0:t.kind==="identifier"&&Ml(e,t)}function th(e){return e.kind==="identifier"&&e.target.relativePath===e.sourceFile?Math.max(0,e.occurrences-1):e.occurrences}function Ml(e,t){return t.occurrences>1?!1:Y(e,t.sourceFile).some(n=>n.used||n.sourcePath!==t.target.relativePath?!1:n.importedName===t.name||n.localName===t.name)}function nh(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&&!Ji(a)||Pl(n,i.symbolId,a,1,"caller-map")}}}function Gi(e,t={}){let{limit:n=30,scope:r}=t,i=r?`AND def_d.relative_path LIKE '%${r}%'`:"",s=e.all(`SELECT
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
358
358
  gs.symbol,
359
359
  COUNT(*) AS ref_count,
360
360
  COUNT(DISTINCT ref_d.id) AS file_count,
@@ -377,14 +377,14 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
377
377
  ${i}
378
378
  GROUP BY gs.id
379
379
  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:rh(e,r,n)}function rh(e,t,n){return Le(e,{scope:t}).filter(r=>!e.isIgnored(r.relativePath)).map(r=>ih(e,r)).filter(r=>r.refCount>0).sort((r,i)=>i.refCount-r.refCount||i.fileCount-r.fileCount).slice(0,n)}function ih(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 Ki(e,t,n={}){return Fl(e,t,n)?.map(r=>({symbol:r.symbol,shortName:r.shortName,fromFile:r.fromFile}))??[]}function Qi(e,t){let n=oh(e,t);return n.length>0?n:sh(e,t)}function Yi(e,t,n={}){return Fl(e,t,n)?.filter(r=>!r.used).map(r=>({symbol:r.symbol,shortName:r.shortName,importedIn:r.importer}))??[]}function oh(e,t){return e.all(`SELECT DISTINCT gs.symbol, d.relative_path AS importer
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
381
381
  FROM mentions m
382
382
  JOIN chunks c ON m.chunk_id = c.id
383
383
  JOIN documents d ON c.document_id = d.id
384
384
  JOIN global_symbols gs ON m.symbol_id = gs.id
385
385
  WHERE gs.symbol LIKE ?
386
386
  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 sh(e,t){let n=w(e,t),r=n?.relativePath??null,i=n?L(n.symbol):t.replace(/\(\)$/,""),o=n?qe(n.symbol):!1,s=new Set;for(let a of k(e,{includeIgnored:!1}))for(let l of Y(e,a))ah(l,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 ah(e,t,n){return!e.sourcePath||n.targetFile&&Ol(e.sourcePath)!==Ol(n.targetFile)?!1:e.kind==="side-effect"||n.targetFile&&mh(t)||n.targetIsModule||e.kind==="named"&&e.importedName===n.targetLeaf?!0:e.kind==="namespace"&&e.usedMembers.includes(n.targetLeaf)}function Fl(e,t,n={}){let r=ie(e,t);return r?lh(e,r,n)??(n.semantic===!1?null:ch(e,r))??uh(e,r):null}function lh(e,t,n){let i=e.all(`SELECT DISTINCT
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
388
388
  gs.symbol,
389
389
  def_d.relative_path AS from_file,
390
390
  imp_d.relative_path AS importer,
@@ -410,11 +410,11 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
410
410
  LEFT JOIN documents def_d ON sym_def.document_id = def_d.id
411
411
  WHERE imp_d.relative_path = ?
412
412
  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 ch(e,t){let n=gn(e,t);return n.length>0?n.map(r=>{let i=Al(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 uh(e,t){return Y(e,t).map(n=>{let r=Al(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 Al(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 Ol(e){return e.replace(/\\/g,"/")}function mh(e){return/\.(?:c|h|cc|cpp|cxx|hpp|hh|hxx)$/i.test(e)}function Xi(e,t){let n=Ue(e,t),r=kt(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 l=r[a],c=i[a];if(l.enclosingSymbol&&o.has(l.enclosingSymbol)){o.get(l.enclosingSymbol).children.push(c);continue}let u=null,m=1/0;for(let d of i)if(d!==c&&d.startLine<=c.startLine&&d.endLine>=c.endLine){if(d.startLine===c.startLine&&d.endLine===c.endLine&&!Ls(d.symbol,c.symbol))continue;let y=d.endLine-d.startLine;y<m&&(m=y,u=d)}u?u.children.push(c):s.push(c)}return s}function Zi(e,t){let n=w(e,t);return n?new v(e).definitionsForFile(n.relativePath).filter(i=>i.symbol!==n.symbol).filter(i=>Ns(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:ee(i.symbol)??"unknown"})):[]}function eo(e,t){let n=w(e,t);if(!n)return[];let r=e.get(`SELECT COUNT(DISTINCT c.document_id) AS file_count
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
414
414
  FROM mentions m
415
415
  JOIN chunks c ON m.chunk_id = c.id
416
416
  WHERE m.symbol_id = ?
417
- AND m.role != 1`,n.symbolId);return[{name:h(n.symbol),count:r?.file_count??0}]}function to(e,t){let n=ie(e,t);if(!n)return[];let i=e.all(`SELECT d.relative_path, COUNT(DISTINCT gs.id) AS symbol_count
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
418
418
  FROM mentions m
419
419
  JOIN chunks c ON m.chunk_id = c.id
420
420
  JOIN documents d ON c.document_id = d.id
@@ -431,7 +431,7 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
431
431
  AND m.role != 1
432
432
  AND def_d.id != d.id
433
433
  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=ae(e).get(n);return!s||s.size===0?[]:[{name:n,count:s.size}]}function no(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
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
435
435
  FROM mentions m
436
436
  JOIN chunks c ON m.chunk_id = c.id
437
437
  JOIN global_symbols gs ON m.symbol_id = gs.id
@@ -450,7 +450,7 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
450
450
  GROUP BY gs.id
451
451
  HAVING file_count > 1
452
452
  ORDER BY file_count DESC
453
- LIMIT ?`,n)}function ro(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
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
454
454
  FROM mentions m
455
455
  JOIN chunks c ON m.chunk_id = c.id
456
456
  JOIN documents d ON c.document_id = d.id
@@ -470,7 +470,7 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
470
470
  ${i}
471
471
  GROUP BY d.id
472
472
  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 io(e,t,n){let r=ie(e,t)??t,i=ie(e,n)??n,o=e.get(`SELECT COUNT(DISTINCT gs.id) AS shared
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
474
474
  FROM global_symbols gs
475
475
  WHERE (
476
476
  -- Defined in file1, referenced in file2
@@ -502,7 +502,7 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
502
502
  JOIN documents d ON c.document_id = d.id
503
503
  WHERE m.symbol_id = gs.id AND m.role != 1 AND d.relative_path = ?
504
504
  )
505
- )`,r,i,i,r);return{file1:r,file2:i,sharedSymbols:o?.shared??0}}function oo(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
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
506
506
  def_d.relative_path AS file1,
507
507
  ref_d.relative_path AS file2,
508
508
  COUNT(DISTINCT gs.id) AS shared
@@ -524,12 +524,12 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
524
524
  ${i}
525
525
  GROUP BY def_d.id, ref_d.id
526
526
  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=ae(e,n),o=[],s=new Set,a=new Set,l=[];function c(m,d){if(d>r)return;if(a.has(m)){let y=l.indexOf(m);if(y!==-1){let f=l.slice(y).concat(m),b=f.indexOf(f.reduce(($,F)=>$<F?$:F)),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:ph(E)}))}return}if(s.has(m))return;s.add(m),a.add(m),l.push(m);let p=i.get(m);if(p)for(let y of p)c(y,d+1);l.pop(),a.delete(m)}let u=new Set;for(let m of i.keys())s.has(m)||c(m,0);return o.sort((m,d)=>m.kind!==d.kind?m.kind==="real"?-1:1:m.path.length-d.path.length),o}function ph(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":ir(t)||ir(n)||$l(t,n)||$l(n,t)||jl(t,n)||jl(n,t)||ue(t)==="entry"||ue(n)==="entry"?"module-hierarchy":"real"}function $l(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 jl(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 so(e,t={}){let{limit:n=20,scope:r,minFanIn:i=2,minFanOut:o=2,scanLimit:s}=t,a=new v(e);return ne(a.productionCallableDefinitions({scope:r,requireCallableSymbol:!0,includeSuppressed:!0,sortByLocDesc:typeof s=="number"&&s>0}),s).map(u=>fh(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 fh(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=ne(o.productionCallableDefinitions({scope:n,minLoc:r,excludeEntrySurfaces:!0,excludeRustTraitImplMembers:!0,includeSuppressed:!0,sortByLocDesc:typeof i=="number"&&i>0}),i),l=o.crossFileCallerMap(a,{semantic:s}),c=new Set(l.keys());for(let f of o.frameworkReferencedSymbolIds(a))c.add(f);let u=o.symbolsWithNonSelfCallees(a,{additive:!1,semantic:s}),m=a.filter(f=>!c.has(f.symbolId)).filter(f=>!u.has(f.symbolId)),d=o.sourceFallbackCallerFiles(m);for(let f of d.keys())c.add(f);let p=m.filter(f=>!c.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 lo={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"},ao=new Map;for(let[e,t]of Object.entries(lo))ao.set(t.toLowerCase(),Number(e));function gh(e){let t=parseInt(e,10);if(!isNaN(t))return t;let n=e.toLowerCase(),r=ao.get(n);if(r!==void 0)return r;for(let[i,o]of ao)if(i.includes(n))return o;return null}function co(e,t,n={}){let{scope:r,limit:i=100}=n,o=gh(t);return o===null?[]:Bl(e,r).map(a=>({row:a,resolvedKind:Hl(a)})).filter(a=>a.resolvedKind===o).slice(0,i).map(({row:a,resolvedKind:l})=>({symbol:a.symbol,shortName:h(a.symbol),kind:l,kindName:lo[l]??"Unknown",relativePath:a.relative_path,startLine:a.start_line,endLine:a.end_line}))}function uo(e,t={}){let n=new Map;for(let r of Bl(e,t.scope)){let i=Hl(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:lo[r]??"Unknown",count:i}))}function Bl(e,t){return Le(e,{scope:t}).map(hh)}function hh(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 Hl(e){return e.kind!==null&&e.kind!==0?yh(e.kind,e.symbol,e.documentation):bh(e.symbol,e.documentation,e.enclosing_symbol)}function yh(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 bh(e,t,n){let r=Q(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 mo(e,t={}){let{limit:n=10,scope:r,minDepth:i=3}=t,o=ae(e,r),s=new Map,a=[],l=new Map,c=new Map,u=new Set,m=[],d=0;for(let R of o.keys()){if(l.has(R))continue;let _=[],G=(o.get(R)??new Set).values();for(l.set(R,d),c.set(R,d),d+=1,m.push(R),u.add(R),_.push({node:R,iter:G,pendingChild:null});_.length>0;){let A=_[_.length-1];if(A.pendingChild!==null){let _t=A.pendingChild;A.pendingChild=null,c.set(A.node,Math.min(c.get(A.node),c.get(_t)))}let De=A.iter.next();if(De.done){if(c.get(A.node)===l.get(A.node)){let _t=[];for(;;){let Fn=m.pop();if(u.delete(Fn),_t.push(Fn),s.set(Fn,a.length),Fn===A.node)break}a.push(_t)}_.pop();continue}let Ne=De.value;if(l.has(Ne))u.has(Ne)&&c.set(A.node,Math.min(c.get(A.node),l.get(Ne)));else{l.set(Ne,d),c.set(Ne,d),d+=1,m.push(Ne),u.add(Ne);let _t=(o.get(Ne)??new Set).values();A.pendingChild=Ne,_.push({node:Ne,iter:_t,pendingChild:null})}}}let p=new Map,y=new Array(a.length);for(let R=0;R<a.length;R++)y[R]=a[R].length,p.set(R,new Set);for(let[R,_]of o){let G=s.get(R);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 R=0;R<a.length;R++){let _=[],G=0;for(let A of p.get(R)){let De=b[A];De>G&&(G=De,_=f[A])}f[R]=[R,..._],b[R]=y[R]+G}function E(R){return f[R]}let x=a.map(R=>[...R].sort()),$=new Set,F=[];for(let R=0;R<a.length;R++){let _=E(R),G=[];for(let De of _)G.push(...x[De]);if(G.length<i)continue;let A=G.join(" ");$.has(A)||($.add(A),F.push({chain:G,depth:G.length}))}return F.sort((R,_)=>_.depth-R.depth),F.slice(0,n)}function po(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 l=Q(r.symbol);if("kind"in l)return i;let c=l.descriptors;if(c.length<=1)return i;let u=[i[0]];for(let m=c.length-2,d=1;m>=0;m--,d++){let y=c.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 fo(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 In(e,t){let n=new Set;for(let r of e)t.has(r)||n.add(r);return n}function Wl(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 go(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 Sh(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 ql(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 l=Math.sqrt(o)*Math.sqrt(s),c=l>0?i/l:0,u=Sh(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:c,significantShared:m,trivialShared:d}}function ho(e,t,n={}){let{minSimilarity:r=.4,limit:i=20}=n,o=Ih(e,t,{semantic:n.semantic!==!1});if(!o)return[];if(!K(o.symbol))return[];let s=xh(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 xh(e,t,n,r){let i=Ul(e,{minCallees:3,excludeSymbol:t.symbol,scanLimit:r.scanLimit,semantic:r.semantic}),o=go([t,...i].map(a=>a.callees)),s=[];for(let a of i){if(a.callees.size<3)continue;let l=Vl(t,a,o,{minSimilarity:n,requireSignificantShared:1,requireSharedCount:0});l&&s.push(l)}return s.sort((a,l)=>l.similarity-a.similarity),s}function Vl(e,t,n,r){let{similarity:i,significantShared:o}=ql(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:[...In(e.callees,t.callees)].map(h),uniqueToB:[...In(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,l=Ul(e,{minCallees:o,scope:i,scanLimit:a,semantic:t.semantic!==!1}),c=go(l.map(f=>f.callees)),u=new Map;for(let f of l)for(let b of f.callees)u.set(b,(u.get(b)??0)+1);let m=Math.max(8,Math.ceil(Math.sqrt(l.length))),d=new Map;for(let f=0;f<l.length;f+=1)for(let b of l[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<l.length;f+=1){let b=l[f],E=new Set;for(let x of b.callees){let $=d.get(x);if($)for(let F of $)F>f&&E.add(F)}for(let x of E){let $=`${f}|${x}`;if(y.has($))continue;y.add($);let F=l[x];if(s&&b.file===F.file)continue;if(b.paramCount>=0&&F.paramCount>=0){let _=Math.abs(b.paramCount-F.paramCount),G=Math.max(2,Math.ceil(Math.max(b.paramCount,F.paramCount)*.5));if(_>G)continue}let R=Vl(b,F,c,{minSimilarity:n,requireSignificantShared:2,requireSharedCount:4});if(R&&(p.push(R),p.length>r*5))break e}}return p.sort((f,b)=>b.similarity-f.similarity),p.slice(0,r)}var Ch=["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 Ih(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:Jl(o.map(s=>s.symbol)),paramCount:i.callableSignature(r)?.paramCount??-1}}function Ul(e,t){let{minCallees:n,scope:r,excludeSymbol:i,scanLimit:o}=t,s=new v(e),a=ne(s.productionCallableDefinitions({scope:r,minLoc:5,excludeSymbol:i,sortByLocDesc:typeof o=="number"&&o>0}),o),l=s.calleeMap(a,{semantic:t.semantic!==!1});return a.map(c=>({symbol:c.symbol,file:c.relativePath,callees:Jl((l.get(c.symbolId)??[]).map(u=>u.symbol)),paramCount:s.callableSignature(c)?.paramCount??-1})).filter(c=>c.callees.size>=n)}function Jl(e){return new Set([...e].filter(t=>!Rh(t)))}function Rh(e){return Ch.some(t=>e.includes(t))}function _h(e,t,n){let r=vh(e,t);if(!r||r.tokens.size<3)return[];let i=n.minSimilarity>=.5?n.minSimilarity:.3,o=[];for(let s of Nh(e)){if(s.symbol===r.symbol||s.tokens.size<3)continue;let a=Cn(r.tokens,s.tokens);if(a.size<2)continue;let l=new Set([...r.tokens,...s.tokens]),c=l.size>0?a.size/l.size:0;c<i||o.push({symbolA:r.symbol,shortNameA:h(r.symbol),fileA:r.file,symbolB:s.symbol,shortNameB:h(s.symbol),fileB:s.file,similarity:c,similarityBasis:"source-tokens",sharedCallees:[...a].sort(),uniqueToA:[...In(r.tokens,s.tokens)].sort(),uniqueToB:[...In(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 vh(e,t){let n=w(e,t);if(!n||!K(n.symbol))return null;let r=Dh(e,n);return r?{symbol:n.symbol,file:n.relativePath,tokens:r}:null}function Dh(e,t){let n=L(t.symbol),r=zl(e,t.relativePath,t.startLine,t.endLine,n),i=Gl(r,n);return i.size>0?i:null}function Nh(e){let t=new v(e);return t.scopedDefinitions().filter(n=>n.isFunctionLike).filter(n=>t.fileKind(n.relativePath)!=="test").filter(n=>!Ve(n.symbol)).map(n=>({symbol:n.symbol,file:n.relativePath,tokens:Gl(zl(e,n.relativePath,n.startLine,n.endLine,n.leaf),n.leaf)})).filter(n=>n.tokens.size>0)}function zl(e,t,n,r,i){let o=T(e,t);if(!o)return"";let s=o.split(`
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(`
529
529
  `);if(r>=n&&r-n<=12)return s.slice(n,r+1).join(`
530
- `);let a=[new RegExp(`\\bdef\\s+${Rn(i)}\\b`),new RegExp(`\\bfun\\s+${Rn(i)}\\b`),new RegExp(`\\bfn\\s+${Rn(i)}\\b`),new RegExp(`\\bfunction\\s+${Rn(i)}\\b`),new RegExp(`\\b${Rn(i)}\\s*\\(`)],l=s.findIndex(c=>a.some(u=>u.test(c)));if(l>=0){let c=l;for(let u=l+1;u<s.length&&u<=l+8;u++){let m=s[u]??"";if(u>l&&Eh(m)||(c=u,m.trim()===""&&u>l+1))break}return s.slice(l,c+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(`
531
531
  `)}return s.slice(n,Math.min(s.length,n+8)).join(`
532
- `)}function Gl(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=Lh(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 Lh(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 Eh(e){return/^\s*(?:def|fun|fn|function|class|trait|module|object|enum|interface|public|private|protected)\b/.test(e)}function Rn(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function yo(e,t={}){let{minSimilarity:n=.5,limit:r=20,scope:i,filePattern:o}=t,s=t.minDeps??(o?1:3),a=wh(e,{scope:i,minDeps:s}),l=[];if(o){let c=a.find(u=>u.file.includes(o));if(!c)return[];for(let u of a){if(u.file===c.file)continue;let m=Kl(c,u,n);m&&l.push(m)}}else for(let c=0;c<a.length;c++){for(let u=c+1;u<a.length;u++){let m=Kl(a[c],a[u],n);m&&l.push(m)}if(l.length>r*5)break}return l.sort((c,u)=>u.similarity-c.similarity),l.slice(0,r)}function wh(e,t){let{scope:n,minDeps:r}=t,i=ae(e,n),o=kh(i),s=[];for(let[a,l]of i)l.size>=r&&s.push({file:a,deps:new Set([...l].filter(c=>!o.has(c)))});return s}function kh(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 Kl(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=Wl(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 bo(e,t={}){let{minSimilarity:n=.5,limit:r=15,scope:i,minChainLength:o=3,maxChainLength:s=8}=t,a=ae(e,i),l=jh(a,o,s);if(l.length===0)return[];let c=Ph(l);return c.length<2?[]:$h(Oh(c,n,r),r)}function Ph(e){let t=Th(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 Th(e){let{nodeFreq:t,tailFreq:n}=Mh(e),r=e.length*.9,i=e.length*.8,o=new Set;for(let[a,l]of t)l>r&&o.add(a);for(let[a,l]of n)l>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 l=a.split("/").pop()??"";s.includes(l)&&o.add(a)}return o}function Mh(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 Oh(e,t,n){let r=[];for(let i=0;i<e.length;i++){for(let o=i+1;o<e.length;o++){let s=Fh(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 Fh(e,t,n){if(!Ah(e.filtered,t.filtered))return null;let{distance:r,ops:i}=Bh(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(c=>c.type==="substitute").map(c=>({index:c.indexA,nodeA:e.filtered[c.indexA],nodeB:t.filtered[c.indexB]}));return a.length===0||i.filter(c=>c.type==="match").length<2?null:{chainA:e.original,chainB:t.original,similarity:s,editDistance:r,divergencePoints:a,commonPrefix:Hh(e.original,t.original),commonSuffix:Wh(e.original,t.original)}}function Ah(e,t){let n=new Set(e);return t.some(r=>n.has(r))}function $h(e,t){let n=[];for(let r of e)if(n.some(o=>Ql(r.chainA,o.chainA)&&Ql(r.chainB,o.chainB))||n.push(r),n.length>=t)break;return n}function jh(e,t,n){let r=[];for(let o of e.keys()){if(r.length>=500)break;Yl(e,o,[o],new Set([o]),t,n,r,500)}return r}function Yl(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 l=e.get(t);if(!l||l.size===0){n.length>=i&&s.push([...n]);return}let c=!1;for(let u of l)if(!r.has(u)&&(r.add(u),n.push(u),Yl(e,u,n,r,i,o,s,a),n.pop(),r.delete(u),c=!0,s.length>=a))return;!c&&n.length>=i&&s.push([...n])}function Bh(e,t){let n=e.length,r=t.length,i=Array.from({length:n+1},()=>Array(r+1).fill(0));for(let l=0;l<=n;l++)i[l][0]=l;for(let l=0;l<=r;l++)i[0][l]=l;for(let l=1;l<=n;l++)for(let c=1;c<=r;c++)e[l-1]===t[c-1]?i[l][c]=i[l-1][c-1]:i[l][c]=1+Math.min(i[l-1][c],i[l][c-1],i[l-1][c-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 Hh(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 Wh(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 Ql(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),l=a.productionCallableDefinitions({scope:n,minLoc:r,excludeTypesFiles:!0,requireFunctionLikeSymbol:!0,sortByLocDesc:!0}),c=ne(l,s),u=a.calleeMap(c,{semantic:t.semantic!==!1}),m=[];for(let d of c){let p=qh(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 qh(e,t,n){let r=new Set(t.map(a=>a.symbol));if(r.size<n)return null;let i=Vh(r,t),o=Uh(r,i);if(o.length<2)return null;let s=Jh(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 Vh(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 Uh(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 l of t.get(a)??[])n.has(l)||s.push(l)}}r.push(o)}return r}function Jh(e,t){return e.filter(n=>n.size>=3).map(n=>zh(n,e,t)).filter(n=>n.isolation>.5).sort((n,r)=>r.isolation-n.isolation)}function zh(e,t,n){let r=new Set;for(let a of t)if(a!==e)for(let l of a)r.add(l);let i=0;for(let a of e)for(let l of n.get(a)??[])r.has(l)&&i++;let o=e.size*r.size,s=o>0?1-i/o:1;return{callees:[...e].map(h),isolation:s}}function So(e,t,n={}){let{maxDepth:r=5,scope:i}=n,o=w(e,t);if(!o)return[];let s=[],a=new Set([o.symbolId]),l=new Set,c=[o];for(let u=1;u<=r&&c.length!==0;u++){let m=[];for(let d of c)for(let p of Gh(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(l.has(y))continue;l.add(y),s.push({symbol:p.symbol,shortName:p.shortName,file:p.file,depth:u}),p.symbolId!==null&&p.symbolMatch&&m.push(p.symbolMatch)}c=m}return s.sort((u,m)=>u.depth-m.depth||u.file.localeCompare(m.file)),s}function Gh(e,t,n){let r=ye(e,t,{limit:500}).filter(c=>!e.isIgnored(c.file)).filter(c=>!n||c.file.includes(n)),i=new Set(r.map(c=>c.file)),o=[];for(let c of Kh(e,t,n)){if(i.has(c))continue;let u=q(e,c),m=u.length>0?de(u,u[0].startLine):null;o.push({symbol:m?.symbol??c,file:c})}let s=[...r,...o],a=[],l=new Set;for(let c of s){let u=Tt(e,c.symbol);if(!u){let d=`${c.file}|${c.symbol}`;if(l.has(d))continue;l.add(d),a.push({symbolId:null,symbol:c.symbol,shortName:h(c.symbol),file:c.file,symbolMatch:null});continue}if(u.symbolId===t.symbolId||e.isIgnored(u.relativePath)||!Qh(u.symbol))continue;let m=`${u.symbolId}|${u.relativePath}`;l.has(m)||(l.add(m),a.push({symbolId:u.symbolId,symbol:u.symbol,shortName:h(u.symbol),file:u.relativePath,symbolMatch:u}))}return a}function Kh(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
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
533
533
  FROM mentions m
534
534
  JOIN chunks c ON m.chunk_id = c.id
535
535
  JOIN documents consumer_d ON consumer_d.id = c.document_id
@@ -537,30 +537,30 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
537
537
  AND m.role != 1
538
538
  AND c.document_id != ?
539
539
  ${e.pathExclusionsFor("consumer_d")}
540
- ${r}`,...i).map(o=>o.relative_path).filter(o=>!e.isIgnored(o)))}function Qh(e){let t=ee(e);return t==="method"||t==="type"||e.endsWith("().")}function xo(e,t,n={}){let r=ie(e,t);if(!r)return null;let i=Yh(e,r);if(!i||e.isIgnored(i.relative_path))return null;let o=[],s=0,a=Xh(e,i.relative_path),l=n.semantic===!1?new Map:Ht(e,a);for(let c of a){let u=Zh(e,i,c,l.get(c.symbolId)??new Set);s+=u,o.push({symbol:c.symbol,shortName:h(c.symbol),startLine:c.startLine,endLine:c.endLine,externalConsumers:u,riskLevel:ey(u)})}return{file:i.relative_path,symbols:o,totalExternalConsumers:s}}function Yh(e,t){return e.get(`SELECT id, relative_path FROM documents
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
541
541
  WHERE relative_path = ?
542
542
  ${e.pathExclusionsFor("documents")}
543
- LIMIT 1`,t)??null}function Xh(e,t){return new v(e).definitionsForFile(t).sort((n,r)=>n.startLine-r.startLine||n.endLine-r.endLine)}function Zh(e,t,n,r){let i=e.all(`SELECT DISTINCT consumer_d.relative_path
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
544
544
  FROM mentions m
545
545
  JOIN chunks c ON m.chunk_id = c.id
546
546
  JOIN documents consumer_d ON consumer_d.id = c.document_id
547
547
  WHERE m.symbol_id = ?
548
548
  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 ey(e){return e>10?"high":e>0?"medium":"low"}import{execFileSync as Co}from"child_process";function br(e,t={}){let n=Vt(e,t);return n.note?ty(n.note,n.changedFileLines):n.changedFiles.length===0?ny(n.changedFileLines):xr(n.changedFiles,[Sr(e,n.changedFiles,n.changedFiles)])}function Vt(e,t={}){let{base:n="HEAD"}=t;try{let r=ry(e.config.projectRoot,n);return{changedFileLines:r,changedFiles:iy(e,r),note:r.length===0?"No changed files found.":void 0}}catch{return{changedFileLines:[],changedFiles:[],note:"Unable to compute git diff."}}}function Sr(e,t,n){let r=new v(e),i=new Set(n),o=[],s=new Map,a=t.flatMap(c=>r.definitionsForFile(c)).filter(cy).sort((c,u)=>c.relativePath.localeCompare(u.relativePath)||c.startLine-u.startLine),l=Ht(e,a);for(let c of a)oy(e,c,n,i,o,s,l.get(c.symbolId)??new Set);return{changedSymbols:o,consumerEntries:[...s.entries()].map(([c,u])=>({file:c,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 l of s.symbols)a.add(l)}let i=ly(n);return{changedFiles:[...e],changedSymbols:r,affectedConsumers:i,summary:{totalChangedFiles:e.length,totalChangedSymbols:r.length,totalAffectedFiles:i.length}}}function ty(e,t=[]){return{changedFiles:t,changedSymbols:[],affectedConsumers:[],summary:{totalChangedFiles:t.length,totalChangedSymbols:0,totalAffectedFiles:0,note:e}}}function ny(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 ry(e,t){let n=Co("git",["diff","--name-only",t],{encoding:"utf-8",cwd:e,timeout:1e4}),r=Co("git",["diff","--name-only","--cached",t],{encoding:"utf-8",cwd:e,timeout:1e4}),i=Co("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 iy(e,t){let n=[];for(let r of t){let i=e.get(`SELECT relative_path FROM documents
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
551
551
  WHERE relative_path LIKE ?
552
- LIMIT 1`,`%${r}`);i&&!e.isIgnored(i.relative_path)&&n.push(i.relative_path)}return n}function oy(e,t,n,r,i,o,s){let a=Math.max(sy(e,t.symbolId),s.size);if(!uy(t,a))return;let l=h(t.symbol);i.push({symbol:t.symbol,shortName:l,file:t.relativePath,fanIn:a});for(let c of ay(e,t.symbolId,n))Xl(e,r,o,c,l);for(let c of s)Xl(e,r,o,c,l)}function sy(e,t){return e.get(`SELECT COUNT(DISTINCT c.document_id) AS fan_in
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
553
553
  FROM mentions m
554
554
  JOIN chunks c ON m.chunk_id = c.id
555
555
  WHERE m.symbol_id = ?
556
- AND m.role != 1`,t)?.fan_in??0}function ay(e,t,n){return n.length===0?[]:e.all(`SELECT DISTINCT ref_d.relative_path
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
557
557
  FROM mentions m
558
558
  JOIN chunks c ON m.chunk_id = c.id
559
559
  JOIN documents ref_d ON c.document_id = ref_d.id
560
560
  WHERE m.symbol_id = ?
561
561
  AND m.role != 1
562
562
  AND ref_d.relative_path NOT IN (${n.map(()=>"?").join(",")})
563
- ${e.pathExclusionsFor("ref_d")}`,t,...n).map(i=>i.relative_path)}function Xl(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 ly(e){return[...e.entries()].map(([t,n])=>({file:t,consumedSymbols:n.size})).sort((t,n)=>n.consumedSymbols-t.consumedSymbols)}function cy(e){return!(qe(e.symbol)||e.parentTypeName!==null&&!te(e.symbol))}function uy(e,t){return te(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 Io(e,t){if(e===t)return"ok";let n=Cr(e),r=Cr(t);return n&&r?my(n,r)?"ok":"violation":dy(e,t)}function Zl(e,t){let n=Cr(bt(e)),r=Cr(bt(t));return!!n&&!!r}function Cr(e){return/^src\/([^/]+)$/.exec(e)?.[1]??null}function my(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=Sy(e,n);return hy([...py(e,s,a,{semantic:i}),...fy(s),...gy(s,r)])}function py(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 l of s)if(!Fe(l)&&!a.has(l)){if(r.semantic&&vy(e,o,l)||Dy(e,o,l)||Ny(e,o,l)||_y(l)||Ey(e,o,l)||Ly(l))continue;i.push({file:o,kind:"unused-import",description:`Depends on ${l} but references none of its symbols`,dep:l})}}return i}function fy(e){let t=[],n=Ry(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;(Io(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 gy(e,t){let n=[];for(let[r,i]of yy(e)){let o=i.filter(a=>!Fe(a));if(o.length<t)continue;let s=by(e,o);for(let a of o)for(let l of e.get(a)??[])Fe(l)||(s.get(l)??0)===1&&Dn.dirname(l)!==r&&Dn.dirname(l)!==Dn.dirname(r)&&(Zl(a,l)||n.push({file:a,kind:"pattern-deviation",description:`Only file in ${r}/ that depends on ${l}`,dep:l}))}return n}function hy(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 yy(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 by(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 Sy(e,t){let n=new Map;return xy(e,n,t),Iy(e,n),n}function xy(e,t,n){for(let r of Cy(e,n))ec(e,t,r.from_file,r.to_file)}function Cy(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
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
564
564
  FROM mentions m
565
565
  JOIN chunks c ON m.chunk_id = c.id
566
566
  JOIN documents d1 ON c.document_id = d1.id
@@ -576,24 +576,24 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
576
576
  WHERE d1.id != d2.id
577
577
  AND m.role != 1
578
578
  ${e.pathExclusionsFor("d1","d2")}
579
- ${n}`)}function Iy(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)||ec(e,t,r.sourceFile,r.target.relativePath))})}function ec(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 Ry(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||Io(o,a))continue;let l=`${o}->${a}`;t.set(l,(t.get(l)??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 vy(e,t,n){let r=gn(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.some(i=>i.isUsed)}function Dy(e,t,n){let r=Y(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.some(i=>i.used)}function Ny(e,t,n){let r=Y(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.every(i=>i.isTypeOnly===!0)}function Ly(e){return e.endsWith(".vue")}function Ey(e,t,n){let r=Y(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"||wy(Dn.basename(e)))}function wy(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 Rr}from"path";function Ut(e){let t=e.orderCandidates?[...e.candidates()].sort(e.orderCandidates):e.candidates(),n=ne(t,e.scanLimit),r=e.prepare?.(n)??void 0,i=[];for(let o of n){let s=e.evaluate(o,r);s&&i.push(s)}return e.orderResults&&i.sort(e.orderResults),typeof e.limit=="number"?i.slice(0,e.limit):i}var tc=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)Py(e,a,t.relativePath,s)?i++:Ro(e,a,s)?o++:r.push(a);return{realConsumers:r,barrelConsumers:i,importOnlyConsumers:o}}function Ro(e,t,n){if(!n)return!1;let r=P(t);if(!r)return!1;let i=tc.get(e,t,()=>ky(e,t,r));return i.importedLeaves.has(n)&&!i.usedLeaves.has(n)}function nc(e){tc.invalidateAll(e)}function ky(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=(l,c)=>{let u=c||s.has(l.type);(l.type==="identifier"||l.type==="type_identifier"||l.type==="property_identifier"||l.type==="field_identifier")&&(u?r.add(l.text):i.add(l.text));for(let m of l.children)a(m,u)};return a(o.rootNode,!1),{importedLeaves:r,usedLeaves:i}}function Py(e,t,n,r){if(!r)return!1;let i=T(e,t);if(!i)return!1;let o=ca(e,t);if(o.length===0)return!1;let s=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=new RegExp(`\\b${s}\\b`),l=i.split(`
580
- `),c=0;for(let u=0;u<l.length;u++){if(!a.test(l[u]??""))continue;if(c++,!o.find(d=>d.startLine<=u&&u<=d.endLine))return!1}return c>0}function wn(e,t){let{scope:n,maxLoc:r=15,limit:i=30,scanLimit:o}=t??{},s=new v(e),a=By(s.fileDependencyGraph(n));return Ut({candidates:()=>My(s,n,r),orderCandidates:hr,scanLimit:o,prepare:l=>({callerFileMap:Ln(s,l,{semantic:t?.semantic!==!1}),reverseFanIn:a}),evaluate:(l,c)=>Ty(e,s,l,c),orderResults:(l,c)=>c.callerFanIn-l.callerFanIn||c.loc-l.loc,limit:i})}function Ty(e,t,n,r){let i=Oy(e,t,n,r.callerFileMap);if(i.length!==1)return null;let o=i[0],s=Fy(e,n.symbolId,o);if(!s)return null;let a=Ay(t,e,o,n.symbol,s);if(a&&Ve(a.symbol))return null;let l=$y(r.callerFileMap,r.reverseFanIn,o,a);return l<=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:l}}function My(e,t,n){return e.productionCallableDefinitions({scope:t,minLoc:2,maxLoc:n,requireFunctionLikeSymbol:!0})}function Oy(e,t,n,r){let i=En(n.relativePath,Rr(n.relativePath)),o=[...r.get(n.symbolId)??[]].filter(s=>s!==n.relativePath).filter(s=>En(s,Rr(s))!==i).filter(s=>{let a=t.fileKind(s);return a!=="barrel"&&a!=="entry"&&a!=="test"});return Ir(e,n,o).realConsumers}function Fy(e,t,n){return e.get(`SELECT c.start_line, c.end_line
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
581
581
  FROM mentions m
582
582
  JOIN chunks c ON m.chunk_id = c.id
583
583
  JOIN documents d ON c.document_id = d.id
584
584
  WHERE m.symbol_id = ? AND m.role != 1 AND d.relative_path = ?
585
- LIMIT 1`,t,n)}function Ay(e,t,n,r,i){let o=e.definitionsForFile(n),s=jy(t,n,r,i.start_line,i.end_line);return de(o,s)}function $y(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 Hy(t,n)}function jy(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 By(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 Hy(e,t){let n=e.get(t)??0;if(n>0)return n;let r=En(t,Rr(t)),i=0;for(let[o,s]of e)o!==t&&En(o,Rr(o))===r&&s>i&&(i=s);return i}function ic(e,t,n,r){let i=P(t);if(!i)return!0;let o=B(e,t);if(!o)return!0;let s=rc.get(o);return s||(s=Wy(o,i),rc.set(o,s)),s.get(`${n}:${r}`)??!0}var rc=new WeakMap;function Wy(e,t){let n=en(t),r=new Map,i=o=>{n.has(o.type)&&r.set(`${o.startPosition.row}:${o.endPosition.row}`,qy(o,t));for(let s of o.children)i(s)};return i(e.rootNode),r}function qy(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 l=a.namedChildren.filter(m=>m.type!=="comment"),c=e.namedChildren.find(m=>m.type==="parameters"||m.type==="formal_parameters");if(!c)return!1;let u=[];for(let m of c.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(l.length!==u.length)return!1;for(let m=0;m<u.length;m+=1){let d=l[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 Ut({candidates:()=>Jy(s,n,r),orderCandidates:hr,scanLimit:o,prepare:a=>s.calleeMap(a,{semantic:t?.semantic!==!1}),evaluate:(a,l)=>Vy(e,a,l.get(a.symbolId)??[]),orderResults:(a,l)=>a.loc-l.loc||a.file.localeCompare(l.file),limit:i})}function Vy(e,t,n){let r=Uy(n);if(r.size!==1||!ic(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 Uy(e){let t=e.some(r=>K(r.symbol))?e.filter(r=>K(r.symbol)):e,n=new Map;for(let r of t)n.has(r.symbol)||n.set(r.symbol,r);return n}function Jy(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??{},l=t?.semantic!==!1,c=new v(e),u=c.scopedDefinitions(n),m=ib(c,n),d=ne(zy(e,c,u,{minLoc:r,maxLoc:i}).sort((x,$)=>j($)-j(x)||x.relativePath.localeCompare($.relativePath)),a),p=Gy(c,d,{semantic:l}),y=Xy(e,c,u,d,{semantic:l}),f=Ky(d);return Qy(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=>sb(x.definition,x.realConsumers.length,m)).map(x=>Yy(e,x)).filter(x=>s||x.confidence!=="low").sort((x,$)=>{let F={high:0,medium:1,low:2};return F[x.confidence]-F[$.confidence]||$.loc-x.loc||x.file.localeCompare($.file)||x.startLine-$.startLine}).slice(0,o)}function zy(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=>!ob(i.symbol)).filter(i=>!t.hasSuppressionComment(i))}function Gy(e,t,n){return Ln(e,t,{semantic:n.semantic})}function Ky(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 Qy(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:l,importOnlyConsumers:c}=Ir(e,i,s),u=ab(e,i,n,r);return{definition:i,realConsumers:a,barrelConsumers:l+c,transitivelyReachable:u}})}function Yy(e,t){let n=ac(e,t.definition.relativePath,t.definition.startLine),r=sc(t.definition.relativePath)?!0:lb(e,t.definition),{confidence:i,reason:o}=cb(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 Xy(e,t,n,r,i){let o=eb(e,Zy(n),r),s=o.map(c=>c.singleton);if(o.length===0)return new Set;let a=Ln(t,s,{semantic:i.semantic}),l=new Set;for(let{singleton:c,classId:u}of o)nb(e,c,a)&&l.add(u);return l}function Zy(e){let t=new Map;for(let n of e){let r=L(n.symbol);r&&t.set(oc(n.relativePath,r),n)}return t}function eb(e,t,n){let r=[];for(let i of n){let o=tb(e,t,i);o&&r.push({singleton:o,classId:i.symbolId})}return r}function tb(e,t,n){if(ac(e,n.relativePath,n.startLine)!=="class")return null;let r=L(n.symbol);if(!r)return null;let i=rb(e,n.relativePath,r);return i?t.get(oc(n.relativePath,i))??null:null}function nb(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)&&!Ro(e,o,r))}function oc(e,t){return`${e}\0${t}`}function rb(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 ib(e,t){return new Set(e.scopedDefinitions(t).filter(n=>n.isFunctionLike).map(n=>n.relativePath))}function ob(e){let t=Q(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 sc(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 sb(e,t,n){return!(sc(e.relativePath)&&t>0||t===0&&n.has(e.relativePath))}function ab(e,t,n,r){let i=Xr(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 l of s){let c=a.get(l);if(!c)continue;let u=n.get(c.symbolId);if(u){for(let m of u)if(m!==t.relativePath&&!e.isIgnored(m))return!0}}return!1}function ac(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 c=(i[a]??"").replace(/^\s*\/\/.*$/g,"");if(/\b(?:export\s+)?(?:abstract\s+)?class\s+\w/.test(c))return"class";if(/\b(?:export\s+)?interface\s+\w/.test(c))return"interface";if(/\b(?:export\s+)?type\s+\w/.test(c))return"type";if(/\b(?:export\s+)?(?:const\s+)?enum\s+\w/.test(c))return"enum"}return"other"}function lb(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 cb(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 Ut({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,l)=>ub(a,l,r),orderResults:(a,l)=>l.score-a.score||l.loc-a.loc,limit:i})}function ub(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(c=>c.file!==e.relativePath),a=new Set(s.map(c=>`${c.symbol}|${c.file}`)).size,l=new Set(o.map(c=>`${c.symbol}|${c.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:l,score:Math.round(r/50*(i/5)*Math.max(a/5,1)*100)/100}}function lc(e){let t=mb(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 mb(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 l=e.stale.count/Math.max(n*.1,1);r-=Math.min(8,Math.round(l*10));let c=e.drift.count/t;return r-=Math.min(5,Math.round(c*50)),r-=Math.min(5,e.complexity.extremeCount*2),Math.max(0,Math.min(100,r))}import{getHeapStatistics as pb}from"v8";var fb=64*1024*1024;function _o(){let e=globalThis.gc;if(!e)return;let t=pb();t.heap_size_limit-t.used_heap_size<fb||e()}var gb=50,hb=75e3,yb=5e3,cc=2500,Mn=["overview","dead","isolated","cycles","similar","extract-candidates","wrapper-candidates","passthrough-candidates","stale-abstractions","drift","complexity-hotspots"],bb={overview:(e,t,n,r)=>({phase:"overview",statsResult:r,warnings:n.warnings}),dead:(e,t,n)=>({phase:"dead",dead:Cb(e,t,n)}),isolated:(e,t,n)=>({phase:"isolated",isolated:Ib(e,t,n)}),cycles:(e,t,n)=>({phase:"cycles",realCycleCount:Rb(e,t,n)}),similar:(e,t,n)=>({phase:"similar",similarCount:_b(e,t,n)}),"extract-candidates":(e,t,n)=>({phase:"extract-candidates",extractCount:vb(e,t,n)}),"wrapper-candidates":(e,t,n)=>({phase:"wrapper-candidates",wrappers:Db(e,t,n)}),"passthrough-candidates":(e,t,n)=>({phase:"passthrough-candidates",passthroughs:Nb(e,t,n)}),"stale-abstractions":(e,t,n)=>({phase:"stale-abstractions",stale:Lb(e,t,n)}),drift:(e,t,n)=>({phase:"drift",drift:Eb(e,t,n)}),"complexity-hotspots":(e,t,n)=>({phase:"complexity-hotspots",complexity:wb(e,t,n)})};function vo(e,t,n={}){return Sb(e,n.full===!0,(r,i)=>bb[t](e,n.scope,i,r))}function Sb(e,t,n){let r=Pe(e),i=kb(r,t);try{return n(r,i)}finally{Vi(e,{semanticProvider:!0}),_o()}}function Do(e){return lc(xb(e))}function xb(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 Cb(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 No(Mb(e,r.symbols))})}function Ib(e,t,n){return Ae(e,n,"isolated",()=>{let r=xn(e,{scope:t,minLoc:3,scanLimit:n.candidateScanLimit,semantic:!1});return No(Ob(e,r))})}function Rb(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 vb(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 Db(e,t,n){return uc(e,n,"wrapper-candidates",()=>wn(e,{scope:t,maxLoc:15,limit:50,scanLimit:n.candidateScanLimit,semantic:!1}))}function Nb(e,t,n){return uc(e,n,"passthrough-candidates",()=>kn(e,{scope:t,maxLoc:15,limit:50,scanLimit:n.candidateScanLimit,semantic:!1}))}function Lb(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 Eb(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 wb(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>gb).length}})}function kb(e,t){return e.symbols>=hb||e.documents>=yb?t?{candidateScanLimit:void 0,releaseCachesBetweenPhases:!0,warnings:["Large index detected; running unbounded health analyses because --full was supplied."]}:{candidateScanLimit:cc,releaseCachesBetweenPhases:!0,warnings:[`Large index detected; candidate-style health checks scanned their highest-priority ${cc} symbols. Run "scip-query health --full" for unbounded candidate counts.`]}:{candidateScanLimit:void 0,releaseCachesBetweenPhases:!0,warnings:[]}}function Pb(e,t){t.releaseCachesBetweenPhases&&(nc(e),Vi(e),_o())}function Ae(e,t,n,r){Tb(n);try{return r()}finally{Pb(e,t)}}function uc(e,t,n,r){return Ae(e,t,n,()=>No(r()))}function Tb(e){process.env.SCIP_QUERY_HEALTH_TRACE==="1"&&console.error(`[health] ${e}`)}function Mb(e,t){return t.filter(n=>!gt(e,n.relativePath)&&!cn(e,n.symbol,n.relativePath)&&n.kind==="dead-code")}function Ob(e,t){return t.filter(n=>!gt(e,n.relativePath)&&!cn(e,n.symbol,n.relativePath))}function No(e){return{count:e.length,loc:e.reduce((t,n)=>t+n.loc,0)}}function Lo(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)),l=[];for(let b of s)a.has(b)&&l.push(b);let c=[];for(let b of s)a.has(b)||c.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?l.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.":l.length===0?p="These functions do not share any callees. They are not a callee-based consolidation candidate.":c.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.":c.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.":c.length<=2&&u.length<=2?p=`Create a shared function with the ${l.length} common callees. Pass the ${c.length+u.length} divergent callees as parameters or strategy callbacks.`:p=`Extract the ${l.length} shared callees into a common helper. Each function calls the helper plus its own unique logic (${c.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:l.map(h),uniqueToA:c.map(h),uniqueToB:u.map(h),consolidationStrategy:p}}import{readFileSync as mc}from"fs";import{extname as Fb,join as dc}from"path";function Eo(e,t,n={}){let{context:r=0}=n,i=Ab(t);if(i)return jb(e,i.filePath,i.startLine,i.endLine,r);let o=w(e,t);return o?$b(e,o,r):null}function Ab(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 $b(e,t,n){let r=e.get("SELECT language FROM documents WHERE relative_path = ?",t.relativePath),i=dc(e.config.projectRoot,t.relativePath),o;try{o=mc(i,"utf-8")}catch{return null}let s=o.split(`
588
- `),a=Math.max(0,t.startLine-n),l=Math.min(s.length-1,t.endLine+n),c=s.slice(a,l+1).join(`
589
- `);return{symbol:t.symbol,shortName:h(t.symbol),relativePath:t.relativePath,startLine:a,endLine:l,language:r?.language??pc(t.relativePath),source:c}}function jb(e,t,n,r,i){let o=ie(e,t);if(!o)return null;let s=e.get("SELECT relative_path, language FROM documents WHERE relative_path = ?",o);if(!s)return null;let a=dc(e.config.projectRoot,s.relative_path),l;try{l=mc(a,"utf-8")}catch{return null}let c=l.split(`
590
- `),u=Math.max(0,n-1-i),m=Math.min(c.length-1,r-1+i),d=c.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??pc(s.relative_path),source:d}}function pc(e){switch(Fb(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 Bb}from"fs";import{join as Hb}from"path";function wo(e,t,n={}){let r=w(e,t);if(!r)return null;let i=new v(e),o=Jb(qb(e,r.relativePath,r.startLine,r.endLine),Wb(e,r.relativePath)),s=r.endLine-r.startLine+1,l=i.calleeMap([r],{additive:!0,semantic:n.semantic}).get(r.symbolId)??[],c=new Set(l.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:c.size,fanIn:Vb(e,r.symbolId),fanOut:Ub(l,r.relativePath)}}function Wb(e,t){return e.get("SELECT language FROM documents WHERE relative_path = ?",t)?.language??"unknown"}function qb(e,t,n,r){try{return Bb(Hb(e.config.projectRoot,t),"utf-8").split(`
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(`
592
592
  `).slice(n,r+1).join(`
593
- `)}catch{return""}}function Vb(e,t){return e.get(`SELECT COUNT(DISTINCT c.document_id) AS c
593
+ `)}catch{return""}}function iS(e,t){return e.get(`SELECT COUNT(DISTINCT c.document_id) AS c
594
594
  FROM mentions m
595
595
  JOIN chunks c ON m.chunk_id = c.id
596
- WHERE m.symbol_id = ? AND m.role != 1`,t)?.c??0}function Ub(e,t){return new Set(e.filter(n=>n.file!==t).map(n=>n.symbol)).size}function Jb(e,t){let n=Ot(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 ko(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(l=>({file:l.file,line:l.line,enclosingSymbol:l.enclosingSymbol??"(top-level)",enclosingShort:l.enclosingSymbol?h(l.enclosingSymbol):"(top-level)"})),{producers:s,consumers:a}=zb(e,r,o,{semantic:n.semantic!==!1});return{symbol:r.symbol,shortName:h(r.symbol),relativePath:r.relativePath,definitionSites:i.filter(l=>!e.isIgnored(l.file)),usageSites:o,producers:s.filter(l=>!e.isIgnored(l.file)).map(l=>({symbol:l.symbol,shortName:h(l.symbol),file:l.file})),consumers:a.filter(l=>!e.isIgnored(l.file)).map(l=>({symbol:l.symbol,shortName:l.symbol===l.file?"(top-level)":h(l.symbol),file:l.file}))}}function zb(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 Po(e,t,n={}){let{direction:r="backward",maxDepth:i=3}=n,o=w(e,t);return o?r==="backward"?Gb(e,o,i,{semantic:n.semantic!==!1}):Kb(e,o,{semantic:n.semantic!==!1}):null}function Gb(e,t,n,r){let i=[],o=new Set([t.symbol]),s=[t];for(let a=1;a<=n&&s.length!==0;a++){let l=[];for(let c of s){let u=me(e,c,{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=Tt(e,m.symbol);d&&!e.isIgnored(d.relativePath)&&l.push(d)}}s=l}return{symbol:t.symbol,shortName:h(t.symbol),direction:"backward",connectedSymbols:i}}function Kb(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 l=Tt(e,a);!l||e.isIgnored(l.relativePath)||r.has(l.symbol)||(r.add(l.symbol),i.push({symbol:l.symbol,shortName:h(l.symbol),file:l.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 To(e,t={}){let{scope:n,limit:r}=t,i=new v(e),o=iS([...Qb(e,n),...Zb(e,i,n)]);return oS(o),r?o.slice(0,r):o}function Qb(e,t){let n=[];for(let r of Yb(e,t)){if(e.isIgnored(r.barrel_path)||e.isIgnored(r.original_path)||Si(e,r.barrel_path))continue;let i=Xb(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 Yb(e,t){let n=t?`AND barrel_d.relative_path LIKE '%${t}%'`:"";return e.all(`SELECT DISTINCT
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
597
597
  barrel_d.id AS barrel_doc_id,
598
598
  barrel_d.relative_path AS barrel_path,
599
599
  gs.id AS symbol_id,
@@ -623,7 +623,7 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
623
623
  -- Only function-level symbols (ending with ().), not module-level
624
624
  AND gs.symbol LIKE '%().'
625
625
  ${n}
626
- ORDER BY barrel_d.relative_path, gs.symbol`)}function Xb(e,t){return e.get(`SELECT
626
+ ORDER BY barrel_d.relative_path, gs.symbol`)}function dS(e,t){return e.get(`SELECT
627
627
  SUM(CASE WHEN uses_barrel = 1 THEN 1 ELSE 0 END) AS barrel_consumers,
628
628
  SUM(CASE WHEN uses_barrel = 0 THEN 1 ELSE 0 END) AS direct_consumers
629
629
  FROM (
@@ -652,7 +652,7 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
652
652
  AND consumer_d.id != ?
653
653
  ${e.pathExclusionsFor("consumer_d")}
654
654
  GROUP BY consumer_d.id
655
- )`,t.barrel_doc_id,t.symbol_id,t.barrel_doc_id,t.original_doc_id)}function Zb(e,t,n){let r=[];for(let i of eS(e,n))fc(e,i,i)>0||r.push(...tS(e,t,i));return r}function eS(e,t){return k(e,{scope:t,includeIgnored:!1}).filter(n=>yi(e,n).length>0)}function tS(e,t,n){return yi(e,n).filter(r=>r.sourcePath&&!e.isIgnored(r.sourcePath)).flatMap(r=>nS(e,t,n,r.sourcePath))}function nS(e,t,n,r){let i=rS(t,r);return i?[{barrelFile:n,symbol:i.symbol,shortName:h(i.symbol),originalFile:r,barrelConsumers:0,directConsumers:fc(e,r,n)}]:[]}function fc(e,t,n){let r=new Set;for(let i of k(e,{includeIgnored:!1}))if(i!==n)for(let o of Y(e,i))o.sourcePath===t&&r.add(i);return r.size}function rS(e,t){let n=e.definitionsForFile(t);return n.find(r=>ee(r.symbol)==="method")??n[0]??null}function iS(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 oS(e){e.sort((t,n)=>n.directConsumers-t.directConsumers||t.barrelFile.localeCompare(n.barrelFile)||t.shortName.localeCompare(n.shortName))}function Mo(e,t={}){let{scope:n,minLoc:r=1,limit:i,scanLimit:o}=t,s=t.semantic!==!1,a=aS(e,sS(e,{scope:n,minLoc:r,scanLimit:o}),{semantic:s}),l=cS(a);return i?l.slice(0,i):l}function sS(e,t){let n=Le(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)),ne(n,t.scanLimit)}function aS(e,t,n){let r=new Map;for(let i of t){let o=uS(e,i,n);if(!o)continue;let s=r.get(o)??[];s.push(lS(i)),r.set(o,s)}return r}function lS(e){return{symbol:e.symbol,shortName:h(e.symbol),file:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:j(e)}}function cS(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,l)=>a+l.loc,0);return r.functions.reduce((a,l)=>a+l.loc,0)-o}),t}function uS(e,t,n){if(n.semantic){let o=ll(e,t);if(o)return o}let r=mS(t.documentation),i=r?fS(r):null;return i||gS(dS(e,t.relativePath,t.startLine,t.endLine,t.leaf),t.leaf)}function mS(e){return at(lt(e))}function dS(e,t,n,r,i){let o=T(e,t);if(!o)return null;let s=o.split(/\r?\n/),a=yS(s,n,r,i);for(let l of a){let c=Math.min(s.length-1,Math.max(l,l+4)),u="";for(let m=l;m<=c;m+=1){let d=s[m]?.trim();if(d&&(u=u?`${u} ${d}`:d,pS(u)))return u}if(u&&u.includes("("))return u}return null}function pS(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 fS(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 gS(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${gc(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=hS(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 l=`${i?`${i} `:""}${a}`.replace(/\s+/g,"").toLowerCase();return l.length>=3?l:null}function hS(e){let t=0,n=0,r=0,i=0,o=null,s=!1;for(let a=0;a<e.length;a+=1){let l=e[a];if(o){if(s){s=!1;continue}if(l==="\\"){s=!0;continue}l===o&&(o=null);continue}if(l==='"'||l==="'"||l==="`"){o=l;continue}if(l==="(")t+=1;else if(l===")")t=Math.max(0,t-1);else if(l==="[")r+=1;else if(l==="]")r=Math.max(0,r-1);else if(l==="<")i+=1;else if(l===">")i=Math.max(0,i-1);else if(l==="{"){if(t===0&&r===0&&i===0)return e.slice(0,a);n+=1}else if(l==="}")n=Math.max(0,n-1);else if(l==="="&&e[a+1]===">"&&t===0&&n===0&&r===0&&i===0)return e.slice(0,a)}return e}function yS(e,t,n,r){let i=gc(r),o=new RegExp(`\\b${i}\\b\\s*\\(`,"i"),s=new RegExp(`\\bdef\\s+${i}\\b`,"i"),a=[],l=new Set,c=Math.max(0,Math.min(t,e.length-1)),u=Math.max(c,Math.min(e.length-1,Math.max(n,t+4)));for(let m=c;m<=u;m+=1){let d=e[m]??"";(o.test(d)||s.test(d))&&!l.has(m)&&(l.add(m),a.push(m))}for(let m=0;m<e.length;m+=1){let d=e[m]??"";(o.test(d)||s.test(d))&&!l.has(m)&&(l.add(m),a.push(m))}return a}function gc(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}import{existsSync as Rc}from"fs";import{join as MS}from"path";import bS from"better-sqlite3";var SS=["node_modules",".git","dist","build","out","coverage","target",".next",".nuxt",".cache",".turbo",".scipquery-cache","__pycache__",".venv","venv"],_r=class{db;config;pathFilter;constructor(t,n){this.config=t,this.pathFilter=n??null,this.db=new bS(t.dbPath,{readonly:!0}),this.db.pragma("busy_timeout = 5000")}isIgnored(t){return this.pathFilter?.isIgnored(t)??!1}get localSymbolPredicate(){return`(
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`(
656
656
  EXISTS (
657
657
  SELECT 1
658
658
  FROM defn_enclosing_ranges local_der
@@ -669,8 +669,8 @@ ${d}`,c+=1+d.length,u+=sn(d),r+=d.length+1}let m=vp(l);m&&n.push({...m,start:a,e
669
669
  AND local_m.role = 1
670
670
  ${this.pathExclusionsFor("local_d").trimStart()}
671
671
  )
672
- )`}get pathExclusions(){return this.pathExclusionsFor("d")}get symbolNoise(){return this.symbolNoiseFor("gs")}pathExclusionsFor(...t){return t.flatMap(n=>SS.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 xS from"ignore";import{readFileSync as CS,existsSync as Oo}from"fs";import{dirname as Fo,isAbsolute as hc,join as Ao,relative as IS,resolve as RS}from"path";function Jt(e){let t=xS(),n=!1,r=_S(e);for(let i of r)try{let o=CS(i,"utf-8");t.add(o),n=!0}catch{}return n||t.add(vS),{isIgnored:i=>yc(t,e,i),filter:i=>i.filter(o=>!yc(t,e,o))}}function _S(e){let t=[],n=Ao(e,".gitignore");Oo(n)&&t.push(n);let r=Fo(e),i=0;for(;r!==Fo(r)&&i<5;){let o=Ao(r,".gitignore");if(Oo(o)&&t.push(o),Oo(Ao(r,".git")))break;r=Fo(r),i++}return t}var vS=`
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=`
674
674
  # Dependencies
675
675
  node_modules/
676
676
  vendor/
@@ -727,26 +727,25 @@ Thumbs.db
727
727
 
728
728
  # Type definitions (often noise in queries)
729
729
  *.d.ts
730
- `;function yc(e,t,n){let r=DS(t,n);if(!r)return!1;try{return e.ignores(r)}catch{return!1}}function DS(e,t){if(!t||t===".")return null;if(!hc(t)&&!t.startsWith(".."))return t.replaceAll("\\","/");let n=hc(t)?t:RS(e,t),r=IS(e,n).replaceAll("\\","/");return!r||r==="."||r.startsWith("..")?null:r}import{readFileSync as NS,writeFileSync as LS,existsSync as Sc,mkdirSync as ES}from"fs";import{join as St,resolve as bc}from"path";import{createHash as wS}from"crypto";import{homedir as kS}from"os";var xc=".scipquery.json",PS={enabled:!1,debounceMs:3e4,cooldownMs:6e4,ignore:[]};function zt(e){let t=St(e,xc);if(!Sc(t))return{};try{let n=NS(t,"utf-8");return JSON.parse(n)}catch{return{}}}function Cc(e){return{...PS,...e.watch}}function TS(e,t){let n=process.env.SCIP_QUERY_CACHE_DIR;if(n)return $o(n);if(t?.dbPath)return $o(bc(e,t.dbPath));let i=process.env.XDG_CACHE_HOME||St(kS(),".cache"),o=wS("sha256").update(bc(e)).digest("hex").slice(0,12),s=St(i,"scip-query","projects",o);return $o(s)}function Gt(e,t){let n=TS(e,t);return{cacheDir:n,dbPath:St(n,"index.db"),indexPath:St(n,"index.scip"),metaPath:St(n,"meta.json")}}function Ic(e,t){let n=St(e,xc);return Sc(n)||LS(n,JSON.stringify({languages:t,watch:{enabled:!1,debounceMs:3e4,cooldownMs:6e4}},null,2)+`
731
- `),n}function $o(e){return ES(e,{recursive:!0}),e}function nt(){return process.env.SCIP_QUERY_PROJECT_ROOT??process.cwd()}function vr(e=nt()){let t=zt(e),n=Gt(e,t),r=process.env.SCIP_QUERY_INDEX_DB??(Rc(n.dbPath)?n.dbPath:MS(e,"index.db"));return{projectRoot:e,config:t,paths:n,dbPath:r}}function jo(e){return vr(e).dbPath}function OS(){let{projectRoot:e,config:t,paths:n,dbPath:r}=vr();Rc(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=Jt(e);return new _r(i,o)}function rt(e){let t=OS();try{return e(t)}finally{t.close()}}function Bo(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 _c(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 FS(e)}}function FS(e){throw new Error(`Unhandled watcher status: ${JSON.stringify(e)}`)}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 $S=AS(import.meta.url),{version:Lc}=WS(),Dr="__health-phase",Nr="__diff-impact-batch",jS=10,BS=75e3,HS=5e3,vc=2500;function WS(){for(let e of["../package.json","../../package.json"])try{return $S(e)}catch{}return{version:"0.0.0"}}function On(e){console.log(`Heuristic ${e}: review before acting; these are candidates, not exact compiler facts.
732
- `)}function Ec(e,t,n){let r=Pe(e);return r.symbols>=BS||r.documents>=HS?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 ${vc} candidates with semantic enrichment disabled. Run "scip-query ${t} --full" for the unbounded semantic pass.`),{scanLimit:vc,semantic:!1}):{semantic:!0}}function wc(e){let t=Mn.map(n=>qS(n,e));return Do(t)}function qS(e,t){let n=process.argv[1]??Nc(import.meta.url),r=[...process.execArgv,n,Dr,e];t.scope&&r.push("--scope",t.scope),t.full&&r.push("--full");let i=Dc(process.execPath,r,{cwd:process.cwd(),env:process.env,encoding:"utf8",maxBuffer:10*1024*1024});if(i.status!==0){let o=i.stderr.trim();throw new Error(`Health phase "${e}" failed${o?`:
733
- ${o}`:""}`)}return JSON.parse(i.stdout)}function kc(e,t){if(t){console.log(JSON.stringify(e,null,2));return}if(console.log(`
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
734
  Codebase Health Score: ${e.score}/100
735
735
  `),console.log(` ${e.overview.documents} files | ${e.overview.symbols} symbols | ${Kt(e.overview.indexSizeBytes)}
736
736
  `),e.warnings&&e.warnings.length>0){console.log(" Warnings:");for(let r of e.warnings)console.log(` ${r}`);console.log("")}console.log(" Findings:");let n=e.findings;if(n.deadSymbols>0&&console.log(` Dead code: ${n.deadSymbols} symbols (${n.deadLoc} LOC)`),n.isolatedSymbols>0&&console.log(` Isolated symbols: ${n.isolatedSymbols} (${n.isolatedLoc} LOC)`),n.cycles>0&&console.log(` Circular deps: ${n.cycles}`),n.similarPairs>0&&console.log(` Similar pairs: ${n.similarPairs}`),n.extractionCandidates>0&&console.log(` Extract candidates: ${n.extractionCandidates}`),n.wrappers>0&&console.log(` Wrapper functions: ${n.wrappers}`),n.passthroughs>0&&console.log(` Passthroughs: ${n.passthroughs}`),n.staleTypes>0&&console.log(` Stale abstractions: ${n.staleTypes}`),n.driftedFiles>0&&console.log(` Pattern drift: ${n.driftedFiles} files`),n.complexityHotspotCount>0&&console.log(` Complexity hotspots: ${n.complexityHotspotCount}`),e.actions.length>0){console.log(`
737
737
  Prioritized Actions (highest impact + lowest effort first):`);for(let r=0;r<e.actions.length;r++){let i=e.actions[r],o=i.locRecoverable>0?` (~${i.locRecoverable} LOC recoverable)`:"";console.log(` ${r+1}. [${i.effort} effort / ${i.impact} impact] ${i.description}${o}`)}}if(e.topComplexity.length>0){console.log(`
738
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 Pc(e){return rt(t=>{let n=Vt(t,{base:e.base});if(n.note)return br(t,{base:e.base});if(n.changedFiles.length===0)return br(t,{base:e.base});let r=[];for(let i of US(n.changedFiles,jS))r.push(VS(i,e));return xr(n.changedFiles,r)})}function VS(e,t){let n=process.argv[1]??Nc(import.meta.url),r=[...process.execArgv,n,Nr];t.base&&r.push("--base",t.base);let i=Dc(process.execPath,r,{cwd:process.cwd(),env:{...process.env,SCIP_QUERY_DIFF_IMPACT_FILES:JSON.stringify(e)},encoding:"utf8",maxBuffer:10*1024*1024});if(i.status!==0){let o=i.stderr.trim();throw new Error(`Diff-impact batch failed${o?`:
740
- ${o}`:""}`)}return JSON.parse(i.stdout)}function Tc(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(`
741
- Affected consumer files:`),N.list(e.affectedConsumers,t=>` ${t.file} (${t.consumedSymbols} symbol(s))`))}function US(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}var Mc=Bo,D=(e=>parseInt(e,10)),Lr=(e=>{let t=parseInt(e,10);if(!Number.isFinite(t)||t<1)throw new Error(`Expected a positive integer, got ${e}`);return t}),Er=parseFloat,Ho=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 Uo,mkdirSync as YS,symlinkSync as XS,readlinkSync as ZS,unlinkSync as ex}from"fs";import{join as wr,dirname as $c,resolve as Jo}from"path";import{homedir as jc,platform as tx}from"os";import{fileURLToPath as nx}from"url";import{execFileSync as Oc}from"child_process";import{platform as Wo,arch as KS}from"os";import{execFileSync as JS}from"child_process";import{platform as zS}from"os";var GS=zS()==="win32";function xe(e){let t=GS?"where":"which";try{return JS(t,[e],{stdio:"pipe"}),!0}catch{return!1}}var Fc="v0.7.0";function qo(){return xe("scip")}function QS(){let e=Wo(),t=KS(),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/${Fc}/${o}`,filename:o}}function Vo(){let e=QS();console.log("\nThe `scip` CLI is required but not found on PATH.\n"),Wo()==="darwin"?(console.log("Install via Homebrew:"),console.log(` brew install sourcegraph/scip/scip
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
742
741
  `),console.log("Or download manually:")):console.log("Download from:"),console.log(e?` ${e.url}
743
- `:` https://github.com/sourcegraph/scip/releases/tag/${Fc}
744
- `),console.log("After installing, ensure `scip` is on your PATH and run `scip-query reindex`.")}function Ac(e){if(Wo()==="darwin"&&xe("brew")){e("Installing scip CLI via Homebrew...");try{if(Oc("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(Oc("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 rx=tx()==="win32",zo=["concrete-plan","scip-explore","scip-debloat","scip-verify","scip-language-playbook"];function Bc(e={}){let t=e.quiet?()=>{}:console.log,n=nx(import.meta.url),r=Jo($c(n),"..","skills"),i=[wr(jc(),".claude","skills"),wr(jc(),".codex","skills")],o={installed:[],skipped:[],alreadyLinked:[]};for(let s of i){let a=$c(s);if(!Uo(a))continue;YS(s,{recursive:!0});let l=s.includes(".codex")?"Codex":"Claude";for(let c of zo){let u=wr(r,c),m=wr(s,c);if(!Uo(u)){o.skipped.push(`${l}/${c}`);continue}if(Uo(m)){try{let d=ZS(m);if(Jo(d)===Jo(u)){o.alreadyLinked.push(`${l}/${c}`),t(` ok: ${c} \u2192 ${l} (already linked)`);continue}}catch{o.skipped.push(`${l}/${c}`),t(` skip: ${c} \u2192 ${l} (exists, not a symlink)`);continue}ex(m)}XS(u,m,rx?"junction":"dir"),o.installed.push(`${l}/${c}`),t(` done: ${c} \u2192 ${l}`)}}return o}import{existsSync as Hu}from"fs";import{execFileSync as gI}from"child_process";import{closeSync as hI,existsSync as us,mkdirSync as ku,mkdtempSync as yI,openSync as bI,readFileSync as SI,renameSync as ms,rmSync as ds,writeFileSync as Pu}from"fs";import{basename as $r,dirname as It,extname as xI,join as je}from"path";import ix from"better-sqlite3";import{execFileSync as ox}from"child_process";import{existsSync as sx,readdirSync as ax,readFileSync as lx}from"fs";import{extname as kr,join as Hc}from"path";function it(e){let t=new Set((e.extensions??ga).map(o=>o.toLowerCase()));if(t.size===0)return{scanned:0,inserted:0,existing:0};if(!sx(e.dbPath))throw new Error(`SCIP SQLite database not found at ${e.dbPath}`);let n=Jt(e.projectRoot),r=cx(e.projectRoot,t).filter(o=>!n.isIgnored(o)),i=new ix(e.dbPath);try{let o=mx(i,r),s=i.prepare(`INSERT OR IGNORE INTO documents (language, relative_path, position_encoding, text)
745
- VALUES (?, ?, NULL, ?)`),l=i.transaction(u=>{let m=0;for(let d of u){if(o.has(d))continue;let p=lx(Hc(e.projectRoot,d),"utf-8"),y=s.run(dx(d),d,p);m+=Number(y.changes)}return m})(r),c={scanned:r.length,inserted:l,existing:r.length-l};return e.onStatus?.(`Augmented SQLite documents with ${l} auxiliary source file${l===1?"":"s"} (${c.existing} already present).`),c}finally{i.close()}}function cx(e,t){let n=ux(e,t);if(n)return n;let r=[],i=o=>{let s=o?Hc(e,o):e,a;try{a=ax(s,{withFileTypes:!0})}catch{return}for(let l of a){if(bi.has(l.name))continue;let c=o?`${o}/${l.name}`:l.name;if(l.isDirectory()){i(c);continue}t.has(kr(l.name).toLowerCase())&&r.push(c)}};return i(""),r.sort()}function ux(e,t){try{return ox("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}).split(`
746
- `).filter(r=>r&&t.has(kr(r).toLowerCase())).sort()}catch{return null}}function mx(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 kr(e).toLowerCase()===".vue"?"vue":kr(e).replace(/^\./,"").toLowerCase()||"source"}import{execFileSync as px}from"child_process";import{existsSync as fx,readdirSync as qc}from"fs";import{extname as Vc,join as Uc}from"path";var gx=new Set([".git",".hg",".svn",".idea",".vscode","node_modules","vendor","dist","build","target","bin","obj",".dart_tool",".gradle",".next",".venv","venv","__pycache__"]),hx=[{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=yx(e),r=Cx(e);for(let i of hx){if(bx(e,i.files)){t.push(i.language);continue}if(Sx(n,i.globs)){t.push(i.language);continue}Rx(r,i.extensions)&&t.push(i.language)}return t.includes("typescript")&&Wc(t,"javascript"),t.includes("cpp")&&!r.has(".c")&&Wc(t,"c"),t}function yx(e){try{return qc(e)}catch{return[]}}function bx(e,t){return t?.length?t.some(n=>fx(Uc(e,n))):!1}function Sx(e,t){return t?.length?e.some(n=>t.some(r=>xx(n,r))):!1}function xx(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 Cx(e){let t=Ix(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=qc(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=Uc(i,s.name);if(s.isDirectory()){gx.has(s.name)||r.push(a);continue}let l=Vc(s.name).toLowerCase();l&&n.add(l)}}return n}function Ix(e){try{let t=px("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(`
747
- `)){if(!r)continue;let i=Vc(r).toLowerCase();i&&n.add(i)}return n}catch{return null}}function Rx(e,t){return t?.length?t.some(n=>e.has(n)):!1}function Wc(e,t){let n=e.indexOf(t);n!==-1&&e.splice(n,1)}import{existsSync as Jc,readdirSync as _x}from"fs";import{join as Go}from"path";var vx={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",zc(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",zc(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=Go(e,"vendor","bin","scip-php"),r=Go(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",Jc(r)?r:Jc(n)?n:t]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function Pr(e){return vx[e]}function zc(e,t){let n;try{n=_x(e)}catch{return null}for(let r of n)if(t.some(i=>r.endsWith(i)))return Go(e,r);return null}import{readFileSync as Dx,writeFileSync as Nx}from"fs";import{create as Ko}from"@bufbuild/protobuf";import{deserializeSCIP as Lx,serializeSCIP as Ex,DocumentSchema as wx,IndexSchema as kx,SymbolInformationSchema as Px}from"@c4312/scip";function Tx(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let t=Mx(e),n=Ox(e.flatMap(i=>i.documents??[])),r=Kc(e.flatMap(i=>i.externalSymbols??[]));return Ko(kx,{metadata:t,documents:n,externalSymbols:r})}function Gc(e,t){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let n=e.map(i=>Lx(Dx(i))),r=Tx(n);return Nx(t,Buffer.from(Ex(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function Mx(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 Ox(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,Ko(wx,{language:r.language||n.language,relativePath:r.relativePath||n.relativePath,occurrences:[...r.occurrences,...n.occurrences],symbols:Kc([...r.symbols,...n.symbols]),text:Ax(r.text,n.text),positionEncoding:r.positionEncoding||n.positionEncoding}))}return[...t.values()]}function Kc(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,Ko(Px,{symbol:r.symbol,documentation:$x([...r.documentation,...n.documentation]),relationships:Fx([...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 Fx(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 Ax(e,t){return e?t?e.length>=t.length?e:t:e:t}function $x(e){return[...new Set(e)]}import{execFileSync as jx}from"child_process";import{createHash as Bx}from"crypto";import{readdirSync as Hx,readFileSync as Wx}from"fs";import{join as Qc}from"path";function qx(e){return(Vx(e)??Ux(e)).filter(t=>t&&!Yc(t)).sort()}function Tr(e){return qx(e).map(t=>{let n=Qc(e,t);try{let r=Wx(n);return{path:t,size:r.byteLength,hash:Bx("sha256").update(r).digest("hex")}}catch{return{path:t,size:-1,hash:"unreadable"}}})}function Vx(e){try{return jx("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:50*1024*1024,stdio:["ignore","pipe","ignore"]}).split(`
748
- `).filter(Boolean)}catch{return null}}function Ux(e){let t=[],n=[""];for(;n.length>0;){let r=n.pop(),i=r?Qc(e,r):e,o;try{o=Hx(i,{withFileTypes:!0})}catch{continue}for(let s of o){let a=r?`${r}/${s.name}`:s.name;if(s.isDirectory()){Yc(a)||n.push(a);continue}t.push(a)}}return t}function Yc(e){return e.split("/").some(n=>Jx.has(n))||e.endsWith(".db")||e.endsWith(".db-wal")||e.endsWith(".db-shm")||e.endsWith(".scip")}var Jx=new Set([".git","node_modules",".scipquery-cache",".stryker-tmp","dist","build","coverage",".next",".nuxt","target"]);import{readFileSync as zx,writeFileSync as Gx}from"fs";import{create as Xc}from"@bufbuild/protobuf";import{deserializeSCIP as Kx,DocumentSchema as Qx,IndexSchema as Yx,serializeSCIP as Xx,SymbolRole as Zx}from"@c4312/scip";function Zc(e){let t;try{t=Kx(zx(e))}catch{return{removedDefinitionOccurrences:0,touchedDocuments:0}}let n=eC(t);return n.removedDefinitionOccurrences>0&&Gx(e,Buffer.from(Xx(n.index))),{removedDefinitionOccurrences:n.removedDefinitionOccurrences,touchedDocuments:n.touchedDocuments}}function eC(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&Zx.Definition)===0||t.has(a.symbol)?!0:(n+=1,!1));if(s.length===o.occurrences.length){i.push(o);continue}r+=1,i.push(Xc(Qx,{language:o.language,relativePath:o.relativePath,occurrences:s,symbols:o.symbols,text:o.text,positionEncoding:o.positionEncoding}))}return{index:n===0?e:Xc(Yx,{metadata:e.metadata,documents:i,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:n,touchedDocuments:r}}import{execFile as tC}from"child_process";import{existsSync as Mr,renameSync as Yo,rmSync as Xo}from"fs";import{cpus as nC}from"os";import{join as eu}from"path";function rC(e,t,n){if(!e.defaultOutputPath)return;let r=eu(t,e.defaultOutputPath);n!==r&&Mr(r)&&Yo(r,n)}function iC(e,t,n){if(!e.defaultOutputPath)return null;let r=eu(t,e.defaultOutputPath);if(r===n)return null;let i=`${n}.default-output-backup`;return Xo(i,{force:!0}),Mr(r)?(Yo(r,i),{defaultOutputPath:r,backupPath:i}):{defaultOutputPath:r,backupPath:null}}function oC(e){e&&(Xo(e.defaultOutputPath,{force:!0}),e.backupPath&&Mr(e.backupPath)&&Yo(e.backupPath,e.defaultOutputPath))}function sC(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,nC().length-1));return Math.max(1,Math.min(e,Math.floor(r)))}async function tu(e,t,n,r){let i=e.filter(c=>c.config.defaultOutputPath),o=e.filter(c=>!c.config.defaultOutputPath),s=[],a=sC(o.length,r),l=await lC(o,a,c=>Qo(c,t,n));if(a>1){let c=new Map;for(let u of l.filter(m=>m.skipped)){let m=o.find(d=>d.language===u.language);m&&(n(`Retrying ${m.language} indexer serially after parallel failure...`),c.set(m.language,await Qo(m,t,n)))}s.push(...l.map(u=>c.get(u.language)??u))}else s.push(...l);for(let c of i)s.push(await Qo(c,t,n));return s.sort((c,u)=>e.findIndex(m=>m.language===c.language)-e.findIndex(m=>m.language===u.language))}async function Qo(e,t,n){n(`Indexing ${e.language} with ${e.resolvedBinary}...`),Xo(e.scipPath,{force:!0});let r=iC(e.config,t,e.scipPath);try{await aC(e.binary,e.args,{cwd:t,env:e.env,maxBuffer:50*1024*1024}),rC(e.config,t,e.scipPath)}catch(i){let o=i instanceof Error?i.message:String(i),s=`${e.resolvedBinary} indexer failed: ${o.split(`
749
- `)[0]}`;return n(`Skipping ${e.language}: ${s}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:s}}}finally{oC(r)}if(!Mr(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 aC(e,t,n){return new Promise((r,i)=>{tC(e,[...t],n,o=>{o?i(o):r()})})}async function lC(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 es}from"child_process";import{existsSync as Zo,readFileSync as cC}from"fs";import{createRequire as uC}from"module";import{platform as mC}from"os";import{dirname as nu,join as Or}from"path";var dC=uC(import.meta.url);function ts(e){return[e.indexerBinary,...e.binaryAliases??[]]}function Fr(e){let t=ts(e);return t.length===1?t[0]:t.join(" or ")}function Qt(e){for(let t of ts(e))if(xe(t))return t;return fC(e)}function ru(e){return Qt(e)!==null||pC(e)}function pC(e){return iu(e)!==null}function fC(e){let t=iu(e);if(!t)return null;let r=JSON.parse(cC(t,"utf8")).bin;if(!r)return null;if(typeof r=="string")return Or(nu(t),r);for(let i of ts(e)){let o=r[i];if(o)return Or(nu(t),o)}return null}function iu(e){if(!e.bundledNpmPackage)return null;try{return dC.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function ns(e,t){for(let n of e.projectLocalBinaries??[]){let r=Or(t,n);if(Zo(r))return r}return null}function gC(e,t){return ns(e,t)??Qt(e)}function ou(e,t=process.env,n=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||rs(n,t))return t;let r=lu(n,t);return r?{...t,DOTNET_ROOT:r}:t}function su(e,t){let n=Fr(e),r=t?gC(e,t):Qt(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=hC(r);return{language:e.language,binaryLabel:n,installed:!0,runnable:i.runnable,resolvedBinary:r,installUrl:e.installUrl,note:i.note}}function au(e,t){let n=e.installMethods,r=Fr(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{es(i.binary,i.args,{stdio:"inherit",timeout:3e5,env:process.env});let o=Qt(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 hC(e){if(rs(e,process.env))return{runnable:!0};let t=lu(e,process.env);if(t)return{runnable:!0,note:`using .NET 9 runtime from ${t}`};let n=cu(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 lu(e,t){for(let n of cu(t))if(rs(e,{...t,DOTNET_ROOT:n}))return n;return null}function cu(e){let t=[],n=e.DOTNET_ROOT;if(n&&Zo(n)&&t.push(n),mC()==="darwin"&&xe("brew"))try{let r=es("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),i=Or(r,"libexec");Zo(i)&&!t.includes(i)&&t.push(i)}catch{}return t}function rs(e,t){try{return es(e,["--version"],{stdio:"pipe",env:t}),!0}catch{return!1}}import QC from"better-sqlite3";import{existsSync as YC,readFileSync as XC,writeFileSync as ZC}from"fs";import{dirname as eI,join as tI,resolve as nI}from"path";import{readFileSync as yC,rmSync as bC,statSync as SC,mkdtempSync as xC}from"fs";import{cpus as CC,tmpdir as IC}from"os";import{join as is}from"path";import{Worker as RC}from"worker_threads";function uu(e){return e.length>=8&&du(e.length)>1}function mu(e){let t=du(e.vueFiles.length),n=vC(e.vueFiles),r=NC(n,t),i=new URL("./augment-vue-worker.js",import.meta.url),o=xC(is(IC(),"scip-query-vue-workers-")),s=new SharedArrayBuffer(4),a=new Int32Array(s),l=_C(),c=Date.now();try{for(let m=0;m<r.length;m++)new RC(i,{workerData:{projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,tasks:r[m],resultPath:is(o,`${m}.json`),sharedBuffer:s}});for(;Atomics.load(a,0)<r.length;){if(Date.now()-c>l)throw new Error(`Vue reference workers timed out after ${(l/1e3).toFixed(0)}s`);Atomics.wait(a,0,Atomics.load(a,0),100)}let u=r.map((m,d)=>{let p=JSON.parse(yC(is(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{bC(o,{recursive:!0,force:!0})}}function du(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,CC().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 vC(e){let t=DC(),n=[];for(let r of e){let i=pu(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 DC(){return Number.POSITIVE_INFINITY}function NC(e,t){let n=Array.from({length:t},()=>({tasks:[],weight:0})),r=e.map(i=>({task:i,weight:LC(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 LC(e){return Number.isFinite(e.endOffset)?Math.max(1,e.endOffset-e.startOffset):Math.max(1,pu(e.fileName)-e.startOffset)}function pu(e){try{return SC(e).size}catch{return 1}}import{createRequire as EC}from"module";import{existsSync as wC,readFileSync as ss}from"fs";import{dirname as fu,extname as kC,join as gu,relative as PC,resolve as TC}from"path";import{pathToFileURL as MC}from"url";function OC(e){e.transaction(()=>{e.prepare(`
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(`
750
749
  DELETE FROM mentions
751
750
  WHERE chunk_id IN (
752
751
  SELECT c.id
@@ -761,12 +760,12 @@ Affected consumer files:`),N.list(e.affectedConsumers,t=>` ${t.file} (${t.cons
761
760
  FROM documents
762
761
  WHERE language = 'vue' OR relative_path LIKE '%.vue'
763
762
  )
764
- `).run()})()}function hu(e,t){return e.prepare(`
763
+ `).run()})()}function Iu(e,t){return e.prepare(`
765
764
  SELECT relative_path AS relativePath
766
765
  FROM documents
767
766
  WHERE language = 'vue' OR relative_path LIKE '%.vue'
768
767
  ORDER BY relative_path
769
- `).all().map(r=>TC(t,r.relativePath))}function yu(e,t){let{vueCore:n,ts:r,volarTs:i}=FC(e),{parsed:o,vueOptions:s}=AC(n,r,t),a=fu(t),l=n.createVueLanguagePlugin(r,o.options,s,p=>p),c=$C(n,r,l),u=jC(a,o),{languageServiceHost:m}=i.createLanguageServiceHost(r,r.sys,c,p=>p,u),d=r.createLanguageService(m);return{ts:r,language:c,languageService:d,fileNames:o.fileNames,configDir:a}}function FC(e){let t=EC(MC(gu(e,"package.json")).href);return{vueCore:os(t,"@vue/language-core",e),ts:os(t,"typescript",e),volarTs:os(t,"@volar/typescript",e)}}function AC(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,fu(n),void 0,n,void 0,e.getAllExtensions(o).map(s=>({extension:s.slice(1),isMixedContent:!0,scriptKind:t.ScriptKind.Deferred}))),vueOptions:o}}function $C(e,t,n){let r={},i=e.createLanguage([n],new Map,o=>{if(!wC(o))return;let s=ss(o,"utf-8");r.current?.scripts.set(o,t.ScriptSnapshot.fromString(s),n.getLanguageId(o)??UC(o))});return r.current=i,i}function jC(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 bu(e,t,n){let r=BC(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),l=r.get(o);if(!l)return null;let c=l.containingByLine.get(a.line);return c!==void 0?c:HC(l.starts,a.line,2)}}function BC(e){let t=e.prepare(`
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(`
770
769
  SELECT
771
770
  d.relative_path AS relativePath,
772
771
  der.start_line AS startLine,
@@ -775,23 +774,23 @@ Affected consumer files:`),N.list(e.affectedConsumers,t=>` ${t.file} (${t.cons
775
774
  FROM defn_enclosing_ranges der
776
775
  JOIN documents d ON d.id = der.document_id
777
776
  ORDER BY d.relative_path, (der.end_line - der.start_line) DESC
778
- `).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 HC(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 l=Math.abs(a.line-t);l>n||(!o||l<o.distance)&&(o={distance:l,symbolId:a.symbolId})}return o?.symbolId??null}function Su(e,t,n){let r=GC(t),i=e.prepare("SELECT id FROM global_symbols WHERE symbol = ?"),o=e.prepare(`
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(`
779
778
  INSERT OR IGNORE INTO global_symbols (symbol, display_name, kind, documentation)
780
779
  VALUES (?, ?, ?, ?)
781
- `),s=0,a=new Map;return e.transaction(()=>{for(let c of n){let u=Ct(t,c),m=Lu(r.name,r.version,u);o.run(m,"default",7,`Vue component|${u}`);let d=KC(i,r,t,c);d&&(s++,a.set(c,d))}})(),{get(c){return a.get(c)??null},syntheticSymbols:s}}function xu(e,t,n,r,i){return e.transaction(()=>(OC(e),WC(e,t,n,r),qC(e,i)))()}function WC(e,t,n,r){let i=e.prepare("SELECT id FROM documents WHERE relative_path = ?"),o=e.prepare(`
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(`
782
781
  INSERT INTO chunks (document_id, chunk_index, start_line, end_line, occurrences)
783
782
  VALUES (?, ?, ?, ?, X'00')
784
783
  `),s=e.prepare(`
785
784
  INSERT OR IGNORE INTO mentions (chunk_id, symbol_id, role)
786
785
  VALUES (?, ?, 1)
787
- `);for(let a of n){let l=r.get(a);if(!l)continue;let c=Ct(t,a),u=i.get(c);if(!u)continue;let m=o.run(u.id,-1,0,0);s.run(Number(m.lastInsertRowid),l)}}function Cu(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(as(a,e.textSpan.start)!==null)return n.get(e.fileName)}return e.fileName.startsWith(i)?n.get(e.fileName):null}return t(e)}function Iu(e){let t=new Set,n=[];for(let r of e){let i=Ru(r);t.has(i)||(t.add(i),n.push(r))}return n}function Ru(e){return[e.sourceFile,e.sourceLine,e.sourceStartChar,e.sourceEndChar,e.symbolId].join(":")}function qC(e,t){let n=zC(e,[...new Set(t.map(l=>l.sourceFile))]),r=e.prepare(`
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(`
788
787
  INSERT INTO chunks (document_id, chunk_index, start_line, end_line, occurrences)
789
788
  VALUES (?, ?, ?, ?, X'00')
790
789
  `),i=e.prepare(`
791
790
  INSERT OR IGNORE INTO mentions (chunk_id, symbol_id, role)
792
791
  VALUES (?, ?, 0)
793
- `),o=new Set,s=0,a=0;for(let l of t){let c=Ru(l);if(o.has(c))continue;o.add(c);let u=n.get(l.sourceFile);if(!u)continue;let m=r.run(u,a++,l.sourceLine,l.sourceLine),d=i.run(Number(m.lastInsertRowid),l.symbolId);s+=Number(d.changes)}return s}function*_u(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 vu(e,t){for(let[n]of e.toGeneratedLocation(t,r=>!!r.navigation))return n;return null}function as(e,t){let n=e;for(let[r]of n.toSourceLocation(t,i=>!!i.navigation))return r;return null}function VC(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 Du(e,t){return Ct(e,t).startsWith("node_modules/")}function Ct(e,t){return PC(e,t).replaceAll("\\","/")}function UC(e){switch(kC(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 Nu(){let e=new Map;return{get(t){if(e.has(t))return e.get(t)??null;try{let n=ss(t,"utf-8"),r={text:n,lineStarts:JC(n)};return e.set(t,r),r}catch{return e.set(t,null),null}},positionAt:VC}}function JC(e){let t=[0];for(let n=0;n<e.length;n++)e.charCodeAt(n)===10&&t.push(n+1);return t}function zC(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 GC(e){try{let t=JSON.parse(ss(gu(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 KC(e,t,n,r){let i=Ct(n,r),o=Lu(t.name,t.version,i);return e.get(o)?.id??null}function Lu(e,t,n){let r=n.split("/").map(i=>`\`${i.replaceAll("`","")}\``).join("/");return`scip-vue npm ${e} ${t} ${r}/default.`}function ls(e){it({projectRoot:e.projectRoot,dbPath:e.dbPath});let t=nI(e.projectRoot,e.tsconfig);if(!YC(t))throw new Error(`Vue tsconfig not found at ${t}`);let n=new QC(e.dbPath);try{let r=hu(n,e.projectRoot),i=tI(eI(e.dbPath),"augment-vue-meta.json"),o=Eu(n,e.projectRoot,e.tsconfig),s=rI(i,o,e.onStatus);if(s)return s;let a=iI({db:n,projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,configPath:t,vueFiles:r,onStatus:e.onStatus});return aI(i,Eu(n,e.projectRoot,e.tsconfig),a),a}finally{n.close()}}function rI(e,t,n){let r=sI(e,t);return r&&n?.(`Vue references unchanged; reused ${r.resolvedReferences} cached resolved references.`),r}function iI(e){let t=Su(e.db,e.projectRoot,e.vueFiles),n=oI(e,t),r=Iu(n.occurrences),i=xu(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 oI(e,t){if(uu(e.vueFiles))return mu({projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,vueFiles:e.vueFiles});let n=Nu(),r=yu(e.projectRoot,e.configPath);return lI({projectRoot:e.projectRoot,vueFiles:r.fileNames.filter(i=>i.endsWith(".vue")),context:r,symbolLookup:bu(e.db,e.projectRoot,n),vueSymbolLookup:t,sourceReader:n})}function sI(e,t){try{let n=JSON.parse(XC(e,"utf-8"));return JSON.stringify(n.fingerprint)===JSON.stringify(t)?n.result:null}catch{return null}}function aI(e,t,n){ZC(e,JSON.stringify({updatedAt:new Date().toISOString(),fingerprint:t,result:n},null,2)+`
794
- `)}function Eu(e,t,n){let r=e.prepare(`
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(`
795
794
  SELECT
796
795
  (SELECT COUNT(*) FROM documents) AS documents,
797
796
  (SELECT COUNT(*) FROM global_symbols) AS symbols,
@@ -800,84 +799,86 @@ Affected consumer files:`),N.list(e.affectedConsumers,t=>` ${t.file} (${t.cons
800
799
  (SELECT COUNT(*) FROM defn_enclosing_ranges) AS ranges,
801
800
  (SELECT MAX(id) FROM chunks) AS maxChunkId,
802
801
  (SELECT MAX(id) FROM global_symbols) AS maxSymbolId
803
- `).get();return{version:2,tsconfig:n,files:Tr(t),db:r}}function lI(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=cI(e,i);t.push(...o.occurrences),n+=o.skippedReferences}return{occurrences:t,skippedReferences:n}}function cI(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=[..._u(i.text)],l={tokens:a.filter(c=>c.start>=t.startOffset&&c.start<t.endOffset),tokenByStart:new Map(a.map(c=>[c.start,c])),tokenTextCounts:dI(a),processedStarts:new Set};return uI({...e,fileName:t.fileName,sourceInfo:i,sourceFile:s,map:o,tokenContext:l})}function uI(e){let t=[],n=0;for(let r of e.tokenContext.tokens){if(e.tokenContext.processedStarts.has(r.start))continue;let i=vu(e.map,r.start);if(i===null)continue;let s=(e.context.languageService.getDefinitionAtPosition(e.fileName,i+1)??[]).find(l=>!Du(e.projectRoot,l.fileName));if(!s){n++;continue}let a=Cu(s,e.symbolLookup,e.vueSymbolLookup,e.context,e.projectRoot);if(a===null){n++;continue}wu(t,e.sourceReader,e.sourceInfo,e.sourceFile,r,a),e.tokenContext.processedStarts.add(r.start),mI(t,e,r,i,a)}return{occurrences:t,skippedReferences:n}}function mI(e,t,n,r,i){if(!((t.tokenContext.tokenTextCounts.get(n.text)??0)<=1))for(let o of pI(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&&(wu(e,t.sourceReader,t.sourceInfo,t.sourceFile,s,i),t.tokenContext.processedStarts.add(o))}}function wu(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 dI(e){let t=new Map;for(let n of e)t.set(n.text,(t.get(n.text)??0)+1);return t}function pI(e,t,n,r,i,o){let s=e.getDocumentHighlights?.(t,n,[t])??[],a=[];for(let l of s)if(l.fileName===t)for(let c of l.highlightSpans){let u=fI(r,c.textSpan.start,o,i.text);u!==null&&a.push(u)}return a}function fI(e,t,n,r){let i=n.get(t);if(i?.text===r)return i.start;let o=as(e,t);if(o===null)return null;let s=n.get(o);return s?.text===r?s.start:null}async function Tu(e){let{projectRoot:t,maxHeapMb:n=8192,onStatus:r=console.log,skipAutoInstall:i=!1}=e,o=CI(e),s=Date.now();ku(It(o.outputScip),{recursive:!0}),ku(It(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 l=AI(t,a,{pnpmWorkspaces:e.pnpmWorkspaces}),c=OI(je(It(o.outputDb),"index.lock")),u=null;try{let m=II({opts:e,paths:o,languages:a,fingerprint:l,start:s,onStatus:r});if(m)return m;NI(i,r);let d=RI(o);return u=d.runDir,await _I({opts:e,languages:a,projectRoot:t,paths:o,tempPaths:d,fingerprint:l,start:s,maxHeapMb:n,skipAutoInstall:i,onStatus:r})}finally{u&&ds(u,{recursive:!0,force:!0}),c()}}function CI(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(It(n),"meta.json")}}function II(e){if(e.opts.skipIfUnchanged===!1||!us(e.paths.outputScip)||!us(e.paths.outputDb)||!$I(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 RI(e){let t=yI(je(It(e.outputDb),"reindex-"));return{runDir:t,tempOutputScip:je(t,$r(e.outputScip)),tempOutputDb:je(t,$r(e.outputDb)),tempMetaPath:je(t,$r(e.metaPath))}}async function _I(e){let t={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},{indexedOutputs:n,skippedLanguages:r}=await vI(e,t);DI(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 vI(e,t){let{preparedRuns:n,skippedLanguages:r}=LI({languages:e.languages,tempOutputScip:e.tempPaths.tempOutputScip,projectRoot:e.projectRoot,env:t,skipAutoInstall:e.skipAutoInstall,pnpmWorkspaces:e.opts.pnpmWorkspaces,onStatus:e.onStatus}),i=await tu(n,e.projectRoot,e.onStatus,e.opts.indexerConcurrency),{indexedOutputs:o}=wI(i,r);return kI(o,r,e.languages,e.opts.allowPartial,e.onStatus),{indexedOutputs:o,skippedLanguages:r}}function DI(e,t,n,r){PI(n,e.tempPaths.tempOutputScip,e.onStatus),TI(e.tempPaths.tempOutputScip,e.tempPaths.tempOutputDb,t,e.onStatus),it({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),jI(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]}),FI({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 NI(e,t){if(!xe("scip")){if(e)throw new Error(`The scip CLI is required but not found on PATH.
804
- Install from: https://github.com/sourcegraph/scip/releases`);if(t("scip CLI not found on PATH. Attempting auto-install..."),!Ac(t))throw new Error(`The scip CLI is required but could not be installed.
805
- Install manually from: https://github.com/sourcegraph/scip/releases`)}}function LI(e){let t=[],n=[],r=e.languages.map((i,o)=>({language:i,scipPath:e.languages.length>1?MI(e.tempOutputScip,i,o):e.tempOutputScip}));for(let{language:i,scipPath:o}of r){let s=EI({...e,language:i,scipPath:o});"skipped"in s?n.push(s.skipped):t.push(s.prepared)}return{preparedRuns:t,skippedLanguages:n}}function EI(e){let t=Pr(e.language),n=Fr(t),r=ns(t,e.projectRoot);if(!r&&!ru(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...`),!au(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??Qt(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:ou(t,e.env,i)}}}function wI(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 kI(e,t,n,r,i){if(e.length===0){let o=t.map(s=>` - ${s.language}: ${s.reason}`).join(`
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(`
806
805
  `);throw new Error(`No language indexers ran successfully. Install at least one indexer for the languages in this project.
807
806
  `+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.
808
807
  `+t.map(o=>` - ${o.language}: ${o.reason}`).join(`
809
- `))}function PI(e,t,n){e.length>1?(n(`Merging ${e.length} language indexes...`),Gc(e.map(r=>r.scipPath),t)):e[0].scipPath!==t&&ms(e[0].scipPath,t)}function TI(e,t,n,r){if(r("Converting to SQLite..."),!us(e))throw new Error(`SCIP index not found at ${e} after indexing`);try{let i=Zc(e);i.removedDefinitionOccurrences>0&&r(`Sanitized ${i.removedDefinitionOccurrences} invalid definition occurrences across ${i.touchedDocuments} documents before SQLite conversion.`),gI("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 MI(e,t,n){let r=xI(e)||".scip",i=$r(e,r);return je(It(e),`${i}.${n+1}.${t}${r}`)}function OI(e){let t;try{t=bI(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 ${It(e)}.`,{cause:n}):n}return Pu(t,JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()})+`
810
- `),()=>{try{hI(t)}finally{ds(e,{force:!0})}}}function FI(e){cs(e.tempOutputScip,e.outputScip),cs(e.tempOutputDb,e.outputDb),cs(e.tempMetaPath,e.metaPath)}function cs(e,t){ds(`${t}.tmp-replace`,{force:!0}),ms(e,`${t}.tmp-replace`),ms(`${t}.tmp-replace`,t)}function AI(e,t,n){return{version:1,languages:[...t].sort(),pnpmWorkspaces:n.pnpmWorkspaces===!0,files:Tr(e)}}function $I(e,t){try{let n=JSON.parse(SI(e,"utf-8"));return n.version===2&&n.status==="complete"&&Ar(n.fingerprint)===Ar(t)&&Ar([...n.indexedLanguages??[]].sort())===Ar(t.languages)}catch{return!1}}function jI(e,t){Pu(e,`${JSON.stringify(t,null,2)}
811
- `)}function Ar(e){return JSON.stringify(e)}import{createRequire as BI}from"module";var HI=BI(import.meta.url);function Mu(e,t=[]){let n=WI(),r=Ei(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 WI(){try{return HI.resolve("ts-morph"),!0}catch{return!1}}function ps(e,t){let n=t.languages??xt(e),r=n.map(o=>{let s=su(Pr(o),e);return{...s,language:o,resolvedBinary:s.resolvedBinary??void 0}}),i=n.includes("typescript")?{language:"typescript",...Mu(e,t.semantic?.typescript?.tsconfigs)}:void 0;return{languages:n,indexers:r,semantic:i}}import{watch as qI}from"fs";import{existsSync as Ou,renameSync as Fu}from"fs";import{join as VI,relative as UI}from"path";import{fork as JI}from"child_process";import zI from"ignore";var jr=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=Cc(t.config),this.indexPaths=Gt(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=Jt(t.projectRoot),this.extraIgnore=zI(),this.watchConfig.ignore.length>0&&this.extraIgnore.add(this.watchConfig.ignore)}start(){this.stopped=!1,this.setStatus({state:"idle"});try{let t=qI(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=UI(this.projectRoot,VI(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=GI(this.indexPaths.indexPath),s=JI(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{Ou(i)&&Fu(i,this.indexPaths.dbPath),Ou(o)&&Fu(o,this.indexPaths.indexPath),t(Date.now()-r)}catch(l){n(new Error(`Atomic swap failed: ${l}`))}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 GI(e){return e.endsWith(".scip")?e.slice(0,-5)+".tmp.scip":e+".tmp.scip"}function X(e){return(...t)=>{let{args:n,opts:r}=KI(t);rt(i=>e({db:i,args:n,opts:r}))}}function Z(e,t){return X(n=>{let r=Ec(n.db,e,z(n.opts,"full"));t({...n,budget:r})})}function Au(e){return X(t=>Xt(t,e,{kind:"list"}))}function $u(e){return X(t=>Xt(t,e,{kind:"table",headers:e.headers,dashWidths:e.dashWidths}))}function ju(e){return X(t=>Xt(t,e,{kind:"grouped",key:e.key}))}function Yt(e){return X(t=>fs(t,e))}function Br(e,t){return Z(e,n=>fs(n,t))}function ot(e,t){return Z(e,n=>Xt(n,t,{kind:"list"}))}function Hr(e,t){return Z(e,n=>Xt(n,t,{kind:"table",headers:t.headers,dashWidths:t.dashWidths}))}function Wr(e,t){return Z(e,n=>Xt(n,t,{kind:"grouped",key:t.key}))}function M(e,t){return String(e[t])}function ke(e,t){let n=e[t];return typeof n=="string"?n:void 0}function O(e,t){let n=e[t];return typeof n=="string"?n:void 0}function Rt(e,t){let n=e[t];return typeof n=="number"?n:void 0}function z(e,t){return!!e[t]}function Bu(e,t){let n=e[t];return Array.isArray(n)&&n.every(r=>typeof r=="string")?n:[]}function I(e,t,n){return Rt(e,t)??n}function Xt(e,t,n){fs(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 fs(e,t){let n=t.query(e),r=t.emptyMessage?.(n,e);if(r){N.empty(r);return}t.heuristicLabel&&On(t.heuristicLabel),t.render(n,e),t.after?.(n,e)}function KI(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 QI=new Set(["typescript","javascript","java","scala","kotlin","rust","python","ruby","go","cpp","c","csharp","vb","dart","php"]);function YI(e){return e.filter(t=>QI.has(t))}async function Wu(e){let t=Be(e),n=nt(),r=zt(n),i=Gt(n,r);try{let o=YI(Bu(t,"language")),s=await Tu({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:Rt(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 qu(){let e=nt(),t=jo(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 Vu(e){let t=Be(e),n=nt(),r=jo(n);try{let i=ls({projectRoot:n,dbPath:r,tsconfig:O(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 Uu(e){let t=Be(e);rt(n=>{let r=JSON.parse(process.env.SCIP_QUERY_DIFF_IMPACT_FILES??"[]"),i=Vt(n,{base:O(t,"base")}),o=Sr(n,r,i.changedFiles);console.log(JSON.stringify(o))})}function Ju(e){let t=Be(e);try{Tc(Pc({base:O(t,"base")}))}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}function zu(e,t){let n=Be(t);rt(r=>{Mn.includes(e)||(console.error(`error: Unknown health phase: ${e}`),process.exit(1));let i=vo(r,e,{scope:O(n,"scope"),full:z(n,"full")});console.log(JSON.stringify(i))})}function Gu(e){let t=Be(e);try{let n=wc({scope:O(t,"scope"),full:z(t,"full"),json:z(t,"json")});kc(n,z(t,"json"))}catch(n){console.error(`error: ${n instanceof Error?n.message:n}`),process.exit(1)}}function Ku(){let e=Bc(),t=e.installed.length+e.alreadyLinked.length;console.log(`
812
- ${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 Qu(){let e=!1;qo()?console.log("scip CLI: installed"):(Vo(),e=!0);let t=nt(),n=zt(t),r=ps(t,n);if(r.languages.length===0){console.log(`
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(`
813
812
  No supported project languages detected in the current directory.`),process.exitCode=e?1:0;return}console.log(`
814
813
  Detected languages: ${r.languages.join(", ")}`),console.log(`
815
814
  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(`
816
- 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 Yu(){let e=nt(),t=xt(e),n=Ic(e,t);console.log(`Config written to ${n}`),console.log(`Detected languages: ${t.join(", ")||"(none)"}`)}function Xu(e){let t=Be(e),n=nt(),r=zt(n),i=Rt(t,"debounce"),o=Rt(t,"cooldown");i&&((r.watch??={}).debounceMs=i),o&&((r.watch??={}).cooldownMs=o);let s=new jr({projectRoot:n,config:r,languages:r.languages,onStatus:a=>{process.stdout.write(`\r\x1B[K${_c(a)}`)},onReindexComplete:a=>{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(`
817
816
  Reindex complete in ${(a/1e3).toFixed(1)}s`)},onError:a=>{console.error(`
818
817
  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.
819
818
  `),s.start(),process.on("SIGINT",()=>{s.stop(),console.log(`
820
- Stopped.`),process.exit(0)})}function Zu(){let{projectRoot:e,config:t,paths:n,dbPath:r}=vr(),i=ps(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: ${Hu(r)?"yes":"no"}`),Hu(r)&&rt(o=>{let s=Pe(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:Au({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:$u({query:e,format:t,emptyMessage:n,heuristicLabel:r,after:i,headers:o,dashWidths:s})}}function em({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})}}var ZI=Z("dead",({db:e,args:t,opts:n,budget:r})=>{let i={scope:ke(t,0)||void 0,minLoc:I(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"),l=!z(n,"onlyInternal"),c=!z(n,"onlyDead"),u=l?s:[],m=c?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&&tm(u,"DEAD CODE",` Zero references anywhere \u2014 no cross-file callers AND no same-file uses.
821
- Safe to delete.`,d),m.length>0&&(u.length>0&&console.log(""),tm(m,"FILE-INTERNAL ONLY",` Used only within the same file (no cross-file callers). Could be a
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
822
821
  single-use helper, an abstraction-in-progress, or a callback registered
823
822
  through a framework path that static analysis cannot trace (signal
824
823
  handlers, event listeners, dependency injection). NOT necessarily dead \u2014
825
- review case by case.`,p));let y=[];l&&y.push(`${u.length} dead code (${d} LOC)`),c&&y.push(`${m.length} file-internal (${p} LOC)`),console.log(`
826
- \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 tm(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 l=i.get(a.relativePath)??[];l.push(a),i.set(a.relativePath,l)}let o=[...i.entries()].map(([a,l])=>({file:a,bucket:l,totalLoc:l.reduce((c,u)=>c+u.loc,0)})).sort((a,l)=>l.totalLoc-a.totalLoc||a.file.localeCompare(l.file)),s=!0;for(let{file:a,bucket:l}of o){s||console.log(""),s=!1,console.log(` ${a}`),l.sort((c,u)=>c.startLine-u.startLine);for(let c of l)console.log(` ${be(c.startLine,c.endLine)} (${c.loc} LOC) ${c.shortName}`)}}var eR=ot("unused-imports",{query:({db:e,args:t,budget:n})=>Yi(e,M(t,0),{semantic:n.semantic}),format:e=>` ${e.shortName} in ${e.importedIn}`,emptyMessage:()=>"No unused imports found.",after:e=>console.log(`
827
- ${e.length} unused import(s)`)}),tR=Wr("isolated",{query:({db:e,opts:t,budget:n})=>xn(e,{scope:O(t,"scope"),minLoc:I(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(`
828
- ${e.length} isolated symbol(s)`)}),nR=Z("extract-candidates",({db:e,opts:t,budget:n})=>{let r=vn(e,{scope:O(t,"scope"),minLoc:I(t,"minLoc",10),minCallees:I(t,"minCallees",6),limit:I(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(`
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(`
829
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(`
830
- ${r.length} extraction candidate(s) found.`)}),rR=ot("wrapper-candidates",{query:({db:e,opts:t,budget:n})=>wn(e,{scope:O(t,"scope"),maxLoc:I(t,"maxLoc",15),limit:I(t,"limit",30),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${Se(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.loc} LOC)
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)
831
830
  Only called by: ${e.singleCallerShort} (fan-in: ${e.callerFanIn})`,emptyMessage:()=>"No wrapper candidates found.",heuristicLabel:"wrapper candidates",after:e=>console.log(`
832
- ${e.length} wrapper candidate(s).`)}),iR=ot("passthrough-candidates",{query:({db:e,opts:t,budget:n})=>kn(e,{scope:O(t,"scope"),maxLoc:I(t,"maxLoc",15),limit:I(t,"limit",30),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>` ${Se(e.file,e.startLine,e.endLine)} ${e.shortName} (${e.loc} LOC)
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)
833
832
  Forwards to: ${e.forwardsToShort} (${e.forwardsToFile})`,emptyMessage:()=>"No passthrough candidates found.",heuristicLabel:"passthrough candidates",after:e=>console.log(`
834
- ${e.length} passthrough candidate(s).`)}),oR=ot("stale-abstractions",{query:({db:e,opts:t,budget:n})=>Pn(e,{scope:O(t,"scope"),minLoc:I(t,"minLoc",3),limit:I(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})
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})
835
834
  ${e.reason}`},emptyMessage:()=>"No stale abstractions found.",heuristicLabel:"stale abstraction candidates",after:e=>console.log(`
836
- ${e.length} stale abstraction(s).`)}),sR=Hr("complexity-hotspots",{headers:["score"," LOC","fan-in","fan-out","callees","symbol"],query:({db:e,opts:t,budget:n})=>Tn(e,{scope:O(t,"scope"),minLoc:I(t,"minLoc",10),limit:I(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]}),aR=Br("similar",{query:({db:e,args:t,opts:n,budget:r})=>{let i=ke(t,0);return i?{mode:"target",rows:ho(e,i,{minSimilarity:I(n,"minSimilarity",.4),limit:I(n,"limit",20),scanLimit:r.scanLimit,semantic:r.semantic})}:{mode:"all",rows:_n(e,{minSimilarity:I(n,"minSimilarity",.4),limit:I(n,"limit",20),scope:O(n,"scope"),minCallees:I(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=[`
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=[`
837
836
  ${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(`
838
837
  `)});return}N.list(e.rows,t=>`
839
838
  ${Math.round(t.similarity*100)}% similar:
840
839
  A: ${t.shortNameA} (${t.fileA})
841
840
  B: ${t.shortNameB} (${t.fileB})
842
841
  Shared ${t.similarityBasis==="source-tokens"?"source tokens":"callees"}: ${t.sharedCallees.join(", ")}`),console.log(`
843
- ${e.rows.length} similar pair(s) found.`)}}),lR=Yt({query:({db:e,args:t,opts:n})=>yo(e,{minSimilarity:I(n,"minSimilarity",.5),limit:I(n,"limit",20),scope:O(n,"scope"),minDeps:Rt(n,"minDeps"),filePattern:ke(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=[`
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=[`
844
843
  ${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(`
845
844
  `)}),console.log(`
846
- ${e.length} similar pair(s) found.`)}}),cR=Yt({query:({db:e,opts:t})=>bo(e,{minSimilarity:I(t,"minSimilarity",.5),limit:I(t,"limit",15),scope:O(t,"scope"),minChainLength:I(t,"minLength",3),maxChainLength:I(t,"maxLength",8)}),emptyMessage:e=>e.length===0?"No similar chains found.":void 0,heuristicLabel:"similar chain candidates",render:e=>{for(let t=0;t<e.length;t++){let n=e[t];console.log(`
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(`
847
846
  \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(`
848
- ${e.length} similar chain pair(s) found.`)}}),uR=Br("drift",{query:({db:e,args:t,opts:n,budget:r})=>Nn(e,{scope:ke(t,0),minDeviation:I(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}
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}
849
848
  ${t.detail}`:r},t=>t.file),console.log(`
850
- ${e.unusedImports} unused import(s), ${e.layerViolations} layer violation(s), ${e.patternDeviations} pattern deviation(s)`)}}),mR=Br("convergence",{query:({db:e,args:t,budget:n})=>Lo(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(`
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(`
851
850
  ${Math.round(e.similarity*100)}% callee overlap
852
851
  `),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)
853
852
  `),console.log(` Shared callees (${e.sharedCallees.length}):`);for(let t of e.sharedCallees)console.log(` ${t}`);if(e.uniqueToA.length>0){console.log(`
854
853
  Unique to A (${e.uniqueToA.length}):`);for(let t of e.uniqueToA)console.log(` ${t}`)}if(e.uniqueToB.length>0){console.log(`
855
854
  Unique to B (${e.uniqueToB.length}):`);for(let t of e.uniqueToB)console.log(` ${t}`)}console.log(`
856
- Strategy: ${e.consolidationStrategy}`)}}}),dR=ot("similar-signatures",{query:({db:e,opts:t,budget:n})=>Mo(e,{scope:O(t,"scope"),minLoc:I(t,"minLoc",3),limit:I(t,"limit",20),scanLimit:n.scanLimit,semantic:n.semantic}),format:e=>{let t=`
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=`
857
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(`
858
857
  `);return`${t}
859
858
  ${n}`},emptyMessage:()=>"No same-shape function groups found.",after:e=>console.log(`
860
- ${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 nm=[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:ZI}),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:eR}),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:tR}),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)",Er,.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:aR}),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)",Er,.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:lR}),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)",Er,.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:cR}),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:nR}),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",Lr,5),g("--full","Run unbounded semantic analysis on large indexes")],heuristicLabel:"drift candidates",budget:"semantic",renderShape:"grouped-by-file",handler:uR}),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:rR}),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:iR}),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:oR}),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:sR}),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:mR}),em({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})=>To(e,{scope:O(t,"scope"),limit:I(t,"limit",30)}),format:e=>` ${e.shortName} (from ${e.originalFile})
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})
861
860
  barrel: ${e.barrelConsumers} consumer(s) | direct: ${e.directConsumers} consumer(s)`,key:e=>e.barrelFile,emptyMessage:()=>"No redundant re-exports found.",after:e=>console.log(`
862
- ${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:dR})];var pR=X(({db:e})=>{let t=Pe(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)}`)}),rm=[{id:"stats",command:"stats",description:"Show index statistics",renderShape:"custom",docs:S("Core"),handler:pR}];var fR=Hr("bottlenecks",{headers:["score","fan-in","fan-out","symbol"],query:({db:e,opts:t,budget:n})=>so(e,{limit:I(t,"limit",20),scope:O(t,"scope"),minFanIn:I(t,"minFanIn",2),minFanOut:I(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."}),gR=Z("call-graph",({db:e,args:t,budget:n})=>{let r=fo(e,M(t,0),{semantic:n.semantic});if(!r)return N.empty("Symbol not found.");console.log(`Symbol: ${r.shortName}
863
- `),N.sectionedReport([{title:`CALLERS (${r.callers.length})`,rows:r.callers.map(i=>` ${i.file} ${i.shortName}`)},{title:`CALLEES (${r.callees.length})`,rows:r.callees.map(i=>` ${i.file} ${i.shortName}`)}])}),hR=X(({db:e,args:t,opts:n})=>{let r=ke(t,0);if(r){let i=eo(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"],no(e,{limit:I(n,"limit",30),scope:O(n,"scope")}).map(i=>` ${String(i.count).padStart(5)} ${i.name}`))}),yR=X(({db:e,args:t,opts:n})=>{let r=ke(t,0);if(r){let i=to(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"],ro(e,{limit:I(n,"limit",30),scope:O(n,"scope")}).map(i=>` ${String(i.count).padStart(7)} ${i.name}`))}),bR=X(({db:e,args:t,opts:n})=>{let r=ke(t,0),i=ke(t,1);if(r&&i){let o=io(e,r,i);console.log(`${o.file1} \u2194 ${o.file2}: ${o.sharedSymbols} shared symbols`);return}N.table(["shared","file1 \u2192 file2"],oo(e,{limit:I(n,"limit",20),scope:O(n,"scope")}).map(o=>` ${String(o.sharedSymbols).padStart(6)} ${o.file1} \u2192 ${o.file2}`))}),SR=Yt({query:({db:e,opts:t})=>Sn(e,{scope:O(t,"scope"),maxDepth:I(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(`
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(`
864
862
  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(`
865
- ${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.)`)}}),xR=Yt({query:({db:e,opts:t})=>mo(e,{limit:I(t,"limit",10),scope:O(t,"scope"),minDepth:I(t,"minDepth",3)}),emptyMessage:e=>e.length===0?"No deep chains found.":void 0,render:e=>{for(let t=0;t<e.length;t++){console.log(`
866
- Chain ${t+1} (depth ${e[t].depth}):`);for(let n of e[t].chain)console.log(` \u2192 ${n}`)}}}),im=[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})=>Gi(e,{limit:I(t,"limit",30),scope:O(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:hR},{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:yR},{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:bR},{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:SR},{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:fR},{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:xR},{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",renderShape:"sectioned-report",docs:S("Graph"),handler:gR}];var CR=Z("complexity",({db:e,args:t,budget:n})=>{let r=wo(e,M(t,0),{semantic:n.semantic});if(!r)return N.empty("Symbol not found.");console.log(`${Se(r.relativePath,r.startLine,r.endLine)} ${r.shortName}
867
- `),console.log(` LOC: ${r.loc}`),console.log(` Branches: ${r.branches}`),console.log(` Cyclomatic estimate: ${r.cyclomaticEstimate}`),console.log(` Callees: ${r.calleeCount}`),console.log(` Fan-in: ${r.fanIn}`),console.log(` Fan-out: ${r.fanOut}`)}),om=[{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:CR}];var IR=X(({db:e,args:t,opts:n})=>{let r=So(e,M(t,0),{maxDepth:I(n,"maxDepth",5),scope:O(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(`
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(`
868
867
  \u2500\u2500 Depth ${o.depth} \u2500\u2500`),i=o.depth),console.log(` ${o.file} ${o.shortName}`);console.log(`
869
- ${r.length} affected symbol(s) across ${new Set(r.map(o=>o.file)).size} files.`)}),RR=Z("change-surface",({db:e,args:t,budget:n})=>{let r=xo(e,M(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}
870
- `),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}`})}),sm=[{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:IR},{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:RR}];var _R=X(({db:e,args:t})=>{let n=Wi(e,M(t,0));N.sectionedReport([{title:"FILES",rows:n.files},{title:"EXPORTED SYMBOLS",rows:n.symbols.map(r=>` ${be(r.startLine,r.endLine)} ${r.shortName}`)},{title:"DEPENDS ON (internal)",rows:n.dependsOn.map(r=>` ${r}`)},{title:"DEPENDED ON BY",rows:n.dependedOnBy.map(r=>` ${r}`)}])}),vR=Z("trace",({db:e,args:t,budget:n})=>{let r=ji(e,M(t,0),{semantic:n.semantic}),i=[];for(let a of r.definitions){let l=a.signature?` \u2014 ${a.signature}`:"";i.push(` ${Se(a.relativePath,a.startLine,a.endLine)}${l}`),a.source&&i.push(a.source.split(`
871
- `).map((c,u)=>` ${$e(a.startLine+u)} ${c}`).join(`
872
- `))}let o=[],s="";for(let a of r.referencedBy)a.relativePath!==s&&(s&&o.push(""),o.push(` ${a.relativePath}`),s=a.relativePath),o.push(` line ${$e(a.line)} in ${a.enclosingShort}`);N.sectionedReport([{title:"DEFINITION",rows:i},{title:"REFERENCED BY",rows:o}])}),DR=X(({db:e,args:t})=>{let n=Xi(e,M(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)}),NR=ot("imports",{query:({db:e,args:t,budget:n})=>Ki(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)."}),LR=Wr("refs",{query:({db:e,args:t,budget:n})=>$i(e,M(t,0),{semantic:n.semantic}),format:e=>` line ${$e(e.line)}`}),ER=X(({db:e,args:t,opts:n})=>{let r=Eo(e,M(t,0),{context:I(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"}]
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"}]
873
872
  `);let i=r.source.split(`
874
- `);for(let o=0;o<i.length;o++)console.log(` ${String($e(r.startLine+o)).padStart(4)} ${i[o]}`)}),wR=Z("dataflow",({db:e,args:t,budget:n})=>{let r=ko(e,M(t,0),{semantic:n.semantic});if(!r)return N.empty("Symbol not found.");if(console.log(`${r.shortName} (${r.relativePath})
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})
875
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(`
876
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(`
877
876
  \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(`
878
- \u2550\u2550\u2550 CONSUMERS (this feeds into) \u2550\u2550\u2550`);for(let i of r.consumers)console.log(` ${i.file} ${i.shortName}`)}}),kR=Z("slice",({db:e,args:t,opts:n,budget:r})=>{let i=z(n,"forward")?"forward":"backward",o=Po(e,M(t,0),{direction:i,maxDepth:I(n,"depth",3),semantic:r.semantic});if(!o)return N.empty("Symbol not found.");if(console.log(`${o.direction} slice of ${o.shortName}
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}
879
878
  `),o.connectedSymbols.length===0){console.log(" No connected symbols found.");return}N.list(o.connectedSymbols,s=>` ${s.file} ${s.shortName}
880
879
  ${s.relationship}`),console.log(`
881
- ${o.connectedSymbols.length} connected symbol(s).`)}),am=[ve({id:"files",command:"files <pattern>",description:"Find files matching a pattern",docs:S("Navigation",["scip-query files auth"]),query:({db:e,args:t})=>Vr(e,M(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})=>ri(e,M(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})=>Ai(e,M(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:LR},{id:"trace",command:"trace <symbol>",description:"Trace a symbol: definition + all references",options:[g("--full","Run unbounded semantic analysis on large indexes")],budget:"semantic",renderShape:"sectioned-report",docs:S("Navigation",["scip-query trace parseSymbol"]),handler:vR},ve({id:"deps",command:"deps <file>",description:"Files this file depends on (internal)",docs:S("Navigation"),query:({db:e,args:t})=>Bi(e,M(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})=>Hi(e,M(t,0)),format:e=>e.relativePath}),{id:"system",command:"system <module>",description:"Full module map: files, symbols, deps in/out",renderShape:"sectioned-report",docs:S("Navigation",["scip-query system queries"]),handler:_R},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,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:S("Navigation"),handler:NR},ve({id:"imported-by",command:"imported-by <symbol>",description:"Which files import this symbol?",docs:S("Navigation"),query:({db:e,args:t})=>Qi(e,M(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:DR},ve({id:"members",command:"members <symbol>",description:"All children of a symbol (methods, fields, nested types)",docs:S("Navigation"),query:({db:e,args:t})=>Zi(e,M(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})=>co(e,M(t,0),{scope:O(n,"scope"),limit:I(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(`
882
- ${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})=>uo(e,{scope:O(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})=>po(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",D,0)],renderShape:"custom",docs:S("Navigation"),handler:ER},{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:wR},{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:kR}];var lm=["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"],PR=[rm,am,im,nm,sm,om],cm=PR.flat(),um=new Map(cm.map(e=>[e.id,e])),R0=lm.map(e=>{let t=um.get(e);if(!t)throw new Error(`Missing query command descriptor: ${e}`);return t});for(let e of cm)if(!lm.includes(e.id))throw new Error(`Query command descriptor is not ordered: ${e.id}`);function C(e){let t=um.get(e);if(!t)throw new Error(`Unknown query command descriptor: ${e}`);return t}var mm=[{id:"reindex",command:"reindex",description:"Index the codebase and convert to SQLite",options:[g("-l, --language <lang>","Index only this language (can be repeated)",Mc,[]),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",Lr)],renderShape:"custom",docs:S("Indexing",["scip-query reindex"]),handler:Wu},{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:qu},{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:Vu},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:Nr,command:Nr,description:"Internal diff-impact batch worker",hidden:!0,options:[g("--base <ref>","Git ref to diff against (default: HEAD)")],renderShape:"custom",handler:Uu},{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:Ju},C("drift"),C("wrapper-candidates"),C("passthrough-candidates"),C("stale-abstractions"),C("complexity-hotspots"),{id:Dr,command:Dr,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:zu},{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:Gu},C("convergence"),C("code"),C("complexity"),C("dataflow"),C("slice"),{id:"install-skills",command:"install-skills",description:`Install skills (${zo.join(", ")}) into Claude Code and Codex`,renderShape:"custom",docs:S("Maintenance"),handler:Ku},{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:Qu},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:Yu},{id:"watch",command:"watch",description:"Watch for file changes and reindex automatically",options:[g("--debounce <ms>","Ms to wait after last change (default: 30000)",Ho),g("--cooldown <ms>","Min ms between reindexes (default: 60000)",Ho)],renderShape:"custom",docs:S("Maintenance"),handler:Xu},{id:"status",command:"status",description:"Show index status for this project",renderShape:"custom",docs:S("Maintenance"),handler:Zu}];function dm(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}})}gs.name("scip-query").description("Language-agnostic code intelligence CLI powered by SCIP indexes").version(Lc);dm(gs,mm);MR()&&gs.parse();function MR(){if(!process.argv[1])return!1;let e=TR(import.meta.url);try{return pm(e)===pm(process.argv[1])}catch{return e===process.argv[1]}}export{gs as program,On as renderHeuristicNotice};
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};
883
884
  //# sourceMappingURL=cli.js.map